First, the schematics:
Here's the commented code for the Arduino:
int pingPin = 7; int buzzPin = 10; int btnPin = 1; int val; void setup() { pinMode(buzzPin, OUTPUT); //set speaker pin to output pinMode(btnPin, INPUT); //set pushbutton pin to input } int getPing() { //send a 10us pulse to wake up the sonar pinMode(pingPin, OUTPUT); digitalWrite(pingPin, HIGH); delayMicroseconds(10); digitalWrite(pingPin, LOW); //get the raw value from the sonar, corresponding to the //actual time of travel of the ultrasound waves pinMode(pingPin, INPUT); return pulseIn(pingPin, HIGH); //return this value } void loop() { if (digitalRead(btnPin) == HIGH) //only play when the button is pressed { val = getPing() / 5; //you can tune the pitch by dividing by a different number //generate the pulse digitalWrite(buzzPin, HIGH); delayMicroseconds(val); digitalWrite(buzzPin, LOW); delayMicroseconds(val); } }
And that's about it! Now you should start to learn how to play it... Kinda hard at the beginning, but that's where the fun begins!
Here are some videos of me playing (jingle bells and tetris). It's also kinda noisy... maybe a better sonar would be better (if you have a different sonar, and manage to make a better 'thereduino', I want to see it!!!). Enjoy (or at least try to :p).
If I improve my skills, I'll post new videos... But I also want to see YOU playing YOUR Arduino Theremin! Feel free to send me an email or write a comment.