5-DOF Robot arm with wifi-control via Blynk
The goal of this project is to build a 5-DOF Robot arm with wifi-control via Blynk-app. 5-DOF means that the robot arm will have 5 joints, which all have their own servo plus one additional servo for controlling the gripper. Each of the servos will have their own slider control in the blynk app. Additionally we added the possibility to save postions and run them peridiocally. The hearth of this project is a Arduino MKR1010 with built in wifi and bluetooth connectivity. The robot arm body is 3d-printed according to the stl.files offered in the site: https://howtomechatronics.com/tutorials/arduino/diy-arduino-robot-arm-with-smartphone-control/ . The servos are strongly integrated in the design, so identical servos are used.
Step by step instructions
Electromechanical structure (step by step
1: List of required parts was created
5: The servos were installed to the body and after that body parts were installed together. Necessary screws were provided with the servos, but the quality was so poor that better quality tapping screws had to be purchased. In the picture the self purchased better quality screw is above the low quality one provided with servos.
Blynk-app and library
. The robot arm is controlled with blynk mobile application. The app talks with blynk servers and blynk serves talk with the MKR1010 board wifi module. The wifi module and phone have to be connected to internet but they don't have to be in the same network because data is routed via blynk serves not straight via local network. Blynk has also developed a designated Blynk library (named Blynk) for connecting and controlling MCU board like MKR1010. This makes it easy to connect the MKR1010 to the blynk servers and send and reseive data from the application.
The blynk application has an graphic interface that allows to place different kinds of controls to the dashboard. We used sliders for moving each of the joint servos (rotation angle 0-180 degrees) and buttons for controlling the gripper (open/closed). We also added buttons for saving two positions and and running them. When SAVE POS -button is pressed all the servo angles are saved to vector and when RUN POS -button is pressed each the servos move to the orientation that was saved in the corresponding vector.
Smooth servo movements
1: Controlling the arm was done with Blynk over Wi-Fi. Arduino has ready to use libraries for running Blynk and for controlling the servos. The code for stabilising the arm was written by ourselves. The operating principle of the stabilising code was simple: move the servos little by little until the angle is in a set tolerance. The stabilising was urgently needed only for the servo that tilts the grappler. When the grappler points straight down the resistance for the servo is very small which causes the PID controller of the servo to overdue to the movements and the grappler starts to oscillate. This position is shown in the picture below. The stabilising wasn’t required for the rest of the servos but it seems to improve the smoothness and accuracy of the movement so we are planning to implement the stabilising code to other servos too.
Improvement ideas and thoughts about the project
3d-printing is a cheap way to make the robot arm body, but it has some downsides. There are gaps between the parts which puts a lot of load to the servo axis and allows the joints to wiggle. Some of the gaps are shown in the picture below. This problem could be partially fixed with more accurate design. The other donwside is the soft nature of plastic. You can only screw a fastener once before the hole becomes loose. Thus we would recommend using aluminiun body which can be purchased quite cheaply
We used really cheap servos in this project. The bigger servo model, MG966R servo, worked well and it could handle the weight of the arm quite easily. The smaller SG90 servo however wasn't very accurate or durable and we would recommend replacing it with a better quality one. If budget allows upgrading to stepper motors is recommended. Stepper motors can hold their position and move smoothly without oscillation that the PID control causes to reqular servos.
We wanted to add inverse kinematics to the robot arm but doing smooth movements even without inverse kinematics turned to be quite challenging with our low quality servos. Thus we weren't able to implement inverse kinematics to our robot arm. For an inverse kinematics project we would recommend aluminium body and stepper motors.