Three Jointed Arm
A robotic arm with three joints and a claw, capable of moving objects.
Area of Interest
Gunn High School
For my 3rd milestone I re-coded my arm to move in a more user friendly way. Originally I coded my arm to move by imputing a command to choose what servo to move and using the ‘<’ and ‘>’ keys to increment and decrement the angle. What I wanted to do instead was to use the keys ‘w’, ‘a’, ‘s’ and ‘d’ do have it move up, left, down and right. Also I wanted my claw to always point as perpendicular to the ground when it’s possible. How my code works is that I give a coordinate point and my code calculates what angle the servo has to move to reach it. This is known as inverse kinematics. For making the claw to be perpendicular I derived an equation to make the third join always be perpendicular based off the angle of the two servos. When coding my arm I came across many roadblocks. When deriving the equations for inverse kinematics, I discovered that there where 2 “answers” for one servo angle a 4 for the other servo and I had a bunch of trouble trying to figure out how to figure out which answer is relevant. I discovered that half of the answers are more relevant on one side arm and the other half on the other side. That narrowed the answers to 1 for the first servo and 2 for the second one. In order to narrow the answer down to one for the second servo I had to graph where which answer is relevant with certain inputs and derived an equation to decide which equation to use. Also when putting the equations into my code, there was a bug that was really hard for me to debug. At first my equations where returning really confusing answers and I tried to deconstruct my code and try to figure out what was giving the wrong answer. It turns out that I was storing really large numbers in the data type int and it was overflowing the data and causing it to become negative. I fixed this by changing the data type int to long. In the future I am planning on adding modifications to my arm. One idea was to add a camera and image recognition and have my arm recognize certain objects and move and sort them. Another idea that I had was adding another degree of rotation because it can only move in one plane and can’t move things in a 3d area. I also had the idea to make my own wireless controller so that instead of being connected to the arduino and giving commands though my computer, I can control my arm from any distance.
For my second milestone, I manufactured my arm and put it all together and made sure that it works.The arm is made out of mostly out of wood and used screws to mount the servo and claw. I also used hot glue to mount attach the joints and also super glue to reinforce the wood. Also I used metal brackets to have a strong mount for the base. I also used a lot of electrical tape to make the wires be organized. One of the roadblocks that I had was dealing with designing the arm. At first I tried to use Autodesk Fusion but then decided to just hand draw the design of the arm. I also manufactured the base poorly so I had to remake it and remount it. Also the wood was too thin and flimsy so we added more wood to make the arm thicker and stronger. Next I am planning to reprogram the code so that it is more user friendly so that people don’t need to memorize the servos and is just really nice in general.
For my first milestone I made it so that I can control multiple servos by using my keyboard. How this works is that the user puts in certain commands using the serial monitor. Typing a number makes it so that you are controlling the servo correlated with the number. Also typing “<” or “>” decrements or increments the rotation of the servo that you have control over. Then code interprets this and sends information to the arduino so that it can control the servo. Also powering 4 servos is too much for an arduino so I had to use a breadboard and a battery to power them. I had many roadblocks such as basically learning everything from scratch because I have never used any of the components in my project before. I used a good chunk of my time trying to learn how to cad and then discovering that I probably don’t even need to cad my arm. Also, learning how the breadboard and the arduino worked took a good amount of time because I had to make simple circuits to help myself learn them. Then I spent a long time trying to learn how to code using the arduino IDE and had to spend most of my time fixing bugs. Also my wires got fried over the weekend meaning that I had to rewire the circuit. Next I want to work on creating the frame of the arm and then making it move.
I finished making my starter project which is the minPOV. The device works by lighting up the line of LEDs in a specific pattern so that when you move the device around in front of a camera taking a photo with a long exposure it displays an image. It works by having 2 AA batteries powering it with a bunch of resistors limiting how bright the LEDs are. There are also diodes that make sure that the circuit goes in one direction and also a microcontroller that actually controls the pattern of the LEDs. There is also a port so that you can upload your own patterns to the device. Most of the construction of this device was just soldering a bunch of parts onto the circuit board. I struggled when a piece of metal got soldered into a hole that didn’t have anything in it yet, causing it to clog the hole. This prevented me from putting an LED through the hole. Also the battery wires snapped twice. In order to solve this I had to desolder and resolder. Also I had to put electrical tape over the battery wire connections so make it stronger.