Skip to the content.

Wireless Robotic Arm

My project is a wireless robotic arm, that is modified by being attached to a RC car built from scratch. The biggest challenge of this project was by far trying to build a car from scratch, because all the parts I used were not meant to go together, and I had to spend a lot of time trying to make everything work. The biggest takeaway was that working hard and staying focused pays off because while something may be hard, there is a solution to that problem, and it is up to you to find it.

Engineer School Area of Interest Grade
Tripp T. Los Gatos High School Aerospace/Mechanical Engineering Incoming Junior

Headshot

Modded Milestone

Since my last milestone for my main project, I decided to build a custom RC car, that has the Robotic Claw mounted to its Chassis. It took a lot of work, as well as a lot of creativity, but I was able to successfully make a mobile Claw.

The challenge I faced the most while trying to create a successful mod, was taking all of these random parts, that do not belong together, and having to modify them to work together. I had to do a lot of drilling or dremeling, as well as a lot of measuring. I found that most of the time, the parts would work together, but I ended up having to redo a couple sections of my project because my measurment was off, or my idea would not work, so I spent lots of time redoing stuff.

For this part of my project, I learned a lot about the mechanical side of engineering. None of the work I was doing was really computerized, and I got to use a lot of tools, and different ways of creating, I also got to have complete freedom of innovation which was really fun, because I have not had that before.

After this, I hope to continue learning about engineering, specifically Mechanical, Biomedical, or Aerospace. I have learned so much with my time at Blue Stamps, and I am excited to keep up with that. For my project itself, I will want to make it more presentable, with decorations or a body shell.

Final Milestone

This is my final milestone, a wireless robotic arm! I switched from Bluetooth to Radio Control, which improved the process, but before I came to that solution, I faced many different things.

So, since my second milestone, I can now have complete control over the robotic arm without having any hindrances from wires, which is a pretty big step up from just being able to turn an LED on and off.

The biggest challenge I faced while trying to do my project was dealing with the code on Arduino. Before I realized that I needed a different battery or that the code I was using was faulty, I poured over every line trying to figure out what one thing was going wrong. In both cases, the problems were bigger than just one line of code or just the code itself, but I still spent literal days trying to find out the problem.

My biggest triumph of the robotic arm was definitely coming up with the genius idea of using Radio Control instead of Bluetooth. The Bluetooth code I was using would not work because it was meant for different hardware, so switching over to Radio Control was my best bet. It would mean that my arm would still be wireless, and I would have more exact control over the arm itself.

The key topics I have learned at BSE have definitely been learning about using dremels or soldering irons. On top of this, I have learned more about coding, mainly in Arduino, as well as learning about CAD in OnShape. Overall, my biggest takeaway from my project, is perseverance, and pushing yourself to continuing solving the problem your stuck on.

Second Milestone

This is the second milestone of my wireless robotic arm. For this milestone, I demonstrate how I have set up Bluetooth on the phone and can control an LED.

So far, the most surprising part of the project is how simple yet complicated it is. The things that I thought would be hard like building the hardware, or setting up the arm to be wireless, turned out to be easier than I originally predicted. But the stuff I thought would be simple, like wiring, batteries, and LEDs, became much harder. For example, while simple, the LED was so difficult to handle because of their flimsy legs, and I ended up using a lot more LEDs than I thought I ever would since they were so hard to deal with.

Before I can say I have completed my third and final milestone, I need to be able to control my arm wirelessly. Whether with Bluetooth on the phone like I showcased here or with Radio Control or something different. I do not know how difficult it will be to go from controlling an LED wirelessly to controlling a whole robotic arm, but I am excited about that challenge.

First Milestone

For my first Milestone, I present my Robotic Arm Claw. It is controlled by two Potentiometers that send inputs to the nano, which process them as outputs for the servos. I faced many challenges while trying to complete this milestone. Let’s go over a few.

