Introduction: Arduino Clap Sensitive Light Control (The Clapper)
In a spree of ordering little extras for my arduino, i picked up a sound sensor board similar to this one and i had the idea of controlling the lights in my room. During the long delivery period i started work on the code for such a project, using a button to simulate a clap. This i did fairly soon after scanning the arduino reference page to learn some new functions and i could succesfully switch an led. In the final project i linked the output to a relay capable of driving my lights and the microphone board in place of the button.
The requirements are on the next page.
Also Please vote for me in the contests ive entered if you like this project.
Step 1: Requirements
Requirements:
Arduino, needs two digital I/O
Jumpers (M-M)
Relay(necessary for the mains voltage)
Breadboard
Resistor*
LED*
Computer (I just happened to use my Pi for this one)
Arduino IDE
Attiny (not essential but for compact-ness)
*For testing.
Step 2: Breadboard Setup. (No Relay)
To set up your breadboard, copy the fritzing file. The resistor value will depend on your LED, i just happened to know what mine required. Also check your microphone board as the pinouts may be different, mine had one output pin which could be changed from analogue to digital using a potentiometer on board. If your board has analog and digital outputs make sure you wire the digital output.
Step 3: The Code
Some very simple code just copy and paste into the Arduino IDE which can be found here.
const int buttonPin = 2;
const int ledPin = 0;
int buttonstate = 0;
int ledstate = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonstate = digitalRead(buttonPin);
ledstate = digitalRead(ledPin);
if (ledstate == HIGH && buttonstate == LOW) {
delay(250);
digitalWrite(ledPin, LOW);
}
if (ledstate == LOW && buttonstate == LOW) {
delay(250);
digitalWrite(ledPin, HIGH);
}
}
Step 4: Troubleshooting
As a point of reference when i clap a little LED on the microphone board lights up, if you have a constant flashing LED adjust the onboard potentiometer till it stops, from this point on the sensitivity can be adjusted to your preference.
If nothing happens at all when you clap check all your connections and check that your LED is wired Correctly.
Step 5: Relay Setup
IF YOU ARE WIRING THIS TO MAINS VOLTAGE BE EXTREMELY CAREFUL, MAINS CAN KILL INSTANTLY, I AM IN NO WAY RESPONSIBLE OR LIABLE FOR ANY INJURY OR FATAL HARM THAT MAY BEFALL YOU AS A CONSEQUENCE OF FOLLOWING THIS TUTORIAL.
PURSUE AT YOUR OWN RISK
The relay version varies very little but to begin with, check your relay is for 5V.
Then check if your landlord or home owner is accepting of this project.
Switch the outlet/light switch off in the switchbox for your home, to reduce risk of electrocution.
Test your relay board before hooking it up to mains, a circuit like the one below should work.
Step 6: Condensed Version (Attiny85)
Steps on how to bootload and program your Attiny will be uploaded at a later date, in the mean time there are many tutorials out there on how to do it.
One fairly simple method that requires no extra hardware is using your arduino as an isp.
The Attiny pinout is below.
Step 7: Watch This Space
Videos and pictures of the project will be uploaded but in the mean time dont hesitate to ask questions, give opinions and feedback.
Inbox me if you have any questions.
Step 8: Gallery

Participated in the
Supercharged Contest

Participated in the
123D Circuits Contest
30 Comments
2 years ago
Hello I have a question! I have a little problem. I just got to the stage where my light turns on. But when I clap the light only turns off for a split second before turning on again. I just wonder how to make the light turn off permanently until I clap again.
Question 2 years ago on Step 7
sound sensor detecting not only the clap sound and also the normal sound what i have to do to overcome this problem
3 years ago
For the first part, without the relay, I found it only worked if I tied the positive lead from the LED to the hot rail on my breadboard, not the ground rail, as shown in the diagram.
I'm really new to all this, so I can't 100% say why that works, but I thought I'd point it out.
Thanks for sharing this instructable!
4 years ago
¿Que sucede si el led de la placa del micrófono queda siempre encendida?
Question 5 years ago on Step 8
What is the sound sensor used
??
6 years ago
Is there a video of this whole project in action?
7 years ago
Meh - Since I'm just shopping on DX I came here only to find out what kind of microphone board I could best use. Unfortunately you don't say anything about that, its not in the requirements, it just suddenly pops up from nowhere. Is this like a 'sound detector' module?
7 years ago
with the help of @rclymer in the comments, can you provide the final code? im not very good with this. thanks for the project.
7 years ago
Is that a 5a/220v relay?
Reply 7 years ago
I believe so.
Reply 7 years ago
Another question... How did you power the arduino?
Reply 7 years ago
well, if you look at the Arduino and see the ports, then maybe you could notice that you can power it using the usb port or just hook up a 9-volt battery adapter to that circle connecter in
7 years ago
What microphone did you use and did you have to use a special library for it?
Reply 7 years ago
I used a cheap 99p module I got off eBay. It has a digital out pin, you tweak the threshold by way of a pot on the module and it'll go high if the volume of the sound exceeds the threshold. From that I just used a digital read, no library required. Hope that helps
9 years ago on Introduction
Cool project, I built something very similar but with a motion sensor. If you're looking for some improvements, you could add a timer to automatically shut off the lights or listen for the next clap. For future reference, a digitalRead from an output pin, isn't necessary. The ledState variable should always contain the led status. Also, removing delays is always a step toward stronger code.
unsigned long currentMillis = millis();
buttonState = digitalRead(buttonPin);
if((currentMills - buttonMillis > 100) && buttonState == LOW) //assuming a pull-up resistor inverts the values.
{
ledState == !ledState;
digitalWrite(ledPin, ledState);
buttonMillis = currentMillis;
}
This loop will only run once the button is pushed(or sound is triggered) and it has been 100ms since the last time the button was pressed.
Reply 7 years ago
Where should it be placed in the code?
Reply 9 years ago on Introduction
Thank you very much, i was trying to think of a simple way to incorporate two claps. that way it wont get set off by me coughing. My knowledge of code is quite basic, but i would greatly appreciate it if you could send a commented version of the code above to my inbox. that way i can further my knowledge. and build better code
7 years ago
Like your setup, but how does it "know" the difference between a hand-clap and other sounds?
Reply 7 years ago
Thats a slight issue with it, I could cough and the lights would go off. There was an implementation of a double clap system. The code is somewhere in the comments.
9 years ago on Introduction
Fantastic! Finally got this to work after ages of trying. Great tutorial. I'd love to know how to get it turn on a series of different coloured LEDs in succession, and to make it respond to double claps. I know i need a delay in the code somewhere to make it listen for a second clap after it 'hears' the first, but I don't know how to do it!