Objetivos
Material requerido.
Arduino UNO | |
Soporte pan & tilt | |
Diodo Laser | |
2 x Servo SG90 | |
cables de Protoboard |
INTRODUCCIÓN Y MONTAJE
Si ya habéis montado la estructura sabréis que para poder mover el brazo robótico vamos a utilizar dos servos. Uno se encargará del movimiento en el eje X (horizontal) y el otro en el eje Y (vertical).
Ya hemos trabajado con servos anteriormente, así que realmente no vamos a aprender nada nuevo. La única novedad que vamos a introducir es que vamos a controlar a la vez dos servos, y hasta ahora habíamos controlado sólo uno, ya sea con un potenciómetro o un joystick.
En este caso vamos a usar un joystick, porque como sabéis tiene dos ejes de movimiento, que nos viene perfecto para controlar los dos servos. Si no lo habéis seguido este cuso regularmente (o tenéis un poco olvidados esos temas) os recomendamos que echéis un ojo a estas sesiones, en las que hablábamos de los joysticks, los servos y, por supuesto, de cómo montar el soporte del brazo robótico de dos ejes:
El esquema de conexión y el montaje en la protoboard quedarían tal que así:
PROGRAMA DE CONTROL
El programa también va a ser básicamente el mismo que utilizamos en la sesión de la que hablamos, pero teniendo todo por duplicado.
Lo primero es incluir la librería y crear los objetos tipo servo, que en este caso serán dos. Además crearemos una variable “angulo” para cada servo para guardar su posición, y una variable “salto”, con la que fijaremos el número de grados que se moverá en cada loop cuando estemos moviendo el joystick.
#include <Servo.h> // Incluir la librería Servo Servo servo1; // Crear un objeto tipo Servo llamado servo1 Servo servo2; // Crear un objeto tipo Servo llamado servo2 int anguloX = 90 ; // Empezamos en el centro int anguloY = 90 ; int salto = 3 ; // Controla el salto por movimiento
Ya en el setup especificaremos a qué pin está conectado cada servo:
void setup() { servo1.attach(7) ; // Conectar servo1 al pin 7 servo2.attach(8) ; // Conectar servo1 al pin 8 }
Y en el loop lo que hacemos es comprobar si el joystick se ha movido en alguno de los ejes, y en caso de que lo haya hecho, sumar o restar la cantidad de grados definida en variable “salto” a la posición de los servos que correspondan.
void loop() { //EJE X int p = analogRead(A0); if ( p < 400 ) // Si la lectura es menor de 400 anguloX = anguloX - salto ; // disminuimos el angulo else if (p > 600) // Si mayor de 600 anguloX = anguloX + salto ; // Aumentamos el angulo servo1.write(anguloX); // Y este es el que mueve el servo 1 delay (50); // Este delay regula la velocidad del movimiento //EJE Y int q = analogRead(A1); if ( q < 400 ) // Si la lectura es menor de 400 anguloY = anguloY - salto ; // disminuimos el angulo else if (q > 600) // Si mayor de 600 anguloY = anguloY + salto ; // Aumentamos el angulo servo2.write(anguloY); // Y este es el que mueve el servo 2 delay (50); // Este delay regula la velocidad del movimiento }
Podéis descargar el programa completo aquí: brazo_robot_con_joystick.
Y os dejamos un vídeo con el resultado:
Resumen de la sesión