Advertisement
AntonioVillanueva

Brazo Robot Servo controlado por ARDUINO UNO R3

Dec 9th, 2018
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1.  
  2. //Antonio Villanueva Segura Control Brazo robotizado con 4 servos y 2 Joysticks ...
  3. #include <Servo.h>
  4.  
  5. //Define PINS
  6. //A0-A1-A2-A3 Lectura Joystick
  7. #define A0 14
  8. #define A1 15
  9. #define A2 16
  10. #define A3 17
  11. #define BOTON1  9
  12. #define BOTON2  8
  13.  
  14. //Servos definiciones alternativas mucho mas claras
  15. //Giro Brazo
  16. #define GIRO 18
  17.  
  18. //Lateral A A5
  19. #define LATA 19
  20.  
  21. //Lateral B
  22. #define LATB 5
  23.  
  24. //Pinza
  25. #define PINZA 6
  26.  
  27. //Declaro 4 servos
  28. Servo servo1; Servo servo2;Servo servo3; Servo servo4;
  29.  
  30. //Array de los 4 servos anteriores para acceso por bucle ..
  31. Servo servo_n[4]={servo1,servo2,servo3,servo4};
  32.  
  33. int vrx1,vry1,vrx2,vry2;//Lectura sensores analogicos A0 A1 A2 A3
  34.  
  35. /********************************************************************************/
  36.  
  37. void imprime(char* cadena,int v){//Funcion impresion un string y un valor decimal
  38.         Serial.print(cadena);
  39.         Serial.print(v,DEC);
  40.       //  Serial.println();
  41. }
  42.  
  43. /********************************************************************************/
  44.  
  45. void pinzaServo(bool cierra){//Control pinza 90 - 120 grados control por boton
  46.  
  47.   if (cierra){//CIERRA
  48.     for (int grados=130 ;grados>=10;grados-=5){//Cierra lentamente
  49.         servo_n[3].write(grados);
  50.        
  51.         delay(500);//Retardo 1seg.
  52.     }
  53.   }
  54.   else {//ABRE
  55.     for (int grados=90 ;grados<=130;grados+=5){//Abre lentamente
  56.         servo_n[3].write(grados);
  57.         delay(500);//Retardo 1seg.
  58.       }
  59.    }
  60. }
  61.  
  62. /********************************************************************************/
  63. void pinzaServoGrados(int grados){//Control pinza por grados 90 -120 grados
  64.   servo_n[3].write(grados);
  65. }
  66. /********************************************************************************/
  67. void Giro(int grados){//Giro del brazo segun posicion joystic
  68.   servo_n[0].write(grados);  
  69. }
  70.  
  71. /********************************************************************************/
  72. void Laterales(int grados , int gradosb){//Giro del brazo segun posicion joystic
  73.   servo_n[1].write(grados);  
  74.   servo_n[2].write(gradosb);  
  75. }
  76. /********************************************************************************/
  77. void conectaServos(){//Conecta todos los servos
  78.   servo1.attach(GIRO); //Giro A4
  79.   servo2.attach(LATA); //Lateral A A5
  80.   servo3.attach(LATB); //Lateral B PD5
  81.   servo4.attach(PINZA); //Pinza PD6
  82. }
  83.  
  84. /********************************************************************************/
  85. void desconectaServos(){//Desconectta los servos
  86.   servo1.detach();; //A0 analog pin 0
  87.   servo2.detach(); //A1 analog pin 1
  88.   servo3.detach(); //A1 analog pin 2
  89.   servo4.detach(); //A1 analog pin 3  
  90. }
  91. /********************************************************************************/
  92. //La funcion setup arranca al inicio o en RESET
  93. void setup() {
  94.  
  95.   // initialize digital pin LED_BUILTIN as an output.
  96.     pinMode(LED_BUILTIN, OUTPUT);
  97.    pinMode(1,OUTPUT);//LED
  98.  
  99.   //Click Joystick  
  100.   pinMode(BOTON1 , INPUT_PULLUP);   //activar resistencia pull up
  101.   pinMode(BOTON2 , INPUT_PULLUP);   //activar resistencia pull up  
  102.  
  103. //Servos
  104.   conectaServos(); //Conecta todos los servos A4,A5,PD5,PD6
  105.    
  106.   Serial.begin(19200);
  107.   Serial.println("BRAZO ICARO PREPARADO  ");
  108.  
  109. }
  110. /********************************************************************************/
  111.  
  112. /********************************************************************************/
  113. // Bucle principal del ARDUINO UNO R3
  114. void loop() {
  115.   //delay(100);//Pausa entre lecturas analogicas
  116.  
  117.  
  118. //Reescalo los valores de los sensores potenciometro analogRead produce un valor entre 0 y 1024 que traduzco a grados de 0 a 180
  119. //map(value, fromLow, fromHigh, toLow, toHigh)
  120.  vrx1 = map(analogRead(A0), 0, 1024, 40, 110);   // cambiar escala de 0 a 180 grados GIRO
  121.  vry1 = map(analogRead(A1), 0, 1024, 60, 100);   // cambiar escala de 0 a 180 grados LATA
  122.  vrx2 = map(analogRead(A2), 0, 1024, 60, 100);   // cambiar escala de 0 a 180 grados LATB
  123.  vry2 = map(analogRead(A3), 0, 1024, 90, 120);   // cambiar escala de 90 a 120 grados PINZA
  124. //pinzaServo(digitalRead(BOTON1));
  125.   Giro (vrx1);//Giro brazo  
  126.   pinzaServoGrados(vry2);
  127.   Laterales(vry1 , vrx2);  
  128.   imprime("vrx1 = ",vrx1);// lee 0 600
  129.   imprime("\t vry1 = ",vry1);
  130.   imprime("\t BOTON = ",digitalRead(BOTON1));  
  131.   imprime("\tvrx2 = ",vrx2);
  132.   imprime("\tvry2 = ",vry2);  
  133.   imprime("\t BOTON = ",digitalRead(BOTON2));  
  134.   Serial.println();        
  135.  
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement