Objetivos
- Aprender a crear varios objetos tipo servo.
- Utilizar un josytick para controlar dos servos.
- Aprender a controlar el brazo robótico de dos ejes.
Material requerido.
Tienda España | Tienda Mexico | |
---|---|---|
![]() | Arduino UNO | Arduino UNO |
![]() | Soporte pan & tilt | Soporte pan & tilt |
![]() | Diodo Laser | Diodo Laser |
![]() | 2 x Servo SG90 | 2 x Servo SG90 |
![]() | cables de Protoboard | 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.
Y os dejamos un vídeo con el resultado:
Resumen de la sesión
En esta sesión hemos aprendido varias cosas importantes:
- Hemos aprendido a controlar varios servos a la vez.
- Utilizamos ambos ejes de un joystick para ello.
- Hemos visto cómo funciona el brazo robótico de dos ejes.
Hola ! Y para manejar 4 servos ? Como puedo hacer ? Usando 2 jostick ?
Necesito otra placa Arduino Uno ? O se puede todo con la misma ? Es para hacer una especie de pala mecanica, comandada por 2 josticks
Saludos y Gracias!
Efectivamente necesitarías 2 joysticks. Te valdría con un sólo Arduino, y si necesitas manejar muchos siempre puedes usar un controlador de servos como este https://www.prometec.net/wp-admin/edit-comments.php#comments-form https://store.prometec.net/producto-categoria/motores/#quick-view
La alimentacion cual es? 9v o 5v?
Si te refieres a la del Arduino, puedes alimentarlo con 5V desde el USB o con 9V por el barrel jack.
como puedo hacer para que el servo se quede donde está y no vuelva a la posición inicial?
Hola Xabier, echa un ojo a esta sesión en la que lo hacemos con un servo https://www.prometec.net/joystick-servo/
hola, en el programa comentas que los servos hay que conectarlos a salidas PWM sin embargo los conectas a los pines 7 y 8, da lo mismo o hay que conectarlos por ejemplo a los pines 5 y 6?
un saludo.
Hola Alfonso, tienes razón y es un error. Hay que conectarlo a pines que sean compatibles con la librería Servo.h.
hola Alejandro,si en vez de servos quiero usar motores pap,que deberia cambiar de la programacion?gracias
hola una pregunta y para el botón del joystick como lo puedo programar
Hola alejandro, el boton del joystick se comporta exactamente igual que un boton pulsador del que tienes un ejemplo directo en los tutos
Saludos. Corro el programa con la conexión tal cual, pero los servos se mueven muy lento y haciendo movimientos pausados. Como puedo corregir esto?
Hola Juan tendrías que cambiar estas líneas y poner un delay más pequeño delay (50); // Este delay regula la velocidad del movimiento
Con los joystick de play station 2 comunes puedo controlar el brazo robótico. Tengo uno de seis grados de libertad.
Así es Nahuel.
Sí quiero controlar solo un joystick, podría usar la misma programación solo que configuro el servo1 en los dos ejes?
Hola Paola, supongo que te refieres a un servo. Aquí tienes una sesión en la que controlamos un servo con un joystick. Un saludo.
Y si quiero controlar seis servos
Debo usar tres joystick ???
Sí, porque necesitarías 6 ejes diferentes para manejarlos de forma independiente
Un nunchuk, por ejemplo, te permitiría controlar 4 de forma independiente, dos con el joystick y dos con el acelerómetro.
Un saludo.
Pero más de 2 servos como se hace??…..
Ah okay, son milivolts?
Si vas a controlar muchos servos lo mejor es que utilices un controlador, como este: https://www.prometec.net/producto/servo-shield-x16/
Yo lo he usado para controlar 8 a la vez en un robot araña, en breve esperamos hacer el tutorial.
Y si quiero controlar más de 2 servos que se tiene que hacer en la programación? Debo usar mas de un joystick?…… Y las lecturas que se ponen en la programacion de los joystick (400 y 600) que son? Voltaje o que son? Porfa ayuda es que tengo que hacer un brazo robótico con mas de 4 servos… Saludos
Hola Samuel, si quieres controlar dos servos podrías o bien usar dos joysticks o usar el mando de la Wii y manejar uno con el joystick y otro con el acelerómetro.
Las lecturas 400 y 600 son las medidas que fijamos en la entrada analógica a la que está conectado el joystick a partir de las cuales vamos a mover el servo. Las ponemos así para que no los mueva cualquier mínimo movimiento del servo. La entrada analógica que puede ir de 0 a 5V la transforma Arduino a valores entre 0 y 1024. Un saludo.
Me gustaria Saber cual es la placa que usas para el jostick
no lo especificas, me gustaria que me ayudes porfa 🙂
Hola Alexander, este es el joystick que utilizamos https://www.prometec.net/producto/joystick-xy-con-pulsador/
Un saludo.