În această lecție, vom învăța cum să facem un sistem simplu care va debloca încuietoarea folosind o cheie electronică (Tag).
În viitor, puteți modifica și extinde funcționalitatea. De exemplu, adăugați funcția „adăugați chei noi și eliminați-le din memorie”. În cazul de bază, luați în considerare un exemplu simplu, când un identificator unic de cheie este prestabilit în codul programului.
În acest tutorial vom avea nevoie de:
Pentru a implementa proiectul, trebuie să instalăm bibliotecile:
2) Acum trebuie să conectați un Buzzer, care va da un semnal dacă cheia este declanșată și încuietoarea se deschide și un al doilea semnal când încuietoarea este închisă.
Conectam soneria în următoarea secvență:
Arduino | Buzzer |
---|---|
5V | VCC |
GND | GND |
pinul 5 | IO |
3) Servo va fi folosit ca mecanism de deblocare. Orice servo poate fi ales, în funcție de dimensiunile și forțele cerute de tine, pe care le creează servo-ul. Servoiul are 3 pini:
Mai clar, puteți vedea cum am conectat toate modulele în imaginea de mai jos:
Acum, dacă totul este conectat, atunci puteți trece la programare.
Schiță:
#include
Să aruncăm o privire mai atentă asupra schiței:
Pentru a afla UID-ul cardului (etichete), trebuie să scrieți această schiță pe arduino, să asamblați circuitul descris mai sus și să deschideți Consola (monitorizarea portului serial). Când aduceți eticheta la RFID, un număr va fi afișat în consolă
UID-ul rezultat trebuie introdus în următorul rând:
If (uidDec == 3763966293) // Comparați Uid-ul etichetei, dacă este egal cu cel dat atunci servo deschide supapa.
Fiecare card are un identificator unic și nu se repetă. Astfel, atunci când aduceți cardul, al cărui identificator l-ați setat în program, sistemul va deschide accesul folosind un servomotor.
Video:
Arduino este cel mai bun sistem pentru copierea oricărui hardware. Majoritatea ideilor nu ar fi fost posibile fără ea. A existat de mult un astfel de gând: să creeze o blocare cu combinație specială pe arduino. Pentru a-l deschide, trebuie să țineți apăsată o anumită tastă. În acest caz, încuietoarea nu ar trebui să se deschidă, chiar dacă cunoașteți butonul dorit. Pentru a-l deschide, este necesar să se mențină anumite intervale folosind memoria musculară. Un astfel de criminal nu poate face. Dar toate acestea sunt doar teorie.
Pentru a-l colecta, trebuie să utilizați un dispozitiv special de impulsuri dreptunghiulare, precum și mai multe contoare și o grămadă. Dar dispozitivul finit ar avea dimensiuni mari și ar fi incomod de utilizat. De regulă, astfel de gânduri nu dau odihnă. Primul pas în realizarea acestui vis a fost crearea unui program pentru Arduino. Ea este cea care va servi drept lacăt cu combinație. Pentru a-l deschide, trebuie să apăsați nu o tastă, ci mai multe și să faceți acest lucru simultan. Circuitul terminat arată astfel:
Calitatea imaginii nu este cea mai bună, dar conexiunile se fac la pământ, D3, D5, D7, D9 și D11.
Codul este prezentat mai jos:
Const int ina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; octet a = 0; octet b = 0; octet c = 0; octet d = 0; timp lung nesemnat = 0; // nu uitați tot ceea ce millis () ia pe unsigned long temp = 0; // stocați în cheia de octeți lungi nesemnați = (0, 0, 0, 0, 0, 0, 0, 0); // codifică tasta octet propriu b = (1, 1, 1, 1, 0, 1, 0, 0); tasta octetc = (1, 0, 1, 0, 1, 1, 1, 0); octet k = 0; void setup () (pinMode (ina, INPUT_PULLUP); // 3 intrări conectate la butoanele pinMode (inb, INPUT_PULLUP); pinMode (inc, INPUT_PULLUP); pinMode (ledPin, OUTPUT); // LED încorporat pe data de 13 pin pinMode (7, OUTPUT); pinMode (11, OUTPUT); digitalWrite (7, LOW); // înlocuiește masa digitalWrite (11, LOW); time = millis (); // necesar pentru sincronizare) void blinktwice () ( // clipirea dublă a LED-ului digitalWrite (ledPin, HIGH); întârziere (100); digitalWrite (ledPin, LOW); întârziere (100); digitalWrite (ledPin, HIGH); întârziere (100); digitalWrite (ledPin, LOW) ; întârziere ( 200);) buclă goală () (dacă (k == 0) (pâlpâie de două ori (); // solicită cod) dacă (k == 8) (digitalWrite (ledPin, HIGH); întârziere (3000); k = 0 ;) a = digitalRead (ina); // nivelurile semnalului sunt citite de la butoane - apăsate / neapăsate b = digitalRead (inb); c = digitalRead (inc); întârziere (100); // următorul dacă - protecție împotriva falselor pozitive, nu trebuie să utilizați if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) (if (a == keya) [k]) (dacă (b == keyb [k]) (dacă (c == keyc [k]) (k ++; )))) dacă (k == 1) (dacă (d == 0) (timp = milis (); d ++;)) temp = milis (); temp = temp - timp; dacă (temp> 10000) (k = 0; d = 0; timp = milis ();))
Pentru a evita întrebările inutile despre cod, unele puncte ar trebui clarificate. Funcția de configurare este utilizată pentru a atribui porturi. Următoarea funcție este Input_Pullup, care este necesară pentru a crește tensiunea pinului cu 5 V. Acest lucru se face cu un rezistor. Din acest motiv, diferite scurtcircuite nu vor avea loc. Pentru mai mult confort, se recomandă utilizarea funcției blinktwice. În general, atunci când creați diverse programe, trebuie să încercați și alte funcții.
După atribuirea funcțiilor, semnalul este citit de la porturi. Dacă butonul este apăsat, acesta va fi indicat de numărul 1, iar dacă nu - 2. În continuare, toate valorile sunt analizate. De exemplu, a apărut o combinație precum 0,1,1. Aceasta înseamnă că prima tastă este apăsată, iar celelalte două nu. Dacă toate valorile sunt adevărate, atunci condiția 8 este, de asemenea, adevărată. Acest lucru este evidențiat de LED-ul iluminat de pe panoul frontal. Apoi, trebuie să introduceți un cod specific care va servi la deschiderea ușii.
Ultimele elemente ale codului sunt folosite pentru a reseta valorile contorului. Această funcție este efectuată dacă au trecut mai mult de 10 secunde de la ultima apăsare a tastei. Fără acest cod, a fost posibilă enumerarea tuturor opțiunilor posibile, deși există destul de multe dintre ele. După crearea acestui dispozitiv, trebuie să-l testați. Mai mult
Mă uitam la The Amazing Spider-Man zilele trecute și într-o scenă Peter Parker deschide și închide ușa de la laptop de la distanță. Imediat ce am văzut asta, mi-am dat seama imediat că am nevoie și de o astfel de încuietoare electronică pe ușa din față.
Cu puțină reparație, am pus cap la cap un model funcțional de încuietoare inteligentă. În acest articol, vă voi spune cum l-am pus împreună.
Pasul 1: Lista materialelor
Pentru a asambla o încuietoare electronică pe Arduino, veți avea nevoie de următoarele materiale:
Electronică:
- Adaptor de perete de 5V
Componente:
- 6 șuruburi pentru zăvor
- carton
- fire
Instrumente:
- ciocan de lipit
- pistol de lipit
- burghiu
- burghiu
- gaură pilot
- cuțit de papetărie
- computer cu programul Arduino IDE
Pasul 2: cum funcționează blocarea
Ideea este că pot deschide sau închide ușa fără cheie și fără să mă duc măcar la ea. Dar aceasta este doar ideea de bază, pentru că puteți adăuga și un senzor de bătaie, astfel încât să răspundă la o bătaie specială, sau puteți adăuga un sistem de recunoaștere a vocii!
Brațul servo conectat la zăvor se va închide (0 °) și se va deschide (60 °) folosind comenzile primite prin modulul Bluetooth.
Pasul 3: Schema de cablare
Să conectăm mai întâi servo-ul la placa Arduino (rețineți că, deși am o placă Arduino Nano, dispunerea pinului este exact aceeași pe placa Uno).
- firul maro al servo este împământat, îl conectăm la masă pe Arduino
- firul roșu este un plus, îl conectăm la conectorul de 5V de pe Arduino
- fir portocaliu - ieșirea sursei servo, o conectăm la al 9-lea pin de pe Arduino
Vă sfătuiesc să testați servo înainte de a continua cu asamblarea. Pentru a face acest lucru, în programul Arduino IDE din exemple, selectați Sweep. După ce ne asigurăm că servo-ul funcționează, putem conecta modulul Bluetooth. Trebuie să conectați pinul rx al modulului Bluetooth la pinul tx al Arduino și pinul tx al modulului la pinul rx al Arduino. Dar nu o face încă! Odată ce aceste conexiuni sunt lipite, nu veți mai putea încărca niciun cod pe Arduino, așa că mai întâi descărcați toate codurile și abia apoi lipiți conexiunile.
Iată schema de conexiuni pentru modul și microcontroler:
- Modul Rx - Placa Tx Arduino
- Modul Tx - plăci Rx
- Vcc (pozitiv) al modulului - 3,3v a plăcii Arduino
- Masa este conectata la masa (masa la masa)
Dacă explicația vi se pare confuză, urmați schema de cablare furnizată.
Pasul 4: Testează
Acum că avem toate piesele în acțiune, să ne asigurăm că servo poate mișca șurubul. Înainte de a monta zăvorul pe ușă, am pus împreună o piesă de testare pentru a mă asigura că servo-ul este suficient de puternic. La început mi s-a părut că servo-ul meu este slab și am adăugat o picătură de ulei pe șurub, după aceea a funcționat bine. Este foarte important ca mecanismul să alunece bine, altfel riști să fii prins în camera ta.
Pasul 5: carcasă pentru componentele electrice
Am decis să pun în carcasă doar controlerul și modulul Bluetooth și să las servo afară. Pentru a face acest lucru, pe o bucată de carton, încercuim conturul plăcii Arduino Nano și adăugăm 1 cm de spațiu în jurul perimetrului și o decupăm. După aceea, am decupat și alte cinci părți ale carcasei. În peretele frontal, va trebui să tăiați o gaură pentru cablul de alimentare al controlerului.
Dimensiuni laterale ale carcasei:
- Partea de jos - 7,5x4 cm
- Coperta - 7,5x4 cm
- Perete lateral stâng - 7,5x4 cm
- Perete lateral drept - 7,5x4 cm
- Perete frontal - 4x4 cm (cu fantă pentru cablul de alimentare)
- Perete din spate - 4x4 cm
Pasul 6: Aplicare
Pentru a controla controlerul, aveți nevoie de un gadget Android sau Windows cu Bluetooth încorporat. Nu am avut ocazia să testez funcționarea aplicației pe dispozitive Apple, poate că va fi nevoie de niște drivere.
Sunt sigur că unii dintre voi au ocazia să testeze asta. Pentru Android, descărcați aplicația Bluetooth Terminal, pentru Windows, descărcați TeraTerm. Apoi trebuie să conectați modulul la smartphone, numele ar trebui să fie linvor, parola ar trebui să fie 0000 sau 1234. De îndată ce împerecherea este stabilită, deschideți aplicația instalată, introduceți opțiunile și selectați „Stabiliți conexiunea (nesigură)” . Smartphone-ul dvs. este acum un monitor serial Arduino, ceea ce înseamnă că puteți comunica cu controlerul.
Dacă introduceți 0, ușa se va închide și mesajul „Ușă închisă” va fi afișat pe ecranul smartphone-ului.
Dacă introduceți 1, veți vedea ușa deschisă și mesajul „Ușă deschisă” va fi afișat pe ecran.
Pe Windows, procesul este același, cu excepția faptului că trebuie să instalați aplicația TeraTerm.
Pasul 7: montați șurubul
Mai întâi trebuie să conectați servo-ul la zăvor. Pentru a face acest lucru, tăiați dopurile din orificiile de montare ale carcasei unității. Dacă punem servo, orificiile de montare ar trebui să fie la nivel cu zăvorul. Apoi trebuie să plasați pârghia servo în fanta de blocare, unde era mânerul de blocare. Verificați cum se mișcă încuietoarea în carcasă. Dacă totul este în regulă, fixați brațul servo cu lipici.
Acum trebuie să găuriți găuri pilot pentru șuruburile din ușă. Pentru a face acest lucru, atașați zăvorul la ușă și marcați găurile pentru șuruburi de pe foaia ușii cu un creion. Găuriți găuri pentru șuruburi de aproximativ 2,5 cm adâncime în locurile marcate.Atașați zăvorul și fixați-l cu șuruburi. Verificați din nou servo-ul.
Pasul 8: Putere
Pentru a finaliza dispozitivul, veți avea nevoie de o sursă de alimentare, un cablu și o mufă mini USB pentru a vă conecta la Arduino.
Conectați pinul de împământare al sursei de alimentare la pinul de împământare al portului mini usb, conectați firul roșu la firul roșu al portului mini usb, apoi treceți firul de la încuietoare la balamaua ușii și de acolo la priză.
Pasul 9: Cod
#include Servo myservo; int pos = 0; stare int; int flag = 0; void setup () (myservo.attach (9); Serial.begin (9600); myservo.write (60); delay (1000);) void loop () (dacă (Serial.available ()> 0) (stare = Serial.read (); flag = 0;) // dacă starea este „0”, motorul de curent continuu se va opri dacă (state == „0”) (myservo.write (8); întârziere (1000); Serial. println ("Ușă blocată");) else if (stare == "1") (myservo.write (55); întârziere (1000); Serial.println ("Ușă deblocată");))
Pasul 10: Blocarea Arduino finalizată
Bucurați-vă de blocarea telecomenzii și nu uitați să vă blocați „în mod accidental” prietenii în cameră.
Lecția de astăzi despre cum să utilizați un cititor RFID cu un Arduino pentru a crea un sistem de blocare simplu, în cuvinte simple - o încuietoare RFID.
RFID (English Radio Frequency IDentification, radio frequency identification) este o metodă de identificare automată a obiectelor, în care datele stocate în așa-numitele transpondere sau etichete RFID sunt citite sau scrise prin intermediul semnalelor radio. Orice sistem RFID constă dintr-un cititor (cititor, cititor sau interogator) și un transponder (alias etichetă RFID, uneori se folosește și termenul etichetă RFID).
Acest tutorial va folosi o etichetă RFID de la un 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ă identificatorul unic nu este egal cu valoarea predefinită, mesajul „Deblocat” nu va apărea - vezi fotografia de mai jos.
Lacătul este închis
Lacătul este deschis
Detalii necesare pentru a crea acest proiect:
- Cititor RFID RC522
- Afișaj OLED
- Tabla de paine
- Fire
Detalii suplimentare:
- baterie (bancă de putere)
Costul total al componentelor proiectului a fost de aproximativ 15 USD.
Pasul 2: Cititor RFID RC522
Fiecare etichetă RFID are un mic cip (cartel alb în imagine). Dacă îndreptați lanterna spre acest card RFID, puteți vedea un mic cip și o bobină 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. Un astfel de card RFID poate fi citit de la o distanță de până la 20 mm.
Același cip există și în etichetele cheii RFID.
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.000 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
Acest tutorial folosește un monitor OLED I2C de 0,96 "128x64.
Acesta este un afișaj foarte bun pentru utilizare cu Arduino. Este un display 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 este mic. Există două opțiuni de afișare. Unul dintre ele este monocrom, iar celălalt, ca cel folosit în tutorial, poate afișa două culori: galben și albastru. Partea de sus a ecranului poate fi doar galbenă, iar partea de jos albastră.
Acest afișaj 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: conectați toate detaliile
Comunicarea cu placa Arduino Uno este foarte simplă. Mai întâi, conectați alimentarea atât la cititor, cât și la afișaj.
Fiți atenți, cititorul RFID trebuie conectat la ieșirea de 3,3 V a Arduino Uno, altfel se va deteriora.
Deoarece afișajul poate funcționa și la 3,3 V, 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 a plăcii de breadboard la Arduino GND.
Afișaj OLED → Arduino
SCL → Pin 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. Prin urmare, vom folosi pinii 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.
Cititor RFID 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 analog al pinului 5 și SDA de pe afișaj la pinul analogic 4. Dacă acum pornim proiectul și punem cardul RFID lângă cititor, putem vedea că proiectul functioneaza bine.
Pasul 5: Codul proiectului
Pentru ca codul proiectului să fie compilat, 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(gestionarea bibliotecii). Găsiți MFRC522 și instalați-l.
Avem nevoie și de biblioteca Adafruit SSD1306 și de biblioteca Adafruit GFX pentru cartografiere.
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.
În primul rând, 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 stocată în variabila cod. Dacă valorile sunt aceleași, imprimăm mesajul DEBLOCARE, altfel nu vom afișa acest mesaj.
Dacă (se potrivește) (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 mai multe etichete RFID să fie recunoscute de proiect. Acesta este doar un exemplu.
Cod proiect:
#include După cum puteți vedea din lecție - pentru puțini bani, 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 un disc USB să fie citite numai după deblocare.
Acest proiect este modular, adică puteți conecta/deconecta diferite elemente și puteți obține diferite funcționalități. Imaginile de mai sus arată opțiunea cu funcționalitate completă, și anume: În setările firmware-ului, puteți alege oricare dintre cele trei tipuri (setare tip_blocare) Oricare dintre aceste elemente poate fi exclus din sistem: Blocarea asigură funcționarea bateriei în modul de economisire a energiei reduse (pornire oprire: setare sleep_enable), și anume: Când sistemul este treaz, apăsați butonul de schimbare a parolei (buton ascuns). Cădem în modul de schimbare a parolei: Când sistemul este trezit (trezit de butoane sau somnul este dezactivat), apăsați * pentru a intra în modul de introducere a parolei Pasul 6: rezultatul final
Introdu parola din numere ( MAXIM 10 CIFRE!!!)
Dacă sistemul doarme și se trezește periodic pentru a verifica EVENIMENTUL, apoi apăsați * și mențineți apăsat până când LED-ul roșu se aprinde
Mod de introducere a parolei: