Pic
shadow

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.

  • Protoboard Ampliar
    Esquema Ampliar

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

}