More Related Content Similar to Listing program for smart door knocker based on arduino uno r3 (20) Listing program for smart door knocker based on arduino uno r31. Listing Program for Smart Door Knocker based on Arduino UNO R3
/* SecretDoor KnockDetectingDoorLock
OriginallyfromSteveHoeferhttp://grathio.comVersion0.1.10.20.10
Updatesby Lee Sonko
LicensedunderCreativeCommonsAttribution-Noncommercial-Share Alike3.0
http://creativecommons.org/licenses/by-nc-sa/3.0/us/
(Inshort: Do whatyou want,justbe sure to include thisline andthe fourabove it,anddon't sell it
or use it inanythingyousell withoutcontactingme.)
Modifiedby:DindaEkaPratiwi (RefrigerationandAirConditioningCollager,PolytechnicState of
Bandung) (November2015)
*/
#include <Servo.h>
Servomyservo;
const intknockSensor=0;
const intprogramSwitch= 3;
const intlockMotor= 6;
const intredLED = 4;
const intgreenLED= 5;
const intbuzzer= 2;
const intthreshold=50;
const intrejectValue=25;
const intaverageRejectValue=15;
const intknockFadeTime =150;
const intlockTurnTime =650;
const intunlockTime =5000;
2. const intmaximumKnocks=20;
const intknockComplete=1200;
// Variables.
intsecretCode[maximumKnocks] ={50, 25, 25, 50, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
intknockReadings[maximumKnocks];
intknockSensorValue =0;
intprogramButtonPressed=false;
voidsetup() {
myservo.attach(lockMotor);
pinMode(lockMotor,OUTPUT);
pinMode(redLED,OUTPUT);
pinMode(greenLED,OUTPUT);
pinMode(programSwitch,INPUT);
pinMode (buzzer,OUTPUT);
Serial.begin(9600);
Serial.println("Programstart.");
digitalWrite(greenLED,HIGH);
}
voidloop() {
knockSensorValue =analogRead(knockSensor);
if (digitalRead(programSwitch) ==HIGH) {
programButtonPressed=true;
digitalWrite(redLED,HIGH);
3. } else {
programButtonPressed=false;
digitalWrite(redLED,LOW);
}
if (knockSensorValue >=threshold) {
listenToSecretKnock();
}
}
voidlistenToSecretKnock() {
Serial.println("knockstarting");
inti = 0;
for(i = 0; i < maximumKnocks; i++) {
knockReadings[i] =0;
}
intcurrentKnockNumber=0;
intstartTime = millis();
intnow= millis();
digitalWrite(greenLED,LOW);
if (programButtonPressed==true) {
digitalWrite(redLED,LOW);
}
delay(knockFadeTime);
digitalWrite(greenLED,HIGH);
if (programButtonPressed==true) {
4. digitalWrite(redLED,HIGH);
}
do{
knockSensorValue =analogRead(knockSensor);
if (knockSensorValue>=threshold) {
Serial.println("knock.");
now= millis();
knockReadings[currentKnockNumber] =now - startTime;
currentKnockNumber++;
startTime = now;
digitalWrite(greenLED,LOW);
if (programButtonPressed==true) {
digitalWrite(redLED,LOW);
}
delay(knockFadeTime);
digitalWrite(greenLED,HIGH);
if (programButtonPressed==true) {
digitalWrite(redLED,HIGH);
}
}
now = millis();
} while ((now - startTime <knockComplete) &&(currentKnockNumber<maximumKnocks));
if (programButtonPressed==false) {
if (validateKnock()==true) {
triggerDoorUnlock();
} else {
5. Serial.println("Secretknockfailed.");
digitalWrite(greenLED,LOW);
for (i = 0; i < 4; i++) {
digitalWrite(redLED,HIGH);
delay(100);
digitalWrite(redLED,LOW);
delay(100);
digitalWrite(2,LOW);
delay(1000);
digitalWrite(2,HIGH);
delay(1000);
}
digitalWrite(greenLED,HIGH);
}
} else {
validateKnock();
Serial.println("New lockstored.");
digitalWrite(redLED,LOW);
digitalWrite(greenLED,HIGH);
for (i = 0; i < 3; i++) {
delay(100);
digitalWrite(redLED,HIGH);
digitalWrite(greenLED,LOW);
delay(100);
digitalWrite(redLED,LOW);
digitalWrite(greenLED,HIGH);
7. for(i = 0; i < maximumKnocks;i++) {
if (knockReadings[i] >0) {
currentKnockCount++;
}
if (secretCode[i] >0) {
secretKnockCount++;
}
if (knockReadings[i] >maxKnockInterval){
maxKnockInterval =knockReadings[i];
}
}
if (programButtonPressed==true) {
for (i = 0; i < maximumKnocks;i++) { // normalize the times
secretCode[i] =map(knockReadings[i],0,maxKnockInterval,0,100);
}
// Andflashthe lightsinthe recordedpatterntoletus know it's beenprogrammed.
digitalWrite(greenLED,LOW);
digitalWrite(redLED,LOW);
delay(1000);
digitalWrite(greenLED,HIGH);
digitalWrite(redLED,HIGH);
delay(50);
for (i = 0; i < maximumKnocks;i++) {
digitalWrite(greenLED,LOW);
digitalWrite(redLED,LOW);
if (secretCode[i]>0) {
delay( map(secretCode[i],0,100, 0, maxKnockInterval));
digitalWrite(greenLED,HIGH);