Clap Light Project (X02)
From Microduino Wiki
Contents
About
This project uses the Microphone to detect clapping noises and turns on or off the LED if it senses two claps with a second pause inbetween. This project was designed for the second generation mCookie Maker kits (102 Basic, 202 Advanced and 302 Expert kits).
Required Materials
For 102 Basic Kit
- 1 x mCookie Core
- 1 x mCookie USB TTL
- 1 x mCookie Sensor Hub
- 1 x Single ColorLED
- 1 x Microphone Sensor
- 1 x Buzzer
- 3 x Sensor Cable
- 1 x MicroUSB Cable
Build
- Connect the Single ColorLED to the Sensor Hub on Pin A0/A1
- Connect the Buzzer to the Sensor Hub on Pin 6/7
- Connect the Microphone to the Sensor Hub on Pin A2/A3
- Grab the mCookie USBTTL and Stack the mCookie Core on top.
- Stack the mCookie Sensor on top of that.
- Plug in the MicroUSB cable to the mCookie USBTTL a computer.
Program
Copy and paste the code below and upload.
#include <Adafruit_NeoPixel.h> //Import the library for the ColorLED.
#include <stdint.h>
#define MIC_PIN A2
#define BUZZER_PIN 6
#define LED_PIN A0
//The minimum amount of clap loudness to be registered as a clap
const uint16_t CLAP_LOUDNESS_THRESHOLD = 400;
//The maximum loudness between the two claps
const uint16_t SLIENT_LOUDNESS_THRESHOLD = 200;
volatile uint16_t mic_value;
unsigned long second_clap_timer;
bool leds_are_on = false;
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
// put your setup code here, to run once:
pinMode(MIC_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//Take in mic reading for the first clap
uint16_t mic_value = analogRead(MIC_PIN);
//Check if it is greater than the threadhold
if ( mic_value > CLAP_LOUDNESS_THRESHOLD ) {
Serial.println("First clap detected!");
delay(1000); //Wait 500 milliseconds
//Read in a new mic value for the silence between the claps
mic_value = analogRead(mic_value);
Serial.println(mic_value);
//If the value is under the threshold, then it is slient
if ( mic_value < SLIENT_LOUDNESS_THRESHOLD ) {
Serial.println("Slience detected!");
//wait a bit of time beforce looking for the second clap
delay(1000);
second_clap_timer = millis();
while(((millis() - second_clap_timer) < 2000)){
mic_value = analogRead(MIC_PIN);
if(mic_value > CLAP_LOUDNESS_THRESHOLD){
Serial.println("Second clap detected!");
tone(BUZZER_PIN, 3038, 200);
if( leds_are_on == false ){
activate_light();
}
else{
deactivate_light();
}
delay(1000);
break;
}
}
}
}
delay(1);
}
void activate_light() {
digitalWrite(LED_PIN, HIGH);
leds_are_on = true;
}
void deactivate_light() {
digitalWrite(LED_PIN, LOW);
leds_are_on = false;
return;
}
Usage
Clap once, wait about 1-2 seconds, then clap another time. The LED should turn on. Repeating the sequence will turn off the LED.