Jake Hafele - Project Portfolio
My Goals
For this project I designed a robot arm that mirrored the movements of my hand while wearing a glove. I wanted to gain a better understanding of using multiple analog inputs to control servos, and I thought an application of a robot arm would be interesting, combined with my 3D printing skills. These sensors would include a flex (resistive band) and motion sensor (MPU6050). The robot arm would be controlled by servos at four different joints, to mimic the movements of a real arm. A glove with both the flex and motion sensor were made to control the robot, with wires attached to them with enough length to allow full range of motion.
The Process
One of the first steps of this project was to design the different parts of the robot arm. I did this in Autodesk Fusion 360, and then printed it out on my 3D printer. This section took the most time out of the project overall, due to needing to test and design effective ways to mount the servos to the joints. I started with designing the base for the first servo, which was a large cylinder. The piece that attached to the first servo was a thin disk that screwed into the servo. This would rotate 90 degrees to the left and right to simulate the arm turning left and right respectively. The next 3 servos acted as arm joints near the top of the arm, allowing the arm to move both up and down vertically. These joints were mounted sideways and were very similar in design and implementation. The final servo was attached to a gear and clamp, to allow the arm to grab objects that were light enough. Another gear was made to mirror the servo gear so that when the servo would move back or forth, the opposite gear would follow suit and clamp the object. I was very happy with how this turned out, and it made me want to try more gear prints in the future.

  For this project, I made a few test programs before putting together the final code. I designed one program which tested the flex sensor, which only used one analog pin. The idea in testing the individual sensors on their own was so that it would be easier to understand what kinds of data would come out, depending on different states. For example, I wanted to know what analog values I could get from both bending and keeping the resistive flex sensor straight. Next, I wrote a program to test the servo library and ensure my servos would work properly. To do this, I had to define a digital pin for the servo and instantiate a servo object. Then, I used the servo object and called the function write() to tell it how far to rotate. I could use any value between 0 and 180, since it is defined in degrees. This program helped me immensely for making sure my servos worked and for when I had to put together the entire build. Finally, I wrote a program to get the inputs from both the flex and motion sensor. I used a MPU6050 library to assist me in obtaining the best data from the motion sensor. After I used this code, I put in the flex sensor code from my other program in it. After this, I wrote my final program to place in the conditional checks for the flex and motion sensors. These would check the values of my input sensors to see if and where the servos should move. This project was interesting since I had to dynamically turn the servos based on a ratio of the analog values I was receiving, which was unique from my previous digital project where I was processing the sound LED’s as either on or off.

  Finally, I was able to assemble the 3D printed parts and individual electronic components I had tested into one full piece. I had some trouble assembling the pieces with the holes for the servos to go in that I 3D printed. So, to fix this, I ended up putting the plastic teeth that come with the servos and then hot gluing the parts together. I didn't enjoy this solution, since it made it more difficult to take the arm apart in the future. I ended up investigating a better way to implement the servo attachments, which can be seen in the “useless” machine that I created in my Sophomore year of school. The code ended up working very smoothly on the first few runs. I started the final code by testing one servo joint at a time. I did this so I could make sure each individual servo was working correctly, and so that they wouldn't all break at once and damage the arm. At this point the project was pretty much done and now I had an extra robot hand to help me do whatever I needed!

My Reflection
This project helped motivate me to develop stronger CAD design skills, and it really helped to spark my interest in robotics. I hope to keep improving my skills to interface servos and motors so I can keep expanding on similar projects. My next project used similar micro servos in a similar fashion to recreate the movement of a spider, except with four legs. That project also does a great job of showcasing and expanding what I have learned about 3D design, embedded programming, and problem solving skills. Thanks for reading my work!