Clap Light Project (X02)

From Microduino Wiki
Revision as of 01:16, 30 December 2016 by Sonny (talk) (Created page with "=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 desi...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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

  1. Connect the Single ColorLED to the Sensor Hub on Pin A0/A1
  2. Connect the Buzzer to the Sensor Hub on Pin 6/7
  3. Connect the Microphone to the Sensor Hub on Pin A2/A3
  4. Grab the mCookie USBTTL and Stack the mCookie Core on top.
  5. Stack the mCookie Sensor on top of that.
  6. Plug in the MicroUSB cable to the mCookie USBTTL a computer.

Program

Copy and paste the code below and upload.

  1. include <Adafruit_NeoPixel.h> //Import the library for the ColorLED.
  2. include <stdint.h>
  1. define MIC_PIN A2
  2. define BUZZER_PIN 6
  3. 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.