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);
}

