Blocare inteligentă automată și Arduino. Blocare cu cod de la Arduino Blocare electronică de la Arduino rfid

Gazda canalului YouTube „AlexGyver” a fost rugat să facă o încuietoare electronică cu propriile mâini. Bun venit la seria de videoclipuri despre încuietori electronice pe arduino. ÎN schiță generală maestrul va explica ideea.

Există mai multe opțiuni pentru crearea unui sistem de blocare electronică. Cel mai adesea folosit pentru a încuia uși, sertare și dulapuri. Și, de asemenea, pentru crearea de cache și seifuri secrete. Prin urmare, trebuie să faceți un aspect care să fie convenabil de lucrat și să arate clar și în detaliu structura sistemului din interior și din exterior. Așa că am decis să fac un cadru cu o ușă. Pentru a face acest lucru veți avea nevoie de o grindă pătrată 30 x 30. Placaj 10mm. Balamale de ușă. Inițial am vrut să fac o cutie de placaj, dar mi-am amintit că camera era plină de piese de schimb. Nu există unde să pui o astfel de cutie. Prin urmare, se va face o machetă. Dacă cineva dorește să instaleze o încuietoare electronică pentru sine, atunci uitându-se la aspect, poate repeta totul cu ușurință.

Veți găsi tot ce aveți nevoie pentru un castel în acest magazin chinezesc.

Scopul este de a dezvolta cât mai mult posibil scheme eficienteși firmware pentru încuietori electronice. Puteți utiliza aceste rezultate pentru a instala aceste sisteme pe uși, sertare, dulapuri și ascunzători.


Ușa este gata. Acum trebuie să ne dăm seama cum să deschidem și să închidem electronic. Un dispozitiv de blocare puternic cu solenoid de la aliexpress este potrivit pentru aceste scopuri (link către magazinul de mai sus). Dacă aplicați tensiune la bornele, acesta se va deschide. Rezistența bobinei este de aproape 12 ohmi, ceea ce înseamnă că la o tensiune de 12 volți bobina va consuma aproximativ 1 amper. Atât o baterie cu litiu, cât și un modul de amplificare pot face față acestei sarcini. Ajustați la tensiunea corespunzătoare. Deși puțin mai mult este posibil. Încuietoarea este atașată la interior ușile la distanță, astfel încât să nu prindă marginea și să se poată trânti. Încuietoarea ar trebui să aibă o contrapartidă sub forma unei cutii de metal. Folosirea acestuia fără acest lucru este incomod și incorectă. Va trebui să instalăm un pas, cel puțin pentru a crea aspectul de funcționare normală.

În modul inactiv, zăvorul se deschide normal, adică dacă există un mâner pe ușă, aplicăm un impuls și deschidem ușa de mâner. Dar dacă folosești un arc, această metodă nu mai este potrivită. Convertorul de amplificare nu poate face față sarcinii. Pentru a deschide ușa cu arc va trebui să utilizați baterii mai mari și un invertor mai puternic. Sau folosiți o sursă de alimentare de rețea și uitați de autonomia sistemului. Magazinele chinezești au încuietori dimensiuni mari. Sunt potrivite pentru sertare. Alimentarea poate fi furnizată folosind un releu sau un tranzistor mosfet sau un comutator de alimentare pe același tranzistor. O opțiune mai interesantă și mai puțin costisitoare este o servomotor conectată la o biela cu orice element de blocare - un zăvor sau un șurub mai serios. Este posibil să aveți nevoie și de o bucată de ac de tricotat din oțel care să acționeze ca o bielă. Un astfel de sistem nu necesită curent mare. Dar ocupă mai mult spațiu și are o logică de control mai vicleană.

Există două tipuri de servo-uri. Cele mici, slabe și cele mari, puternice, care pot fi împinse cu ușurință în găurile din știfturi metalice serioase. Ambele opțiuni prezentate funcționează la ambele uși și sertare. Va trebui să mânuiești cutia, făcând o gaură în peretele retractabil.

A doua parte

