Pages: [1]   Go Down
Author Topic: Control de un SERVO con un IPAD  (Read 1867 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola de nuevo, amigos del foro…

En esta ocasión os traigo un pequeño proyecto (tal vez llamarlo proyecto es un poco exagerado… smiley-wink) 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 (http://es.wikipedia.org/wiki/OSC), 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 smiley-eek quiere cacharrear un poco,… espero que le deis alguna utilidad de provecho o cuanto menos que lo disfrutéis…

Video: http://youtu.be/n4I4trPOETY

Código para el arduino:

Code:
#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:
Code:
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!!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: