Primer Programa ARDUINO - PROCESSING

Muy feliz de haber logrado el primer objetivo de encender y apagar un led al mismo tiempo que un pequeño motor DC fuera del entorno de desarrollo de Arduino. Totalmente desarrollado en Processing!

Mi experiencia se basa en el uso de la libreria StandardFirmata (incluida en la lista de ejemplos Firmata del IDE Arduino)

Se debe tener correctamente instalada la librería RXTX dentro de processing/java/bin, tanto rxtxParallel.dll como rxtxSerial.dll

Se debe cargar StandarFirmata a la placa Arduino.

Se debe tener la librería Arduino para processing dentro de la carpeta de Sketchs personales. Default (Documentos/processing/libraries/Arduino/) y se debe verificar que "processing.serial" se encuentre disponible entre las librerias Serial I/O.

Ya una vez completados todos los requisitos se puede establecer una conexión Processing - Arduino sin problemas y se puede experimentar con toda la libertad y potencia de este impresionante entorno de programación.

La libertad es total puesto que se puede crear todo a merced, desde programas muy sencillos hasta programas de control en 3D.

Mi primer programa cumple exitosamente con el encendido de un led y un motor dc debidamente conectado a la placa arduino pin13 para el Led, Pin 9 para el motor.

Como sabrán para el led conectado al pin 13 no es necesario el uso de la resistencia de 220 ohmios de protección, pero para la conexión del motor DC si se hace necesario utilizar un transistor 2n3904 o 2n2222 haciendo el uso de una resistencia de 1k y un diodo 1n4001 de protección contra la inducción del motor.

He dejado un pequeño diagrama que hice en VirtualBreadBoard para que se entienda la debida conexión del motor electrico al Arduino.

La interfaz gráfica resultante en Processing para el programa en cuestión es bastante amigable, A pesar de mi poca experiencia y de ser una completa novata en Arduino; El poder de desarrollo no tiene limites y por esa razón he logrado darle vida a mi aplicación programandole un botón interactivo que responda a detectar la presencia del mouse y con la posibilidad de ser movido a cualquier parte de la pantalla...

Aquí unas imágenes de mi programa en ejecución:

Como Arduino IDE es basado el Processing, su interfaz de programación es bastante similar:

Aquí dejo mi código fuente para el que quiera sumergirse en este poderosa plataforma de desarrollo tenga la primera luz de como hacerlo:

import processing.serial.*; 
import cc.arduino.*;

float cx1;
float cy1;
float mx = 0.0;
float my = 0.0;

boolean click = false;
boolean locked = false;
boolean d = true;

int xy = 15;
int cube= -50;
int led1=13;
int engine=9;
int x=0;

Arduino arduino;

PImage imagen;

void setup(){
 size(150, 126);
 PFont font;
 font = loadFont ("LucidaConsole-48.vlw");
 textFont (font, 8);
 cx1 = width/2;
 cy1 = height/2;

 rectMode(RADIUS);  
 // Arduino setup
 arduino = new Arduino(this, Arduino.list()[1], 57600);
 arduino.pinMode(led1, Arduino.OUTPUT);
 arduino.pinMode(engine, Arduino.OUTPUT);
}

void draw() { 
 imagen = loadImage("arduino.jpg");
 background(0);
 image(imagen, 0, 0);
 if (d && cube<width){cube++;}
 else {cube--;}
 if (cube==width){d=!d;}
 if (cube<0){d=true;}
 rect(cube,65,2,2);
 strokeWeight(3);
 stroke(255);
  
 if (mouseX > cx1-xy && mouseX < cx1+xy && mouseY > cy1-xy && mouseY < cy1+xy)
 {click = true; if(!locked) {stroke(255); fill(112,155,255);}} 
 else {stroke(255);fill(0,0,0);click = false;}
 rect(cx1, cy1, xy, xy);
 fill(255);
 text ("NATALY PROCESSING - ARDUINO 2012", 10, 120);
}

void mousePressed(){
 mx = mouseX-cx1; 
 my = mouseY-cy1; 
 if(click) {arduino.digitalWrite(led1,Arduino.HIGH); arduino.digitalWrite(engine,Arduino.HIGH);
 locked = true; stroke(255); fill(166,41,0);}
 else {locked = false;}
}

void mouseDragged(){
 arduino.digitalWrite(led1,Arduino.HIGH); arduino.digitalWrite(engine,Arduino.HIGH);
 if(locked){cx1 = mouseX-mx; cy1 = mouseY-my;}
}

void mouseReleased(){
 arduino.digitalWrite(led1,Arduino.LOW); arduino.digitalWrite(engine,Arduino.LOW);
 locked = false;
}

Me he basado tanto en ejemplos de referencia del propio processing como en esquemas de conexiónes y uso debido de los pines de entrada y salida en la documentación de arduino.cc

Nada de esto hubiese sido posible tampoco, sin la ayuda de diferentes amigos de la comunidad que granito a granito de arena me han podido ayudar con las dudas que he tenido. En agradecimiento, comparto con todos ustedes mi experiencia para devolverle el favor a quien lo necesite.

Nataly López.
Arduino Comunidad Habla Hispana.

Nota: La fuente Lucida Console, y la Imágen de fondo, deben ser ubicadas dentro de una carpeta llamada "data" en el mismo directorio del archivo fuente en desarrollo. Para Agregar la fuente, basta con seleccionarla desde Tools > Create Fonts y automáticamente el directorio "data" con la fuente será incluido en el mismo.

Hola nataly queria hacerte una consulta vi que tubiste problemas al descomprimir archivos descargados, a mi me passa lo mismo i otros companyeros pueden abrir i descargar sin problemas volve a instalar winzip winrar i nada .
Gracias por adelantado

Eso confirma que efectivamente debe de haber un problema con los archivos en los enlaces.

Yo para poder descargar la librería Arduino. hice uso de un link suministrado por Eried.

No se si es lo que necesitas, pero aquí está nuevamente re publicado.

Saludos.

En la parte del Hardware, lo que me parece algo arriesgado es el manejar el motor con la alimentacion directamente del Arduino. Piensa que el motor por si mismo ya puede consumir unos 200 mA o mas depende, y todo el consumo lo haces desde la placa Arduino.
Seria mucho mas aconsejable que el motor se alimente de una fuente externa, no es necesario que sea estabilizada, pero que al menos pueda suministrar los 500 mA sin problemas. Saludos

Tienes mucha razón en eso, por eso he usado diodos para proteger a arduino de la inducción del motor, de igual manera en nuevos proyectos usaré debidamente una fuente de alimentación externa.

hola
se que llego tarde al post.
pero queria decir que esta muy bueno. me ayudo mucho a empezar a entender processing....
gracias por el aporte :smiley:

perdon una sola consulta. en la arduino no hay que cargar ningun codigo?
osea en otros ejemplos vi que se crea una aplicacion en processing y en arduino se carga un codigo para interpretar lo que envie la app.
perdon mi ignorancia... me descoloca processing :stuck_out_tongue: