Smart elektronisk lås på Arduino, fungerer via Bluetooth - inngangsdøren er som Spiderman. Automatisk smartlås og Arduino Elektronisk kombinasjonslås på Arduino

Fremgangen står ikke stille, og «smarte låser» dukker i økende grad opp på dørene til leiligheter, garasjer og hus.

En lignende lås åpnes når du trykker på en knapp på smarttelefonen. Heldigvis har smarttelefoner og nettbrett allerede kommet inn i hverdagen vår. I noen tilfeller er "smartlåser" koblet til "skytjenester" som Google Disk og åpnet eksternt. I tillegg gjør dette alternativet det mulig å gi tilgang til å åpne døren for andre personer.

Dette prosjektet vil implementere en DIY-versjon av en smart lås på Arduino, som kan fjernstyres fra hvor som helst i verden.

I tillegg har prosjektet lagt til muligheten til å åpne låsen etter å ha identifisert et fingeravtrykk. For dette formålet vil en fingeravtrykksensor bli integrert. Begge døråpningsalternativene vil bli drevet av Adafruit IO-plattformen.

En lås som denne kan være et flott første skritt i ditt Smart Home-prosjekt.

Sette opp fingeravtrykksensoren

For å jobbe med en fingeravtrykkssensor er det et utmerket bibliotek for Arduino, som i stor grad forenkler prosessen med å sette opp sensoren. Dette prosjektet bruker Arduino Uno. Et Adafruit CC3000-kort brukes til å koble til Internett.

La oss starte med å koble til strømmen:

  • Koble 5V-pinnen fra Arduino-kortet til den røde strømskinnen;
  • GND-pinnen fra Arduino kobles til den blå skinnen på det loddeløse kretskortet.

La oss gå videre til å koble til fingeravtrykksensoren:

  • Koble først til strømmen. For å gjøre dette er den røde ledningen koblet til +5 V-skinnen, og den svarte ledningen til GND-skinnen;
  • Den hvite ledningen til sensoren kobles til pinne 4 på Arduino.
  • Den grønne ledningen går til pinne 3 på mikrokontrolleren.

La oss nå gå videre til CC3000-modulen:

  • Vi kobler IRQ-pinnen fra CC3000-kortet til pinne 2 på Arduino.
  • VBAT - til pinne 5.
  • CS - til pinne 10.
  • Etter dette må du koble SPI-pinnene til Arduinoen: MOSI, MISO og CLK - til henholdsvis pinnene 11, 12 og 13.

Vel, på slutten må du gi strøm: Vin - til Arduino 5V (rød skinne på kretskortet ditt), og GND til GND (blå skinne på breadboard).

Et bilde av det ferdigmonterte prosjektet er vist nedenfor:

Før du utvikler en skisse som skal laste data til Adafruit IO, må du overføre data om fingeravtrykket ditt til sensoren. Ellers vil han ikke kjenne deg igjen i fremtiden;). Vi anbefaler å kalibrere fingeravtrykksensoren ved å bruke Arduino separat. Hvis dette er første gang du arbeider med denne sensoren, anbefaler vi at du gjør deg kjent med kalibreringsprosessen og detaljerte instruksjoner for arbeid med fingeravtrykksensoren.

Hvis du ikke allerede har gjort det, vennligst opprett en konto hos Adafruit IO.

Etter dette kan vi gå videre til neste trinn for å utvikle en "smartlås" på Arduino: nemlig å utvikle en skisse som skal overføre data til Adafruit IO. Siden programmet er ganske omfangsrikt, vil vi i denne artikkelen fremheve og vurdere bare hoveddelene, og deretter vil vi gi en lenke til GitHub, hvor du kan laste ned hele skissen.

Skissen begynner med å laste inn alle nødvendige biblioteker:

#inkludere

#inkludere

#inkludere

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_CC3000.h"

#inkludere

#inkludere >

Etter dette må du korrigere skissen litt ved å sette inn parameterne til WiFi-nettverket ditt, spesifisere SSID og passord:

#define WLAN_SECURITY WLAN_SEC_WPA2>

I tillegg må du skrive inn navn og AIO-nøkkel for å logge på Adafruit IO-kontoen din:

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_name"

#define AIO_KEY "adafruit_io_key">

Følgende linjer er ansvarlige for samhandling og behandling av data fra fingeravtrykksensoren. Hvis sensoren ble aktivert (fingeravtrykket samsvarte), vil det være "1":

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

Adafruit_MQTT_Publish fingerprint = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

I tillegg må vi lage en forekomst av SoftwareSerial-objektet for sensoren vår:

SoftwareSerial mySerial(3, 4);

Etter dette kan vi lage et objekt for sensoren vår:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Inne i skissen angir vi hvilken fingerID som skal aktivere låsen i fremtiden. Dette eksemplet bruker 0, som tilsvarer ID-en til det første fingeravtrykket som brukes av sensoren:

int fingerID = 0;

Etter dette initialiserer vi telleren og forsinker prosjektet vårt. I hovedsak vil vi at låsen skal aktiveres automatisk når den åpnes. Dette eksemplet bruker en forsinkelse på 10 sekunder, men du kan justere denne verdien for å passe dine behov:

int activationCounter = 0;

int lastActivation = 0;

int aktiveringstid = 10 * 1000;

I hoveddelen av setup()-funksjonen initialiserer vi fingeravtrykksensoren og sikrer at CC3000-brikken er koblet til WiFi-nettverket ditt.

I hoveddelen av loop()-funksjonen kobler vi til Adafruit IO. Følgende linje er ansvarlig for dette:

Etter å ha koblet til Adafruit IO-plattformen, sjekker vi det siste fingeravtrykket. Hvis det stemmer og låsen ikke er aktivert, sender vi "1" til Adafruit IO for behandling:

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

Serial.println(F("Tilgang gitt!"));

lockState = sant;

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

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

lastActivation = millis();

Hvis låsen er aktivert innenfor loop()-funksjonen og vi har nådd forsinkelsesverdien som er angitt ovenfor, sender vi "0":

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

lockState = falsk;

