Clap Light Project (X02)
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.