Acest proiect este modular, adică poate fi conectat/deconectat elemente diferiteși obțineți diferite funcționalități. Imaginile de mai sus arată o opțiune cu funcționalitate completă, și anume:

  • Mecanism de blocare. Servește la DESCHIDERE și ÎNCHIDERE ușa. Acest proiect explorează utilizarea a trei mecanisme diferite:
    • Servo. Sunt mari, sunt mici. Foarte compact și cuplat cu un șurub greu - o opțiune excelentă
    • Închidere electrică a ușii mașinii. Este un lucru mare și puternic, dar consumă curenți nebuni.
    • Încuietoare cu solenoid. O opțiune bună, pentru că se închide singur

    În setările firmware-ului puteți selecta oricare dintre trei tipuri(setare tip_blocare)

  • Buton în interior. Servește la DESCHIDERE și ÎNCHIDERE ușa din interior. Poate fi așezat pe mânerul ușii (partea palmei sau partea degetului), pe ușa propriu-zisă sau pe montant
  • Buton afară. Servește pentru ÎNCHIDEREA ușii, precum și pentru TREZIREA pentru a economisi energie. Poate fi așezat pe mânerul ușii (partea palmei sau partea degetului), pe ușa propriu-zisă sau pe montant
  • Capac final să închidă ușa. Servește la închiderea automată a încuietorilor atunci când ușa este închisă. Ar putea fi:
    • Butonul de tact
    • Senzor Hall + magnet pe usa propriu-zisa
    • Comutator lamelă + magnet pe ușă în sine
  • Secret accesați butonul de resetare. Folosit pentru a reseta parola/a introduce o nouă parolă/a aminti o nouă cheie/combinație etc. Poate fi ascuns undeva în carcasă
  • Dioda electro luminiscenta pentru a indica funcționarea. LED RGB, roșu și culori verzi(atunci cand sunt amestecate dau galben):
    • Lumina verde este aprinsă - încuietoarea este DESCHIS. Se aprinde ca sa nu uiti sa inchizi usa
    • Galben este aprins - sistemul s-a trezit și așteaptă introducerea unei parole
    • Roșu intermitent - baterie descărcată

Oricare dintre aceste elemente poate fi exclus din sistem:

  • Scoatem comutatorul de limita. În firmware-ul din setări îl dezactivăm și (setarea buton_coada). Acum trebuie să apăsați un buton pentru a închide încuietoarea.
  • Scoateți butonul extern. În firmware-ul din setări îl dezactivăm și (setarea buton_trezire). Acum sistemul nu trebuie trezit, se trezește singur (consumul de energie este puțin mai mare). Și acum nu avem un buton de închidere pe partea din față a ușii și avem nevoie de un comutator de limită. Sau încuietoarea este un zăvor
  • Scoateți butonul intern. Această opțiune este potrivită pentru dulapuri și seifuri. Nu trebuie să modificați nimic în setări
  • Scoatem LED-ul. Nu trebuie să modificați nimic în setări
  • Butonul de resetare a accesului poate fi dezlipit după prima utilizare sau codul poate fi rescris pentru a se potrivi nevoilor dvs.
  • Ușa închisă, apăsați în EXTERIOR - treziți-vă, așteptați introducerea parolei/etichetei RFID/cheia electronică/amprenta digitală
  • Ușa este închisă, sistemul este treaz, așteptând introducerea parolei. Ora poate fi reglată (setare ora de dormit)
  • Ușa este închisă, a fost introdusă o parolă/etichetă/cheie etc. - deschis
  • Ușa este închisă, apăsați INTERIOR - deschideți
  • Ușa este deschisă, apăsați în EXTERIOR - închideți
  • Ușa este deschisă, apăsați INTERIOR - închideți
  • Ușa este deschisă, LIMIT este apăsat - închide

Blocarea este proiectată să funcționeze pe baterie într-un mod de economisire scăzută a energiei (activare dezactivare: setare sleep_enable), și anume:

  • Treziți-vă la fiecare câteva secunde, monitorizați EVENIMENTUL (opțional dacă nu există niciun buton în exterior. Îl puteți activa în setări buton_trezire)
  • La fiecare câteva minute, monitorizați tensiunea bateriei (setare pornit/oprit baterie_monitor)
  • Dacă bateria este descărcată (tensiunea este setată în setare bat_low):
    • deschide ușa (opțional, poate fi configurat în firmware open_bat_low)
    • interzice deschiderea și închiderea ulterioară
    • Când apăsați un buton, LED-ul roșu clipește
    • opriți monitorizarea EVENIMENTULUI (adică introducerea parolei/eticheta etc.)

