Here’s my implementation of a cheap whistle sensor as input device for a microcontroller.
I build it a little time ago, because i have a light-switch in my room and it switches by pulling a cord. For me the whole project was to switch the light when I whistle. The implementation of the whole concept was quite clear, I would use a servo to pull the cord, a microcontroller to drive the servo and a “sensor” to detect the whistle. To make it easy and cheap I find it to complicated to make the microcontroller check the output of a microphone and implement the signal so i used a really handy and cheap sensor.
The sensor is really cheap, like 1,- euro, it’s an so called “keychain finder” that is activated by the user that give’s a whistle. The sensor in it notice the whistle and give’s back a beeping sound and a flashing LED. To detect if the keychain sensor detects something I used the LED that gets a pulse signal from the microcontroller that is inside the keychain sensor. I removed the led and used the + where the LED supposed to be, to use it as an digital input to my microcontroller. For this project I used a AVR ATtiny 2313 to control a servo and read the output of the sensor. I programmed the microcontroller in Bascom AVR, so I could not use a ATtiny 13 because it can not be programmed to drive a servo, otherwise I could have used the Analog input from the microcontroller, and connect a microfone to it, but I used another sensor so I overcome that problem.
When the sensor detects the whistle sound, it generates a pulse signal which get’s to the input of the microcontroller,the pulse takes about a second or 2 which is not usefull, because the microcontoller should wait the whole time and can not detect read the input. Also the keychain sensor makes noise and you don’t want that, at least I don’t. So i used a transitor to control the powerline of the keychain sensor, and power the sensor off if it has given the microcontroller an signal. About 20ms it put’s the sensor back on. The keychain sensor is powered by the same battery-pack of the microcontroller, there is a LED between the battery-pack of 5 volts and the sensor (that works on 3 volts) to drop the voltage a bit. Here’s the schematic of the whole design:
And here some other pictures and a little video of the working design:
And the Bascom AVR sourcecode:
$regfile = "Attiny2313.dat"
$crystal = 4000000
$baud = 9600
Config Portb = &B11111011 : Portb = 00000000
Config Portd = &B11000000 : Portb = 00000000
Config Servos = 1 , Servo1 = Portb.0 , Reload = 1
Dim Pinb.2 As Bit
Servo(1) = 36
‘9 is right
’38-9=29/2 = 14,5 + 9 = 23 or 24
’38 is left
Portb.6 = 1
If Pinb.2 = 1 Then
Portb.6 = 0
Servo(1) = 20
Portb.6 = 1
Servo(1) = 38