

Vamos a usar un pequeño joystick para controlar dos servos. Si colocamos los dos servos uno sobre el otro y en la orientación correcta podemos conseguir mover lo que tengan encima (una cámara, por ejemplo) en el eje X y el eje Y seg&uacte;n accionemos el joystick.
Internamente un joystick no es más que dos potenciometros, uno orientado en vertical (que dará la lectura del eje Y) y otro en horizontal (para el eje X). Por lo tanto tiene una salida Analógica que podemos leer con las entradas analógicas de Arduino
Los servos necesitan una salida PWM para controlar su posición, vamos a usar la 9 y la 10 de las salidas digitales de Arduino, que son PWM.
Ya tenemos el Hardware, ahora toca programar:
#include <Servo.h> const int servo1 = 3; //Uno de los servos const int servo2 = 10; //Segundo Servo const int ejeX = 0; //eje X del servo const int ejeY = 1; //eje Y del servo int servoVal; // variable to read the value from the analog pin Servo Miservo1; //objeto de la libreria servo para controlar el servo 1 Servo Miservo2; //objeto de la libreria servo para controlar el servo 2 void setup() { //Definimos en que pines tenemos conectados los servos Miservo1.attach(servo1); Miservo2.attach(servo2); //Inicializamos la conexión serial Serial.begin(9600); } void loop(){ //Mostramos las lecturas del joystick en la consola Serial.print("EjeX: ") Serial.print(analogRead(ejeH)); Serial.print ("EjeY: "); Serial.print(analogRead(ejeV)); //Leemos la posición del joystick en Y servoVal = analogRead(ejeY); /*convertimos el valor leido en un valor dentro del rango de movimiento del servo (entre 0 y 180)*/ servoVal = map(servoVal, 0, 1023, 0, 180); //Movemos el servo a la posición correspondiente Miservo2.write(servoVal); //******REPETIMOS LAS MISMAS OPERACIONES PARA EL EJE X****** // Leemos la posición del eje X del joystick servoVal = analogRead(ejeX); //Convertimos los valores a un valor proporcional entre 0 y 180 servoVal = map(servoVal, 0, 1023, 70, 180); //movemos el servo a esa posicion Miservo1.write(servoVal); //Damos tiempo a que los servos se coloquen antes de leer de nuevo delay(15); }