November 24, 2007
Reading for November 27th, are now posted. Enjoy!

October 2, 2007
To upload your thoughtless acts, create a new assignment page like any other lab. You'll see "Thoughtless Acts" listed as one of the assignment options.

May 24, 2008
This site has been archived and is no longer editable. Stay tuned for the next version, coming in the fall!

Lab 5

Project Members: 
Igor P

The Singing Pen


The idea is a pen that sings melodiously when it's uncapped. There is a photosensor embedded next to the tip and when the light drops below a specific value, the piezo speaker, taped onto the other end of the pen, is activated. The circuit is quite simple and can be used for a number of 'light activated singing devices' such as a box (sings when opened), etc. The main concition is that when closed the light sensor will be in the dark. The code is the 'sing melody' code except with the light sensor reading stuck in there. Inside the look, the value of the light sensor is checked. If above a specific point, the music is played.

The pen I chose is a a Bic - it's easily dissasembled, cheap, and has a black cap. One catch is that the cap has a few air slits in it (this is why a black marker with a solid cap would do better). I decided to block the air slits by stuffing paper inside the cap.

The circuit, shown below, is quite simple and works - the piezo sings when light sensor is not covered. However, as noted above, the final dissassebly required longer wired and will be done in the next few days.





After soldering longer wires to the light sensor the thing was put together. It was a moderate success. The pen cap, despite having a few slits, cut off enough light to have a resonable lower boundary cutt off in the code. One snag was that the light sensor was big compared to the width of the pen - therefore the actualy ink stem had to be completely removed. So I guess it wasn't a pen anymore but a music (noise) switch. 



Also, I didn't bother to tape the speaker onto the pen - you can easity imagine that done. 


Light sensor, piezo (as speaker), pot (for volume control), red/red/brown/gold resistor (for light sensor), Bic pen.


int ledPin = 13;
int speakerOut = 7;
byte names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'};
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
byte melody[] = "2d2a1f2c2d2a2d2c2f2d2a2c2d2a1f2c2d2a2a2g2p8p8p8p";
// count length: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
// 10 20 30
int count = 0;
int count2 = 0;
int count3 = 0;
int MAX_COUNT = 24;
int statePin = LOW;

int potPin = 0; // light sensor pin
int potVal = 0; // light sensor output

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(speakerOut, OUTPUT);

void loop() {

potVal = analogRead(potPin); // read value from the sensor
//potVal = potVal*2; // process the value a little
Serial.print("pot val = ");

if (potVal > 60) {

digitalWrite(speakerOut, LOW);
for (count = 0; count < MAX_COUNT; count++) {
statePin = !statePin;
digitalWrite(ledPin, statePin);
for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) {
for (count2=0;count2<8;count2++) {
if (names[count2] == melody[count*2 + 1]) {
digitalWrite(speakerOut, LOW);
if (melody[count*2 + 1] == 'p') {
// make a pause of a certain size
digitalWrite(speakerOut, 0);




Powered by Drupal - Design by Artinet