|
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
- 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
- How to built a Hybrid Bike Computer Hybrid Bike ComputerThis PCB is a Cheap solution to track your training preformanceBased o esp32 , r...
- 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 StoryOnce I finished my first version of this robot I found it interesting to develop a PCB, mount a...
- 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...
- WiFi ESP8266 and DHT22 Sensor I wanted to design a small weather station and use it for tracking for long periods of time the outd...
-
-
-
kmMiniSchield MIDI I/O - IN/OUT/THROUGH MIDI extension for kmMidiMini
124 0 0 -
DIY Laser Power Meter with Arduino
173 0 2 -
-
-
Box & Bolt, 3D Printed Cardboard Crafting Tools
163 0 2 -