Când sistemul nu este în stare de repaus, apăsați butonul de schimbare a parolei (buton ascuns). Ne regăsim în modul de schimbare a parolei:
Introduceți o parolă formată din numere ( MAXIM 10 CIFRE!!!)

  • Când apăsați *, parola este scrisă în memorie și sistemul iese din schimbarea parolei
  • Când apăsați #, parola este resetată (o puteți introduce din nou)
  • Dacă nu apăsați nimic timp de 10 secunde, vom ieși automat din modul de schimbare a parolei, vechea parolă va rămâne

Când sistemul nu este în stare de repaus (trezit de buton sau somnul este dezactivat), apăsați * pentru a intra în modul de introducere a parolei
Dacă sistemul doarme și se trezește periodic pentru a verifica EVENIMENT, apoi apăsați * și mențineți apăsat până când LED-ul roșu se aprinde
Modul parolă:

  • Procesarea parolei se face în așa fel încât parola corectă să fie numărată doar atunci când este introdusă succesiunea corectă de numere, adică dacă parola este 345, atunci puteți introduce orice numere până când apare secvența 345, adică. 30984570345 va deschide lacătul deoarece se termină în 345.
  • Dacă parola este introdusă corect, ușa se va deschide
  • Dacă nu apăsați nimic, după 10 secunde sistemul va reveni la modul normal (standby).
  • Dacă apăsați #, vom ieși imediat din modul de introducere a parolei
  • Dacă apăsați butonul secret de schimbare a parolei în modul de introducere a parolei, veți ieși din acesta

Lecția de astăzi este despre cum să utilizați un cititor RFID cu Arduino pentru a crea un sistem simplu de blocare, în cuvinte simple- Blocare RFID.

RFID (English Radio Frequency IDentification, identificarea prin radiofrecvență) este o metodă de identificare automată a obiectelor în care datele stocate în așa-numitele transpondere, sau etichete RFID, sunt citite sau scrise folosind semnale radio. Orice sistem RFID constă dintr-un dispozitiv de citire (cititor, cititor sau interogator) și un transponder (cunoscut și sub denumirea de etichetă RFID, uneori se folosește și termenul de etichetă RFID).

Acest tutorial va folosi o etichetă RFID cu Arduino. Dispozitivul citește identificatorul unic (UID) al fiecărei etichete RFID pe care o plasăm lângă cititor și îl afișează pe afișajul OLED. Dacă UID-ul etichetei este egal cu valoarea predefinită care este stocată în memoria Arduino, atunci vom vedea mesajul „Unlocked” pe afișaj. Dacă ID-ul unic nu este egal cu o valoare predefinită, mesajul „Deblocat” nu va apărea - vezi fotografia de mai jos.

Castelul este închis

Lacătul este deschis

Piese necesare pentru a crea acest proiect:

  • Cititor RFID RC522
  • Afișaj OLED
  • Tabla de paine
  • Fire

Detalii suplimentare:

  • Baterie (powerbank)

Costul total al componentelor proiectului a fost de aproximativ 15 USD.

Pasul 2: Cititor RFID RC522

Fiecare etichetă RFID conține un mic cip (cardul alb prezentat în fotografie). Dacă aprindeți o lanternă pe acest card RFID, puteți vedea cip mic și bobina care îl înconjoară. Acest cip nu are o baterie pentru a genera energie. Primește putere de la cititor fără fir folosind această bobină mare. Este posibil să citiți un card RFID ca acesta de la o distanță de până la 20 mm.

Același cip există și în etichetele RFID pentru chei.

Fiecare etichetă RFID are un număr unic care o identifică. Acesta este UID-ul care este afișat pe afișajul OLED. Cu excepția acestui UID, fiecare etichetă poate stoca date. Acest tip de card poate stoca până la 1 mie de date. Impresionant, nu-i așa? Această funcție nu va fi utilizată astăzi. Astăzi, tot ceea ce interesează este identificarea unui anumit card prin UID-ul său. Costul cititorului RFID și al acestor două carduri RFID este de aproximativ 4 USD.

Pasul 3: Afișaj OLED

Lecția folosește un monitor OLED 128x64 I2C de 0,96 inchi.

Aceasta este foarte display bun pentru utilizare cu Arduino. Acesta este un afișaj OLED și asta înseamnă că are un consum redus de energie. Consumul de energie al acestui display este de aproximativ 10-20mA și depinde de numărul de pixeli.

Display-ul are o rezoluție de 128 pe 64 de pixeli și are dimensiuni mici. Există două opțiuni de afișare. Unul dintre ele este monocrom, iar celălalt, ca cel folosit în lecție, poate afișa două culori: galben și albastru. Partea de sus a ecranului poate fi doar galbenă, iar partea de jos poate fi doar albastră.

Acest ecran OLED este foarte luminos și are o bibliotecă grozavă și foarte frumoasă pe care Adafruit a dezvoltat-o ​​pentru acest afișaj. În plus, afișajul folosește o interfață I2C, astfel încât conectarea la Arduino este incredibil de ușoară.

Trebuie doar să conectați două fire, cu excepția Vcc și GND. Dacă sunteți nou în Arduino și doriți să utilizați un afișaj ieftin și simplu în proiectul dvs., începeți de aici.

Pasul 4: Conectarea tuturor pieselor

Comunicarea cu consiliul de administrație Arduino Uno foarte simplu. Mai întâi, conectați alimentarea atât la cititor, cât și la afișaj.

Atenție, cititorul RFID trebuie conectat la ieșirea de 3,3V de la Arduino Uno sau se va deteriora.

Deoarece afișajul poate funcționa și la 3,3V, conectăm VCC-ul de la ambele module la șina pozitivă a plăcii. Această magistrală este apoi conectată la ieșirea de 3,3 V de la Arduino Uno. Apoi conectăm ambele împământări (GND) la magistrala de împământare a plăcii. Apoi conectăm magistrala GND placa de breadboard la Arduino GND.

Afișaj OLED → Arduino

SCL → Pinul analogic 5

SDA → Pin analogic 4

Cititor RFID → Arduino

RST → Pinul digital 9

IRQ → Neconectat

MISO → Pinul digital 12

MOSI → Pin digital 11

SCK → Pinul digital 13

SDA → Pinul digital 10

Modulul cititor RFID folosește interfața SPI pentru a comunica cu Arduino. Deci vom folosi pini SPI hardware de la Arduino UNO.

Pinul RST trece la pinul digital 9. Pinul IRQ rămâne deconectat. Pinul MISO merge la pinul digital 12. Pinul MOSI merge la pinul digital 11. Pinul SCK merge la pinul digital 13 și, în final, pinul SDA merge la pinul digital 10. Asta este.

Cititorul RFID este conectat. Acum trebuie să conectăm afișajul OLED la Arduino folosind interfața I2C. Deci pinul SCL de pe afișaj merge la pinul analogic al pinului 5 și pinul SDA de pe afișaj la pinul analogic 4. Dacă acum pornim proiectul și plasăm cardul RFID lângă cititor, putem vedea că proiectul functioneaza bine.

Pasul 5: Codul proiectului

Pentru a compila codul proiectului, trebuie să includem câteva biblioteci. În primul rând, avem nevoie de biblioteca MFRC522 Rfid.

Pentru a-l instala, accesați Schiță -> Include biblioteci -> Gestionează biblioteci(Managementul Bibliotecii). Găsiți MFRC522 și instalați-l.

Avem nevoie și de biblioteca Adafruit SSD1306 și de biblioteca Adafruit GFX pentru afișare.

Instalați ambele biblioteci. Biblioteca Adafruit SSD1306 are nevoie de o mică modificare. Accesați folderul Arduino -> Biblioteci, deschideți folderul Adafruit SSD1306 și editați biblioteca Adafruit_SSD1306.h. Comentează linia 70 și anulează comentariile linia 69 pentru că Display-ul are o rezoluție de 128x64.

Mai întâi declarăm valoarea etichetei RFID pe care Arduino trebuie să o recunoască. Aceasta este o matrice de numere întregi:

