The Bluetooth-Controlled Arm (BCA) 1.0
16 minute read
For my final project, I built a robotic arm that can be controlled via a glove. Such a robotic arm can be modified to handle tools and such during surgery, as well as countless other endeavors. This robot would also be great for other applications like annoying my little brother remotely, and can be a stepping stone to more advanced gesture-controlled robots. I originally wanted to use soft robotics as a part of the robot it was not possible due to the fact that any one actuator takes ~16 hours to make, giving no room for trial and error given my short time frame. However, I want to pursue that afterwards.
Parts
Parts not in the kit: My professors were able to send me laser cuts of a robotic CAD model I found from Thingiverse (thank you again!). I borrowed most of my materials (flex sensors, bluetooth modules, etc.) either from Amazon overnight shipping (it's free shipping! How is this free??) or from my friends who have lot of different gizmos and sensors. Notably, the things that weren't in the kit that I used were 5 regular-sized servos, 2 accelerometers, 3 Adafruit flex sensors, 1 PCA9685 servo driver, and 2 HC-05 bluetooth modules.
Parts in the kit: 2 mini-servos, 1 Metro M0 microcontroller, 1 ESP32 Huzzah Board (Adafruit Feather), a 9V battery to power the glove, and a battery pack to power the servo driver.
How it Works
The arm: Each servo corresponds to one degree of movement of the robotic arm (except for the "shoulder" ones, where there are two servos corresponding to one degree of movement). These servos are controlled by a servo motor board which simplifies the wiring which would otherwise get very messy.
The glove: The glove uses 2 accelerometers to calculate rotation of the wrist and bending of the elbow, and then uses 3 flex sensor to determine the bending. These are then sent to the hand via the bluetooth in the form of characters, as shown in the demo video. This is done at a rate of 4800 baud.
The code: The code (adapted from online) is pretty much as explained in the demo video -- the glove sends signals via bluetooth in the form of characters. When these are received by the arm, the code reads that and executes the movement based on what character it receives (e.g. F/f controls the extension/retraction of the gripper arm). Like most things, it's quite simple conceptually but a bit harder to implement in reality. My code is linked below, although I would suggest you code your arm from scratch because I basically had to do that considering all of the different calibration changes I had to implement.
Robotic Arm Code (Again, if you are building your own, I'd just recommend coding it from scratch than referencing mine, because your model will guaranteed be different than mine.)
Construction
This project took a lot longer to make than I expected, mostly because I kept running into unexpected problems left and right. One problem I encountered was my HC-05 bluetooth modules being plugged into the wrong hole by accident and ruining the entire thing. Although, I cannot tell what was the actual issue behind the bluetooth module error because even with the "incorrect" wiring the circuit should have been fine. Regardless, that took lots of time to solve. Another issue I encountered was that I was missing materials, mainly bearings and of course, new bluetooth modules since one I had was broken. I also tried making a gripper out of Ecoflex (documentation on my molding and casting page) but it was too heavy to be supported by the arm. Coding-wise, the biggest issue was calibration, since any wrong calculation could potentially destroy my arm by causing the servos to overextend into themselves. One time it almost did, my arm was lucky that I almost instantly unplugged it because it would have been a disaster. On top of that, due to personal issues (I was moving) I only had four days (plus a three day extension) to fully complete my project. However, I finally managed to succeed. See the image gallery below for a more in-depth process.
What Now?
Problems that need to be solved: Some of the issues with this current design is that all of my limbs need to be isolated and can only move one part of my hand at a time for a reaction to be formed. This is pretty awkward, and takes a lot of time. Another issue with this design is that when the base rotates the wires and breadboard gets dragged with the servo motor, which destroys the wiring (I simply took all of the base movement out of the code). Perhaps the largest problem, however, is the lack of balance on the arm. Adding counterweights actually made it worse, and so I left it as is, but it means it cannot get the full range of motion that I would have liked. Finally, the gripper keeps getting loose and I have to retighten it after every use.
Future projects: With these problems in mind, one future project is to make a new arm with my newfound knowledge of this, and create my own CAD that will solve all of these issues currently present. But perhaps the most tantalizing for me is using soft robotics to create a hand controlled by a bluetooth glove. I mentioned this before in the beginning of this page as well. I'm very excited to see where I can go with this now! :)