Sound Sensitive LED Project (X02)

From Microduino Wiki
Revision as of 20:50, 3 January 2017 by Sonny (talk) (Program)
Jump to: navigation, search

About

This project uses the Microphone to detect sounds. Based on the sound levels, it maps the loudness to the LED Matrix's brightness. Visually see the loudness of the surrounding sound on the LED Matrix!

Color of the LED Matrix can be adjust between 7 colors with the touch button.

This project was designed for the second generation mCookie Maker kits (102 Basic, 202 Advanced and 302 Expert kits).


Required Materials

  • 1 x mCookie Core
  • 1 x mCookie USB TTL (102 Kit) or 1 x mBattery (202/302 Kit)
  • 1 x mCookie Sensor Hub
  • 1 x mCooke LED Matrix
  • 1 x Microphone Sensor
  • 1 x Touch Button
  • 2 x Sensor Cable
  • 1 x MicroUSB Cable

Build

  1. Connect the Microphone Sensor to the Sensor Hub on Pin A2/A3
  2. Connect the Touch Button to the Sensor Hub on Pin 6/7
  3. Grab the mCookie USBTTL or mBattery and Stack the mCookie Core on top.
  4. Stack the mCookie LED Matrix on top of that.
  5. Stack the mCookie Sensor on top of that.
  6. Plug in the MicroUSB cable to the mCookie USBTTL or mBattery to a computer.
  1. include <Adafruit_NeoPixel.h>//Import the library for the ColorLED.
  2. include <stdint.h>
  1. define LEDMATRIX_PIN A0
  2. define MIC_PIN A2
  3. define TOUCH_PIN 6
  1. define NUMPIXELS 6

//This determines the noise loudness values to ignore and sets anything under it to 0

  1. define AMBIENT_THRESHOLD 20

//This sets the max noise loudness values

  1. define MAX_THRESHOLD 200

unsigned long debounce_time_milliseconds = 200; unsigned long debounce_time_touch_pin = 0;

Adafruit_NeoPixel matrix = Adafruit_NeoPixel(NUMPIXELS, LEDMATRIX_PIN, NEO_GRB + NEO_KHZ800);

uint8_t current_selection = 0; uint8_t current_selection_count = 7;

uint8_t color_matrix[9][3] ={

 {1, 0, 0},
 {0, 1, 0},
 {0, 0, 1},
 {0, 1, 1},
 {1, 0, 1},
 {1, 1, 0},
 {1, 1, 1}

};


void setup() {

 Serial.begin(9600);
 // put your setup code here, to run once:
 pinMode(MIC_PIN, INPUT);
 pinMode(TOUCH_PIN, INPUT);
 matrix.begin();
 matrix.show();

}

void loop() {

 // put your main code here, to run repeatedly:
 //Check if touch button is pressed.
 if( !digitalRead(TOUCH_PIN ) 
     && 
     ((millis() - debounce_time_touch_pin ) > debounce_time_milliseconds)
 ){
   debounce_time_touch_pin = millis();
   //Change the current selection color by incrementing the value
   if(++current_selection >= current_selection_count){
     current_selection = 0;
   }   
 }
 //Read in the microphone value
 uint16_t mic_value = analogRead(MIC_PIN);
 //Serial.println(mic_value);
 //Check if the microphone value is under the ambient threshold, set mic value to 0 to ignore if it is under the threshold
 if(mic_value < AMBIENT_THRESHOLD){
   mic_value = 0;
 }
 //Check if the microphone value is over the max loudness threshold
 //If it is, set the microphone value to that threshold, this sets the max value for the microphone value
 if(mic_value > MAX_THRESHOLD){
   mic_value = MAX_THRESHOLD;
 }
 //Determine the brightness of the leds by using the map function
 uint8_t brightness = map(mic_value, 0, MAX_THRESHOLD, 0, 255);
 //Set, but not show, the color and brightness of all the LEDs in the LED Matrix
 for (uint16_t j = 0; j < NUMPIXELS; ++j) {
   matrix.setPixelColor(j, matrix.Color(color_matrix[current_selection][0] * brightness, color_matrix[current_selection][1] * brightness, color_matrix[current_selection][2] * brightness));
 }
 //Actually execute and show the set values on the LEDs
 matrix.show();


 delay(1);

}

Usage

Clap once, wait about 1 second, then clap another time. The LED should turn on and a beep noise will occur. Repeating the sequence will turn off the LED.