RadioLocman.com Electronics ru
Advanced Search +
  

11-04-2010

Microcontroller Clapper Switch

Toddy Cangica

Introduction
I always thought the clapper so cool. For those who are lazy like me, turn on or off the bedroom light without getting out of bed, simple clap your hands is amazing. Thinking about it I projected one for me. Several projects of clappers can be found on the Internet, and most of them do not use microcontroller.

I chose to use a micro planning future updates, such as turn on or off the light with 2 claps, the TV with 3 claps, DVD player with 4 and so on. Another update can be a time to turn off the device automatically.

Microcontroller Clapper Switch

Hardware
The hardware is very simple, just a microcontroller Atmel ATmega8, a electret mic, a relay and some discrete components. The microcontroller is the brain of the project, I used a atmega8 because it was the only I had available.

The signal is captured by the mic and amplified by the transistor (BC548), this signal run through a lowpass filter that remove the high frequencies and go to ATmega8 ADC. To keep the circuit simple, only one transistor is used on signal amplification. Two buttons are used to up or down the sensibility of the signal. You can see the complete schematic below. The components on dotted line are optional.

Microcontroller Clapper Switch Schematic
Click to enlarge

The circuit can be powered with 7 ~ 12V and the relay must be for that voltage.

Software
The software was written in C using AVR Studio and WinAVR library. The ADC is read constantly, and the returned value is compared with a variable. This variable can be changed if the user press the button S1 or S2.

So, the user can increase or decrease the intensity of the signal necessary to trigger the circuit. If the value of the ADC is less than the variable, nothing happens, otherwise the timer0 is activated and begins counting. At each timer overflow, a variable called timer is incremented.

The value of variable timer is compared with three constants, burst_time, ready_time and time_out. If the value of the variable is equal to the constant burst_time the value of global variable burst become 1. If the value of timer is equal the constant ready_time the value of variable burst becomes 0 and variable ready becomes 1. If value of timer is equal time_out all the variables become equal to 0.

When another clap is detected, if burst = 1 then the microcontroller clear all variables and start the loop again. If burst = 0 and ready = 1 the output is toggled.

The relay only close when the time between a clap and another is approximately correct, thus reducing the chances of the light turn on or off accidentally.

The flowchart below help understand the software.


Click to enlarge


USART

The USART is used to debug the code and help understand how the software works.

The hyper terminal config

Clapper working!
 

Downloads

Download project in .PDF format
Download Schematic and PCB in Eagle format
Download firmware

electronics-lab.com

Slices ↓
Radiolocman facebook Radiolocman twitter Radiolocman google plus