viernes, 17 de julio de 2015

Tutorial: Control de dos servos mediante Joystick



En este tutorial veremos el uso del Joystick para manejar dos servos usando un eje para un servo y otro eje para el otro.

Para nuestro tutorial de hoy usaremos:
- Tabla con protoboard y sujeción para Arduino UNO cedida por Electrohobby.
- Arduino UNO cedido por Electrohobby.
- Dos servos.
- Un Joystick de Playstation.
- Cables.

Seguidamente podremos ver el mapa de conexiones:


Como podéis ver, las conexiones son bastante sencillas:

Del Joystick salen 5 terminales. VCC (o 5V), GND, VRx (Horizontal), VRy (Vertical) y SW (Switch). VCC lo conectaremos con nuestros 5V del arduino. GND del Joystick con el GND del Arduino. Los pines VRx y VRy los leeremos por los pines analógicos y SW lo trataremos como un pulsador.




Código:

#include <Servo.h>

Servo panServo;//asignamos un eje a un servo y otro eje al otro servo      
Servo tiltServo;      

int servoPanPosition = 90;//posición de referencia
int servoTiltPosition = 90;
int joystickPanSpeed = 0;
int joystickTiltSpeed = 0;
int joystickPanPin = A0; //marcamos entradas analógicas que medirán el ángulo del joystick
int joystickTiltPin = A1;
int servoPanPin = 9;//declaramos los pines digitales por donde le entrará la instrucción del joystick al servo.
int servoTiltPin = 10;
int boton = 8;
void setup() {   pinMode(servoPanPin, OUTPUT);//se declara igual que declarariamos un led   pinMode(servoTiltPin, OUTPUT);   panServo.attach(servoPanPin);   tiltServo.attach(servoTiltPin); } void loop() {   joystickPanSpeed = (analogRead(joystickPanPin) - 512) / 50;     // -512 to provide equal +/- numbers   joystickTiltSpeed = (analogRead(joystickTiltPin) - 512) / -50;     // negative 50 to reverse direction   servoPanPosition = constrain((servoPanPosition + joystickPanSpeed), 1, 180);   servoTiltPosition = constrain((servoTiltPosition + joystickTiltSpeed), 1, 180);     // constarin function to not exceed servo limits   panServo.write(servoPanPosition);   tiltServo.write(servoTiltPosition);   delay(50);     // adjustable for overall speed }

Y como siempre el vídeo:


Gracias de antemano.

Un saludo.

C.