if (! fingerprint.publish(state)) (

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

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

Du kan laste ned den nyeste versjonen av koden på GitHub.

Det er på tide å teste prosjektet vårt! Ikke glem å laste ned og installere alle nødvendige biblioteker for Arduino!

Sørg for at du har gjort alle nødvendige endringer i skissen og last den opp til din Arduino. Deretter åpner du Serial Monitor-vinduet.

Når Arduino kobles til WiFi-nettverket, vil fingeravtrykksensoren begynne å blinke rødt. Plasser fingeren på sensoren. ID-nummeret skal vises i vinduet for seriell monitor. Hvis det stemmer, vises meldingen "OK!" Dette betyr at dataene er sendt til Adafruit IO-servere.

Diagram og skisse for videre konfigurasjon av låsen ved hjelp av eksempelet på en LED

La oss nå gå videre til den delen av prosjektet som er direkte ansvarlig for å kontrollere dørlåsen. For å koble til et trådløst nettverk og aktivere/deaktivere låsen, trenger du en ekstra Adafruit ESP8266-modul (ESP8266-modulen trenger ikke være fra Adafruit). Ved å bruke eksemplet nedenfor kan du evaluere hvor enkelt det er å utveksle data mellom to plattformer (Arduino og ESP8266) ved å bruke Adafruit IO.

I denne delen vil vi ikke jobbe direkte med låsen. I stedet vil vi ganske enkelt koble lysdioden til pinnen der låsen skal kobles til senere. Dette vil gjøre det mulig å teste koden vår uten å fordype seg i detaljene i låsdesignet.

Opplegget er ganske enkelt: Installer først ESP8266 på brødbrettet. Etter dette, installer LED. Ikke glem at det lange (positive) benet på LED-en er koblet gjennom en motstand. Den andre delen av motstanden er koblet til pinne 5 på ESP8266-modulen. Vi kobler den andre (katoden) til LED-en til GND-pinnen på ESP8266.

Den ferdigmonterte kretsen er vist på bildet nedenfor.


La oss nå se på skissen vi bruker for dette prosjektet. Igjen er koden ganske stor og kompleks, så vi vil bare se på hoveddelene:

Vi starter med å koble til de nødvendige bibliotekene:

#inkludere

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

Konfigurering av WiFi-innstillinger:

#define WLAN_SSID "ditt_wifi_ssid"

#define WLAN_PASS "ditt_wifi_passord"

#define WLAN_SECURITY WLAN_SEC_WPA2

Vi konfigurerer også Adafruit IO-parametere. Samme som i forrige avsnitt:

#define AIO_SERVER "io.adafruit.com"

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_username"

#define AIO_KEY "adafruit_io_key"

Vi indikerer hvilken pinne vi koblet LED-en til (i fremtiden vil dette være vår lås eller relé):

int relayPin = 5;

Interaksjon med fingeravtrykksensoren, som i forrige avsnitt:

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

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

I hoveddelen av setup()-funksjonen indikerer vi at pinnen som LED-en er koblet til skal fungere i OUTPUT-modus:

pinMode(relayPin, OUTPUT);

Innenfor loop()-løkken sjekker vi først om vi er koblet til Adafruit IO:

Etter dette sjekker vi hvilket signal som mottas. Hvis "1" sendes, aktiverer vi pinnen som vi erklærte tidligere, som LED-en vår er koblet til. Hvis vi mottar "0", overfører vi kontakten til "lav" tilstand:

Adafruit_MQTT_Abonner *abonnement;

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

if (abonnement == &lås) (

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

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

// Lagre kommandoen til strengdata

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

if (kommando == "0") (

digitalWrite(relayPin, LOW);

if (kommando == "1") (

digitalWrite(relayPin, HIGH);

Du kan finne siste versjon av skissen på GitHub.

Det er på tide å teste prosjektet vårt. Ikke glem å laste ned alle nødvendige biblioteker for din Arduino og sjekk om du har gjort de riktige endringene i skissen.

For å programmere ESP8266-brikken kan du bruke en enkel USB-FTDI-omformer.

Last opp skissen til Arduino og åpne Serial Monitor-vinduet. På dette stadiet sjekket vi ganske enkelt om vi var i stand til å koble til Adafruit IO: vi vil se nærmere på den tilgjengelige funksjonaliteten.

Tester prosjektet

La oss nå begynne å teste! Gå til Adafruit IOs brukermeny, under Feed-menyen. Sjekk om fingeravtrykk- og låsekanalene er opprettet eller ikke (på utskriftsskjermen under er disse fingeravtrykk- og låselinjene):


Hvis de ikke eksisterer, må du opprette dem manuelt.

Nå må vi sikre datautveksling mellom fingeravtrykk og låsekanaler. Låsekanalen må ha verdien "1" når fingeravtrykkkanalen tar verdien "1" og omvendt.

For å gjøre dette bruker vi et veldig kraftig Adafruit IO-verktøy: triggere. Utløsere er i hovedsak forhold som du kan bruke på konfigurerte kanaler. Det vil si at de kan brukes til å koble sammen to kanaler.

Opprett en ny reaktiv trigger fra Triggers-delen i Adafruit IO. Dette vil gi muligheten til å utveksle data mellom fingeravtrykksensoren og låsekanalene:


Slik skal det se ut når begge utløsere er konfigurert:

Alle! Nå kan vi faktisk teste prosjektet vårt! Vi setter fingeren på sensoren og ser hvordan Arduino begynte å blunke med en LED som tilsvarer dataoverføring. Etter dette skal LED-en på ESP8266-modulen begynne å blinke. Dette betyr at den har begynt å motta data via MQTT. LED-en på kretskortet skal også slå seg på i dette øyeblikket.

Etter forsinkelsen du angir i skissen (standard er 10 sekunder), vil LED-en slå seg av. Gratulerer! Du kan kontrollere LED-en med fingeravtrykket ditt fra hvor som helst i verden!

Sette opp en elektronisk lås

Vi har nådd siste del av prosjektet: direkte tilkobling og kontroll av den elektroniske låsen ved hjelp av Arduino og en fingeravtrykkssensor. Prosjektet er ikke lett, du kan bruke alle kildene i formen de er presentert ovenfor, men koble til et relé i stedet for en LED.

For å koble låsen direkte, trenger du tilleggskomponenter: en 12 V strømforsyning, en kontakt for å koble til strøm, en transistor (i dette eksemplet brukes en IRLB8721PbF MOSFET, men du kan bruke en annen, for eksempel en TIP102 bipolar transistor Hvis du bruker en bipolar transistor, må du legge til en motstand.

Nedenfor er et elektrisk diagram for tilkobling av alle komponenter til ESP8266-modulen:


Merk at hvis du bruker en MOSFET-transistor, trenger du ikke en motstand mellom pin 5 på ESP8266-modulen og transistoren.

Det ferdigmonterte prosjektet er vist på bildet nedenfor:


Strøm ESP8266-modulen ved hjelp av FTDI-modulen og koble 12V-strømforsyningen til kontakten. Hvis du brukte pinnene anbefalt ovenfor for tilkobling, trenger du ikke å endre noe i skissen.

Nå kan du sette fingeren på sensoren: Låsen skal fungere som svar på fingeravtrykket ditt. Videoen nedenfor viser det automatiske smartlåsprosjektet i aksjon:

Videreutvikling av Smart Lock-prosjektet

Prosjektet vårt har gitt ut fjernkontroll av en dørlås ved hjelp av et fingeravtrykk.

Prøv gjerne, modifiser skissen og bindingen. Du kan for eksempel bytte ut en elektronisk dørlås med et relé for å kontrollere kraften til 3D-printeren, robotarmen eller quadcopter...

Du kan utvikle ditt "smarte hjem". For eksempel fjernaktivere et vanningssystem på Arduino eller slå på lysene i et rom... Ikke glem at du kan aktivere et nesten ubegrenset antall enheter samtidig ved hjelp av Adafruit IO.

Legg igjen kommentarer, spørsmål og del dine personlige erfaringer nedenfor. Nye ideer og prosjekter blir ofte født i diskusjoner!

Her om dagen så jeg på The Amazing Spider-Man, og i en scene åpner og lukker Peter Parker en dør fra den bærbare datamaskinen sin. Med en gang jeg så dette skjønte jeg med en gang at jeg også trengte en slik elektronisk lås til inngangsdøren min.

Etter litt fikling, satte jeg sammen en fungerende modell av en smart lås. I denne artikkelen vil jeg fortelle deg hvordan jeg satte den sammen.

Trinn 1: Liste over materialer





For å sette sammen en elektronisk lås på Arduino trenger du følgende materialer:

Elektronikk:

  • 5V veggadapter

Komponenter:

  • 6 låseskruer
  • papp
  • ledninger

Verktøy:

  • loddebolt
  • limpistol
  • bore
  • bore
  • pilothullsboring
  • skrivesaker kniv
  • datamaskin med Arduino IDE-program

Trinn 2: Hvordan låsen fungerer

Tanken er at jeg kan åpne eller lukke døren uten nøkkel, og uten engang å gå i nærheten av den. Men dette er bare den grunnleggende ideen, for du kan også legge til en bankesensor slik at den reagerer på et spesielt banking, eller du kan legge til et stemmegjenkjenningssystem!

En servospak koblet til bolten vil lukke den (0°) og åpne den (60°) ved hjelp av kommandoer mottatt via Bluetooth-modulen.

Trinn 3: Koblingsskjema


La oss først koble servoen til Arduino-kortet (merk at selv om jeg brukte et Arduino Nano-brett, har Uno-kortet nøyaktig samme pinout).

  • Den brune ledningen til servoen er jordet, vi kobler den til bakken på Arduino
  • den røde ledningen er et pluss, vi kobler den til 5V-kontakten på Arduino
  • oransje ledning er servodrivkilden, koble den til pinne 9 på Arduino

Jeg anbefaler deg å sjekke funksjonen til servoen før du fortsetter med monteringen. For å gjøre dette, i Arduino IDE-programmet, velg Sweep i eksemplene. Etter å ha forsikret oss om at servoen fungerer, kan vi koble til Bluetooth-modulen. Du må koble rx-pinnen til Bluetooth-modulen til tx-pinnen til Arduino, og tx-pinnen til modulen til rx-pinnen til Arduino. Men ikke gjør det ennå! Når disse tilkoblingene er loddet, vil du ikke kunne laste opp noen koder til Arduino, så last ned alle kodene dine først og lodd først tilkoblingene.

Her er koblingsskjemaet mellom modulen og mikrokontrolleren:

  • Rx-modul – Tx-kort Arduino
  • Tx-modul – Rx-kort
  • Vcc (positiv terminal) på modulen er 3,3v på Arduino-kortet
  • Jord er koblet til jord (jording til jording)

Hvis forklaringen virker uklar for deg, følg koblingsskjemaet som følger med.

Trinn 4: Test

Nå som vi har alle de fungerende delene, la oss sørge for at servoen kan flytte låsen. Før jeg monterte låsen på døren, satte jeg sammen en testprøve for å sikre at servoen var kraftig nok. Først virket det for meg som om servoen min var svak, og jeg tilsatte en dråpe olje på låsen, hvoretter det fungerte fint. Det er veldig viktig at mekanismen glir godt, ellers risikerer du å bli låst inne på rommet ditt.

Trinn 5: Elektrisk hus



Jeg bestemte meg for å sette bare kontrolleren og Bluetooth-modulen i kofferten og la servoen stå utenfor. For å gjøre dette tegner du omrisset av Arduino Nano-brettet på et stykke papp og legger til 1 cm plass rundt omkretsen og klipper det ut. Etter dette kuttet vi også ut fem sider av kroppen til. Du må kutte et hull i frontveggen for kontrollerens strømledning.

Kofferts sidedimensjoner:

  • Bunn – 7,5x4 cm
  • Deksel – 7,5x4 cm
  • Venstre sidevegg – 7,5x4 cm
  • Høyre sidevegg – 7,5x4 cm
  • Frontvegg – 4x4 cm (med spor for strømledningen)
  • Bakvegg – 4x4 cm

Trinn 6: Søknad

For å kontrollere kontrolleren trenger du en Android- eller Windows-dings med innebygd Bluetooth. Jeg hadde ikke mulighet til å teste applikasjonen på Apple-enheter;

Jeg er sikker på at noen av dere har muligheten til å sjekke dette ut. For Android laster du ned Bluetooth Terminal-applikasjonen, for Windows laster du ned TeraTerm. Deretter må du koble modulen til smarttelefonen, navnet skal være linvor, passordet skal være 0000 eller 1234. Når sammenkoblingen er etablert, åpner du den installerte applikasjonen, går til alternativer og velger "Etabler en tilkobling (usikker)". Nå er smarttelefonen din en Arduino seriell grensesnittmonitor, noe som betyr at du kan utveksle data med kontrolleren.

Hvis du skriver inn 0, lukkes døren og meldingen "Døren er lukket" vises på smarttelefonskjermen.
Hvis du skriver inn 1, vil du se døren åpne og skjermen vil si "Dør åpen".
På Windows er prosessen den samme, bortsett fra at du må installere TeraTerm-applikasjonen.

Trinn 7: Installer låsen


Først må du koble servoen til låsen. For å gjøre dette må du kutte av pluggene fra monteringshullene til drivhuset. Hvis vi legger ned servoen, skal monteringshullene være i flukt med bolten. Deretter må du plassere servospaken i låsespalten, der låsehåndtaket var. Sjekk hvordan låsen beveger seg i kroppen. Hvis alt er i orden, fest servoarmen med lim.

Nå må du bore pilothull for skruene i døren. For å gjøre dette, fest låsen til døren og bruk en blyant for å markere hullene for skruene på dørbladet. Bor hull for skruer ca. 2,5 cm dype på de merkede stedene. Fest låsen og fest den med skruer. Sjekk servodriften igjen.

Trinn 8: Strøm


For å fullføre enheten trenger du en strømforsyning, en ledning og en mini-usb-plugg for å koble til Arduino.
Koble jordingspinnen til strømforsyningen til jordingspinnen til mini usb-porten, koble den røde ledningen til den røde ledningen til mini-usb-porten, trekk deretter ledningen fra låsen til dørhengslet, og derfra til stikkontakten .

Trinn 9: Kode

#include Servo myservo; int pos = 0; int state; int flagg=0; void setup() ( myservo.attach(9); Serial.begin(9600); myservo.write(60); delay(1000); ) void loop() ( if(Serial.available() > 0) ( state = Serial.read(); flagg=0; ) // hvis tilstanden er "0" vil DC-motoren slå seg av if (tilstand == "0") ( myservo.write(8); delay(1000); Serial. println("Dør låst"); else if (tilstand == "1") ( myservo.write(55); delay(1000); Serial.println("Dør ulåst"); ) )

Trinn 10: Fullført Arduino-basert lås

Nyt fjernkontrolllåsen din og ikke glem å "ved et uhell" låse vennene dine på rommet.

Arduino er det beste systemet for å kopiere maskinvare. De fleste ideer kunne ikke bli realisert uten henne. Det har vært denne ideen i lang tid: å lage en spesiell kombinasjonslås på Arduino. For å åpne den må du holde nede en bestemt tast. I dette tilfellet skal ikke låsen åpne, selv om du kjenner den riktige knappen. For å åpne den må du opprettholde visse intervaller ved å bruke muskelminne. En kriminell kan ikke gjøre noe slikt. Men alt dette er bare en teori.

For å montere den må du bruke en spesiell rektangulær pulsenhet, samt flere tellere og en haug. Men den ferdige enheten ville ha store totale dimensjoner og ville være upraktisk å bruke. Som regel hjemsøker slike tanker deg. Det første trinnet i å gjøre drømmen min til virkelighet var å lage et program for Arduino. Den vil fungere som en kombinasjonslås. For å åpne den, må du ikke trykke én tast, men flere, og gjøre dette samtidig. Det ferdige diagrammet ser slik ut:

Bildekvaliteten er ikke den beste, men koblingen gjøres til jord, D3, D5, D7, D9 og D11.

Koden er nedenfor:

Const int ina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; byte a = 0; byte b = 0; byte c = 0; byte d = 0; usignert lang tid = 0; //ikke glem alt som tar en verdi millis() unsigned long temp = 0; //lagre i usignert lang byte keya = ( 0, 0, 0, 0, 0, 0, 0, 0); //koder seg byte keyb = ( 1, 1, 1, 1, 0, 1, 0, 0); byte keyc = (1, 0, 1, 0, 1, 1, 1, 0); byte k = 0; void setup() ( pinMode(ina, INPUT_PULLUP); //3 innganger koblet til knappene pinMode(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT); // innebygd LED på 13. pin pinMode(7, OUTPUT); pinMode(11, OUTPUT); LED digitalWrite(ledPin, HIGH digitalWrite(ledPin, LOW digitalWrite(ledPin, LOW 200) (if(k==0)(); // spør om å angi kode ) hvis (k == 8) ( digitalWrite(ledPin, HIGH); delay(3000); k = 0; ) a = digitalRead(ina); /ikke trykket b = digitalRead(inb); //neste if - beskyttelse mot falske positiver, du trenger ikke bruke 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) (tid = millis (); d++; ) ) temp = millis(); temp = temp - tid; if (temp > 10000) (k= 0; d=0; tid = millis (; ) )

For å unngå unødvendige spørsmål angående koden, bør noen punkter avklares. Oppsettfunksjonen brukes til å tildele porter. Neste funksjon er Input_Pullup, som er nødvendig for å øke pinnespenningen med 5 V. Dette gjøres ved hjelp av en motstand. Takket være dette vil ulike kortslutninger ikke oppstå. For større bekvemmelighet anbefales det å bruke blink to ganger-funksjonen. Generelt, når du lager forskjellige programmer, må du prøve andre funksjoner.

Etter tildeling av funksjoner leses signalet fra portene. Hvis knappen trykkes, vil den bli indikert med tallet 1, og hvis ikke - 2. Deretter analyseres alle verdier. For eksempel dukket det opp en kombinasjon som 0,1,1. Dette betyr at den første tasten trykkes, men de to andre ikke. Hvis alle verdier er sanne, er betingelse 8 også sann. Dette indikeres av lysdioden på frontpanelet. Deretter må du skrive inn en bestemt kode som skal brukes til å åpne døren.

De siste elementene i koden brukes til å tilbakestille tellerverdiene. Denne funksjonen utføres hvis det har gått mer enn 10 sekunder siden siste tastetrykk. Uten denne koden var det mulig å gå gjennom alle mulige alternativer, selv om det er ganske mange av dem. Etter å ha opprettet denne enheten, må du teste den. Flere

I denne leksjonen lærer vi hvordan du lager et enkelt system som låser opp en lås ved hjelp av en elektronisk nøkkel (Tag).

I fremtiden kan du avgrense og utvide funksjonaliteten. Legg for eksempel til funksjonen "legge til nye nøkler og fjerne dem fra minnet." I grunntilfellet, la oss vurdere et enkelt eksempel der en unik nøkkelidentifikator er forhåndsinnstilt i programkoden.

I denne opplæringen trenger vi:

For å implementere prosjektet må vi installere bibliotekene:

2) Nå må du koble til en summer som vil høres når nøkkelen utløses og låsen åpnes, og et andre signal når låsen lukkes.

Vi kobler summeren i følgende sekvens:

Arduino Buzzer
5V VCC
GND GND
pinne 5 IO

3) Et servodrev vil bli brukt som opplåsingsmekanisme. Hvilken som helst servodrift kan velges, avhengig av størrelsen du trenger og kraften som servodrevet skaper. Servoen har 3 kontakter:

Du kan se tydeligere hvordan vi koblet sammen alle modulene på bildet nedenfor:

Nå, hvis alt er tilkoblet, kan du fortsette til programmering.

Skisse:

#inkludere #inkludere #inkludere // "RFID"-bibliotek. #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); usignert lang uidDec, uidDecTemp; // for å lagre kodenummeret i desimalformat Servo servo; void setup() ( Serial.begin(9600); Serial.println("Venter på kort..."); SPI.begin(); // SPI-initialisering / Init SPI-buss. mfrc522.PCD_Init(); // initialisering MFRC522 / Init MFRC522 card(6); // sett servoen til lukket tilstand ) void loop() ( // Søk etter en ny etikett if (! ( return; ) // Velg en tag hvis (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // Skriv ut serienummeret til taggen for (byte i = 0; i< mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

La oss se på skissen mer detaljert:

For å finne ut UID-en til kortet (Tag), må du skrive denne skissen inn i arduino, sette sammen kretsen som er skissert ovenfor, og åpne konsollen (Serial Port Monitoring). Når du berører RFID-taggen, vil konsollen vise et nummer

Den resulterende UID-en må angis på følgende linje:

If (uidDec == 3763966293) // Sammenlign Uid-en til taggen, hvis den er lik den gitte, åpner servodrevet ventilen.

Hvert kort har en unik identifikator og gjentas ikke. Dermed, når du presenterer et kort hvis identifikator du angir i programmet, vil systemet åpne tilgang ved hjelp av en servodrive.

Video:

I dag er en leksjon om hvordan du bruker en RFID-leser med Arduino for å lage et enkelt låsesystem, med enkle ord - en RFID-lås.

RFID (English Radio Frequency IDentification, radio frequency identification) er en metode for automatisk identifikasjon av objekter der data som er lagret i såkalte transpondere, eller RFID-brikker, leses eller skrives ved hjelp av radiosignaler. Ethvert RFID-system består av en leseenhet (leser, leser eller interrogator) og en transponder (også kjent som RFID-tag, noen ganger brukes også begrepet RFID-tag).

Denne opplæringen vil bruke en RFID-tag med Arduino. Enheten leser den unike identifikatoren (UID) til hver RFID-brikke som vi plasserer ved siden av leseren og viser den på OLED-skjermen. Hvis UID-en til taggen er lik den forhåndsdefinerte verdien som er lagret i Arduino-minnet, vil vi se meldingen "Unlocked" på skjermen. Hvis den unike ID-en ikke er lik en forhåndsdefinert verdi, vil ikke "Ulåst"-meldingen vises - se bildet nedenfor.

Slottet er stengt

Låsen er åpen

Deler som trengs for å lage dette prosjektet:

  • RFID-leser RC522
  • OLED-skjerm
  • Utviklingsstyre
  • Ledninger

Ytterligere detaljer:

  • Batteri (powerbank)

Den totale kostnaden for prosjektets komponenter var omtrent $15.

Trinn 2: RFID-leser RC522

Hver RFID-brikke inneholder en liten brikke (hvitt kort vist på bildet). Hvis du lyser med en lommelykt på dette RFID-kortet, kan du se den lille brikken og spolen som omgir den. Denne brikken har ikke batteri for å generere strøm. Den mottar strøm fra leseren trådløst ved hjelp av denne store spolen. Det er mulig å lese et RFID-kort som dette fra opptil 20 mm avstand.

Den samme brikken finnes også i RFID-nøkkelbrikker.

Hver RFID-brikke har et unikt nummer som identifiserer den. Dette er UID-en som vises på OLED-skjermen. Med unntak av denne UID-en kan hver tag lagre data. Denne typen kort kan lagre opptil tusen data. Imponerende, ikke sant? Denne funksjonen vil ikke bli brukt i dag. I dag er alt som er av interesse å identifisere et spesifikt kort med UID. Kostnaden for RFID-leseren og disse to RFID-kortene er omtrent $4.

Trinn 3: OLED-skjerm

Leksjonen bruker en 0,96" 128x64 I2C OLED-skjerm.

Dette er en veldig god skjerm å bruke med Arduino. Dette er en OLED-skjerm og det betyr at den har lavt strømforbruk. Strømforbruket til denne skjermen er rundt 10-20mA og det avhenger av antall piksler.

Skjermen har en oppløsning på 128 x 64 piksler og er liten i størrelse. Det er to visningsalternativer. Den ene er monokrom, og den andre, som den som ble brukt i opplæringen, kan vise to farger: gul og blå. Toppen av skjermen kan bare være gul, og bunnen kan bare være blå.

Denne OLED-skjermen er veldig lyssterk og har et flott og veldig fint bibliotek som Adafruit har utviklet for denne skjermen. I tillegg til dette bruker skjermen et I2C-grensesnitt, så det er utrolig enkelt å koble til Arduino.

Du trenger bare å koble til to ledninger bortsett fra Vcc og GND. Hvis du er ny på Arduino og ønsker å bruke en rimelig og enkel skjerm i prosjektet ditt, start her.

Trinn 4: Koble til alle delene

Kommunikasjon med Arduino Uno-kortet er veldig enkelt. La oss først koble strømmen til både leseren og skjermen.

Vær forsiktig, RFID-leseren må kobles til 3,3V-utgangen fra Arduino Uno, ellers vil den bli skadet.

Siden displayet også kan operere på 3,3V, kobler vi VCC fra begge moduler til den positive skinnen på breadboard. Denne bussen kobles så til 3,3V-utgangen fra Arduino Uno. Deretter kobler vi begge jordingene (GND) til breadboard-jordingsbussen. Deretter kobler vi breadboard GND-bussen til Arduino GND.

OLED-skjerm → Arduino

SCL → Analog Pin 5

SDA → Analog Pin 4

RFID-leser → Arduino

RST → Digital Pin 9

IRQ → Ikke tilkoblet

MISO → Digital Pin 12

MOSI → Digital Pin 11

SCK → Digital Pin 13

SDA → Digital Pin 10

RFID-lesermodulen bruker SPI-grensesnitt for å kommunisere med Arduino. Så vi skal bruke hardware SPI pins fra Arduino UNO.

RST-pinnen går til digital pinne 9. IRQ-pinnen forblir frakoblet. MISO pin går til digital pin 12. MOSI pin går til digital pin 11. SCK pin går til digital pin 13, og til slutt går SDA pin til digital pin 10. Det er det.

RFID-leseren er tilkoblet. Nå må vi koble OLED-skjermen til Arduino ved hjelp av I2C-grensesnittet. Så SCL-pinnen på skjermen går til den analoge pinnen til Pin 5 og SDA-pinnen på skjermen til den analoge Pin 4. Hvis vi nå slår på prosjektet og plasserer RFID-kortet i nærheten av leseren, kan vi se at prosjektet fungerer fint.

Trinn 5: Prosjektkode

For at prosjektkoden skal kompileres, må vi inkludere noen biblioteker. Først av alt trenger vi MFRC522 Rfid-biblioteket.

For å installere den, gå til Skisse -> Inkluder biblioteker -> Administrer biblioteker(Bibliotekledelse). Finn MFRC522 og installer den.

Vi trenger også Adafruit SSD1306-biblioteket og Adafruit GFX-biblioteket for visning.

Installer begge bibliotekene. Adafruit SSD1306-biblioteket trenger en liten modifikasjon. Gå til mappen Arduino -> Biblioteker, åpne Adafruit SSD1306-mappen og rediger biblioteket Adafruit_SSD1306.h. Kommenter ut linje 70 og avkommenter linje 69 fordi Skjermen har en oppløsning på 128x64.

Først erklærer vi verdien av RFID-taggen som Arduino må gjenkjenne. Dette er en rekke heltall:

Int kode = (69,141,8,136); // UID

Deretter initialiserer vi RFID-leseren og viser:

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

Etter det, i loop-funksjonen sjekker vi taggen på leseren hver 100 ms.

Hvis det er en tag på leseren, leser vi dens UID og skriver den ut på skjermen. Vi sammenligner deretter UID-en til taggen vi nettopp leste med verdien som er lagret i kodevariabelen. Hvis verdiene er de samme, vil vi vise UNLOCK-meldingen, ellers vil vi ikke vise denne meldingen.

If(match) ( Serial.println("\nJeg kjenner dette kortet!"); printUnlockMessage(); )else ( Serial.println("\nUkjent kort"); )

Selvfølgelig kan du endre denne koden for å lagre mer enn 1 UID-verdi slik at prosjektet gjenkjenner flere RFID-brikker. Dette er bare et eksempel.

Prosjektkode:

#inkludere #inkludere #inkludere #inkludere #define OLED_RESET 4 Adafruit_SSD1306-skjerm(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Forekomst av klassen MFRC522::MIFARE_Key nøkkel; int kode = (69,141,8,136); //Dette er den lagrede UID int codeRead = 0; String uidString; void setup() ( Serial.begin(9600); SPI.begin(); // Init SPI-buss rfid.PCD_Init(); // Init MFRC522 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialiser med I2C-addren 0x3D (for 128x64) // Tøm bufferen display.clearDisplay();

display.setTextSize(2);

display.setCursor(10,0);

Hva annet å lese