Infinity Fidget Spinner Robot

by ruiz7 in Craft > Printmaking

1577 Views, 9 Favorites, 0 Comments

Infinity Fidget Spinner Robot

DSC01395.JPG

This instructable was created in fulfillment of the project requirement of the Makecourse at the University of South Florida (www.makecourse.com).

Hello guys, This is my final project for the Make Course at USF. We were able to build anything we wanted, as long as it operated with the Arduino platform. Everybody knows what a fidget spinner is.... at least majority of millennials do. It became a popular fad out of the blue one day and before you knew it everybody was rotating spinners to help "relieve" anxiety or just spin out of pure bordem. In my eyes, I cringed at the sight of one, so I decided to take on an effort to stop the fidget spinner revolution. With just a few hours, 3D printing, and some coding, you too can help support the war on spinners.

Design and 3D Print

Designing is the first step in figuring out how your project will work. For my project, I first gathered a bunch of ideas online and implemented ideas to the project. I used AutoCad Inventor to design my Infinity Fidget Spinner robot and all the files are available below. I even included the .stl files to make your lives a little easier. My approach was just to make a functioning arm that would turn the spinner in harmony. It was my first time 3D printing and getting to understand the scaling of it so I only printed two parts. However, I have other parts that are available for print if you'd like which I'll post here as well.

The two main pieces of this project that are vital for the servo's.

The arm+big.stl file is the same as the arm+big.ipt file and is the arm which attaches to the horizontally placed servo. The flat part of this piece, is where we will attach our second servo. I printed this 40 mm long with uniform scaling.

The arm+small.stl file is the same as the arm for fidget spinner.ipt file and is the arm that will actually be hitting and rotating the fidget spinner. You can make this piece bigger or smaller depending on the size of your big arm. I printed this 35 mm long with uniform scaling.

The rest of the pieces would either print in really fragile form or I was a disaster in printing the right size, so I decided not to implement, but are right here nonetheless.

The screw m10x40.stl file is the base for the fidget spinner. This is what we mount our fidget spinner to and the black box.

The washer m10x40.stl file is used to help make the spinner spin freely better and hold it in place. Use these after the nut on the bottom side and before the nut on the topside.

The nut m10x40.stl file is used to lock the m10x40 screw in place so the screw stays in place. I used three of these, 1 under the black box, and 2 ontop. The one on the top side was after the washer. After that, i used the next one to lock the spinner at a height i found that the servos could actually hit the spinner.

Gather Materials

IMG_3711.jpg

Deciding on parts can take some time, so you want to make sure you get the right ones. For this project, I wanted to get components that were simple to use. Below, you can see all the parts I needed to get my Infinity Fidget Spinner spinning.

  • Arduino Uno
  • (2) SG90 9 Servo Motor
  • Electric Drill
  • Zipties
  • Breadboard
  • IR Remote Reciever
  • IR CarMP3 Remote (use whichever remote you want)
  • Philips Screwdriver
  • Fidget Spinner
  • 3D parts

Build the Circuit

fritzing.PNG
533926214.jpg
533926232.jpg
533926243.jpg

Breadboarding and testing the circuit is a must! It allows you to find any problems and/or make changes. I did this to verify proper operation of each component and also to test out code. In my setup, I have my servos setup as digital pins 3 & 5 and the IR receiver as digital pin 11. I then have ground and 5V going to the power rails of the breadboard and feeding it off accordingly to the servos.

SG90 9G Servo Motor:

This device will be used to move the arms to whatever angles we determine to get the most power and best timing to hit the spinner in order to keep it spinning.

CARMP3 IR Remote:

This device will be used to get the servo arms to start moving. The remote will send an address to the arduino and based on the address it receives it will decide whether or not the address is correct, it will initiate the servo arms.

Arduino:

The Arduino Uno will be used as the brain for the system. The code designed to bring all the functionality of the devices together and work in a orderly function.

Prepare the Code

1st portion.JPG
portion2.JPG

In order to use this code, you will need a couple libraries for the Arduino IDE. You will need the Servo, and IRremote libraries.

  • To start, upload these libaries to your Arduino IDE.
  • Start with Servo, we will need to test and calibrate the servo motors before operation.
    • We test the servo motors if they are function and where they are swinging in proportion to the fidget spinner. We can also test out the different angles and speeds from the servo arms to help us hit our fidget spinner faster.
  • Once testing is completed and successful, you can start to play with the IR remote.
    • You can get address codes from the serial monitor and implement different buttons, speeds, or even functionalities.

Downloads

Assembling the Servo's

533926670.jpg
533926710.jpg
533926872.jpg

This is the most vital part to the project. Without these, your project is nothing! Setup a location on wherever you desired, (on mine the black box). Once you've decided the location create 2 small holes that you can insert a zip tie through and seat it properly. You can also create a third hole, where you can feed the cables from the servos through. Now take your 3D printed part (arm+big.stl file) and attach it to where normally the white servo propellor is. Once that is attached you will put your other servo here. Have another zip tie ready to seat it to this position. After that, attach your second 3D printed part (arm+small.stl file) and put it on this servo.

Create a Position for the Fidget Spinner

IMG_3713.jpg
IMG_3712.jpg

Once your servo's are in position, I suggest running the code too see where your arms swing. Once you've determined that or gotten it to where you've liked, then take your fidget spinner and correlate it so that the arm of the servo will hit the edge of the fidget spinner. After you've found that sweet spot, you can drill a hole in your black box and mount it accordingly. You can also trace the fidget spinner in a white chalk or pencil if you need that kind of visualization.

#include

Servo arm1;
Servo arm2;

void setup() { // put your setup code here, to run once:

arm1.attach(3);

arm2.attach(5);

}

void loop() {

arm2.write(15);

delay(1000);

arm1.write(0);

delay(150);

arm2.write(90);

delay(500);

for(int i = 0; i < 180; i++)

{

arm1.write(i);

arm2.write(90-i/3);

delay(20);

}

}

Bring It All Together

Now that the code is set up and robot is assembled, we can bring it all together and get a working project.

  • Place the arduino and breadboard inside the black box.
  • Make sure the arduino light is on once you plug it in, showing that you have no failed circuitry.
  • Upload your code, and start spinning with the remote!

Possible Improvements

Implement a servo motor

  • The Infinity Fidget Spinner currently will only spin if the fidget spinner is stopped or at a current position, otherwise you have to manually position it there. So it would be cool if you could implement a servo motor as a base instead of the m10 screw. That way you could tell the servo motor to rotate with the remote and then initiate the servos whenever you wanted.

Implement a Display/Counter

  • I wanted to create a counter but I wasn't really to sure how to. But it'd be neat to be able to show how fast the spinner was rotating on the display and tell you how many times the fidget spinner has rotated.

Implement a Distance Sensor

  • You could definitely use this instead of the remote if you wanted to create a much easier/user friendly system instead of the remote since the IR remote sensor isn't very great at receiving values from distances. The remote had to be right next to the box otherwise it wouldn't read the buttons I was pressing.