2/29/2008

sensor and time

I used pot, IR detector/emitter and photo resister to do the sensor and time experiment.

here is the circuit:




here is the graph:
the yellow represents: photo cell value
the red represents: IR signal
the blue represents: pot value





here is the codes:

arduino:

int an1, an2, an3 = 0;

void setup() {
Serial.begin(9600);
}

void loop() {
an1 = analogRead(3);
delay(5);
an2 = analogRead(0);
delay(5);
an3 = analogRead(5);
Serial.print("X");
Serial.println(an1,DEC);
Serial.print("Y");
Serial.println(an2,DEC);
Serial.print("Z");
Serial.println(an3,DEC);
delay(15);
}


processing:

import processing.serial.*;

String buff = "";
int val = 0;
int NEWLINE = 10;
int xPos,yPos,zPos = 0;
int displaySize = 2;
int an1, an2, an3;
//an1 pot; an2 ir;

Serial port;

void setup(){
background(80);
size(800,600);
smooth();

port = new Serial(this, Serial.list()[1], 9600);
}

void draw(){
// new background over old
fill(80,5);
noStroke();
rect(0,0,width,height);

// wipe out a small area in front of the new data
fill(80);
rect(xPos+displaySize,0,50,height);

// check for serial, and process
while (port.available() > 0) {
serialEvent(port.read());
}

}


void serialEvent(int serial) {
print("A"); //header variable, so we know which sensor value is which
println(an1); //send as a ascii encoded number - we'll turn it back into a number at the other end
//Serial.print(10, BYTE); //terminating character

print("B"); //header variable, so we know which sensor value is which
println(an2); //send as a ascii encoded number - we'll turn it back into a number at the other end
//Serial.print(10, BYTE); //terminating character

print("C"); //header variable, so we know which sensor value is which
println(an3); //send as a ascii encoded number - we'll turn it back into a number at the other end

if(serial != '\n') {
buff += char(serial);
}
else {
int curX = buff.indexOf("X");
int curY = buff.indexOf("Y");
int curZ = buff.indexOf("Z");

if(curX >=0){
String val = buff.substring(curX+1);
an1 = Integer.parseInt(val.trim());

xPos++;
if(xPos > width) xPos = 0;

sensorTic1(xPos,an1/2);
}
if(curY >=0){
String val = buff.substring(curY+1);
an2 = Integer.parseInt(val.trim());

yPos++;
if(yPos > width) yPos = 0;

sensorTic2(yPos,an2);
}
if(curZ >=0){
String val = buff.substring(curZ+1);
an3 = Integer.parseInt(val.trim());

zPos++;
if(zPos > width) zPos = 0;

sensorTic3(zPos,an3);
}

// Clear the value of "buff"
buff = "";
}
}

void sensorTic1(int x, int y){
stroke(0,0,255);
fill(0,0,255);
ellipse(x,y,displaySize*3,displaySize*3);
}

void sensorTic2(int x, int y){
stroke(255,0,0);
fill(255,0,0);
ellipse(x,y,displaySize,displaySize);
}

void sensorTic3(int x, int y){
stroke(255,255,0);
fill(255,255,0);
ellipse(x,y,displaySize*5,displaySize*5);
}

No comments: