Projek Arduino Secret Knock Lock
Komponen yang diperlukan :
1. Arduino board
2. Breadbord
3. Kabel jumper
4. Motor servo SG90
5. 3 LED
6. 1 M ohm resistor
7. 3 220 ohm resistor
8. Piezo buzzer
Diperlukan librari servo
Cara Kerja :
Dalam proyek ini, Anda akan membuat sirkuit yang menggerakkan lengan servo untuk membuka kunci kotak atau pintu saat Anda memberikan ketukan rahasia yang benar. Selama ini kita menggunakan piezo buzzer hanya untuk mengeluarkan suara, tapi kita juga bisa menggunakannya sebagai sensor untuk mendeteksi suara dalam hal ini, ketukan. Ketika piezo dipukul, ia berdering seperti bel, tetapi bukannya menghasilkan suara, ia mengeluarkan tegangan, yang menghasilkan angka tergantung pada kekuatan pukulan. Kami akan mengukur tegangan ini dalam angka, dan jika ketukan jatuh dalam kisaran tertentu, Arduino akan mendaftarkannya sebagai yang benar. Jika tiga ketukan dari tegangan yang benar terdeteksi, Anda telah memecahkan kode, dan lengan servo bergerak untuk membuka kunci kotak atau pintu.
Berikut adalah dua baris kode yang akan kita gunakan nanti dalam sketsa untuk mengatur rentang tegangan; jika tegangan antara 10 dan 100, ketukan akan dicatat.
const int quietknock = 10;
const int loudKnock = 100;
Jika Anda mengetuk terlalu pelan atau terlalu keras, ketukan itu tidak akan terdengar. Anda harus melakukan tiga ketukan "benar" untuk memicu lengan servo bergerak. Ketika urutan dan kekuatan ketukan yang benar dicatat, lengan servo berayun 90 derajat untuk "membuka" apa pun yang diaturnya. LED, yang ditunjukkan pada Gambar, berfungsi sebagai indikator status kunci Anda: LED merah menyala ketika ketukan salah dan lengan servo tidak bergerak (yaitu, kotak atau pintu masih terkunci); LED kuning berkedip ketika ketukan terdaftar dan kode yang benar terdeteksi; dan lampu LED hijau dan servomotor bergerak setelah tiga ketukan yang benar.
Untuk hasil terbaik, lepaskan piezo Anda dari casingnya dan tempelkan langsung di bagian dalam kotak atau di luar pintu agar lebih sensitif terhadap getaran ketukan.
Cara membuat rangkaian :
1. Masukkan resistor 1M-ohm ke breadbord Anda dan sambungkan kabel merah piezo ke satu kaki dan kabel hitamnya ke kaki lainnya. Hubungkan kabel hitam ke rel GND, dan kabel merah ke pin Arduino AO.
#include <Servo.h>
Servo servo9; // Pin connected to servo mpo
const int piezo = A0; // Pin connected to piezo
const int switchPin = 2; // Pin connected to servo
const int yellowLed = 3; // Pin connected to yellow LED
const int greenLed = 4; // Pin connected to green LED
const int redLed = 5; // Pin connected to red LED
int knockVal; // Value for the knock strength
int switchVal;
const int quietKnock = 10; // Set min value that will be accepted
const int loudKnock = 100; // Set max value that will be accepted
boolean locked = false; // A true or false variable
int numberOfKnocks = 0; // Value for number of knocks
void setup() {
servo9.attach(9);
pinMode(yellowLed, OUTPUT); // Set LED pins as outputs
pinMode(greenLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(switchPin, INPUT); // Set servo pin as input
Serial.begin(9600);
digitalWrite(greenLed, HIGH); // Green LED is lit when the
// sequence is correct
servo9.write(0);
Serial.println("The box is unlocked!");
}
void loop() {
if (locked == false) {
switchVal = digitalRead(switchPin);
if (switchVal == HIGH) {
locked = true;
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
servo9.write(90);
Serial.println("The box is locked!");
delay(1000);
}
}
if (locked == true) {
knockVal = analogRead(piezo); // Knock value is read by analog pin
if (numberOfKnocks < 3 && knockVal > 0) {
if (checkForKnock(knockVal) == true) { // Check for correct
// number of knocks
numberOfKnocks++;
}
Serial.print(3 - numberOfKnocks);
Serial.println(" more knocks to go");
}
if (numberOfKnocks >= 3) { // If 3 valid knocks are detected,
// the servo moves
locked = false;
servo9.write(0);
delay(20);
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
Serial.println("The box is unlocked!");
}
}
}
boolean checkForKnock(int value) { // Checks knock value
if (value > quietKnock && value < loudKnock) { // Value needs to be
// between these
digitalWrite(yellowLed, HIGH);
delay(50);
digitalWrite(yellowLed, LOW);
Serial.print("Valid knock of value ");
Serial.println(value);
return true;
}
else { // If value is false then send this to the IDE serial
Serial.print("Bad knock value ");
Serial.println(value);
return false;
}







0 Comments