Cod int = (69,141,8,136); // UID

Apoi inițializam cititorul RFID și afișăm:

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

După aceea, în funcția de buclă verificăm eticheta de pe cititor la fiecare 100 ms.

Dacă există o etichetă pe cititor, îi citim UID-ul și îl imprimăm pe afișaj. Apoi comparăm UID-ul etichetei pe care tocmai o citim cu valoarea care este stocată în variabila cod. Dacă valorile sunt aceleași, vom afișa mesajul DEBLOCARE, altfel nu vom afișa acest mesaj.

If(potrivire) ( Serial.println("\nCunosc acest card!"); printUnlockMessage(); )else ( Serial.println("\nCartel necunoscut"); )

Desigur, puteți schimba acest cod pentru a stoca mai mult de 1 valoare UID, astfel încât proiectul să recunoască mai multe etichete RFID. Acesta este doar un exemplu.

Cod proiect:

#include #include #include #include #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Instanța clasei MFRC522::MIFARE_Key key; cod int = (69,141,8,136); //Acesta este UID-ul stocat int codeRead = 0; String uidString; void setup() ( Serial.begin(9600); SPI.begin(); // Inițiază magistrala SPI rfid.PCD_Init(); // Inițiază MFRC522 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inițializează cu adresa I2C 0x3D (pentru 128x64) // Ștergeți memoria tampon display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(10,0); display.print("Blocare RFID"); display.display(); ) void loop() ( if(rfid.PICC_IsNewCardPresent()) ( readRFID(); ) delay(100); ) void readRFID() ( rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC tip: ") MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); TYPE_MIFARE_4K) (serial .println(F("Eticheta dvs. nu este de tip MIFARE Classic."); uidString = String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+" "+ String(rfid.uid.uidByte)+ " "+String(rfid.uid.uidByte()); ; potrivire booleană = adevărat;

Pasul 6: Rezultatul final

După cum puteți vedea din lecție, pentru bani puțini puteți adăuga un cititor RFID la proiectele dvs. Puteți crea cu ușurință un sistem de securitate folosind acest cititor sau puteți crea proiecte mai interesante, de exemplu, astfel încât datele de pe o unitate USB să fie citite numai după deblocare.

Progresul nu stă pe loc și „încuietori inteligente” apar din ce în ce mai mult pe ușile apartamentelor, garajelor și caselor.

O blocare similară se deschide atunci când apăsați un buton de pe smartphone. Din fericire, smartphone-urile și tabletele au intrat deja în viața noastră de zi cu zi. În unele cazuri, „lacătele inteligente” sunt conectate la „servicii cloud” precum Google Drive și sunt deschise de la distanță. În plus, această opțiune face posibilă acordarea accesului la deschiderea ușii altor persoane.

Acest proiect va implementa o versiune DIY a unei încuietori inteligente pe Arduino, care poate fi controlată de la distanță de oriunde în lume.

În plus, proiectul a adăugat posibilitatea de a deschide încuietoarea după identificarea unei amprente. În acest scop, va fi integrat un senzor de amprentă. Ambele opțiuni de deschidere a ușilor vor fi alimentate de platforma Adafruit IO.

O încuietoare ca aceasta poate fi un prim pas grozav în proiectul dvs. Smart Home.

Configurarea senzorului de amprentă

Pentru a lucra cu un senzor de amprentă, există o bibliotecă excelentă pentru Arduino, care simplifică foarte mult procesul de configurare a senzorului. Acest proiect folosește Arduino Uno. Pentru conectarea la Internet se folosește o placă Adafruit CC3000.

Să începem cu conectarea alimentării:

  • Conectați pinul de 5V de la placa Arduino la șina roșie de alimentare;
  • Pinul GND de la Arduino se conectează la șina albastră de pe placa de circuite fără lipire.

Să trecem la conectarea senzorului de amprentă:

  • Mai întâi conectați alimentarea. Pentru a face acest lucru, firul roșu este conectat la șina +5 V, iar firul negru la șina GND;
  • Firul alb al senzorului se conectează la pinul 4 de pe Arduino.
  • Firul verde merge la pinul 3 al microcontrolerului.

