Control de un SERVO con un IPAD

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 :astonished: 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!!!

Hola, muy interesante tu aporte :slight_smile: Me gustaria saber como es que se hace para usarlo en android? Porfavor
Gracias de antemano