arduino

 

datoscelda

 

Ejemplo de Aplicación sencilla en donde integraremos Arduino y Processing

Processing es un lenguaje basado en java muy interesante y que va bastante de la mano con arduino, en esta entrada mostraremos una pequeña aplicación en donde controlaremos algunas funciones de Arduino desde nuestro PC por medio de processing asi mismo la creacion de ficheros y manejo de entradas desde Arduino para ser procesadas con processing.


Componentes

2 Resistencias 100 ohms

2 Leds (rojo y verde)
1 Arduino UNO
1 Celda Solar Pequeña

procesing bb

 

La celda que manejamos en este caso entrega máximo 3 V y 100mA

IMG 1662

Posteriormente ubicaremos los componentes de la siguente manera

 

 

 

 

pinespro 

 

El siguiente paso es programar El micro, el programa seria el siguiente:

 

int i=0;
int p=13;
 
int led=11;
int red=10;
boolean status=LOW;
void setup(){
   
  // Activamos el puerto  serial
 Serial.begin(9600);
pinMode(p,OUTPUT);
pinMode(led,OUTPUT);
pinMode(red,OUTPUT);
   
   
   
}
 
void loop(){
 
 
//digitalWrite(p,HIGH);  
  
  i=analogRead(2)/4;
 //Serial.print(i,DEC);
 Serial.write(i);
 //status=!status;
//Serial.print("\t");
//digitalWrite(13,status);
delay(100);
   if(Serial.available()>0){// verifica si el puerto serial esta disponible
     
   byte tito=Serial.read();// obtiene el valor en ese momento desde la interfaz de processing
     
    if(tito==89){ //89 es el valor ASCII de la letra Y
      
    status=!status;
  
  }else if(tito==66){// 66 es el valor ASCII de la letra B
     
    digitalWrite(led,HIGH); 
     
  }else if(tito==65){// 65 es el valor ASCII de la letra A
     
    digitalWrite(led,LOW);
  }
     
  digitalWrite(red,status);
}
 
  //Serial.print("");
//  digitalWrite(p,LOW);
  //delay(500);
   
   
}
 

 

El código en processing sería el siguiente: 

 

import processing.serial.*;
PrintWriter data;
Serial myPort;  
int val;   
//int eje=0;
String label="Celda Solar: ";
String tagred="OFF";
String taggreen="OFF";
boolean OnRect=false;
boolean status=false;
long delay=0;
int posx,posy;
PImage green,red;
void setup() 
{
  size(800, 400);
   green = loadImage("verde.png");
   red= loadImage("rojo.png");
 String portName = Serial.list()[0];
 println(portName);
  myPort = new Serial(this, portName, 9600);
  data=createWriter("datos.txt");
  delay=millis();
  //println(delay);
}
 
void draw()
{
   
background(255,255,255);
  fill(0,0,0);
  PFont f = loadFont("SourceCodePro-Bold-48.vlw");
  textFont(f,20);
 text(label,400,200);
 text("Para Salir y guardar en archivo.txt presionar tecla 'T'",50,350);
 fill(0,255,0);
 text("ON->'B'",50,230);
 text("OFF->'A'",45,300);
  text(taggreen,267,250);
fill(0,0,0);
text(tagred,260,125);
  
fill(255,255,255);
noStroke();
rect(150, 70, 100,100, 7);
image(red,150,70,100,100);
image(green,150,200,100,100);
  
if( mouseX<100+150 && mouseX>150 && mouseY>70 && mouseY<100+70){
 
  //text("LED ROJO",153,122);
  
  //textFont(f,10);
  //text(mouseX+" "+mouseY,mouseX,mouseY);
  OnRect=true;
  
}else{
   
 OnRect=false; 
   
}
 
 // fill(0,0,0);
  if ( myPort.available() > 0) {  
 
    val = myPort.read(); 
 
    
 
  }
 
       colorElipse(val);
  fill(0,0,0);
textFont(f,20);
 text(val,550,200);             
//println(val);
//noSmooth();
//point(eje,val);
//text(val,520,200);
//if(status==false){
if(millis()-delay>4000){
 
data.print(val+" ");  
data.print(month( )+"/");
data.print(day( )+"  ");
data.print(hour( )+":");
data.print(minute( )+":");
data.println(second( ));
data.println("");
println(delay);
delay=millis();
}
 
//eje++;
}
 
void keyPressed(){
   
 if(key=='T' || key=='t'){
    
   data.flush();
   data.close();
   exit();
    
 }
 else if(key=='A' || key=='a'){
    myPort.write("A");
 taggreen="OFF";   
  }
 else if(key=='B' || key=='b'){
   myPort.write("B");
 taggreen="ON";
 }
   
}
 
void mousePressed(){
   
 if(OnRect==true){
  status=!status;
  myPort.write("Y");
   
if(status==true){
 tagred="ON"; 
}else{
   
  tagred="OFF";
   
}
 
 }
   
}
 
void colorElipse(int val){
  stroke(0);
   fill(val*255/70,val*255/70,0);
  ellipse(500,110,100,100);
  
   
}
 

No olvidar que primero se debe subir el programa de Arduino, despues si se ejecuta el codigo de processing.

Finalmente hemos terminado, a continuacion mostraremos un video en donde controlamos unos leds desde la interfaz que hicimos y ademas recibimos un valor relacionado con la intensidad de luz del dia y que luego es reflejado en el color de un circulo, además este programa genera un archivo con el que se pueden almacenar fechas y valores de voltaje en función de la intensidad de la luz (no calibradas).

 

archivo

 

Y bueno con esos datos podemos obtener informacion que puede ser útil por ejemplo en este caso obtenemos una especie de caracterización de la celda a lo largo de un dia dependiendo de que tanto sol haga:

caract