Introduction: Arduino Tutorial - Easy Secret Knock Detector
In this project I build a circuit with a Led and a piezo to function as a on and off a Led when it receives a number of knocking sounds within a given range.
Step 1: Things You Need
Hardware
- LED
- Diode(Zener 5.1v).
- Piezo Buzzer
- 470Ω Resistor
- 1MΩ Resistor
- Arduino uno
- jumper wire
- Breadboard
Software
- Arduino IDE
Step 2: Watch the Video Tutorial
Step 3: Schematics
The circuit is so simple:
Arduino Pins: Breadboard:
Pin A2 --------------------------1MΩ-------------------Gnd
Pin A2 ------------------------Diode-------------------Gnd
Pin A2 ------------------Piezo Buzzer---------------Gnd
Pin 8 -------------------------470Ω-------Led 1------Gnd
Gnd-------------------------------------------------------Gnd
Step 4: Arduino Sketch
"const int outputPin = 5; // led indicator connected to digital pin
const int knockSensor = A2; // the piezo is connected to an analog pin
const int thresholdHIGH =120; // threshold value to decide when the detected knock is hard (HIGH)
const int thresholdLOW = 70; // threshold value to decide when the detected knock is gentle (LOW)
const int secretKnockLength = 3; //How many knocks are in your secret knock /* This is the secret knock sequence * 0 represents a LOW or quiet knock * 1 represents a HIGH or loud knock * The sequence can be as long as you like, but longer codes increase the difficulty of matching */
const int secretKnock[secretKnockLength] = {0, 0, 1}; int secretCounter = 0; //this tracks the correct knocks and allows you to move through the sequence
int sensorReading = 0; // variable to store the value read from the sensor pin void setup() { //Set the output pin as an OUTPUT pinMode(outputPin, OUTPUT); //Begin Serial Communication. Serial.begin(9600); } void loop() { // read the piezo sensor and store the value in the variable sensorReading: sensorReading = analogRead(knockSensor); // First determine is knock if Hard (HIGH) or Gentle (LOW) //Hard knock (HIGH) is detected if (sensorReading >= thresholdHIGH) { //Check to see if a Hard Knock matches the Secret Knock in the correct sequence. if (secretKnock[secretCounter] == 1) { //The Knock was correct, iterate the counter. secretCounter++; Serial.println("Correct"); } else { //The Knock was incorrect, reset the counter secretCounter = 0; Serial.println("Fail"); digitalWrite(outputPin, LOW); }//close if //Allow some time to pass before sampling again to ensure a clear signal. delay(100); //Gentle knock (LOW) is detected } else if (sensorReading >= thresholdLOW) { //Check to see if a Gentle Knock matches the Secret Knock in the correct sequence. if (secretKnock[secretCounter] == 0) { //The Knock was correct, iterate the counter. secretCounter++; Serial.println("Correct"); } else { //The Knock was incorrect, reset the counter. secretCounter = 0; Serial.println("Fail"); }//close if //Allow some time to pass before sampling again to ensure a clear signal. delay(100); }//close if else //Check for successful entry of the code, by seeing if the entire array has been walked through. if (secretCounter == (secretKnockLength) ) { Serial.println("Welcome"); //if the sececret knock is correct, illuminate the LED for a couple seconds digitalWrite(outputPin, HIGH); //Reset the secret counter to 0. secretCounter = 0; }//close success check }//close loop".