Hey there! First off, thanks for looking at the Beta version of the D.R.A.C. (Desktop Robotic Arm Companion)! As you know, beta testing is meant to help iron out the kinks of a product through consumer review and feedback. This means that I will heavily rely on the feedback I receive from you to help shape the next steps in developing a final product. With that said, here’s the mission of RJM Robotics and the D.R.A.C.:
Countless hobbyists, students, professionals, and enthusiasts have been discouraged from STEM activities and projects due to complex-sounding project names or a lack of readily available information. Most of you have heard the saying, “A team is only as good as its weakest link.” RJM Robotics takes this idea and applies it to the engineering community by combining a comprehensive, approachable method of learning with hands-on projects and labs. Doing this helps beginner STEM enthusiasts stay engaged, feel more comfortable making mistakes, and, more importantly, learn from them. The D.R.A.C. is the first step in raising the bar of what the general public knows about certain engineering processes and robotics.
The Desktop Robotic Arm Companion is a small form factor, six-degree-of-freedom robot arm that can be printed through virtually any additive manufacturing method (such as 3D printing). It is completely programmable and upgradeable by the user. It utilizes closed-loop servo motors and a microcontroller to control motion, primarily with a Raspberry Pi (RPi) or an Arduino. The motors are powered by a 5V power supply, and the microcontroller is powered by your computer.
The D.R.A.C. is meant to be used alongside instructional material, but since literally everyone who ordered the beta version is familiar with robotics and Arduino/RPi, the coursework-style material will be held for the later versions. You are free to program anything you want onto it; just be sure to take videos and either send them my way or post them to social media with me tagged! If you feel confident (or proud even) of the code you wrote, feel free to send it my way for discussion and praise!
ITEM NO. | PART NUMBER | DESCRIPTION | QTY |
1 | 24.2.21 Frame 0 -03 | 1 | |
2 | MG996R Servo Motor | 3 | |
3 | 23.12.09 Servo Adapter Plate -03 | 3 | |
4 | 94180A331 | Tapered Heat-Set Inserts for Plastic | 16 |
5 | 24.2.25 Frame 0 Base -03 | 1 | |
6 | 91290A111 | M3x6mm Alloy Steel SHCS | 17 |
7 | 91290A117 | M3x12mm Alloy SHCS | 15 |
8 | 6656K198 | Ultra-Thin Ball Bearing | 3 |
9 | 24.3.6 Frame 0 Magnetic Mount -03 | 1 | |
10 | 5mmx1.875mm magnets | 10 | |
11 | 24.3.8 Frame 1 -03 | 1 | |
12 | 24.3.15 Frame 2 -03 | 1 | |
13 | 24.3.20 Frame 3 -03 | 1 | |
14 | SG90 Micro Servo | 3 | |
15 | 91290A015 | Alloy Steel Socket Head Screw | 2 |
16 | 24.3.22 Frame 3 Faceplate-03 | 1 | |
17 | SG90 Micro Servo Horn | 3 | |
18 | 95836A109 | Black-Oxide 18-8 SS Pan Head Phillips Screws | 3 |
19 | 24.3.22 Frame 4 -03 | 1 | |
20 | 24.3.22 Frame 5 -03 | 1 |
Each servo has a piece of support plastic between the two mounting holes on each side. Cut those out to flatten the mounting surface.
See this link for how to install heat set inserts for 3D prints: LINK.
NOTE: You will need a soldering iron for this! Also, the inserts on frame 1 might cause some warping in the plastic due to thin walls. This has been updated, but not in time for the release of the beta version.
Frame 0 Bottom Frame 0 Top
Frame 1 Frame 2
For better feedback, time yourself through this process so I can better understand how long assembly takes on average.
NOTE: This is a tight fit, so be sure to feed the wire through the hole in the bottom of the space where the servo is inserted. The two holes on the outside are optional cable management.
NOTE: This is also optional and purely cosmetic!
NOTE: The center hole with the grooves on the servo horn is the part that should attach to the shaft of the servo motors.
Wiring is pretty simple, just put the signal pin of each motor into the desired pin on the Arduino, connect all the motor voltages to the 5V power supply, and all the motor GNDs to the GND of the 5V power supply. Don’t forget to wire the Arduino’s GND pin to the power supply’s GND as well. A diagram hasn’t been made yet, as upgrades to the microcontroller are underway.
The motors do not use the same power supply as the Arduino! They require a separate source, so any power supply that can reach up to 5V and 2A should work. DO NOT USE MORE THAN 6V, AS THIS WILL BURN THE MOTORS. The blue and black servos both use 5V, so feel free to wire them up in parallel!
In the following set of pics:
Red | 5V |
Green | GND |
White | PWM/Signal |
Frame 0 Motor | Pin 2 |
Frame 1 Motor | Pin 3 |
Frame 2 Motor | Pin 4 |
Frame 3 Motor | Pin 5 |
Frame 4 Motor | Pin 6 |
Frame 5 Motor | Pin 7 |
I highly recommend taking a look at a few youtube videos on how an Arduino works before going through this section, either as a refresher or introduction.
Before you run any tests on your robot, PLEASE calibrate your servo motors. Failure to do so can result in stripped servo gears, which will prevent you from using the robot arm. The goal of calibrating the servo motors is to allow them to move within their operating ranges without being blocked by any mechanical features. First, we need to start by homing all of the motors at one extreme of the robot’s work envelope (the vertical position in this case). Refer to the image below for a reference of what your angles might look like. The angles applied to Frame 0 and Frame 5 do not affect anything right now.
Frame 0: 135
Frame 1: 90
Frame 2: 180
Frame 3: 90
Frame 4: 0
Frame 5: 135
Now, follow these steps to calibrate each motor.
(CODE IS ON THE NEXT PAGE) In lines 9-12, you should be able to add more positions by copy and pasting the formatting of line 9 and entering the desired output angles, just change the number in line 13 to match the number of positions you make! (can copy/paste this code)
#include <Servo.h>
// Define the pins to which your servo motors are connected
const int servoPins[] = {2, 3, 4, 5, 6, 7}; // Example pins, adjust as needed
const int numServos = 6;
// Define three sets of desired positions for each servo1
const int servoPositions[][numServos] = {
{0, 45, 175, 0, 115, 0}, // First set of positions
{90, 45, 90, 0, 90, 0}, // Second set of positions
{90, 180, 60, 0, 135, 0} // Third set of positions
};
const int numPositionSets = 3;
Servo servos[numServos];
void setup() {
// Attach each servo to its corresponding pin
for (int i = 0; i < numServos; i++) {
servos[i].attach(servoPins[i]);
}
}
void loop() {
// Loop through each set of positions
for (int setIndex = 0; setIndex < numPositionSets; setIndex++) {
// Sweep each servo slowly to its desired position in the current set
for (int i = 0; i < numServos; i++) {
int currentPosition = servos[i].read();
int targetPosition = servoPositions[setIndex][i];
// Sweep slowly to the target position
if (currentPosition < targetPosition) {
for (int pos = currentPosition; pos <= targetPosition; pos += 1) {
servos[i].write(pos);
delay(15); // Adjust delay for desired speed
}
} else {
for (int pos = currentPosition; pos >= targetPosition; pos -= 1) {
servos[i].write(pos);
delay(15); // Adjust delay for desired speed
}
}
// Wait at the target position briefly
delay(500); // Adjust delay for desired pause at each position
}
}
}
Remember to have fun during this process! It’s a learning experience for all of us, and your combined feedback will only help progress this project even further. If you don’t feel like posting photos/videos to social media, please send them my way so that I can either post them myself (with your permission) or review them as feedback.
Happy Engineering!
Copyright © [2024] Rawsen Mitchell and RJM Robotics. All rights reserved. The Desktop Robotic Arm Companion (D.R.A.C.) and all associated designs, software, and intellectual property are the exclusive property of Rawsen Mitchell and RJM Robotics. Unauthorized reproduction, distribution, or use of any part of the D.R.A.C. system without express written permission is strictly prohibited and may result in legal action.
You shall not share, sub-license, sell, rent, host, transfer, or distribute in any way the digital or 3D printed versions of this object, nor any other derivative work of this object in its digital or physical format (including - but not limited to - remixes of this object, and hosting on other digital platforms). The objects may not be used without permission in any way whatsoever in which you charge money, or collect fees.