Have you ever wanted a device that could help you with your daily needs? Not just any ordinary tool, this device has the ability to distinguish you, the owner, from other non-authorized users. In this tutorial, we’ll present you with a smart robotic arm, which is designed to recognize and understand your vocal commands. The robotic arm features a face recognition system implemented in the OpenCV software. (For testing purposes, the algorithm was developed to detect the color of the ball.)
The Smart Robotic Arm project was developed in collaboration with my colleagues, Isac Andrei and Vlad Niculescu, as part of MakeMIT Hardware Hackathon. The project was placed in the top 10 for its innovation and creativity.
You have to be really careful when you are working with wrists of a robotic arm. If you start by assembling the wrist parts without taking the servo motor angles into consideration, it may result in malfunction of the arm – you may have a robotic arm that has a chaotic behavior that you can’t control. In Step 1, all you need to do is to connect 5 servo motors to the Arduino board and find the right position for each servo. The correct order is to start calibrating from bottom to top.
I. The base
The base is designed to move 90 degrees to the left and 90 degrees to the right. It will be placed on the metal elevators to implement the base rotation mechanism. This is an essential part because when the person making voice commands moves, the arm has to follow and trace the person. And it must be accurate so that the device can always spot the face of the person in the visual field of the camera.
Figure 1: The base taken from above
The base servo was mounted on a big acrylic part for stability. The acrylic part measures 40 x 30 cm in dimensions. It can be replaced with other strong material that can support a big robotic arm that will pick up heavy objects.
The servomotor was mounted on a smaller acrylic part measuring 12 x 12 cm in dimensions. In the middle of the smaller part, a hole with dimension of the servomotor was made. Then, the servomotors were screwed onto the hole (Figure 2).
Figure 2: The base (front view)
II. The shoulder
The shoulder is composed of two servo motors that work together to pick up objects and place them in the right place. The most important calibration of this project occurs on the shoulder side. These two servos must work perfectly together and receive the exact same commands from the Arduino board, and it must be in an anti-phase. For a good synchronization, before placing the two motors on the robot arm, they must be placed face-to-face and programmed to swing to the same side.
Figure 3: Synchronization of servomotors
If they do not perform the same behavior, the servo that has the upstream position will force the second one and create a short circuit, which will result in the burning of the second servo.
If the resolution of the servos is not the same, you will not be able to synchronize them. The best scenario, in this case, is to use only one servo. If they are of high quality, they have the torque specified in the datasheet and will have the ability to lift the weight.
Also, for safety, it’s good to have a knob at the base of the shoulder. You can use a metal brace and place it to the desired angle to prevent the robotic arm from falling.
Figure 4: The shoulder assembly
Figure 4 shows the shoulder attached on top of the base we previously created. The part where the servo is fixed utilizes a rotational mechanism. The shoulder has to be firmly attached to the base but also has to be able to rotate freely. It’s also important to balance the each side of the rotational part since we included some heavy metals for support. The center weight has to be the same so when the robotic arm rotates, it will not fall off. For this part we also included a metal drag (i.e. metallic elbow) to sustain the robotic arm weight when the servos aren’t plugged in.
III. The elbow
Now, let’s look at the elbow. The elbow servo part is controlled by the height of the arm. The maximum angle between the extended part from the elbow and the one from the shoulder should not be higher than 100 degrees because the arm has to return to the original position. For this robotic arm prototype, the elbow servo was programmed to pick up a ball – this will coordinate the catcher, and together with the shoulder, these two parts dictate the grabbing of the ball.
Here’s how the elbow works:
Figure 5: The elbow
The elbow part was designed using SketchUp STL and was 3D printed. (The STL extension transforms a drawing into a 3D model ready-to-print.) The elbow was designed to connect the 2 extending parts at an angle that permits the flexing.
Figure 6: 3D model for the elbow
The extending parts from the elbow need to be able to easily lift, so nothing should be attached to the extending parts other than the elbow, of course. The extending acrylic parts measure 20 x 7 cm in dimensions, each. The other ends of the extending parts are glued with a small acrylic piece to hold the two parts together. Dimensions can be changed, but the size of the robotic arm shouldn’t be too big due to the limitations of the servos.
If you do decide to change the dimensions (e.g. you want to make a smaller arm), make sure you calculate and have the correct dimensions for the parts. Otherwise, the arm will malfunction and won’t be able to lift a heavy object. A web camera will be mounted to the extending parts.
Figure 7: The web camera mounted on the Robotic Arm
IV. The wrist
The wrist is composed of a claw/catcher, designed to grab certain small objects. For our purposes, we will report to a ball. They can also catch and lift other objects that fit into the claw. It can be designed according to your specific preference – you can use the SG90 SketchUp file to modify as necesary and whenever necessary. All you need to do is to change the shape of the claw for the object you want to grab.
Figure 8: The wrist
The wrist part is also built using a 3D model in SketchUp. If we want to pick up heavy objects, the claw can catch them, but if it is forced it may cause damage.
Figure 9: 3D model for the wrist
I. The base
Figure 10: Wiring diagram for the base servo
The base servo (Figure 2) is programmed to start from 0 degrees position, meaning it will search for the user from the left. Its rotation position is 140 degrees – a range where the robotic arm can track the person to hand over the object. The calibration was made for 0 degrees – this is the center of the servo, being placed vertically with the blades facing the top.
In the control function, the resolution for this base is 4 degrees, because in this case, the precision doesn’t have to be perfect. A higher accuracy would have led to a slow processing.
We need to check the position of the servo every time, because the interaction is made in real time. For this reason, 2 functions were made: Left and right. And these 2 can track the person in 35 different positions.
2.2 The shoulder and the elbow
The shoulder has an important functionality, along with the elbow. They have to flex the robotic arm. It’s important we point out some limitations:
The operating angle of the shoulder cannot be less than 45 degrees due to the length of the forearm, and we have 2 cases here:
The chosen angle for the shoulder because it is enough for the arm to pick up the object and give it to the right person.
Figure 11: The range for the shoulder
The maximum position of the elbow cannot be more that 140 degrees because the idea of the project was to have a robotic arm that stands on a surface and the camera at the level of the user. We considered it important to have only 70 degrees because they are enough to flex the robotic arm.
The combination between the angle of the shoulder and the angle of the elbow gives the arm a great flexibility, as well as to the robotic arm as a whole, to pick up the objects.
Figure 12: The range for the elbow
Figure 13: Wiring diagram for shoulder servo
Figure 14: Wiring diagram for elbow servo
In Part 1 of this Smart Robotic Arm tutorial, we covered the general mechanics of the arm, as well as how the connections were made between servo motors to different joints of the arm. In Part 2 of this tutorial, we will go over several algorithms and write programs in C# to control the robotic arm. Stay tuned!