Componentes

Para controlar la webcam que llevará el BereBere, utilizaremos un motor paso a paso controlado por arduino.

Conexion

Ver: http://altred.net/cgi-bin/moin.cgi/Como-ArduinoPAP

Código

V 0.0

arduino:

   1 /* CONTROLA CAMARA
   2  * ---------------
   3  *
   4  * Controla motor paso a paso, para robotizar una webcam
   5  * para el BereBere
   6  * http://berebere.randomlab.net
   7  * Utiliza la libreria Stepper de Tom Igoe
   8  * http://www.arduino.cc/en/Tutorial/Stepper
   9  *
  10  * copyleft 2007 by zea
  11  * <http://randomlab.net>
  12  * <mailto:zea@randomlab.net>
  13  *
  14  */
  15  
  16 
  17 #include <Stepper.h> //llama la libreria Stepper
  18  
  19 int llega = 0; 
  20 int giro = 1;      //guarda la direccion de giro
  21 int velocidad = 2;  //velocidad del motor
  22 Stepper myStepper;  //crea una instancia de la libreria
  23 
  24 
  25 void setup() {
  26  myStepper.attach(8,10,11,9);  //guarda los pines del stepper
  27  Serial.begin (9600);   //prepara la comunicacion serial
  28 }
  29 
  30 void loop() {
  31   
  32   if (Serial.available() > 0) {
  33     giro = Serial.read();
  34     
  35   }
  36   
  37   
  38   
  39  myStepper.speed = velocidad;  //velocidad del motor 
  40  myStepper.direction = giro; //direccion del giro
  41 Serial.println (giro);  
  42  myStepper.moveMotor  (1); //mueve el motor un paso
  43 
  44 
  45 }
  46 
  47 

p5:

   1 /* CONTROLA CAMARA
   2  * ---------------
   3  *
   4  * Controla motor paso a paso, para robotizar una webcam
   5  * para el BereBere
   6  * http://berebere.randomlab.net
   7  *
   8  * copyleft 2007 by zea
   9  * <http://randomlab.net>
  10  * <mailto:zea@randomlab.net>
  11  *
  12  */
  13  
  14 
  15 import processing.serial.*; //importa la libreria serial
  16 
  17 Serial puerto; //el puerto serial
  18 int direccion;
  19 
  20 void setup(){
  21 println(Serial.list()); //imprime la lista de puertos disponibles
  22 puerto = new Serial(this, Serial.list()[0], 9600); //se conecta al dispositivo 0 de la lista
  23 }
  24 
  25 void draw(){
  26 
  27 }
  28 
  29 void mousePressed() {
  30   direccion = int (random (2));
  31   println (direccion);
  32 puerto.write(direccion);
  33 }
  34 

V 0.1

Controla el motor una cantidad de pasos determinada desde processing. Para la interfaz de P5 utilizo ControlP5 una excelente librería de Andreas Sojamo.

arduino:

   1 /* CONTROLA CAMARA
   2  * ---------------
   3  *
   4  * Controla motor paso a paso, para robotizar una webcam
   5  * para el BereBere
   6  * http://berebere.randomlab.net
   7  * Utiliza la libreria Stepper de Tom Igoe
   8  * http://www.arduino.cc/en/Tutorial/Stepper
   9  *
  10  * copyleft 2007 by zea
  11  * <http://randomlab.net>
  12  * <mailto:zea@randomlab.net>
  13  *
  14  */
  15 
  16 
  17 #include <Stepper.h> //llama la libreria Stepper
  18 
  19 int pasos = 0; 
  20 boolean pas = true;
  21 int giro = 1;      //guarda la direccion de giro
  22 int velocidad = 2;  //velocidad del motor
  23 Stepper myStepper;  //crea una instancia de la libreria
  24 
  25 void mueve(){
  26   if (Serial.available() > 0) {
  27     giro = Serial.read();
  28   }  
  29 
  30   myStepper.speed = velocidad;  //velocidad del motor 
  31   myStepper.direction = giro; //direccion del giro
  32 
  33     if (Serial.available()  > 0 ){
  34     pasos = Serial.read();
  35     if (pasos > 10){
  36       myStepper.moveMotor  (pasos); //mueve el motor los pasos enviadospor serial
  37     }
  38   }
  39 }
  40 
  41 void setup() {
  42   myStepper.attach(8,10,11,9);  //guarda los pines del stepper
  43   Serial.begin (9600);   //prepara la comunicacion serial
  44 }
  45 
  46 void loop() {
  47   mueve();
  48 }
  49 

p5:

   1 /* CONTROLA CAMARA
   2  * ---------------
   3  *
   4  * Controla motor paso a paso, para robotizar una webcam
   5  * para el BereBere
   6  * http://berebere.randomlab.net
   7  *
   8  * copyleft 2007 by zea
   9  * <http://randomlab.net>
  10  * <mailto:zea@randomlab.net>
  11  *
  12  */
  13 
  14 
  15 import processing.serial.*; //importa la libreria serial
  16 import controlP5.*;   //importa la libreria controlP5
  17 
  18 Serial puerto; //el puerto serial
  19 int direccion;
  20 
  21 //variables para el gui
  22 int Color = color(0,0,0);
  23 int botonDer = 1;
  24 int botonIzq = 1;
  25 int slider = 11;
  26 ControlP5 controlP5;
  27 
  28 void setup(){
  29   //dibuja el gui
  30   size(400,400);
  31   controlP5 = new ControlP5(this);
  32   controlP5.addButton("Derecha",1,100,160,80,20);
  33   controlP5.addButton("Izquierda",0,100,190,80,20);
  34   controlP5.addSlider("Cuanto",11,199,100,200,180,100,10);
  35 
  36   println(Serial.list()); //imprime la lista de puertos disponibles
  37   puerto = new Serial(this, Serial.list()[0], 9600); //se conecta al dispositivo 0 de la lista
  38 }
  39 
  40 void draw(){
  41   background(Color);
  42 
  43 }
  44 
  45 
  46 void Derecha(int Valor) {
  47   botonDer = Valor;
  48   puerto.write(Valor);
  49   println("Derecha"+ Valor);
  50 
  51 }
  52 
  53 void Izquierda(int Valor2){
  54   botonIzq = Valor2;
  55   puerto.write(Valor2);
  56   println("Izquierda" + Valor2);
  57 }
  58 
  59 void Cuanto(int pasos){
  60   slider = pasos;
  61   puerto.write(pasos);
  62   println("mueve_" + pasos + "_pasos");
  63 }
  64 

Toma Foto

resumen: toma una foto cuando se presiona un boton

La idea es la siguiente: la imagen de la webcam esta siendo recibida en PD que esta esperando un mensaje vía OSC para guardar una foto en /tmp. Este mensaje es procesado y enviado por P5 quien recibe mensajes por el puerto serial enviados por Arduino quien a su vez esta leyendo el estado de un boton.

Arduino:

   1 /* Lee Boton Para Tomar Foto en PD
   2  * ---------------
   3  *
   4  * Lee un boton en un puerto digital
   5  * manda la info a P5 quien envia un 
   6  * mensaje a PD via OSC para tomar una
   7  * foto.
   8  *
   9  * copyLeft 2007 by zea
  10  * <http://randomlab.net>
  11  * <mailto:zea@randomlab.net>
  12  *
  13  */
  14 
  15 //variables para guardar el pin y
  16 //el estado del boton 
  17 int boton = 8; //pin del boton
  18 int botonVal = 0;
  19 
  20 int TomaFoto=100;
  21 
  22 void setup(void) {
  23   pinMode(boton, INPUT);    //Declara el pin como entrada   
  24   Serial.begin(9600);  
  25 }
  26 
  27 void LeeBoton(){
  28   botonVal = digitalRead(boton);  //lee el boton y guarda su estado
  29 
  30   //Si el boton esta presionado envia el mensaje
  31   if (botonVal == HIGH){
  32     Serial.println(TomaFoto);
  33   } 
  34 }
  35 
  36 void loop(void) {
  37   LeeBoton();
  38 }

P5:

   1 /**
   2  * Lee el serial buscando un 100
   3  * y envia mensaje por OSC
   4  * para guardar una foto en PD
   5  * Gabriel Zea zea@randomlab.net
   6  * Usa la libreria:
   7  * oscP5 website at http://www.sojamo.de/oscP5
   8  */
   9 
  10 //importa librerias
  11 
  12 import oscP5.*; 
  13 import netP5.*;
  14 import processing.serial.*; 
  15 
  16 //variables OSC
  17 OscP5 oscP5; 
  18 NetAddress DireccionIP; //Direccion IP de envio
  19 int puerto = 1958; //puerto de conexion
  20 
  21 //variables serial
  22 Serial puertoSerial; //el puerto serial
  23 int llegaSerial;
  24 
  25 void setup() {
  26   oscP5 = new OscP5(this,puerto); //inicia oscP5 para recibir mensajes en el puerto 1958
  27   DireccionIP = new NetAddress("127.0.0.1",1958); //Direccion y puerto de envio
  28 
  29   println(Serial.list()); //imprime la lista de puertos disponibles
  30   puertoSerial = new Serial(this, Serial.list()[0], 9600); //se conecta al dispositivo 0 de la lista
  31 }
  32 
  33 
  34 void draw() {
  35   background(0);  
  36 
  37   while (puertoSerial.available() > 0) {
  38     llegaSerial = puertoSerial.read();
  39   }
  40 
  41   if (llegaSerial == 100) {
  42     enviaOSC();
  43   }
  44 
  45 }
  46 
  47 void enviaOSC() {
  48   OscMessage mensaje = new OscMessage("/foto"); //crea el mensaje con la cabecera foto
  49   mensaje.add("bang"); //agrega "bang" al mensaje
  50   oscP5.send(mensaje, DireccionIP); //envia el mensaje 
  51 
  52 }
  53 
  54 
  55 

PD:

BereBereOSC.pd

Bere.Bere: BereBere/WebCam (last edited 2007-04-06 04:10:57 by zea)