Keyboard matriks kunci kombinasi untuk arduino. Kunci "pintar" otomatis dan Arduino

Arduino adalah sistem terbaik untuk menyalin segala jenis peralatan. Kebanyakan ide tidak akan mungkin terjadi tanpa dia. Sudah lama ada ide seperti itu: untuk membuat kunci kombinasi khusus pada arduino. Untuk membukanya, Anda perlu menahan tombol tertentu. Dalam hal ini, kunci tidak boleh terbuka, bahkan jika Anda tahu tombol yang tepat. Untuk membukanya, Anda harus mempertahankan interval tertentu menggunakan memori otot. Seorang penjahat tidak bisa melakukan hal seperti itu. Tapi ini semua hanya teori.

Untuk merakitnya, Anda perlu menggunakan perangkat khusus pulsa persegi panjang, serta beberapa penghitung dan tumpukan. Tetapi perangkat yang sudah jadi akan memiliki dimensi keseluruhan yang besar dan tidak nyaman untuk digunakan. Sebagai aturan, pikiran seperti itu tidak memberikan istirahat. Langkah pertama untuk mewujudkan mimpi tersebut adalah dengan membuat program untuk Arduino. Ini akan berfungsi sebagai kunci kombinasi. Untuk membukanya, Anda tidak perlu menekan satu tombol, tetapi beberapa tombol, dan melakukannya secara bersamaan. Sirkuit yang sudah jadi terlihat seperti ini:

Kualitas gambar bukan yang terbaik, tetapi koneksi dibuat ke ground, D3, D5, D7, D9 dan D11.

Kode disajikan di bawah ini:

konstanta inti = 3; const int inb = 5; const inc = 9; const int ledPin = 13; int saya = 1000; byte a = 0; byte b = 0; byte c = 0; byte d = 0; unsigned lama = 0; //jangan lupa apapun yang mengambil nilai milis() unsigned long temp = 0; //simpan di unsigned long byte keyya = ( 0, 0, 0, 0, 0, 0, 0, 0); //kode sebenarnya byte keyb = ( 1, 1, 1, 1, 0, 1, 0, 0); byte kuncic = ( 1, 0, 1, 0, 1, 1, 1, 0); byte k = 0; void setup() ( pinMode(ina, INPUT_PULLUP); ///3 input terhubung ke tombol pinMode(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT); //LED built-in pada pin 13 pinMode (7, OUTPUT); pinMode(11, OUTPUT); digitalWrite(7, LOW); //ganti ground digitalWrite(11, LOW); time = milis(); //diperlukan untuk timing ) void blinktwice() ( // kedipan ganda LED digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay( 200); ) void loop() ( if(k==0) ( blinktwice(); // prompt untuk memasukkan kode ) if (k == 8) ( digitalWrite(ledPin, HIGH); delay(3000); k = 0 ; ) a = digitalRead(ina); //membaca level sinyal dari tombol - ditekan/tidak ditekan b = digitalRead(inb); c = digitalRead(inc); delay(100); //next if - perlindungan terhadap positif palsu, if((digitalRead(ina) == a)&&(digitalRead(inb) ==b)&&(digitalRead(inc)==c)) ( if (a == keya[k]) ( if (b == keyb[k]) ( if (c == keyc[k]) ( k++; ) ) ) ) if (k==1) ( if (d ==0) ( waktu = mili (); d++; ) ) temp = mili(); suhu = suhu - waktu; if (temp > 10000) ( k= 0; d=0; waktu = mili (); ) )

Untuk menghindari pertanyaan yang tidak perlu tentang kode, beberapa poin harus diklarifikasi. Fungsi setup digunakan untuk menetapkan port. Fungsi selanjutnya adalah Input_Pullup, yang diperlukan untuk menaikkan tegangan pin sebesar 5 V. Hal ini dilakukan dengan menggunakan resistor. Karena ini, berbagai korsleting tidak akan terjadi. Untuk kenyamanan lebih, disarankan untuk menggunakan fungsi blinktwice. Secara umum, saat membuat program yang berbeda, Anda perlu mencoba fungsi lain.

Setelah menetapkan fungsi, sinyal dibaca dari port. Jika tombol ditekan, maka ini akan ditunjukkan dengan angka 1, dan jika tidak - 2. Selanjutnya, semua nilai dianalisis. Misalnya, ada kombinasi seperti 0,1,1. Ini berarti bahwa tombol pertama ditekan dan dua lainnya tidak. Jika semua nilai benar, maka kondisi 8 juga benar. Ini ditunjukkan oleh LED yang menyala di panel depan. Selanjutnya, Anda harus memasukkan kode khusus yang akan berfungsi untuk membuka pintu.

Elemen terakhir dari kode digunakan untuk mengatur ulang nilai penghitung. Fungsi ini dijalankan jika lebih dari 10 detik telah berlalu sejak penekanan tombol terakhir. Tanpa kode ini, dimungkinkan untuk memilah semua opsi yang mungkin, meskipun ada cukup banyak. Setelah membuat perangkat ini, Anda perlu mengujinya. Lagi

Pada artikel ini saya akan menunjukkan cara membuat kunci kombinasi dari arduino. Untuk melakukan ini, kita memerlukan LED merah dan hijau, bel, arduino nano, layar LCD dengan konverter I2C, drive servo, dan keyboard matriks 4x4. Saat dihidupkan, layar akan menulis "Masukkan kode.",

LED merah akan menyala,

dan hijau mati, servo akan diatur ke 0 °. Saat angka dimasukkan, * akan menyala di layar.

Jika kode yang dimasukkan salah, layar akan menampilkan "Masukkan cod". Jika kodenya benar, akan terdengar bunyi bip, servo akan berputar 180°, tampilan akan membaca "Buka".

LED hijau akan menyala,

dan merah akan mati. Setelah 3 detik, servo akan kembali ke posisi asalnya, LED merah akan menyala dan LED hijau akan mati, tampilan akan menulis "Tutup.",

maka tampilan akan menulis "Masukkan kode". Sekarang tentang skema. Pertama, kami menghubungkan arduino dengan kabel ke papan tempat memotong roti (kontak daya).

Kemudian kami menghubungkan keyboard matriks ke kontak D9 - D2.

Kemudian servonya. Kami menghubungkannya ke pin 10.

LED merah ke pin 11.

Hijau - untuk menyematkan 12.

Buzzer - ke pin 13.

Sekarang unggah sketsa.

#termasuk #termasuk #termasuk #termasuk iarduino_KB KB(9, 8, 7, 6, 5, 4, 3, 2); LiquidCrystal_I2C lcd (0x27, 16, 2); Servo servo int lulus = (3, 6, 1, 8); int dalam; int r = 11; int g = 12; void setup() ( KB.begin(KB1); pinMode(r, OUTPUT); pinMode(g, OUTPUT); lcd.init(); lcd.backlight(); digitalWrite(g, LOW); digitalWrite(r, HIGH ); servo.attach(10); servo.write(0); lcd.setCursor(0, 0); ) void loop() ( lcd.clear(); lcd.print("Masukkan kode."); while ( !KB.check(KEY_DOWN)) ( delay(1); ) in = KB.getNum; lcd.clear(); lcd.setCursor(0, 0); lcd.print("*"); while (!KB. periksa(KEY_DOWN)) ( delay(1); ) di = KB.getNum; lcd.print("*"); while (!KB.check(KEY_DOWN)) ( delay(1); ) di = KB.getNum; lcd.print("*"); while (!KB.check(KEY_DOWN)) ( delay(1); ) di = KB.getNum; lcd.print("*"); if (di == lulus) ( jika (dalam == lulus) ( if (dalam == lulus) ( if (dalam == lulus) ( lcd.clear(); lcd.setCursor(0, 0); lcd.print("Buka."); tone( 13, 400, 750); servo.write(180); digitalWrite(r, LOW); digitalWrite(g, HIGH); delay(3000); lcd.clear(); lcd.setCursor(0, 0); lcd. print("Tutup."); tone(13, 300, 700); servo.write(0); digitalWrite(g, LOW); digitalWrite(r, HIGH); dela y(1000); ) ) ) ))

Itu saja. Nikmati kunci kode!

Daftar elemen radio

Penamaan Sebuah tipe Denominasi Kuantitas CatatanSkorbuku catatan saya
E1 papan Arduino

Arduino Nano 3.0

1 5V Untuk notepad
E8, E9 Penghambat

220 ohm

2 smd Untuk notepad
E6 Dioda pemancar cahaya

AL102G

1 merah Untuk notepad
E7 Dioda pemancar cahaya

AL307G

1 Hijau Untuk notepad
E3 layar LCDDengan antarmuka I2C1 Lampu latar hijau Untuk notepad
E5 ServoSG901 180 derajat Untuk notepad
E2 Bel5V1 bu Untuk notepad
E4 Papan ketik4x41 matriks Untuk notepad
Bukan Papan tempat memotong roti640 poin1 tanpa solder

Kemajuan tidak berhenti dan "Kunci pintar" semakin banyak muncul di pintu apartemen, garasi, dan rumah.

Kunci serupa terbuka saat Anda menekan tombol di ponsel cerdas Anda. Untungnya, smartphone dan tablet sudah memasuki kehidupan kita sehari-hari. Dalam beberapa kasus, "kunci pintar" terhubung ke "layanan cloud" seperti Google Drive dan dibuka dari jarak jauh. Selain itu, opsi ini memungkinkan untuk memberikan akses ke pembukaan pintu kepada orang lain.

Dalam proyek ini, versi DIY dari kunci pintar pada Arduino akan diimplementasikan, yang dapat dikendalikan dari jarak jauh dari mana saja di dunia.

Selain itu, proyek telah menambahkan kemampuan untuk membuka kunci setelah pengenalan sidik jari. Untuk ini, sensor sidik jari akan terintegrasi. Kedua opsi untuk membuka pintu akan bekerja berdasarkan platform Adafruit IO.

Kunci seperti ini bisa menjadi langkah awal yang bagus dalam proyek Rumah Pintar Anda.

Menyiapkan sensor sidik jari

Untuk bekerja dengan sensor sidik jari, ada perpustakaan yang sangat baik untuk Arduino, yang sangat menyederhanakan proses pengaturan sensor. Proyek ini menggunakan Arduino Uno. Papan Adafruit CC3000 digunakan untuk terhubung ke internet.

Mari kita mulai dengan menghubungkan daya:

  • Hubungkan pin 5V dari papan Arduino ke rel daya merah;
  • Pin GND dari Arduino terhubung ke rel biru pada papan sirkuit tanpa solder.

Mari beralih ke menghubungkan sensor sidik jari:

  • Hubungkan listrik terlebih dahulu. Untuk melakukan ini, kabel merah terhubung ke rel +5 V, dan kabel hitam ke rel GND;
  • Kabel sensor putih terhubung ke pin 4 pada Arduino.
  • Kabel hijau masuk ke pin 3 pada mikrokontroler.

Sekarang mari kita lihat modul CC3000:

  • Hubungkan pin IRQ dari board CC3000 ke pin 2 pada Arduino.
  • VBAT - untuk menyematkan 5.
  • CS - ke pin 10.
  • Setelah itu, Anda perlu menghubungkan pin SPI ke Arduino: MOSI, MISO dan CLK - masing-masing ke pin 11, 12 dan 13.

Dan akhirnya, Anda perlu menyediakan daya: Vin - ke Arduino 5V (rel merah di papan sirkuit Anda), dan GND ke GND (rel biru di papan tempat memotong roti).

Foto proyek yang telah dirakit sepenuhnya ditunjukkan di bawah ini:

Sebelum mengembangkan sketsa yang akan mengunggah data ke Adafruit IO, Anda harus meneruskan data sidik jari Anda ke sensor. Kalau tidak, dia tidak akan mengenali Anda di masa depan;). Kami merekomendasikan untuk mengkalibrasi sensor sidik jari menggunakan Arduino secara terpisah. Jika Anda bekerja dengan sensor ini untuk pertama kalinya, kami sarankan Anda membiasakan diri dengan proses kalibrasi dan petunjuk terperinci untuk bekerja dengan sensor sidik jari.

Jika Anda belum melakukannya, daftar akun Adafruit IO.

Setelah itu, kita dapat melanjutkan ke tahap selanjutnya dalam mengembangkan "smart lock" di Arduino: yaitu, pengembangan sketsa yang akan mengirimkan data ke Adafruit IO. Karena programnya cukup banyak, dalam artikel kami akan menyoroti dan mempertimbangkan hanya bagian utamanya, dan kemudian kami akan memberikan tautan ke GitHub, tempat Anda dapat mengunduh sketsa lengkapnya.

Sketsa dimulai dengan memuat semua perpustakaan yang diperlukan:

#termasuk

#termasuk

#termasuk

#sertakan "Adafruit_MQTT.h"

#sertakan "Adafruit_MQTT_CC3000.h"

#termasuk

#termasuk >

Setelah itu, Anda perlu sedikit memperbaiki sketsa dengan memasukkan parameter jaringan WiFi Anda, menentukan SSID dan kata sandi (kata sandi):

#define WLAN_SECURITY WLAN_SEC_WPA2>

Selain itu, Anda harus memasukkan nama dan kunci AIO (key) untuk masuk ke akun IO Adafruit Anda:

#menentukan AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_name"

#define AIO_KEY "adafruit_io_key">

Baris berikut bertanggung jawab atas interaksi dan pemrosesan data dari sensor sidik jari. Jika sensor diaktifkan (sidik jari cocok), itu akan menjadi "1":

const char FINGERPRINT_FEED PROGMEM = AIO_USERNAME "/feeds/fingerprint";

Adafruit_MQTT_Publish sidik jari = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Selain itu, kita perlu membuat instance objek SoftwareSerial untuk sensor kita:

SoftwareSerial mySerial(3, 4);

Setelah itu, kita dapat membuat objek untuk sensor kita:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Di dalam sketsa, kami menentukan ID jari mana yang harus mengaktifkan kunci di masa mendatang. Dalam contoh ini, 0 digunakan, yang sesuai dengan ID sidik jari pertama yang digunakan oleh sensor:

int ID jari = 0;

Setelah itu, kami menginisialisasi penghitung dan penundaan (delay) dalam proyek kami. Pada dasarnya, kami ingin kunci berfungsi secara otomatis setelah dibuka. Contoh ini menggunakan penundaan 10 detik, tetapi Anda dapat menyesuaikan nilai ini sesuai dengan kebutuhan Anda:

int activationCounter = 0;

int lastActivation = 0;

int waktu aktivasi = 10 * 1000;

Di dalam fungsi setup(), kami menginisialisasi sensor sidik jari dan memastikan bahwa chip CC3000 terhubung ke jaringan WiFi Anda.

Di dalam tubuh fungsi loop(), kita terhubung ke Adafruit IO. Baris berikut bertanggung jawab untuk ini:

Setelah terhubung ke platform Adafruit IO, kami memeriksa sidik jari terakhir. Jika cocok dan kunci tidak diaktifkan, kami mengirim "1" ke Adafruit IO untuk diproses:

if (fingerprintID == fingerID && lockState == false) (

Serial.println(F("Akses diberikan!"));

lockState=benar;

Serial.println(F("Gagal"));

Serial.println(F("Oke!"));

lastActivation = milis();

Jika, dalam fungsi loop(), kunci diaktifkan dan kami telah mencapai nilai penundaan yang ditunjukkan di atas, kami mengirim "0":

if ((activationCounter - lastActivation > activationTime) && lockState == true) (

lockState=salah;

if (! fingerprint.publish(state)) (

Serial.println(F("Gagal"));

Serial.println(F("Oke!"));

Anda dapat mengunduh kode versi terbaru di GitHub.

Saatnya untuk menguji proyek kami! Jangan lupa untuk mengunduh dan menginstal semua perpustakaan Arduino yang diperlukan!

Pastikan Anda telah membuat semua perubahan yang diperlukan pada sketsa dan mengunggahnya ke Arduino Anda. Kemudian buka jendela serial monitor.

Saat Arduino terhubung ke jaringan WiFi, sensor sidik jari akan berkedip merah. Letakkan jari Anda di sensor. Jendela monitor serial akan menampilkan nomor ID. Jika cocok, akan muncul pesan, "OK!". Artinya data sudah terkirim ke server Adafruit IO.

Skema dan sketsa untuk pengaturan lebih lanjut kunci menggunakan contoh LED

Sekarang mari kita berurusan dengan bagian dari proyek yang secara langsung bertanggung jawab untuk mengendalikan kunci pintu. Untuk terhubung ke jaringan nirkabel dan mengaktifkan / menonaktifkan kunci, Anda memerlukan modul Adafruit ESP8266 tambahan (modul ESP8266 tidak harus dari Adafruit). Contoh di bawah ini akan menunjukkan betapa mudahnya berkomunikasi antara dua platform (Arduino dan ESP8266) menggunakan Adafruit IO.

Di bagian ini, kami tidak akan bekerja secara langsung dengan kunci. Sebagai gantinya, kita cukup menghubungkan LED ke pin tempat kunci akan terhubung nanti. Ini akan memungkinkan untuk menguji kode kami tanpa mempelajari secara spesifik desain kunci.

Rangkaiannya cukup sederhana: pertama instal ESP8266 di papan tempat memotong roti. Kemudian pasang LEDnya. Jangan lupa bahwa kaki panjang (positif) LED dihubungkan melalui resistor. Kaki kedua resistor dihubungkan ke pin 5 pada modul ESP8266. LED kedua (katoda) terhubung ke pin GND pada ESP8266.

Sirkuit yang dirakit sepenuhnya ditunjukkan pada foto di bawah ini.


Sekarang mari kita lihat sketsa yang kita gunakan untuk proyek ini. Sekali lagi, kodenya cukup besar dan kompleks, jadi kami hanya akan membahas bagian utamanya:

Kami mulai dengan menyertakan perpustakaan yang diperlukan:

#termasuk

#sertakan "Adafruit_MQTT.h"

#sertakan "Adafruit_MQTT_Client.h"

Konfigurasikan pengaturan WiFi:

#define WLAN_SSID "your_wifi_ssid"

#define WLAN_PASS "password_wifi_anda"

#definisikan WLAN_SECURITY WLAN_SEC_WPA2

Kami juga mengonfigurasi parameter Adafruit IO. Sama seperti pada bagian sebelumnya:

#define AIO_SERVER "io.adafruit.com"

#menentukan AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_username"

#define AIO_KEY "adafruit_io_key"

Kami menunjukkan ke pin mana kami menghubungkan LED (di masa depan itu akan menjadi kunci atau relai kami):

int relayPin = 5;

Interaksi dengan sensor sidik jari, seperti pada bagian sebelumnya:

const char LOCK_FEED PROGMEM = AIO_USERNAME "/feeds/lock";

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

Di badan fungsi setup(), kami menunjukkan bahwa pin yang terhubung dengan LED harus bekerja dalam mode OUTPUT:

pinMode(relayPin, OUTPUT);

Di dalam loop() loop, pertama-tama kita periksa apakah kita telah terhubung ke Adafruit IO:

Setelah itu, kami memeriksa sinyal apa yang datang. Jika "1" ditransmisikan, kami mengaktifkan pin yang kami nyatakan sebelumnya, yang terhubung dengan LED kami. Jika kami menerima "0", kami menempatkan kontak dalam status "rendah":

Adafruit_MQTT_Berlangganan *berlangganan;

while ((langganan = mqtt.readSubscription(1000))) (

if (langganan == & kunci) (

Serial.print(F("Didapat: "));

Serial.println((char *)lock.lastread);

// Simpan perintah sebagai data string

Perintah string = String((char *)lock.lastread);

if (perintah == "0") (

digitalWrite(relayPin, RENDAH);

if (perintah == "1") (

digitalWrite(relayPin, TINGGI);

Anda dapat menemukan versi sketsa terbaru di GitHub.

Saatnya untuk menguji proyek kami. Jangan lupa untuk mengunduh semua pustaka yang diperlukan untuk Arduino Anda dan periksa apakah Anda membuat perubahan yang benar pada sketsa.

Konverter USB-FTDI sederhana dapat digunakan untuk memprogram chip ESP8266.

Unggah sketsa ke Arduino dan buka jendela serial monitor. Pada tahap ini, kami baru saja memeriksa apakah kami dapat terhubung ke Adafruit IO: kami akan melihat fungsionalitas yang tersedia lebih lanjut.

Menguji proyek

Sekarang mari kita mulai menguji! Masuk ke menu pengguna Adafruit IO Anda, di menu Feeds. Periksa apakah saluran untuk sidik jari dan kunci dibuat atau tidak (pada layar cetak di bawah, ini adalah garis sidik jari dan kunci):


Jika tidak ada, Anda harus membuatnya secara manual.

Sekarang kita perlu memastikan pertukaran data antara sidik jari dan saluran kunci. Saluran kunci harus diatur ke "1" ketika saluran sidik jari diatur ke "1" dan sebaliknya.

Untuk melakukan ini, kami menggunakan alat Adafruit IO yang sangat kuat: pemicu. Pemicu pada dasarnya adalah kondisi yang dapat Anda terapkan ke saluran yang dikonfigurasi. Artinya, mereka dapat digunakan untuk menghubungkan dua saluran.

Buat pemicu reaktif baru dari bagian Pemicu di Adafruit IO. Ini akan memberikan kemampuan untuk bertukar data antara saluran sensor sidik jari dan kunci:


Berikut tampilannya saat kedua pemicu dikonfigurasi:

Semuanya! Sekarang kami benar-benar dapat menguji proyek kami! Kami meletakkan jari kami di sensor dan melihat bagaimana Arduino mulai mengedipkan mata dengan LED, yang sesuai dengan transfer data. Setelah itu, LED pada modul ESP8266 akan mulai berkedip. Artinya dia mulai menerima data melalui MQTT. LED pada papan sirkuit juga harus menyala pada saat ini.

Setelah penundaan yang Anda atur dalam sketsa (default adalah 10 detik), LED akan mati. Selamat! Anda dapat mengontrol LED dengan sidik jari Anda dari mana saja di dunia!

Menyiapkan kunci elektronik

Kami telah mencapai bagian terakhir dari proyek: menghubungkan dan mengontrol kunci elektronik secara langsung menggunakan Arduino dan sensor sidik jari. Proyek ini tidak mudah, Anda dapat menggunakan semua sumber dalam bentuk yang disajikan di atas, tetapi alih-alih LED, sambungkan relai.

Untuk menghubungkan kunci secara langsung, Anda memerlukan komponen tambahan: catu daya 12V, colokan listrik, transistor (dalam contoh ini, MOSFET IRLB8721PbF digunakan, tetapi yang lain, seperti transistor bipolar TIP102, dapat digunakan. Jika Anda menggunakan transistor bipolar, Anda perlu menambahkan resistor.

Diagram pengkabelan untuk menghubungkan semua komponen ke modul ESP8266 ditunjukkan di bawah ini:


Perhatikan bahwa jika Anda menggunakan MOSFET, Anda tidak memerlukan resistor antara ESP8266 pin 5 dan transistor.

Proyek yang dirakit sepenuhnya ditunjukkan pada foto di bawah ini:


Nyalakan modul ESP8266 menggunakan modul FTDI dan sambungkan catu daya 12V ke jack. Jika Anda menggunakan pin yang direkomendasikan di atas untuk koneksi, Anda tidak perlu mengubah apa pun dalam sketsa.

Sekarang Anda dapat meletakkan jari Anda di sensor: kunci akan berfungsi sebagai respons terhadap sidik jari Anda. Video di bawah ini menunjukkan proyek kunci pintar otomatis beraksi:

Pengembangan lebih lanjut dari proyek Smart Lock

Dalam proyek kami, remote control kunci pintu menggunakan sidik jari dilepaskan.

Jangan ragu untuk bereksperimen, memodifikasi sketsa, dan memanfaatkannya. Misalnya, Anda dapat mengganti kunci pintu elektronik dengan relai untuk mengontrol daya printer 3D, lengan robot, atau quadcopter...

Anda dapat mengembangkan "rumah pintar" Anda. Misalnya, mengaktifkan sistem irigasi pada Arduino dari jarak jauh atau menyalakan lampu di sebuah ruangan... Perlu diingat bahwa Anda dapat mengaktifkan perangkat dalam jumlah yang hampir tidak terbatas secara bersamaan menggunakan Adafruit IO.

Tinggalkan komentar, pertanyaan, dan bagikan pengalaman pribadi Anda di bawah ini. Dalam diskusi, ide dan proyek baru sering lahir!

Proyek ini bersifat modular, yaitu Anda dapat menghubungkan / memutuskan elemen yang berbeda dan mendapatkan fungsionalitas yang berbeda. Gambar-gambar di atas menunjukkan varian dengan fungsionalitas penuh, yaitu:

  • mekanisme penguncian. Digunakan untuk BUKA dan TUTUP pintu. Proyek ini mempertimbangkan penggunaan tiga mekanisme berbeda:
    • Servo. Ada yang besar, ada yang kecil. Sangat kompak, dan ditambah dengan deadbolt yang berat - pilihan yang bagus
    • Kunci pintu mobil listrik. Hal yang besar dan kuat, tetapi hanya memakan arus yang gila
    • Kait solenoida. Pilihan yang bagus, karena menutup sendiri

    Dalam pengaturan firmware, Anda dapat memilih salah satu dari tiga jenis (pengaturan lock_type)

  • Tombol di dalam. Digunakan untuk MEMBUKA dan TUTUP pintu dari dalam. Dapat diletakkan di gagang pintu (sisi telapak tangan atau sisi jari), di pintu itu sendiri, atau di kusen
  • Tombol di luar. Berfungsi untuk TUTUP pintu, sekaligus untuk BANGUN dari hemat energi. Dapat diletakkan di gagang pintu (sisi telapak tangan atau sisi jari), di pintu itu sendiri, atau di kusen
  • cuplikan untuk menutup pintu. Berfungsi untuk menutup otomatis kunci saat pintu tertutup. Mereka mungkin:
    • tombol kebijaksanaan
    • Sensor hall + magnet di pintu itu sendiri
    • Saklar buluh + magnet di pintu itu sendiri
  • rahasia akses tombol reset. Digunakan untuk mereset kata sandi / memasukkan kata sandi baru / menghafal kunci / kombinasi baru, dll. Mungkin tersembunyi di suatu tempat di dalam tubuh
  • Dioda pemancar cahaya untuk menunjukkan operasi. RGB LED, warna merah dan hijau digunakan (ketika dicampur memberi warna kuning):
    • Hijau menyala - kunci BUKA. Nyala untuk mengingat untuk menutup pintu
    • Kuning solid - sistem aktif dan menunggu kata sandi
    • Berkedip merah - baterai lemah

Salah satu elemen ini dapat dikecualikan dari sistem:

  • Kami menghapus trailernya. Di firmware di pengaturan, kami juga mematikannya (pengaturan tail_button). Sekarang untuk menutup kunci, Anda perlu menekan tombol
  • Lepaskan tombol luar. Di firmware di pengaturan, kami juga mematikannya (pengaturan bangun_tombol). Sekarang sistem tidak perlu dibangunkan, itu bangun dengan sendirinya (konsumsi daya sedikit lebih tinggi). Dan juga kami tidak lagi memiliki tombol tutup di bagian depan pintu, dan kami membutuhkan sakelar batas. Entah kastil itu benar-benar
  • Kami menghapus tombol internal. Opsi ini cocok untuk lemari dan brankas. Anda tidak perlu mengubah apa pun di pengaturan.
  • Kami menghapus LED. Anda tidak perlu mengubah apa pun di pengaturan.
  • Tombol reset akses dapat disolder setelah penggunaan pertama, atau Anda dapat menulis ulang kode untuk diri sendiri
  • Pintu tertutup, ditekan LUAR - bangun, tunggu entri kata sandi/tag RFID/kunci elektronik/sidik jari
  • Pintu ditutup, sistem sudah bangun, menunggu kata sandi dimasukkan. Waktu dapat diatur (pengaturan waktu tidur)
  • Pintu tertutup, kata sandi/tag/kunci dimasukkan, dll. - membuka
  • Pintu tertutup, ditekan DI DALAM - buka
  • Pintu terbuka, tekan LUAR - tutup
  • Pintu terbuka, tekan DI DALAM - tutup
  • Pintu terbuka, tombol LIMIT ditekan - tutup

Kunci dirancang untuk beroperasi dengan daya baterai dalam mode hemat daya rendah (Aktifkan Nonaktifkan: pengaturan sleep_enable), yaitu:

  • Bangun setiap beberapa detik, ikuti EVENT (opsional, jika tidak ada tombol di luar. Anda dapat mengaktifkannya di pengaturan bangun_tombol)
  • Pantau voltase baterai setiap beberapa menit (pengaturan hidup/mati baterai_monitor)
  • Jika baterai habis (tegangan diatur dalam pengaturan bat_low):
    • buka pintunya (opsional, dapat dikonfigurasi di firmware open_bat_low)
    • melarang pembukaan dan penutupan lebih lanjut
    • berkedip LED merah saat menekan tombol
    • berhenti mengikuti ACARA (yaitu entri/label kata sandi, dll.)

Saat sistem terjaga, tekan tombol ubah kata sandi (tombol tersembunyi). Kami jatuh ke dalam mode perubahan kata sandi:
Masukkan kata sandi dari angka ( MAKSIMUM 10 NOMOR!!!)

  • Saat Anda menekan *, kata sandi ditulis ke memori dan sistem keluar dari perubahan kata sandi
  • Ketika Anda menekan #, kata sandi diatur ulang (Anda dapat memasukkannya lagi)
  • Jika Anda tidak menekan apa pun selama 10 detik, kami akan secara otomatis keluar dari mode perubahan kata sandi, kata sandi akan tetap yang lama

Saat sistem tidak tidur (dibangunkan oleh tombol atau tidur dinonaktifkan), tekan * untuk masuk ke mode entri kata sandi
Jika sistem tidur dan bangun secara berkala untuk memeriksa EVENT, maka tekan * dan tahan hingga LED merah menyala
Mode masukan kata sandi:

  • Pemrosesan kata sandi dilakukan sedemikian rupa sehingga kata sandi yang benar dihitung hanya ketika urutan angka yang dimasukkan benar, yaitu, jika kata sandinya 345, maka Anda dapat memasukkan angka apa pun hingga muncul urutan 345, yaitu. 30984570345 akan membuka kunci karena berakhir pada 345.
  • Jika kata sandinya benar, pintu akan terbuka
  • Jika Anda tidak menekan apa pun, setelah 10 detik sistem akan kembali ke mode normal (siaga)
  • Jika Anda menekan #, kami akan segera keluar dari mode entri kata sandi
  • Jika Anda menekan tombol rahasia untuk mengubah kata sandi dalam mode entri kata sandi, maka kami juga akan keluar darinya

Pelajaran hari ini adalah tentang bagaimana menggunakan pembaca RFID dengan Arduino untuk membuat sistem penguncian sederhana, dengan kata sederhana - kunci RFID.

RFID (Ind. Radio Frequency IDentification, radio frequency identification) adalah metode identifikasi otomatis objek di mana data yang disimpan dalam transponder, atau tag RFID, dibaca atau ditulis menggunakan sinyal radio. Setiap sistem RFID terdiri dari pembaca (pembaca, pembaca atau interogator) dan transponder (alias tag RFID, terkadang istilah tag RFID juga digunakan).

Tutorial akan menggunakan tag RFID dengan Arduino. Perangkat membaca pengidentifikasi unik (UID) dari setiap tag RFID yang kami tempatkan di sebelah pembaca dan menampilkannya di layar OLED. Jika UID dari tag sama dengan nilai yang telah ditentukan yang disimpan dalam memori Arduino, maka kita akan melihat pesan “Tidak Terkunci” di layar. Jika pengidentifikasi unik tidak sama dengan nilai yang telah ditentukan, pesan "Tidak Terkunci" tidak akan muncul - lihat foto di bawah.

Kastil ditutup

Kastil terbuka

Detail yang diperlukan untuk membuat proyek ini:

  • Pembaca RFID RC522
  • layar OLED
  • Papan roti
  • kabel

Detil tambahan:

  • Baterai (bank daya)

Total biaya komponen proyek adalah sekitar $15.

Langkah 2: Pembaca RFID RC522

Setiap tag RFID memiliki chip kecil (kartu putih di foto). Jika Anda mengarahkan senter ke kartu RFID ini, Anda dapat melihat chip kecil dan gulungan yang mengelilinginya. Chip ini tidak memiliki baterai untuk menghasilkan tenaga. Ini menerima daya dari pembaca secara nirkabel menggunakan koil besar ini. Dimungkinkan untuk membaca kartu RFID seperti ini dari jarak hingga 20mm.

Chip yang sama ada di tag fob kunci RFID.

Setiap tag RFID memiliki nomor unik yang mengidentifikasinya. Ini adalah UID yang ditampilkan pada layar OLED. Dengan pengecualian UID ini, setiap tag dapat menyimpan data. Jenis kartu ini dapat menyimpan hingga 1.000 data. Mengesankan, bukan? Fitur ini tidak akan digunakan hari ini. Saat ini, yang menarik hanyalah identifikasi kartu tertentu oleh UID-nya. Pembaca RFID dan kedua kartu RFID ini berharga sekitar $4.

Langkah 3 Tampilan OLED

Tutorial menggunakan monitor OLED I2C 0,96" 128x64.

Ini adalah tampilan yang sangat bagus untuk digunakan dengan Arduino. Ini adalah layar OLED dan itu berarti konsumsi dayanya rendah. Konsumsi daya layar ini sekitar 10-20mA dan tergantung pada jumlah piksel.

Layar memiliki resolusi 128 x 64 piksel dan berukuran kecil. Ada dua opsi tampilan. Salah satunya adalah monokrom, dan yang lainnya, seperti yang digunakan dalam tutorial, dapat menampilkan dua warna: kuning dan biru. Bagian atas layar hanya boleh berwarna kuning dan bagian bawah berwarna biru.

Layar OLED ini sangat cerah dan memiliki perpustakaan yang hebat dan sangat bagus yang telah dikembangkan Adafruit untuk tampilan ini. Selain itu, layar menggunakan antarmuka I2C, sehingga menghubungkan ke Arduino sangat mudah.

Anda hanya perlu menghubungkan dua kabel kecuali Vcc dan GND. Jika Anda baru mengenal Arduino dan ingin menggunakan tampilan yang murah dan sederhana dalam proyek Anda, mulailah dari sini.

Langkah 4: Menempatkan Semua Bagian Bersama

Komunikasi dengan papan Arduino Uno sangat sederhana. Pertama, sambungkan daya ke pembaca dan layar.

Hati-hati, pembaca RFID harus terhubung ke output 3.3V dari Arduino Uno atau akan rusak.

Karena tampilan juga dapat berjalan pada 3.3V, kami menghubungkan VCC dari kedua modul ke rel papan tempat memotong roti yang positif. Rel ini kemudian dihubungkan ke output 3.3V dari Arduino Uno. Kemudian kami menghubungkan kedua ground (GND) ke bus ground papan tempat memotong roti. Kami kemudian menghubungkan bus GND dari papan tempat memotong roti ke Arduino GND.

Tampilan OLED → Arduino

SCL → Pin Analog 5

SDA → Pin Analog 4

Pembaca RFID → Arduino

RST → Pin Digital 9

IRQ → Tidak terhubung

MISO → Pin Digital 12

MOSI → Pin Digital 11

SCK → Pin Digital 13

SDA → Pin Digital 10

Modul pembaca RFID menggunakan antarmuka SPI untuk berkomunikasi dengan Arduino. Jadi kita akan menggunakan pin SPI hardware Arduino UNO.

Pin RST menuju ke pin digital 9. Pin IRQ tetap tidak terhubung. Pin MISO ke pin digital 12. Pin MOSI ke pin digital 11. Pin SCK ke pin digital 13, dan terakhir pin SDA ke pin digital 10. Itu saja.

Pembaca RFID terhubung. Sekarang kita perlu menghubungkan tampilan OLED ke Arduino menggunakan antarmuka I2C. Jadi pin SCL pada layar menuju ke Pin analog 5 dan SDA pada layar ke Pin analog 4. Jika sekarang kita menghidupkan proyek dan menempatkan kartu RFID di sebelah pembaca, kita dapat melihat bahwa proyek bekerja dengan baik.

Langkah 5: Kode Proyek

Agar kode proyek dapat dikompilasi, kita perlu menyertakan beberapa pustaka. Pertama-tama, kita membutuhkan perpustakaan MFRC522 Rfid.

Untuk menginstalnya, buka Sketsa -> Sertakan Perpustakaan -> Kelola perpustakaan(Pengelolaan perpustakaan). Temukan MFRC522 dan instal.

Kami juga membutuhkan perpustakaan Adafruit SSD1306 dan perpustakaan Adafruit GFX untuk ditampilkan.

Instal kedua perpustakaan. Pustaka Adafruit SSD1306 membutuhkan sedikit modifikasi. Masuk ke folder Arduino -> Perpustakaan, buka folder Adafruit SSD1306 dan edit perpustakaan Adafruit_SSD1306.h. Komentari baris 70 dan batalkan komentar pada baris 69 karena Layar memiliki resolusi 128x64.

Pertama, kami mendeklarasikan nilai tag RFID yang harus dikenali Arduino. Ini adalah array bilangan bulat:

int kode = (69.141,8.136); // UID

Kami kemudian menginisialisasi pembaca RFID dan menampilkan:

Rfid.PCD_Init(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Setelah itu, dalam fungsi loop, kami memeriksa tag pada pembaca setiap 100 ms.

Jika pembaca memiliki tag, kami membaca UID-nya dan mencetaknya di layar. Kami kemudian membandingkan UID dari tag yang baru saja kami baca dengan nilai yang disimpan dalam variabel kode. Jika nilainya sama, kami menampilkan pesan UNLOCK, jika tidak kami tidak akan menampilkan pesan ini.

If(cocok) ( Serial.println("\nSaya tahu kartu ini!"); printUnlockMessage(); )else ( Serial.println("\nKartu Tidak Dikenal"); )

Tentu saja, Anda dapat mengubah kode ini untuk menyimpan lebih dari 1 nilai UID sehingga proyek mengenali lebih banyak tag RFID. Ini hanya sebuah contoh.

Kode proyek:

#termasuk #termasuk #termasuk #termasuk #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #menentukan SS_PIN 10 #menentukan RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Instance dari kelas MFRC522::MIFARE_Key kunci; int kode = (69.141,8.136); //Ini adalah UID yang tersimpan int codeRead = 0; String uidString; void setup() ( Serial.begin(9600); SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inisialisasi dengan I2C addr 0x3D (untuk 128x64) // Hapus buffer.display.clearDisplay(); display.display(); display.setTextColor(WHITE); // atau HITAM); display.setTextSize(2); display.setCursor(10,0); display.print("Kunci RFID"); tampilan.display(); ) void loop() ( if(rfid.PICC_IsNewCardPresent()) ( readRFID(); ) delay(100); ) void readRFID() ( rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC type: ") ); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); // Periksa apakah PICC tipe MIFARE Klasik if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) ( Serial.println(F("Tag Anda bukan tipe MIFARE Klasik.")); return; ) clearUID(); Serial.println(" UID PICC yang dipindai:"); printDec(rfid.uid.uidByte, rfid.uid.size); uidString = String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+" "+ String(rfid.uid.uidByte)+ " "+String(rfid.uid.uidByte); printUID(); int i = 0; boolean match = true; while(i

Langkah 6: Hasil Akhir

Seperti yang Anda lihat dari pelajaran - dengan sedikit uang Anda dapat menambahkan pembaca RFID ke proyek Anda. Anda dapat dengan mudah membuat sistem keamanan dengan pembaca ini atau membuat proyek yang lebih menarik, misalnya, sehingga data dari drive USB hanya dapat dibaca setelah dibuka kuncinya.