Acum să trecem la modulul CC3000:

  • Conectam pinul IRQ de la placa CC3000 la pinul 2 de pe Arduino.
  • VBAT - la pinul 5.
  • CS - la pinul 10.
  • După aceasta, trebuie să conectați pinii SPI la Arduino: MOSI, MISO și CLK - la pinii 11, 12 și, respectiv, 13.

Ei bine, la sfârșit trebuie să furnizați energie: Vin - la Arduino 5V (șină roșie pe placa de circuit) și GND la GND (șină albastră pe placa).

O fotografie a proiectului complet asamblat este prezentată mai jos:

Înainte de a dezvolta o schiță care va încărca date pe Adafruit IO, trebuie să transferați datele despre amprenta dvs. la senzor. Altfel, nu te va recunoaște pe viitor;). Vă recomandăm să calibrați senzorul de amprentă folosind Arduino separat. Dacă este prima dată când lucrați cu acest senzor, vă recomandăm să vă familiarizați cu procesul de calibrare și cu instrucțiunile detaliate pentru lucrul cu senzorul de amprentă.

Dacă nu ați făcut deja acest lucru, vă rugăm să creați un cont la Adafruit IO.

După aceasta, putem trece la următoarea etapă de dezvoltare a unui „blocare inteligent” pe Arduino: și anume, dezvoltarea unei schițe care va transmite date către Adafruit IO. Deoarece programul este destul de voluminos, în acest articol vom evidenția și luăm în considerare doar părțile sale principale, apoi vom oferi un link către GitHub, de unde puteți descărca schița completă.

Schița începe prin încărcarea tuturor bibliotecilor necesare:

#include

#include

#include

#include „Adafruit_MQTT.h”

#include „Adafruit_MQTT_CC3000.h”

#include

#include >

După aceasta, trebuie să corectați ușor schița inserând parametrii rețelei WiFi, specificând SSID-ul și parola:

#define WLAN_SECURITY WLAN_SEC_WPA2>

În plus, trebuie să introduceți numele și cheia AIO pentru a vă conecta la contul Adafruit IO:

#define AIO_SERVERPORT 1883

#define AIO_USERNAME „adafruit_io_name”

#define AIO_KEY "adafruit_io_key">

Următoarele linii sunt responsabile pentru interacțiunea și procesarea datelor de la senzorul de amprentă. Dacă senzorul a fost activat (amprenta se potrivește), va fi „1”:

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

Adafruit_MQTT_Publish fingerprint = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

În plus, trebuie să creăm o instanță a obiectului SoftwareSerial pentru senzorul nostru:

SoftwareSerial mySerial(3, 4);

După aceasta, putem crea un obiect pentru senzorul nostru:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

În interiorul schiței indicăm ce fingerID ar trebui să activeze blocarea în viitor. Acest exemplu folosește 0, care corespunde ID-ului primei amprente utilizate de senzor:

int fingerID = 0;

După aceasta, inițializam contorul și întârziem proiectul nostru. În esență, dorim ca încuietoarea să se activeze automat odată deschisă. Acest exemplu utilizează o întârziere de 10 secunde, dar puteți ajusta această valoare pentru a se potrivi nevoilor dvs.:

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

În corpul funcției setup(), inițializam senzorul de amprentă și ne asigurăm că cipul CC3000 este conectat la rețeaua WiFi.

În corpul funcției loop() ne conectăm la Adafruit IO. Următoarea linie este responsabilă pentru aceasta:

După conectarea la platforma Adafruit IO, verificăm ultima amprentă. Dacă se potrivește și blocarea nu este activată, trimitem „1” la Adafruit IO pentru procesare:

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

Serial.println(F("Acces acordat!"));

lockState = adevărat;

Serial.println(F("Eșuat"));

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

lastActivation = milis();

Dacă în cadrul funcției loop() blocarea este activată și am atins valoarea de întârziere indicată mai sus, trimitem „0”:

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

lockState = fals;