While building the arm itself, I realized multiple servos I was using were not working, so I had to take a bunch of them out, do a lot of testing, and then try and find enough servos that worked to make my project work. I found a code that made finding out which servos worked easy, so this greatly streamlined my process.

While trying to wire the arm, I discovered how detail-oriented I needed to be. If even one wire were out of place, nothing would work. I spent so much time trying to find what I did wrong with my project and why some things would work and others would not, and it turned out my wires were not in the right place.

The main challenge I faced was dealing with the voltage. When I finally had everything wired correctly and all servos working, I tried booting up the arm code, and the arm would start going crazy. I poured over the code and looked at every little line trying to find out what went wrong. Finally, I looked at the manual and it turns out that the arm works with 7-8 volts, and I was using a 9-volt battery to power it. So, I switched batteries, and finally, the arm worked perfectly with the potentiometer joystick, and my first milestone was done.

Starter Milestone

This is my Starter project. It is dubbed the useless box. You turn the switch, and the motor inside turns the switch back. It works by having mechanisms triggered by the switch and then reversed once the switch is returned to its original position.

My biggest problem with the starter was ensuring everything was correctly placed. If they weren’t, then the whole thing would not work. While I was building it, I was following the instructions, and I was not too focused on trying to make sure everything was correct. So, the first time I tried to get it to work, the lever would fall off its axis, and it would miss the switch altogether. So, I broke the whole thing apart and put it all together, but this time, focusing exactly on where things went. I tried it again, and the lever turned the switch off, and the useless box worked.

The biggest takeaway from my starter project was learning to be careful with my project and learning to be precise. This being the first milestone of many, it taught me how hard the rest of the milestones would be.

Schematics

Axle Adapter Screen Shot 2023-07-17 at 2 46 36 PM

Axle Mount Screen Shot 2023-07-17 at 2 45 39 PM

Code

Code to Control Arm (Milestone 1):

#include "src/CokoinoArm.h"
#define buzzerPin 9

CokoinoArm arm;
int xL,yL,xR,yR;

