PROYECTO Nº 5: Controla la posición de 2 servomotores (en variaciones de 5º) con 1 Joystick

Construye y programa un circuito para controlar la posición de 2 servomotores en función de la posición de un único joystick.

Recuerda que un joystick está compuesto por 2 potenciómetros, por lo que cada uno debe estar asociado a cada servomotor. Al pulsar el joystick hacia arriba y hacia abajo controlarás un servomotor, y al pulsar el joystick hacia la derecha y la izquierda controlarás el segundo servomotor.

NIVEL DE DIFICULTAD: Intermedio.

DURACIÓN DE LA ACTIVIDAD: 30 min.

MATERIALES:

  • 1 Joystick
  • 2 Servomotores
  • 1 Placa Build&Code UNO
  • 1 Placa sensor Build&Code
  • 1 Cable USB – USB tipo B
  • Ordenador

CONEXIONES:

  1. Conecta el joystick a los puertos analógicos A0 y A1 de la placa sensor Build&Code.
    Conexiones con el puerto analógico A0:
    -Conecta el GND al pin G.
    -Conecta el Vcc al pin V.
    -Conecta el VRx al pin S.
    Conexiones con el puerto analógico A1:
    -La VRy al pin S.
    Como puedes recordar, conectamos el joystick a los puertos analógicos A0 y A1 ya que está compuesto por potenciómetros, los cuales son sensores analógicos.
  2. Conexión de los servomotores a la placa sensor Build&Code.
    -Conecta el servomotor S1 al puerto digital 6. Conecta el cable marrón al pin G, el cable rojo al pin V y cable el naranja al pin S.
    -Conecta el servomotor S2 al puerto digital 9. Conecta el cable marrón al pin G, el cable rojo al pin V y el cable naranja al pin S.
    Conectamos los servomotores a estos puertos digitales ya que tienen una salida  PWM que será la encargada de hacer girar más o menos el servomotor en función de la lectura recibida del joystick.
  3. La imagen a continuación muestra cómo son las conexiones. Úsala como guía.

CÓDIGO DE PROGRAMACIÓN

Puedes realizar esta actividad utilizando el software Arduino y otros software de programación por bloques compatibles. A continuación encontrarás el código de programación necesario.

Código Arduino

Realizarás un programa que estará constantemente leyendo la información de las 2 salidas de potenciómetro del joystick, y en función de la lectura que mida del joystick, hará mover al servo a una u otra posición, con variaciones de 5º. En este código, cuando sueltes el joystick el servomotor mantendrá su posición fijada.

Antes de comenzar, recuerda que:

  • Al ser un sensor analógico, el potenciómetro hará lecturas de 0 a 1023, en función de cuánto lo hayas girado.
  • Los pines digitales PWM estarán trabajando como un pin de salida, pero en vez de dar un valor alto o bajo de manera constante, éstos pueden hacer cambios muy rápidos de valores para jugar con valores medios, lo cual permite emitir distintos niveles de voltaje de salida.
  • Para trabajar con servomotores, usarás la librería de Servomotor “#include”, ya que nos facilitará mucho el poder trabajar con los servomotores.
  • Para hacer que el servo se mueva hacia una u otra dirección, utiliza la instrucción de condición “if/else”.
  • Siempre que el valor de lectura del joystick en el eje X o Y sea mayor que 550, significará que estás pulsando el joystick hacia adelante, por lo que tienes que asociar esta condición a un desplazamiento positivo del servo, sumando 5º a la posición anterior del servo.
  • Cuando la lectura del joystick en el eje X o Y sea menor que 480, significará que estás pulsando el joystick hacia atrás, por lo que tienes que asociar esta condición a un desplazamiento negativo del servo, restando 5º a la posición anterior.
  • Cuando la lectura esté entre unos valores de 480 y 550, significa que no tienes presionado el joystick, por lo que no tienes que variar la variable grados que modifica la posición del servomotor.

Ahora, sigue estos pasos:

  1. Descarga el software Arduino y realiza en proceso de instalación.
    1.1 Ejecuta el software de programación por bloques compatible.
    1.2 Configura el programa para grabar el código en la placa controladora Build&Code UNO. Encontrarás las instrucciones para hacerlo en la guía de Primeros Pasos del Arm Robot.
  2. Abre el programa Arduino y, una vez en él, copia el siguiente programa:
    #include <Servo.h>
    int valorX = 0; // LECTURA DEL EJE X
    int valorY = 0; // LECTURA DEL EJE Y
    int pinJX = A0; // PIN ANALOGICO A0 DEL EJE X
    int pinJY = A1; // PIN ANALOGICO A1 DEL EJE Y
    Servo motor1; // DECLARAR SERVO 1
    Servo motor2; // DECLARAR SERVO 2
    int grados1 = 90; // POSICIÓN INICIAL SERVOMOTOR 1
    int grados2 = 90; // POSICIÓN INICIAL SERVOMOTOR 2
      
    void setup() {
    Serial.begin(9600); // ACTIVA LA COMUNICACIÓN CON LA PLACA BUILD&CODE UNO
    motor1.attach (6); // PIN DIGITAL PWM 6 DONDE ESTÁ CONECTADO EL SERVO 1
    motor1.write (0);
    motor2.attach (9); // PIN DIGITAL PWM 9 DONDE ESTÁ CONECTADO EL SERVO 2
    motor2.write (0);
    }
     
    void loop() { 
    valorX = analogRead ( pinJX); // LECTURA DEL PUERTO ANALOG. A0 DEL EJE X
    valorY = analogRead ( pinJY); // LECTURA DEL PUERTO ANALOG. A1 DEL EJE Y
     
    // INCREMENTAR GRADOS MOTOR1
    if ( (valorX > 550 ) && (valorX <= 1023) ) // INCREMENTAR LOS GRADOS CUANDO LA LECTURA DEL EJE X ES MÁS GRANDE QUE 550
    {
    grados1 = grados1 + 5;
    }
     
    // DECREMENTAR GRADOS MOTOR1
    if ( (valorX >= 0 ) && (valorX < 480 )) // DECREMENTAR LOS GRADOS CUANDO LA LECTURA DEL EJE X ES MÁS PEQUEÑO QUE 480
    {
      grados1 = grados1 - 5;
    }
     
    if ( grados1 >= 180) // SI EL SERVOMOTOR LLEGA A 180º POR MAS QUE MUEVAS EL JOYSTICK EL SERVOMOTOR NO SE MOVERÁ MÁS DE 180º
    {
      grados1 = 180;
    }
    
    if ( grados1 <= 0) // SI EL SERVOMOTOR LLEGA A 0º POR MAS QUE MUEVAS EL JOYSTICK EL SERVOMOTOR NO SE MOVERÁ MÁS DE 0º
    {
      grados1 = 0;
    }
     
    // INCREMENTAR GRADOS MOTOR2
     
    if ( (valorY > 550 ) && (valorY <= 1023) ) // INCREMENTAR LOS GRADOS CUANDO LA LECTURA DEL EJE X ES MÁS GRANDE QUE 550.
    {
      grados2 = grados2 + 5;
    }
     
    // DECREMENTAR GRADOS MOTOR2
     
    if ( (valorY >= 0 ) && (valorY < 480) ) // DECREMENTAR LOS GRADOS CUANDO LA LECTURA DEL EJE X ES MÁS PEQUEÑO QUE 480 
    {
      grados2 = grados2 - 5;
    }
     
    if ( grados2 >= 180) // SI EL SERVOMOTOR LLEGA A 180º POR MAS QUE MUEVAS EL JOYSTICK EL SERVOMOTOR NO SE MOVERÁ MÁS DE 180º
    {
      grados2 = 180;
    }
    
    if ( grados2 <= 0) // SI EL SERVOMOTOR LLEGA A 0º POR MAS QUE MUEVAS EL JOYSTICK EL SERVOMOTOR NO SE MOVERÁ MÁS DE 0º
    {
      grados2 = 0;
    }
       
    motor1.write (grados1); // ENVIAR LOS GRADOS AL SERVO 1
    motor2.write (grados2); // ENVIAR LOS GRADOS AL SERVO 2
     
    delay (250);
     
    //IMPRIME EN PANTALLA LAS VARIABLES CON LAS QUE ESTÁS TRABAJANDO
     
    Serial.print (valorX); // MOSTRAR EN PANTALLA LOS VALORES DEL EJE X DE 0 A 1023
    Serial.print("\t");
    Serial.print (valorY);  // MOSTRAR EN PANTALLA LOS VALORES DEL EJE Y DE 0 A 1023
    Serial.print("\t");
    Serial.print (grados1);  // MOSTRAR EN PANTALLA LOS VALORES DE LOS GRADOS DEL SERVO1 DE 0 A 180
    Serial.print("\t");
    Serial.println (grados2); // MOSTRAR EN PANTALLA LOS VALORES DE LOS GRADOS DEL SERVO2 DE 0 A 180
    }
    

Código para software de programación por bloques compatible 

  1. Descarga el software y realiza el proceso de instalación.
  2. Para realizar este código usarás variables. Las variables son un bloque al que asignas un nombre y dentro de este bloque guardarás unos valores.
  3. Los bloques variables están localizados en Datos y Bloques. Para crear una variable haz clic en Crear una variable, asígnale un nombre y tendrás los bloques disponibles para esa variable.
  4. Las variables que vas a crear se llaman GRADO1 y GRADO2. Contendrán el valor de los grados del servomotor 1 y 2, los cuales se verán modificados por el movimiento del joystick.
  5. Copia el siguiente código en el programa:
    proyecto-5-arm-robot-programacion1
  6. Configura y carga el código en el Arm Robot, siguiendo las instrucciones indicadas en la guía de Primeros Pasos del Arm Robot.

RESULTADO DEL EJERCICIO

El programa leerá constantemente los valores de las dos salidas del joystick, la VRx y la VRy.

Cuando haya un incremento de la lectura del joystick superior a 550, los grados de los servomotores sumarán 5º, y cuando haya un decremento de la lectura del joystick inferior a 480, los grados de los servomotores restarán 5º, hasta alcanzar los grados máximos (180º) y los grados mínimos (0º) del servomotor.

El incremento y decremento de valores del joystick corresponde al movimiento adelante, atrás, derecha e izquierda del joystick, si éste permanece estático el servomotor mantendrá su última posición.

1 0

0