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.

2. Hubungkan kabel sinyal kuning servo langsung ke pin Arduino 9, kabel coklatnya ke GND, dan kabel merahnya ke +5V.
3. Masukkan LED ke papan tempat memotong roti Anda dengan kaki negatif yang pendek terhubung ke GND. Kaki positif harus terhubung ke pin melalui resistor 220-ohm sebagai berikut: kuning terhubung ke pin 3 Arduino, hijau ke pin 4, dan merah ke pin 5.
4. Hubungkan pin Arduino 2 ke rel daya positif. Dalam pengaturan kami ini selalu aktif, tetapi Anda dapat menambahkan sakelar di koneksi antara pin Arduino 2 dan rel daya untuk menghemat daya saat proyek tidak digunakan.
5. Hubungkan rel papan tempat memotong roti ke Arduino GND dan +5V. 
6. Pastikan pengaturan Anda sesuai dengan diagram rangkaian pada Gambar, lalu unggah kode di "Sketsa".

Sketch program arduino :

Kami pertama-tama memanggil perpustakaan Servo dan mengatur pin Arduino 9 untuk mengontrol servo. LED terpasang ke pin Arduino 3, 4, dan 5, dan ini akan menyala tergantung pada validitas ketukan. Piezo bertindak sebagai sensor daripada bel dalam proyek ini dan dilampirkan ke pin Arduino AO. Ketika seseorang mengetuk, ketukan dirasakan oleh piezo dan nilai tegangan dikirim ke pin analog AO dari Arduino tergantung pada kekuatan ketukan - semakin keras ketukan, semakin tinggi nilainya. Ketukan dengan nilai di bawah 10 dianggap terlalu pelan, dan ketukan dengan nilai di atas 100 terlalu keras, jadi keduanya tidak akan diterima sebagai ketukan yang sah. Lampu LED merah jika ketukan tidak diterima, dan lampu LED kuning jika ya. Nilai ketukan antara 10 dan 100 diterima sebagai ketukan yang valid dan dihitung, dan jika tiga ketukan yang valid diterima, servomotor bergerak dan lampu LED hijau. Seperti disebutkan sebelumnya, ini adalah dua baris kode yang mengatur set parameter untuk mengukur tegangan:

const int quietKnock = 10;

const int loudKnock = 100;

Jika Anda merasa sangat tertutup, Anda dapat mengatur rentang ini lebih ketat untuk membuat kode lebih sulit untuk dipecahkan. Berikut sketsanya:



#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;
}

}

Demikianlah projek secret knock lock, selamat mencoba dan semoga bermanfaat.