De conformidad con el Reglamento (UE) 2016/679 del Parlamento Europeo y del Consejo de 27 de abril de 2016 relativo a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos y (Reglamento General de Protección de Datos) ofrecemos la posibilidad de aceptar o no el uso de cookies mientras navega por nuestro sitio web. Puede obtener más información en nuestra web
El espacio exclusivo de robótica educativa
Todo sobre productos Mobile, Connect, Outdoor y Robótica Educativa
Proyecto 4 Arm Robot: Controla la posición de 2 servomotores con 1 Joystick
Published in Robótica - 6 Septiembre 2017

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 debes asociarlo a cada servomotor

Material:

  • 1 — Joystick
  • 2 — Servomotores
  • 1 — Placa Build&Code UNO
  • 1 — ProtoBoard

Circuito:

Conecta los pins VRx y VRy de tu Joystick a dos pines analógicos, ya que un potenciómetro es un sensor analógico. Cada servomotor debes conectarlo a un pin digital PWM que será el encargado de hacerlo girar más o menos en función de la lectura recibida del joystick.

El color negro es el GND, conectalo al GND de la placa Build&Code UNO.

El color rojo son los 5V, conectalo al 5V de la placa Build&Code UNO.

Los cables de color amarillo son laseñal de los servomotores, conéctalos al pin digital PWM 9 y 10.

Los 2 pins del joystick se conectan con 2 cables azules a dos pines analógicos, A0 y A1 para hacer las lecturas del sensor.

Programa en código Arduino IDE

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

Recuerda:

  • un potenciómetro, al ser un sensor analógico, hará lecturas de 0 a 1023, en función de cuánto lo hayas girado.
  • Los pines digital 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, significa que estás pulsando el joystick hacia adelante, por lo que tienes que asociar esta condición a un desplazamiento positivo del servo, sumando 1 grado a la posición anterior del servo.

Cuando la lectura del joystick en el eje X o Y sea menor que 480, significa 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 un grado 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 servo.

Código Arduino IDE

#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 = 0; // GRADOS DEL SERVO 1
int grados2 = 0; // GRADOS DEL SERVO 2


void setup() {
Serial.begin(9600); // ACTIVA LA COMUNICACIÓN CON LA PLACA BUILD&CODE UNO
motor1.attach (9); // PIN DIGITAL PWM 9 DONDE ESTÁ CONECTADO EL SERVO 1
motor1.write (0);
motor2.attach (10); // PIN DIGITAL PWM 10 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 + 1;
}

// 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 - 1;
}

else // MANTENER EL VALOR DE GRADOS ESTABLE MIENTRAS NO SE USA EL JOYSTICK

{
grados1 = grados1;
}

// 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 + 1;

}

// 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 - 1;
}

else // MANTENER EL VALOR DE GRADOS ESTABLE MIENTRAS NO SE USA EL JOYSTICK
{
grados2 = grados2;
}


motor1.write (grados1); // ENVIAR LOS GRADOS AL SERVO 1
motor2.write (grados2); // ENVIAR LOS GRADOS AL SERVO 2

delay (500);

//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 DEL EJE Y DE 0 A 1023
Serial.print("\t");
Serial.println (grados2); // MOSTRAR EN PANTALLA LOS VALORES DE LOS GRADOS DEL SERVO1 DE 0 A 180
}

Código mBlock

 

Volver al índice de proyectos del Arm Robot.

Sobre la placa Build&Code 4in1:

Descubre más kits Ebotics:

 

Escribe un comentario
* Campos obligatorios