This week for HTM(A)A, our task was to mill and program a board with a sensor, and then test it!.
I decided to mill 3 of the options..light, step response, and sound. Milling went fine, I found that the right side of the modela bed cuts better...more evenly!
Later on I decided to stick with the photo-resistor (light), and wanted to see if I could design some quick software sketches that could become info-informed sweater patterns for my final project. Stuffing went fine.
I was super excited to try my brand new FTDI cable that had come last week from ebay. Unfortunately the pins on the back wouldn't budge, and thus, my $4 went to waste. But the resemblance to the genuine is uncanny, no?
Programming went good, I followed kelly's excellent instructions on getting serial python set up on the mac. I will reiterate.
To setup Pyserial:
1. Open Terminal..
2. Type: sudo easy_install pip.
3. Type: sudo pip install pyserial.
.
To configure the USB port:
1. Type: ls /dev/tty.usb*\.
2. Hit ''Enter'' and you should get your port's name. .
3. If you don't get a port name you need to install the VCP driver from here..
.
.
To run the .py file:
1. Type: python filename.py /dev/tty.usbserial
Now that I figured out how to run Neil's python gui...I wanted to take a crack at reading from the values myself..being a little familiar with processing, I used the Serial Library (very similar to arduino), to connect and read the values..I ended up making a few visual patterns..
I first saw that the serial would read 1,2,3,4,[light value],1,2,3,4..etc...so I parsed out the light value and then later on found a sensor filter (software based), which helped smoothen the light readings slightly.
I did three examples..a simple dimmer script, a growing grid of elements, and then vertical bars. All of these use the light value read from the sensor (0-255) to calculate the appropriate greyscale.
After the basic dimmer and illuminating of the background, I wanted to get some dynamic patterns..this is an adjustable grid of grayscale pixels..each one representing the sensors reading at that given time. I used a led light from a cellphone and my hand to exaggerate.

This is a bar graph visual that also is constantly superimposed on.
The Code is below: (Just delete the '/*' and '\*' around the example you want to test).
import processing.serial.*;
Serial myPort; // The serial port
float k = 0.25; //alpha level for lowpass function
float cleanSignal; // global veriable for lowpass function
void setup() {
size (640,480);
// List all the available serial ports
cleanSignal = 0; //initialize global value for lowpass function
println(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[0], 9600);
}
int x = 5; //this is how many divisions in x axis
int y = 5;//this is how many divisions in y axis
int tempx = 0;
int const_ = 20; //this is vertical bar thickness
int tempy = 0;
void draw() {
while (myPort.available() > 0) {
int inByte = checkIdle(myPort.read());
if (inByte !=0){
println(lowpass(inByte,k));
/*
//background test
background(255-lowpass(inByte,k));
//<--end background test
*/
/*
//<--grid test
fill(255-lowpass(inByte,k));
noStroke();
println("tempx:" + tempx);
println("tempy:" + tempy);
rect(tempx*(width/x),tempy*(height/y),width/x, height/y);
tempx++;
if (tempx>x-1){
tempy++;
}
tempx = tempx%x;
tempy = tempy%y;
//<--end grid test
/*
//bar test
fill(255-lowpass(inByte,k));
stroke(255);
println("tempx:" + tempx);
println("tempy:" + tempy);
println(lowpass(inByte,k));
rect(tempx,height,const_, (-height/255)+(-lowpass(inByte,k)));
tempx= tempx+const_;
tempx = tempx%(width);
//<--end bar test
*/
}
}
}
int checkIdle(int val){
if (val==1 || val==2 || val==3 || val==4){
return 0;
}
else{
return val;
}
}
float lowpass(float signal, float k)
{ //is k set globally? is cleansignal initialized globally and declared in setup?
float oldSignal = cleanSignal;
cleanSignal = oldSignal + (k * (signal - oldSignal));
return cleanSignal;
}