Difference between revisions of "Sound Sensitive LED Project (X02)"

From Microduino Wiki
Jump to: navigation, search
(Program)
(Program)
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
[[File:Sound Sensitive Light Project.jpg|right|thumb|Sound Sensitive LED Build]]
 
=About=
 
=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!
 
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!
Line 18: Line 19:
  
 
=Build=
 
=Build=
 +
'''NOTE''': When connecting sensor wires, push on the plastic connector and not on the wires. Pushing on the wire can damage them.
 
#Connect the Microphone Sensor to the Sensor Hub on Pin A2/A3
 
#Connect the Microphone Sensor to the Sensor Hub on Pin A2/A3
 
#Connect the Touch Button to the Sensor Hub on Pin 6/7
 
#Connect the Touch Button to the Sensor Hub on Pin 6/7
Line 26: Line 28:
  
 
=Program=
 
=Program=
Copy and paste the code below and upload.
+
1. Connect [[mCookie-Core|mCookie Core]] to the PC with the USB Cable. Open the Microduino IDE.
<source lang="cpp">
 
#include <Adafruit_NeoPixel.h>//Import the library for the ColorLED.
 
#include <stdint.h>
 
  
#define LEDMATRIX_PIN A0
+
2. Download the project file and unzip: '''<big>[[File:Sound_Sensitive_LED_X02.zip]]</big>'''.
#define MIC_PIN A2
+
*Using the Microduino IDE and go to '''File > Open...''' and navigate to the unzipped folder. Open the '''Sound_Sensitive_LED_X02.ino''' file.
#define TOUCH_PIN 6
 
  
#define NUMPIXELS 6
+
3. Select the board, processor and port:
 +
*Go to '''Tools > Board'''  and select '''Microduino/mCookie-Core (328p)'''
 +
*Go to '''Tools > Processor''' and select '''Atmega328P16M,5V'''
 +
*Go to '''Tools > Port''' and select the available port
 +
4. Upload the program by clicking on the '''right arrow icon''' on the top left of the window. Or under '''Sketch > Upload'''.
  
//This determines the noise loudness values to ignore and sets anything under it to 0
+
'''NOTE''': If not using the default Core module included in the kits, please follow the '''[[Selecting_board,_processor,_and_port|selecting the board and processor guide]]'''.
#define AMBIENT_THRESHOLD 20
 
  
//This sets the max noise loudness values
+
=Debugging=
#define MAX_THRESHOLD 200
+
*Uncomment the '''DEBUG'''. Re-upload the sketch with that modification.
 +
*Open the Serial monitor. It should start printing the raw Microphone values. These values can be used to tweak the sketch to better suit your environment.
 +
*'''Note''': Change '''DEBUG''' back to 0 and re-upload the sketch when debugging is done. With debug mode on there is an added delay when reading Microphone values. Therefore, the light transitions may not seem as smooth when debugging is on.
  
unsigned long debounce_time_milliseconds = 200;
+
=Tweaking=
unsigned long debounce_time_touch_pin = 0;
+
Variables can be edited to change the threshold / detection value for various functions to better fine tune to your environment.  
 
 
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
+
'''DEBUG''' will enable or disable debugging.
  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
+
'''LEDMATRIX_PIN''' defines the pin that connects the LED Matrix
  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
+
'''NUMPIXELS''' defines the number of pixels on the LED Matrix
  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
+
'''MIC_PIN''' defines the pin that connects to the Microphone
  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
+
'''TOUCH_PIN''' defines the pin that connects the Touch Button
  matrix.show();
 
 
 
 
 
  delay(1);
 
 
 
 
 
}
 
</source>
 
==Debugging==
 
*Open the Serial monitor. Information will print out when the first clap is detected as "First clap detected!".
 
*Then a value will print out which is the silent value. If it is under the threshold, "Silence detected!" will print.
 
*"Second clap detected!" will print if it detected a second clap.
 
==Tweaking==
 
Variables can be edited to change the threshold / detection value for various functions to better fine tune to your environment.
 
  
'''CLAP_LOUDNESS_THRESHOLD''' will change the clapping loudness trigger point. Lower values means a weaker noise level is detected as a clap.  
+
'''AMBIENT_THRESHOLD''' will change the value that is registered as ambient noise when reading from the Microphone. A lower value is less ambient noise, higher value is louder ambient noise. Values can be retrieved during debugging mode.
 
*Adjustable between 0 ~ 1023
 
*Adjustable between 0 ~ 1023
*Default is 400
+
*Default value is 40
  
'''SILENT_LOUDNESS_THRESHOLD''' will change the silent registry level. Higher values will mean that higher noise levels will be registered as a silence.
+
'''MAX_THRESHOLD''' will change maximum value the Microphone can register. This is useful to narrow the noise level range and produce a better brightness range. Values can be retrieved during debugging mode.
 +
*Default value is 800
 
*Adjustable between 0 ~ 1023
 
*Adjustable between 0 ~ 1023
*Default is 200
 
  
'''PAUSE_TIME''' will change the time in which you are required to pause between claps in milliseconds. Lower values will detect faster claps, but there is settling time on the Microphone, which means too short of a pause time won't be detectable as silence.
+
'''DEBOUNCE_TIME_MILLISECONDS''' will set the time to hold down the touch button to register as a "press"
* Default is 200 milliseconds (1/5 of a second)
 
  
 
=Usage=
 
=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.
+
Talk or play music towards the Microphone and the LED Matrix should react to the noise loudness. Change the color of the LED Matrix by pressing the Touch Button. There 7 select-able colors. There is a 200 millisecond (1/5 second) delay between Touch Button detection.

Latest revision as of 21:34, 1 May 2017

Sound Sensitive LED Build

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

NOTE: When connecting sensor wires, push on the plastic connector and not on the wires. Pushing on the wire can damage them.

  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.

Program

1. Connect mCookie Core to the PC with the USB Cable. Open the Microduino IDE.

2. Download the project file and unzip: File:Sound Sensitive LED X02.zip.

  • Using the Microduino IDE and go to File > Open... and navigate to the unzipped folder. Open the Sound_Sensitive_LED_X02.ino file.

3. Select the board, processor and port:

  • Go to Tools > Board and select Microduino/mCookie-Core (328p)
  • Go to Tools > Processor and select Atmega328P16M,5V
  • Go to Tools > Port and select the available port

4. Upload the program by clicking on the right arrow icon on the top left of the window. Or under Sketch > Upload.

NOTE: If not using the default Core module included in the kits, please follow the selecting the board and processor guide.

Debugging

  • Uncomment the DEBUG. Re-upload the sketch with that modification.
  • Open the Serial monitor. It should start printing the raw Microphone values. These values can be used to tweak the sketch to better suit your environment.
  • Note: Change DEBUG back to 0 and re-upload the sketch when debugging is done. With debug mode on there is an added delay when reading Microphone values. Therefore, the light transitions may not seem as smooth when debugging is on.

Tweaking

Variables can be edited to change the threshold / detection value for various functions to better fine tune to your environment.

DEBUG will enable or disable debugging.

LEDMATRIX_PIN defines the pin that connects the LED Matrix

NUMPIXELS defines the number of pixels on the LED Matrix

MIC_PIN defines the pin that connects to the Microphone

TOUCH_PIN defines the pin that connects the Touch Button

AMBIENT_THRESHOLD will change the value that is registered as ambient noise when reading from the Microphone. A lower value is less ambient noise, higher value is louder ambient noise. Values can be retrieved during debugging mode.

  • Adjustable between 0 ~ 1023
  • Default value is 40

MAX_THRESHOLD will change maximum value the Microphone can register. This is useful to narrow the noise level range and produce a better brightness range. Values can be retrieved during debugging mode.

  • Default value is 800
  • Adjustable between 0 ~ 1023

DEBOUNCE_TIME_MILLISECONDS will set the time to hold down the touch button to register as a "press"

Usage

Talk or play music towards the Microphone and the LED Matrix should react to the noise loudness. Change the color of the LED Matrix by pressing the Touch Button. There 7 select-able colors. There is a 200 millisecond (1/5 second) delay between Touch Button detection.