const int act_max=10;    //Default 10 action,4 the Angle of servo
int act[act_max][4];    //Only can change the number of action
int num=0,num_do=0;
///////////////////////////////////////////////////////////////
void turnUD(void){
  if(xL!=512){ //Moves Arm from Left Joystick
    if(0<=xL && xL<=100){arm.up(10);return;}
    if(900<xL && xL<=1024){arm.down(10);return;} 
    if(100<xL && xL<=200){arm.up(20);return;}
    if(800<xL && xL<=900){arm.down(20);return;}
    if(200<xL && xL<=300){arm.up(25);return;}
    if(700<xL && xL<=800){arm.down(25);return;}
    if(300<xL && xL<=400){arm.up(30);return;}
    if(600<xL && xL<=700){arm.down(30);return;}
    if(400<xL && xL<=480){arm.up(35);return;}
    if(540<xL && xL<=600){arm.down(35);return;} 
    }
}
///////////////////////////////////////////////////////////////
void turnLR(void){
  if(yL!=512){ //Moves Arm from Left Joystick
    if(0<=yL && yL<=100){arm.right(0);return;}
    if(900<yL && yL<=1024){arm.left(0);return;}  
    if(100<yL && yL<=200){arm.right(5);return;}
    if(800<yL && yL<=900){arm.left(5);return;}
    if(200<yL && yL<=300){arm.right(10);return;}
    if(700<yL && yL<=800){arm.left(10);return;}
    if(300<yL && yL<=400){arm.right(15);return;}
    if(600<yL && yL<=700){arm.left(15);return;}
    if(400<yL && yL<=480){arm.right(20);return;}
    if(540<yL && yL<=600){arm.left(20);return;}
  }
}
///////////////////////////////////////////////////////////////
void turnCO(void){
  if(xR!=512){ //Moves Arm from Right Joystick
    if(0<=xR && xR<=100){arm.close(0);return;}
    if(900<xR && xR<=1024){arm.open(0);return;} 
    if(100<xR && xR<=200){arm.close(5);return;}
    if(800<xR && xR<=900){arm.open(5);return;}
    if(200<xR && xR<=300){arm.close(10);return;}
    if(700<xR && xR<=800){arm.open(10);return;}
    if(300<xR && xR<=400){arm.close(15);return;}
    if(600<xR && xR<=700){arm.open(15);return;}
    if(400<xR && xR<=480){arm.close(20);return;}
    if(540<xR && xR<=600){arm.open(20);return;} 
    }
}
///////////////////////////////////////////////////////////////
void date_processing(int *x,int *y){ //Time
  if(abs(512-*x)>abs(512-*y))
    {*y = 512;}
  else
    {*x = 512;}
}
///////////////////////////////////////////////////////////////
void buzzer(int H,int L){
  while(yR<420){ //Error Beep
    digitalWrite(buzzerPin,HIGH);
    delayMicroseconds(H);
    digitalWrite(buzzerPin,LOW);
    delayMicroseconds(L);
    yR = arm.JoyStickR.read_y();
    }
  while(yR>600){
    digitalWrite(buzzerPin,HIGH);
    delayMicroseconds(H);
    digitalWrite(buzzerPin,LOW);
    delayMicroseconds(L);
    yR = arm.JoyStickR.read_y();
    }
}
///////////////////////////////////////////////////////////////
void C_action(void){
  if(yR>800){ 
    int *p;
    p=arm.captureAction();
    for(char i=0;i<4;i++){
    act[num][i]=*p;
    p=p+1;     
    }
    num++;
    num_do=num;
    if(num>=act_max){
      num=0;
      buzzer(600,400);
      }
    while(yR>600){yR = arm.JoyStickR.read_y();}
    //Serial.println(act[0][0]);
  }
}
///////////////////////////////////////////////////////////////
void Do_action(void){
  if(yR<220){ //Error Beep
    buzzer(200,300);
    for(int i=0;i<num_do;i++){
      arm.do_action(act[i],15);
      }
    num=0;
    while(yR<420){yR = arm.JoyStickR.read_y();}
    for(int i=0;i<2000;i++){
      digitalWrite(buzzerPin,HIGH);
      delayMicroseconds(200);
      digitalWrite(buzzerPin,LOW);
      delayMicroseconds(300);        
    }
  }
}
///////////////////////////////////////////////////////////////
void setup() {
  //Serial.begin(9600);
  //arm of servo motor connection pins
  arm.ServoAttach(4,5,6,7);
  //arm of joy stick connection pins : xL,yL,xR,yR
  arm.JoyStickAttach(A0,A1,A2,A3);
  pinMode(buzzerPin,OUTPUT);
}
///////////////////////////////////////////////////////////////
void loop() {
  xL = arm.JoyStickL.read_x();
  yL = arm.JoyStickL.read_y();
  xR = arm.JoyStickR.read_x();
  yR = arm.JoyStickR.read_y();
  date_processing(&xL,&yL);
  date_processing(&xR,&yR);
  turnUD();
  turnLR();
  turnCO();
  C_action();
  Do_action();
}

Code for Bluetooth LED (Milestone 2):

#define ledPin 7
int state = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
  if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.read(); // Reads the data from the serial port
 }

 if (state == '0') {
  digitalWrite(ledPin, LOW); // Turn LED OFF
  Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
  state = 0;
 }
 else if (state == '1') {
  digitalWrite(ledPin, HIGH);
  Serial.println("LED: ON");;
  state = 0;
 } 
}

Bill of Materials

Part Note Price Link
Brushless RC Motor It is the motor for the car $16.99 Link
30A ESC To Have Speed Control over the Car $16.99 Link
Cokoino Robotic Arm It is the Robotic Arm Project $49.99 Link
3 in 1 IoT/Smart Car Wheels, Servos, Chassis, and misc. parts $89.99 Link
Various 3D Printed Parts Check Schematics N/A N/A

Other Resources/Examples

Here Are Some Resources I used to create my Final Project.