Hola de nuevo, amigos del foro…
En esta ocasión os traigo un pequeño proyecto (tal vez llamarlo proyecto es un poco exagerado… ;)) donde os muestro como controlar un servo Futaba desde un IPAD (con pequeñas modificaciones, valdría para un IPOD, IPHONE o Android…).
Por más que busqué no logré encontrar exactamente lo que quería (sencillez y poco conexionado), aunque algo hay por ahí, en inglés… por supuesto… y no muy claro…
Desde luego, no me ha resultado excesivamente sencillo realizarlo (de ahí el facilitar en este post un poco donde esta la base…), pero cuando las cosas empiezan a cobrar sentido, después de muchas pruebas el resultado es ¡¡¡ muy curioso !!!
Para el control he usado un Arduino MEGA, Processing (http://www.processing.org) y OSC (Organización no gubernamental - Wikipedia, la enciclopedia libre), además del software necesario para implementar la interfaz en el IPAD (http://liine.net/en/products/lemur/).
En fin, os dejo el enlace del vídeo y los programas para el arduino y el processing que he usado, por si algún osado quiere cacharrear un poco,… espero que le deis alguna utilidad de provecho o cuanto menos que lo disfrutéis…
Video: Control servo FUTABA con IPAD - YouTube
Código para el arduino:
#include <Servo.h>
Servo miServo; //Definimos nuestro servo
int ledPin = 13; //Led que indica ON
int val = 0;
void setup()
{
Serial.begin(9600); //Configuracion del puerto serie
miServo.attach(2); //Pin 2: control del servo
pinMode(ledPin, OUTPUT); //Pin 13 salida
digitalWrite(ledPin, HIGH); //Se aativa el pin para determinar que el programa esta corriendo
}
void loop()
{
if (Serial.available() > 0) { //Si hay un valor en el puerto serie
val = Serial.read(); //lo pone en la variable "val"
}
delay(10); //Espera 10ms antes de enviar el valor al servo
miServo.write(val);
}
Código para el processing:
import oscP5.*; // Carga la libreria OSC P5
import netP5.*; // Carga la libreria net P5
import processing.serial.*;
Serial puerto; // Variable para el puerto serial
OscP5 oscP5; // Set oscP5 as OSC connection
int pot; // Valor que lee
int PosX;
void setup()
{
size(400, 256);
oscP5 = new OscP5(this,8000); // Inicia oscP5, capturando los mensajes de entrada del puerto 8000
puerto = new Serial(this, Serial.list()[1], 9600); //Inicia el puerto serie
fill(255,255,0);
PosX = 0;
pot = 0;
}
void oscEvent(OscMessage theOscMessage) { // Esto se ejecuta cada vez que hay un mensaje nuevo OSC
String addr = theOscMessage.addrPattern(); // Crea una cadena a partir del mensaje de la OSC
if(addr.indexOf("/1/rotary1") !=-1){ // Filtra y captura el valor del variador circular (KNOB)
pot = int(theOscMessage.get(0).floatValue()); // El valor lo pone en la variable "pot"
}
if(addr.indexOf("/1/fader1") !=-1){ // Filtra y captura el valor del deslizador (FADER)
pot = int(theOscMessage.get(0).floatValue()); // El valor lo pone en la variable "pot"
}
}
void draw()
{
puerto.write(pot); // Lanza por el puerto serie el valor capturado desde el IPAD,
// que recogerá el Arduino y lo enviara al servo
}
Un saludo!!!