dacă (! amprentă.publicați(stat)) (

Serial.println(F("Eșuat"));

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

Puteți descărca cea mai recentă versiune a codului de pe GitHub.

Este timpul să ne testăm proiectul! Nu uitați să descărcați și să instalați toate bibliotecile necesare pentru Arduino!

Asigurați-vă că ați făcut toate modificările necesare schiței și încărcați-o pe Arduino. După aceea, deschideți fereastra Monitor serial.

Când Arduino se conectează la Rețele WiFi, senzorul de amprentă va clipi roșu. Puneți degetul pe senzor. Numărul ID ar trebui să fie afișat în fereastra monitorului serial. Dacă se potrivește, va apărea mesajul „OK!”. Aceasta înseamnă că datele au fost trimise către serverele Adafruit IO.

Diagrama și schița pentru configurarea ulterioară a încuietorii folosind exemplul unui LED

Acum să ne ocupăm de acea parte a proiectului care este direct responsabilă de management încuietoare. Pentru a vă conecta la retea fara fir iar activând/dezactivând blocarea, veți avea nevoie de un modul suplimentar Adafruit ESP8266 (modulul ESP8266 nu trebuie să fie de la Adafruit). Folosind exemplul de mai jos, puteți evalua cât de ușor este să faceți schimb de date între două platforme (Arduino și ESP8266) folosind Adafruit IO.

În această secțiune nu vom lucra direct cu blocarea. În schimb, vom conecta pur și simplu LED-ul la pinul la care încuietoarea va fi conectată mai târziu. Acest lucru ne va oferi posibilitatea de a testa codul nostru fără a ne adânci în detaliile designului lacătului.

Schema este destul de simplă: instalați mai întâi ESP8266 pe placa. După aceasta, instalați LED-ul. Nu uitați că piciorul lung (pozitiv) al LED-ului este conectat printr-un rezistor. Al doilea picior al rezistenței este conectat la pinul 5 de pe modulul ESP8266. Conectam al doilea (catod) al LED-ului la pinul GND de pe ESP8266.

Complet circuit asamblat prezentat în fotografia de mai jos.


Acum să ne uităm la schița pe care o folosim pentru acest proiect. Din nou, codul este destul de mare și complex, așa că ne vom uita doar la părțile sale principale:

Începem prin a conecta bibliotecile necesare:

#include

#include „Adafruit_MQTT.h”

#include „Adafruit_MQTT_Client.h”

Configurarea setărilor WiFi:

#define WLAN_SSID „your_wifi_ssid”

#define WLAN_PASS „parola_wifi”

#define WLAN_SECURITY WLAN_SEC_WPA2

Configuram si parametrii Adafruit IO. La fel ca în secțiunea anterioară:

#define AIO_SERVER „io.adafruit.com”

#define AIO_SERVERPORT 1883

#define AIO_USERNAME „adafruit_io_username”

#define AIO_KEY „adafruit_io_key”

Indicăm la ce pin am conectat LED-ul (în viitor acesta va fi blocarea sau releul nostru):

int relayPin = 5;

Interacțiunea cu senzorul de amprentă, ca în secțiunea anterioară:

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

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

În corpul funcției setup() indicăm că pinul la care este conectat LED-ul ar trebui să funcționeze în modul OUTPUT:

pinMode(relayPin, OUTPUT);

În bucla loop(), verificăm mai întâi dacă suntem conectați la Adafruit IO:

După aceasta, verificăm ce semnal este primit. Dacă se transmite „1”, activăm pinul pe care l-am declarat mai devreme, la care este conectat LED-ul nostru. Dacă primim „0”, transferăm contactul în starea „scăzută”:

Adafruit_MQTT_Subscribe *abonament;

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

dacă (abonament == &lock) (

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

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

// Salvați comanda în șir de date

Comanda String = String((char *)lock.lastread);

dacă (comandă == "0") (

digitalWrite(relayPin, LOW);

dacă (comandă == „1”) (

digitalWrite(relayPin, HIGH);

Găsi ultima versiune Puteți găsi schița pe GitHub.

Este timpul să ne testăm proiectul. Nu uitați să descărcați toate bibliotecile necesare pentru Arduino și să verificați dacă ați făcut modificările corecte schiței.

Pentru a programa cipul ESP8266, puteți utiliza un simplu convertor USB-FTDI.

Încărcați schița în Arduino și deschideți fereastra Monitor serial. În această etapă, am verificat pur și simplu dacă ne-am putut conecta la Adafruit IO: ne vom uita în continuare la funcționalitatea disponibilă.

Testarea proiectului

Acum să începem testarea! Accesați meniul de utilizator al Adafruit IO, sub meniul Feeds. Verificați dacă sunt create sau nu canalele de amprentă și de blocare (în ecranul de imprimare de mai jos, acestea sunt liniile de amprentă și de blocare):


Dacă nu există, va trebui să le creați manual.

Acum trebuie să asigurăm schimbul de date între canalele de amprentă și de blocare. Canalul de blocare trebuie să ia valoarea „1” când canalul de amprentă ia valoarea „1” și invers.

Pentru a face acest lucru, folosim un instrument Adafruit IO foarte puternic: declanșatoarele. Declanșatoarele sunt în esență condiții pe care le puteți aplica canalelor configurate. Adică, pot fi folosite pentru a interconecta două canale.

Creați un nou declanșator reactiv din secțiunea Declanșatoare din Adafruit IO. Acest lucru va oferi posibilitatea de a schimba date între senzorul de amprentă și canalele de blocare:


Iată cum ar trebui să arate când ambele declanșatoare sunt configurate:

Toate! Acum putem testa proiectul nostru! Punem degetul pe senzor și vedem cum Arduino a început să clipească cu un LED care corespunde transmisiei de date. După aceasta, LED-ul de pe modulul ESP8266 ar trebui să înceapă să clipească. Aceasta înseamnă că a început să primească date prin MQTT. LED-ul de pe placa de circuite ar trebui să se aprindă și el în acest moment.

După întârzierea pe care ați setat-o ​​în schiță (valoarea implicită este de 10 secunde), LED-ul se va stinge. Felicitări! Puteți controla LED-ul cu amprenta dvs. de oriunde în lume!

Configurarea unei încuietori electronice

Am ajuns la ultima parte a proiectului: conectarea directă și controlul unei încuietori electronice cu folosind Arduino si un senzor de amprenta. Proiectul nu este ușor, puteți folosi toate sursele în forma în care sunt prezentate mai sus, dar conectați un releu în loc de un LED.

Pentru a conecta direct blocarea, veți avea nevoie de componente suplimentare: o sursă de alimentare de 12 V, o mufă pentru conectarea energiei, un tranzistor (V în acest exemplu Se folosește MOSFET IRLB8721PbF, dar se poate folosi altul, de exemplu, un tranzistor bipolar TIP102. Dacă utilizați un tranzistor bipolar, va trebui să adăugați un rezistor.

Prezentat mai jos schema electrica conectarea tuturor componentelor la modulul ESP8266:


Rețineți că, dacă utilizați un tranzistor MOSFET, nu veți avea nevoie de un rezistor între pinul 5 al modulului ESP8266 și tranzistor.

Proiectul complet asamblat este prezentat în fotografia de mai jos:


Alimentați modulul ESP8266 folosind modulul FTDI și conectați sursa de alimentare de 12 V la mufă. Dacă ați folosit pinii recomandați mai sus pentru conectare, nu va trebui să schimbați nimic în schiță.

Acum puteți pune degetul pe senzor: blocarea ar trebui să funcționeze ca răspuns la amprenta dvs. Videoclipul de mai jos arată proiectul de blocare inteligentă automată în acțiune:

Dezvoltarea în continuare a proiectului Smart Lock

Lansat în proiectul nostru telecomandăîncuietoarea ușii folosind amprenta dvs.

Simțiți-vă liber să experimentați, să modificați schița și legarea. De exemplu, puteți înlocui o încuietoare electronică a ușii cu un releu pentru a controla puterea imprimantei 3D, a brațului robotizat sau a quadcopterului...

Îți poți dezvolta casă inteligentă„. De exemplu, activați de la distanță un sistem de irigare pe Arduino sau aprindeți luminile într-o cameră... Nu uitați că puteți activa simultan un număr aproape nelimitat de dispozitive folosind Adafruit IO.

Lăsați comentariile, întrebările și distribuiți experienta personala de mai jos. Noi idei și proiecte se nasc adesea în discuții!