![]() |
servomotor |
x 6 | |
![]() |
Breadboard 830 Point Solderless PCB Bread Board MB-102 MB102 Test Develop DIY |
x 1 | |
|
HC-05 |
x 1 | |
![]() |
A000053Arduino
|
x 1 | |
![]() |
19.5V 4.7A Power SupplyDomallk
|
x 1 | |
![]() |
S1621-46Harwin Inc.
|
x 50 |
![]() |
arduino IDEArduino
|
|
![]() |
MIT App InventorMIT
|
|
![]() |
Python 3.9Python Community
|
|
![]() |
Microsoft Visual Studio |
Robot Arm to implement CV projects
Story
Four years ago I was looking for a good robot arm, this year I have time and decided to replicate the Dejan Project.
The STL files are perfect to 3D print locally, usin PLA and the default setting, the software need small adaptations, and the APP need some understanding to work and be modified properly.
The project has been full of fun and challenges.I recommend it a lot.
CV
I need to design a new robot arm for a CV project, and this Robot Arm is a perfect Path to move ahead in the right way with a fast pace.
Challenges
Servos calibration and grip operation were important steps with a lot of issues. Fortunatley I found a Fabri Creator , one youtube who adapta before thi s robot and share a learning curve very impressive about move quickly.
About the grip I had damages in 3 sg90 servos intslled in the Grip position, before clear some fails I had.
Tehcnical Issues
The open source information is aweome and work properly with minors changes, so you can move fast if decide t replicate. The STL files are very good with no problems
Why to Replicate a project
I think a big amount of knowledge is built based in previous knowledge, engineers do not reinvent Maths to solve a Problem, we use all the theories and finally we try to create something new. also this has been a source of knowledge in robotics focusing about how and what I need to check in the availbale books and bibliography.
#include <Servo.h> #include <SoftwareSerial.h> SoftwareSerial Bluetooth(3, 4); // RX, TX Servo servo1; //BASE Servo servo2; //HOMBRO1 Servo servo3; //HOMBRO2 no se usa en este proyecto, la idea principal era usar 2 servos para HOMBRO Servo servo4; //CODO1 Servo servo5; //CODO2 Servo servo6; //MUÑECA Servo servo7; //GRIPPER //10rapido 15medio 20lento int s1Vel = 15; //BASE int s2Vel = 25; //HOMBRO int s4Vel = 20; //CODO1 int s5Vel = 20; //CODO2 int s6Vel = 15; //MUÑECA int s7Vel = 15; //GRIPPER int index=0; int velG=25; int s1Act,s2Act,s3Act,s4Act,s5Act,s6Act,s7Act; //posicion actual de los servos int s1Ant,s2Ant,s3Ant,s4Ant,s5Ant,s6Ant,s7Ant; //posicion anterior de los servos int s1[50],s2[50],s3[50],s4[50],s5[50],s6[50],s7[50]; //matrices para almacenas las posiciones de cada servo String bt,btS; void setup(){ Serial.begin(115200); Bluetooth.begin(9600); Bluetooth.setTimeout(10); servo1.attach(5,510,1200); //ancho min y max exclusivo para MG996R base servo2.attach(11,650,1400); //ancho min y max exclusivo para MG946R hombro1 servo3.attach(6,650,1400); //ancho min y max exclusivo para MG946R hombro2 servo4.attach(7,650,1400); //ancho min y max exclusivo para MG946R codo1 servo5.attach(8,650,1400); //ancho min y max exclusivo para MG995 codo2 servo6.attach(9,800,1290); //ancho min y max exclusivo para MG995 muneca servo7.attach(10,700,1290); //ancho min y max exclusivo para MG995 gripper s1Ant=90; //BASE servo1.write(s1Ant); //Importante empezar s2 y s3 complementados a 180°;es decir; s2+s3=180; s2Ant=100; //HOMBRO1 s3Ant=80; //HOMBRO2 servo2.write(s2Ant); servo3.write(s3Ant); s4Ant=115; //CODO1 servo4.write(s4Ant); s5Ant=60; //CODO2 servo5.write(s5Ant); s6Ant=90; //MUÑECA servo6.write(s6Ant); s7Ant=60; //GRIPPER servo7.write(s7Ant); delay(50); } void loop() { if(Bluetooth.available()>0){ bt = Bluetooth.readString(); // leemos cadena //////////////////////////// SERVO 1 - BASE ///////////////////////////////////////////////////////////////////////////////// if(bt.startsWith("s1")){ // comprueba si la cadena comienza con "s1" btS = bt.substring(2,bt.length()); // extraigo los caracteres desde la poisicion 2 en adelante ejem:"s1120" a "120" s1Act = btS.toInt(); //convierto de string a entero //MUEVO EL SERVOMOTOR CON UN BARRIDO if(s1Ant > s1Act){ for(int j=s1Ant; j>=s1Act; j--){ servo1.write(j); delay(s1Vel);}} else{ for(int j=s1Ant; j<=s1Act; j++){ servo1.write(j); delay(s1Vel);}} s1Ant = s1Act;} //el angulo movido(s1Act) se convierte en la posicion anterior //////////////////////////// SERVO 2 y 3 - HOMBRO 1 y 2 ///////////////////////////////////////////////////////////////////////////////// if(bt.startsWith("s2")){ btS = bt.substring(2,bt.length()); s2Act = btS.toInt(); Serial.println(s2Act); if(s2Ant > s2Act){ for(int j=s2Ant; j>=s2Act; j--){ servo2.write(j); servo3.write(180-j); delay(s2Vel);}} else{ for(int j=s2Ant; j<=s2Act; j++){ servo2.write(j); servo3.write(180-j); delay(s2Vel);}} s2Ant = s2Act;} //////////////////////////// SERVO 4 - CODO1 ///////////////////////////////////////////////////////////////////////////////// if(bt.startsWith("s3")){ btS = bt.substring(2,bt.length()); s4Act = btS.toInt(); if(s4Ant > s4Act){ for(int j=s4Ant; j>=s4Act; j--){ servo4.write(j); delay(s4Vel);}} else{ for(int j=s4Ant; j<=s4Act; j++){ servo4.write(j); delay(s4Vel);}} s4Ant = s4Act;} //////////////////////////// SERVO 5 - CODO2 ///////////////////////////////////////////////////////////////////////////////// if(bt.startsWith("s4")){ btS = bt.substring(2,bt.length()); s5Act = btS.toInt(); if(s5Ant > s5Act){ for(int j=s5Ant; j>=s5Act; j--){ servo5.write(j); delay(s5Vel);}} else{ for(int j=s5Ant; j<=s5Act; j++){ servo5.write(j); delay(s5Vel);}} s5Ant = s5Act;} //////////////////////////// SERVO 6 - MUÑECA ///////////////////////////////////////////////////////////////////////////////// if(bt.startsWith("s5")){ btS = bt.substring(2,bt.length()); s6Act = btS.toInt(); Serial.println(s6Act); if(s6Ant > s6Act){ for(int j=s6Ant; j>=s6Act; j--){ servo6.write(j); delay(s6Vel);}} else{ for(int j=s6Ant; j<=s6Act; j++){ servo6.write(j); delay(s6Vel);}} s6Ant = s6Act;} //////////////////////////// SERVO 7 - GRIPPER ///////////////////////////////////////////////////////////////////////////////// if(bt.startsWith("s6")){ btS = bt.substring(2,bt.length()); s7Act = btS.toInt(); if(s7Ant > s7Act){ for(int j=s7Ant; j>=s7Act; j--){ servo7.write(j); delay(s7Vel);}} else{ for(int j=s7Ant; j<=s7Act; j++){ servo7.write(j); delay(s7Vel);}} s7Ant = s7Act;} //////////////////////////// SAVE ////////////////////////////////////////////////// if(bt.startsWith("SAVE")){ s1[index]= s1Ant; s2[index]= s2Ant; s4[index]= s4Ant; s5[index]= s5Ant; s6[index]= s6Ant; s7[index]= s7Ant; index++;} ///////////////////////// RESET /////////////////////////////////////////////////// if(bt.startsWith("RESET")){ //memset se utiliza para rellenar un bloque de memoria con un valor determinado //memeset("matriz","dato a rellenar","tamaño de la matriz") memset(s1,0,sizeof(s1)); //rellena con el valor de "0" todas las posiciones de la matriz memset(s2,0,sizeof(s2)); memset(s4,0,sizeof(s4)); memset(s5,0,sizeof(s5)); memset(s6,0,sizeof(s6)); memset(s7,0,sizeof(s7)); index=0;} //////////////////////////// RUN //////////////////////////////////////////////////// if(bt.startsWith("RUN")){ //Ejecuta los pasos una y otra vez hasta que se pulse el botón "RESET" o espera hasta que se vuelva a pulsar "RESET" while(bt.startsWith("RESET") != true){//MIENTRAS NO SE PRESIONE 'RESET' SE MANTIENE EN EL BUCLE y SOLO FUNCIONA BOTON "PAUSE" for(int i=0; i<= index-2;i++){ if(Bluetooth.available()>0){ bt = Bluetooth.readString(); if(bt.startsWith("PAUSE") == true){ //Ejecuta los pasos una y otra vez hasta que se pulse el botón "RUN" o espera hasta que se vuelva a pulsar "RUN" while(bt.startsWith("RUN") != true){//MIENTRAS NO SE PRESIONE 'RUN' SE MANTIENE EN EL BUCLE Y SOLO FUNCIONA BOTON "RESET" if(Bluetooth.available()>0){ bt = Bluetooth.readString(); if(bt.startsWith("RESET") == true){ break;} } } }//end if(PAUSE) if(bt.startsWith("ss")){ btS = bt.substring(2,bt.length()); velG = btS.toInt();} }//end 1er Bluetooth.available //////// SERVO 1 //////////////////////// if(s1[i] == s1[i+1]){} if(s1[i] > s1[i+1]){ for(int j = s1[i]; j >= s1[i+1];j--){ servo1.write(j); delay(velG);}} if(s1[i] < s1[i+1]){ for(int j = s1[i]; j <= s1[i+1];j++){ servo1.write(j); delay(velG);}} //////// SERVO 2 y 3 ///////////////////// if(s2[i] == s2[i+1]){} if(s2[i] > s2[i+1]){ for(int j = s2[i]; j >= s2[i+1];j--){ servo2.write(j); servo3.write(180-j); delay(velG);}} if(s2[i] < s2[i+1]){ for(int j = s2[i]; j <= s2[i+1];j++){ servo2.write(j); servo3.write(180-j); delay(velG);}} //////// SERVO 4 //////////////////////// if(s4[i] == s4[i+1]){} if(s4[i] > s4[i+1]){ for(int j = s4[i]; j >= s4[i+1];j--){ servo4.write(j); delay(velG);}} if(s4[i] < s4[i+1]){ for(int j = s4[i]; j <= s4[i+1];j++){ servo4.write(j); delay(velG);}} //////// SERVO 5 //////////////////////// if(s5[i] == s5[i+1]){} if(s5[i] > s5[i+1]){ for(int j = s5[i]; j >= s5[i+1];j--){ servo5.write(j); delay(velG);}} if(s5[i] < s5[i+1]){ for(int j = s5[i]; j <= s5[i+1];j++){ servo5.write(j); delay(velG);}} //////// SERVO 6 //////////////////////// if(s6[i] == s6[i+1]){} if(s6[i] > s6[i+1]){ for(int j = s6[i]; j >= s6[i+1];j--){ servo6.write(j); delay(velG);}} if(s6[i] < s6[i+1]){ for(int j = s6[i]; j <= s6[i+1];j++){ servo6.write(j); delay(velG);}} //////// SERVO 7 //////////////////////// if(s7[i] == s7[i+1]){} if(s7[i] > s7[i+1]){ for(int j = s7[i]; j >= s7[i+1];j--){ servo7.write(j); delay(velG);}} if(s7[i] < s7[i+1]){ for(int j = s7[i]; j <= s7[i+1];j++){ servo7.write(j); delay(velG);}} }// end FOR INDEX }//end 1er WHILE "RESET" } }//if(Bluetooth.available()>0){ }//end void loop
Robot Arm to implement CV projects

Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW
ESP32-S3 4.3inch Capacitive Touch Display Development Board, 800×480, 5-point Touch, 32-bit LX7 Dual-core Processor
BUY NOW
Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW- Comments(0)
- Likes(0)

- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by Bolaños Hernando
-
Robot Arm to implement CV projects StoryFour years ago I was looking for a good robot arm, this year I have time and decided to replica...
-
MINI ROBOT ARM MINI ROBOT ARM - YouTubeIdea based on Tutorials shared by Mr. Pinaut for :software -schematics -inst...
-
Bluetooth Controlled LEGO Toy Car MotivationMy motivation was my kids. I want to share time and have fun with them teaching them some ...
-
Integrated HOME Irrigation System Motivation:Since I left the university, 24 years ago, I haven't had the chance to update my knowledg...
-
Rubik's Cube Solver Robot DIY - V.3.0 Scope of the projectThe idea was to build a Rubik's cube solver robot, as simple as possible, easy t...
-
Rubik's Cube Solver Robot v1 The drivers to develop my project were:Rubik′s cube is a "best seller" category toy, more than 350 m...
-
How to built a Hybrid Bike Computer Hybrid Bike ComputerThis PCB is a Cheap solution to track your training preformanceBased o esp32 , r...
-
My nunchuck adapter (PCB) for my Galagino Retro console_Running on a ESP32 device Galagino is an open source idea of hardware and software from Tiil Harbaum (https://github.com/harba...
-
PCB DESIGN FOR BIKE COMPUTER DIY PCB DESIGN FOR A BIKE COMPUTER DIY - QBIKOThis PCB was designed to run a BIke computer based on ESP3...
-
How to build a Mecanum Wheels Robot with an Arduino Mega and a PCB Once I finished my first version of this robot I found it interesting to develop a PCB, mount and so...
-
How to build a Bike computer DIY-Heart Rate sensor comparison and selection This project is about a tutorial to evaluate 3 hear rate Sensor. In this way I will choose the bette...
-
How to build a Bike computer with a ESP32 -WROOM + 2 Reed Switches + 1 Cellular Phone(old with GPS and BTH) The complete tutorial explaining all the details for this project, can be watched in the next vide...
-
How to build a Table Tennis Robot - V2 Story: Once I finished my first protoype for a TTR , I recognize and learnt about a lot of improveme...
-
How to build a Mecanum Wheels Robot_V1 The storyHow to bulild a Robot usually is an assay and error process, you can see my first prototype...
-
How to use AI to program a 2DOF ROBOT- Arduino+ pyhton+opencv+chatgp+ps3eyecam The challenge was to obtanin a mix of code generated by chatgpt for pyhton, opencv, and arduino and ...
-
Node MCU based Wi Fi Servo Switch- DIY About:Regulations usually forbide to introduce pieces of equipment in the conecctions and wiring of ...
-
CNC_DIY_LASER_PLOTTER_VYNIL CUTTER ABOUT THIS PROJECTSummaryTo develop a CNC need you to learn about code, IT, electricity, electronics...
-
Arduino Based Table Tennis Robot V1 DIY AboutThis project is about a TTR(Table Tennis Robot) made at home with cardboard and wood, using som...
-
Robot Arm to implement CV projects StoryFour years ago I was looking for a good robot arm, this year I have time and decided to replica...
-
MINI ROBOT ARM MINI ROBOT ARM - YouTubeIdea based on Tutorials shared by Mr. Pinaut for :software -schematics -inst...
-
Bluetooth Controlled LEGO Toy Car MotivationMy motivation was my kids. I want to share time and have fun with them teaching them some ...
-
Integrated HOME Irrigation System Motivation:Since I left the university, 24 years ago, I haven't had the chance to update my knowledg...
-
Rubik's Cube Solver Robot DIY - V.3.0 Scope of the projectThe idea was to build a Rubik's cube solver robot, as simple as possible, easy t...
-
Rubik's Cube Solver Robot v1 The drivers to develop my project were:Rubik′s cube is a "best seller" category toy, more than 350 m...
-
How to built a Hybrid Bike Computer Hybrid Bike ComputerThis PCB is a Cheap solution to track your training preformanceBased o esp32 , r...
-
My nunchuck adapter (PCB) for my Galagino Retro console_Running on a ESP32 device Galagino is an open source idea of hardware and software from Tiil Harbaum (https://github.com/harba...
-
PCB DESIGN FOR BIKE COMPUTER DIY PCB DESIGN FOR A BIKE COMPUTER DIY - QBIKOThis PCB was designed to run a BIke computer based on ESP3...
-
How to build a Mecanum Wheels Robot with an Arduino Mega and a PCB Once I finished my first version of this robot I found it interesting to develop a PCB, mount and so...
-
How to build a Bike computer DIY-Heart Rate sensor comparison and selection This project is about a tutorial to evaluate 3 hear rate Sensor. In this way I will choose the bette...
-
How to build a Bike computer with a ESP32 -WROOM + 2 Reed Switches + 1 Cellular Phone(old with GPS and BTH) The complete tutorial explaining all the details for this project, can be watched in the next vide...
-
Modifying a Hotplate to a Reflow Solder Station
193 0 2 -
MPL3115A2 Barometric Pressure, Altitude, and Temperature Sensor
145 0 1 -
-
Nintendo 64DD Replacement Shell
186 0 1 -
V2 Commodore AMIGA USB-C Power Sink Delivery High Efficiency Supply Triple Output 5V ±12V OLED display ATARI compatible shark 100W
408 4 1 -
How to measure weight with Load Cell and HX711
436 0 3 -
-
Instrumentation Input, high impedance with 16 bit 1MSPS ADC for SPI
538 0 0