investigación de katya mora. contacto: aylukas@yahoo.com.mx

13 jul 2010

Arduino+Tubérculo+Tensión

A través del arduino se conecta la papa para medir la tensión que ésta genera.
Se conecta de la siguiente manera:
El positivo de la papa ,que viene dado por le alambre de cobre, entra a un pin analógico del arduino. en este caso pin 0.
El negativo es conectado el GND del arduino.
Se recomienda poner una resistencia alta (22k, como mínimo) entre el cable que conectará a la papa y el GND, para que las entradas no estén flotantes y al ser desconetados de la papa y el ruido que continuaría entrando no dañe el arduino.



Programa en arduino.

int analogPin = 0;
int volt;

void setup() {

Serial.begin(9600);

}

void loop() {

volt = map(analogRead(analogPin),0,1023,0,255);
Serial.println(volt,DEC);

delay(1000);

}

Con esto nuestro arduino recibirá la tensión enviada por la papa y la convertirá en algún número entre 0 y 1024, dependiendo de la tensión. en este caso al ser muy baja nos da un valor que oscila entre los 34 y 45.

En processing busqué emplear el valor recibido para modificar el contraste de una imagen, de acuerdo a la oscilación del voltaje en la papa. éste con el paso de los días va disminuyendo notablemente.

import processing.serial.*;

Serial port;

PImage img1;
PImage img2;
color c,ct;
float r,g,b;
float rt,gt,bt;
float contraste;

int xPos = 1;

void setup() {

size(500,500);

img1 = loadImage("04.jpg");
img2 = createImage(imgin.width,imgin.height,RGB);

println(Serial.list());
port = new Serial(this, Serial.list()[0], 9600);
port.bufferUntil('\n');
}

void draw() {
}

void transformar() {

for (int j=0;j
for (int i=0;i

c = imgin.get(i,j);
r = red(c);
g = green(c);
b = blue(c);

rt = contraste*r/2;
gt = contraste*g/2;
bt = contraste*b/2;

ct = color(rt,gt,bt);
imgout.set(i,j,ct);
}
}
}

void serialEvent (Serial myPort) {

String inString = myPort.readStringUntil('\n');

if (inString != null) {

inString = trim(inString);

float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);
contraste = map(inByte, 0, 1023, 0, height);

transformar();
image(img2,0,0,width,height);

// dibuja una linea sobre la imagen, representativa de la tensión recibida.

stroke(12,34,255);
line(xPos, height, xPos, height - inByte);

if (xPos >= width) {
xPos = 0;
background(0);
}
else {

xPos++;
}
}
}


No hay comentarios: