Pages: [1]   Go Down
Author Topic: arduino processing.webcam servo  (Read 658 times)
0 Members and 1 Guest are viewing this topic.
Argentina-sgo
Offline Offline
Full Member
***
Karma: 2
Posts: 106
Novato, en electrónica desde el 2012.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hola gente. mucho tiempo sin entrar.
Aqui quería compartir con uds. mi primer programa arduino-processing. Es un intento de camara de vigilancia  smiley-roll. con una webcam  smiley-razz. capturada por processing, y en la misma ventana se puede controlar la dirección de la webcam, esto esta dado por un servo, controlado por ardu y processing.
He logrado esto combinando el ejemplo para capturar webcam de la librería de processing, mas un viejo codigo de ejemplo de arduino, sobre posición de servo desde el serial. Básicamente lo modifique a 16 posiciones en vez de 9 que eran originalmente. Espero les guste. Como novato estoy feliz por encontrarme con processing y su amistad con arduino. Mas adelante le agregare detalles a la interfaz. Intentare probar unos ejemplos de detectores de movimiento que logran con processing. etc.

el video:
http://youtu.be/3ukx3atoVhg

comparto el code de processing.

Code:
import processing.video.*;

import processing.serial.*;
Serial port;
int s=0;
int e=1;
int step = 10;


Capture cam;


void setup() {
  size(640, 480);

println(Serial.list());
port = new Serial(this, Serial.list()[1], 9600);
frameRate(10);


  String[] cameras = Capture.list();
 
  if (cameras.length == 0) {
    println("There are no cameras available for capture.");
    exit();
  } else {
    println("Available cameras:");
    for (int i = 0; i < cameras.length; i++) {
      println(cameras[i]);
    }
   
   
    cam = new Capture(this, cameras[2]);
    cam.start();     
  }     
}

void draw() {
  if (cam.available() == true) {
    cam.read();
  }
  image(cam, 0, 0);




fill(255);
rect(10,210,50,30);
rect(580,210,50,30);

fill(0);
triangle(30,215,15,225,30,235);
triangle(610,215,610,235,625,225);

}

void mousePressed(){
  println("mouseX: "+mouseX +" mouseY: "+mouseY);

if(mouseX<=60&&mouseX>=11&&mouseY>=211&&mouseY<=239){

if (s>=16) s=16;
else s=(s+e);
port.write(s);
println(s);

}

if(mouseX<=630&&mouseX>=581&&mouseY>=211&&mouseY<=239){




if(s<=0) s=0;
else s=(s-e);
port.write(s);
println(s);


}


}

codigo arduino
Code:
#include <Servo.h> // lamar a la libreria del servomotor

Servo myservo;  // crear el objeto servo para controlar al servomotor

int val;    // variable que almacenara los grados de movimiento del servomotor

void setup()
{
  myservo.attach(9);  // atribuye el pin 9 al servomotor para transferir los datos
  Serial.begin(9600); // iniciar comunicacion serial
}

void loop()
{
  if (Serial.available() > 0) { //lee si el monitor serial recibe datos, si es asi entra al ciclo if
    int inByte = Serial.read(); //asigna el contenido del monitor serial a la variable.

    switch (inByte) {  //ciclos switch para determinar el valor que obtendra la variable val, segun sea el contenido de la variable inByte
      case 0:  //el contenido delmonitor seral es recibido como codigo ASCII, donde cero  es igual a 48 en codigo ASCII
        val=10;  //en caso de ser cero la variable val obtendra el valor de cero
        break;  //salir del ciclo
      case 1: //la compracion tambien se puede hacer usando el caracter encerrado entre comillas simples
        val=20; //si el caso es 1 la variable val tendra el valor de 20
        break;  //salir del ciclo
      case 2: //...
        val=30;
        break;
      case 3:
        val=40;
        break;
      case 4:
        val=50;
        break;
      case 5:
        val=60;
        break;
      case 6:
        val=70;
        break;
      case 7:
        val=80;
        break;
      case 8:
        val=90;
        break;
      case 9:
        val=100;
        break;
        case 10:
        val=110;
        break;
        case 11:
        val=120;
        break;
        case 12:
        val=130;
        break;
        case 13:
        val=140;
        break;
        case 14:
        val=150;
        break;
        case 15:
        val=160;
        break;
        case 16:
        val=170;
        break;
       
       
       
       
       
       
    }
       
  myservo.write(val);  // establece la posición del servo según el valor de "val"
  delay(30); 
 
  }

             // espera a que el servo llegue a la posicion indicada antes de recibir otra orden
}

Logged

Pages: [1]   Go Up
Jump to: