This week, we were set with the task of building an output device; class notes are here. I wanted to start tackling elements of my final project of building an EEG. Since the EEG will involve inputting voltage from the leads coming from a user's head and the output will be sounds or graphs based on the signal, I played with a few designs. One idea was to combine the speaker board from this week and the microphone for next week's input assignment. The other idea was to figure out how I would visualize my signal in my EEG project. For the first idea - a combined speaker and microphone board - I used the speaker board: http://academy.cba.mit.edu/classes/output_devices/speaker/hello.speaker.45.png and the microphone board: http://academy.cba.mit.edu/classes/input_devices/mic/hello.mic.45.png. In order to optimally combine the input and output week, I decided to create an optimized board that pulled the relevant prats of the speaker board and the microphone. First, I modified the stereo output design by only including input power and the 5 volt regulator (preventing voltage from going higher than 5v), but deleting the t45 and the isp. I used pb0 or pb1, and I decided to use the hardware to change the pwm frequency. Ultimately, though, I decided not to go this route. A few reasons: the number of components involved in this design was higher than I want for my final project (I'm aiming for under 15). So, I decided to start the spiral design cycle for my EEG project. Ultimately, I realized that I wanted to use the simple .
Since I'll use Audacity and Physics Oscilloscope for the first part of my spiral development in the final project, but they obfuscate how they do the visualization, I found a description for how to visualize a signal coming in from Chipstein's site an Arduino based EEG set up and spent a lot of time understanding it.
// SET FOR 5 SECONDS EEG, 180 Hz. A LONGER DISPLAY MAY RUN SLOW,
// DEPENDING ON THE SPEED OF YOUR CPU.
import processing.serial.*;
Serial port; // Create object from Serial class
int val; // Data received from the serial port
int cnt;
int hht;
int wm1;
int[] values;
void setup()
{
size(900, 400); //currently set to 5 sec
// Open the port that the board is connected to and use the same speed (19200 bps)
port = new Serial(this, Serial.list()[0], 19200);
values = new int[width];
hht = 750; // Sets display DC offset; must adjust if gain is changed#
wm1= width-1;
cnt = 1;
frameRate(180); //read/draw 180 samples/sec
for (int s=0;s
Another area for comparison in trying to understand the broader question of oscilloscopes is in Processing. It is at http://accrochages.drone.ws/sites/accrochages.drone.ws/files/Oscilloscope.pde: That code is under a GNU Public License. It expects port 0 to be the origin of the Arduino signal.
import processing.serial.*;
Serial port; // Create object from Serial class
int val; // Data received from the serial port
int[] values;
void setup()
{
size(640, 480);
// Open the port that the board is connected to and use the same speed (9600 bps)
port = new Serial(this, Serial.list()[0], 9600);
values = new int[width];
smooth();
}
int getY(int val) {
return (int)(val / 1023.0f * height) - 1;
}
void draw()
{
while (port.available() >= 3) {
if (port.read() == 0xff) {
val = (port.read() << 8) | (port.read());
}
}
for (int i=0; i