Elektroniskt lås på Arduino. Ovanligt kombinationslås på Arduino Elektroniskt ytterdörrlås på Arduino

Arduino är det bästa systemet att kopiera någon utrustning. De flesta idéer kunde inte förverkligas utan henne. Det har funnits den här idén länge: att skapa ett speciellt kombinationslås på Arduino. För att öppna den måste du hålla ned en viss tangent. I det här fallet bör låset inte öppnas, även om du känner till rätt knapp. För att öppna den måste du upprätthålla vissa intervaller med hjälp av muskelminne. En brottsling kan inte göra något sådant. Men allt detta är bara en teori.

För att montera den måste du använda en speciell rektangulär pulsanordning, såväl som flera räknare och en hög. Men färdig enhet skulle ha stora övergripande dimensioner och skulle vara obekvämt att använda. Som regel förföljer sådana tankar dig. Det första steget för att förverkliga min dröm var att skapa ett program för Arduino. Det kommer att fungera som ett kombinationslås. För att öppna den behöver du inte trycka på en knapp, utan flera, och göra detta samtidigt. Det färdiga diagrammet ser ut så här:

Bildkvaliteten är inte den bästa, men kopplingen görs till jord, D3, D5, D7, D9 och D11.

Koden är nedan:

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; unsigned long time = 0; //glöm inte allt som tar ett värde millis() unsigned long temp = 0; //lagra i lång byte utan tecken keya = ( 0, 0, 0, 0, 0, 0, 0, 0); //faktiska koder 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 ingångar anslutna till knapparna pinMode(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT); // inbyggd LED den 13:e pin pinMode(7, OUTPUT); pinMode(11, OUTPUT); digitalWrite(7, LOW); //ersätt jord digitalWrite(11, LOW); tid = millis(); //behövs för timing ) void blinktwice() ( // dubbel blinkning av 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 att ange kod ) if (k == 8) ( digitalWrite(ledPin, HIGH); delay(3000); k = 0 ; ) a = digitalRead(ina); //signalnivåer läses från knapparna - nedtryckt/inte nedtryckt b = digitalRead(inb); c = digitalRead(inc); delay(100); //next if - skydd mot falska positiva, du behöver inte använda if((digitalRead(ina) == a)&&(digitalRead(inb) ==b)&&(digitalRead(inc)==c)) ( if (a == keya[k]) ( if (b == tangentb[k]) ( if (c == keyc[k]) (k++; ) ) ) ) if (k==1) (if (d ==0) (tid = millis (); d++; ) ) temp = millis(); temp = temp - tid; if (temp > 10 000) (k= 0; d=0; tid = millis (; ) )

För att undvika onödiga frågor om koden bör vissa punkter förtydligas. Inställningsfunktionen används för att tilldela portar. Nästa funktion är Input_Pullup, som är nödvändig för att öka stiftspänningen med 5 V. Detta görs med hjälp av ett motstånd. Tack vare detta kommer olika kortslutningar inte att uppstå. För större bekvämlighet rekommenderas att du använder blinktwice-funktionen. I allmänhet, när du skapar olika program, måste du prova andra funktioner.

Efter tilldelning av funktioner läses signalen från portarna. Om knappen trycks in kommer den att indikeras med siffran 1, och om inte, med 2. Därefter analyseras alla värden. Till exempel dök en kombination som 0,1,1 upp. Det betyder att den första knappen trycks ned, men de andra två inte. Om alla värden är sanna är villkor 8 också sant. Detta indikeras av den tända lysdioden på frontpanelen. Därefter måste du ange en specifik kod som kommer att användas för att öppna dörren.

De sista elementen i koden används för att återställa räknarvärdena. Denna funktion utförs om det har gått mer än 10 sekunder sedan senaste knapptryckningen. Utan denna kod var det möjligt att gå igenom alla möjliga alternativ, även om det finns ganska många av dem. Efter skapandet av denna enhet det måste testas. Mer

Framstegen står inte stilla och "smarta lås" dyker alltmer upp på dörrarna till lägenheter, garage och hus.

Ett liknande lås öppnas när du trycker på en knapp på din smartphone. Som tur är har smartphones och surfplattor redan kommit in i vår vardag. I vissa fall är "smarta lås" kopplade till " molntjänster"gilla Google Drive och öppna den på distans. Dessutom gör det här alternativet det möjligt att ge åtkomst till att öppna dörren för andra människor.

Detta projekt kommer att innehålla en DIY-version smart lås på Arduino, som kan fjärrstyras från var som helst på jorden.

Dessutom har projektet lagt till möjligheten att öppna låset efter att ha identifierat ett fingeravtryck. För detta ändamål kommer en fingeravtryckssensor att integreras. Båda dörröppningsalternativen kommer att drivas av Adafruit IO-plattformen.

Ett lås som detta kan vara ett bra första steg i ditt Smart Home-projekt.

Ställa in fingeravtryckssensorn

För att arbeta med en fingeravtryckssensor finns det ett utmärkt bibliotek för Arduino, vilket avsevärt förenklar processen att ställa in sensorn. Detta projekt använder Arduino Uno. Ett Adafruit CC3000-kort används för att ansluta till Internet.

Låt oss börja med att ansluta strömmen:

  • Anslut 5V-stiftet från Arduino-kortet till den röda strömskenan;
  • GND-stiftet från Arduino ansluts till den blå skenan på det lödfria kretskortet.

Låt oss gå vidare till att ansluta fingeravtryckssensorn:

  • Anslut först strömmen. För att göra detta är den röda ledningen ansluten till +5 V-skenan och den svarta ledningen till GND-skenan;
  • Sensorns vita kabel ansluts till stift 4 på Arduino.
  • Den gröna ledningen går till stift 3 på mikrokontrollern.

Låt oss nu gå vidare till CC3000-modulen:

  • Vi ansluter IRQ-stiftet från CC3000-kortet till stift 2 på Arduino.
  • VBAT - till stift 5.
  • CS - till stift 10.
  • Efter detta måste du ansluta SPI-stiften till Arduino: MOSI, MISO och CLK - till stift 11, 12 respektive 13.

Tja, i slutet måste du förse dig med ström: Vin - till Arduino 5V (röd skena på ditt kretskort), och GND till GND (blå skena på brödbrädan).

Ett foto av det färdigmonterade projektet visas nedan:

Innan du utvecklar en skiss som ska ladda data till Adafruit IO, måste du överföra data om ditt fingeravtryck till sensorn. Annars kommer han inte känna igen dig i framtiden ;). Vi rekommenderar att du kalibrerar fingeravtryckssensorn med Arduino separat. Om det är första gången du arbetar med den här sensorn rekommenderar vi att du bekantar dig med kalibreringsprocessen och detaljerade instruktioner för hur du arbetar med fingeravtryckssensorn.

Om du inte redan har gjort det, vänligen skapa ett konto hos Adafruit IO.

Efter detta kan vi gå vidare till nästa steg av att utveckla ett "smart lås" på Arduino: nämligen att utveckla en skiss som kommer att överföra data till Adafruit IO. Eftersom programmet är ganska omfattande, kommer vi i den här artikeln att lyfta fram och bara överväga dess huvuddelar, och sedan kommer vi att tillhandahålla en länk till GitHub, där du kan ladda ner hela skissen.

Skissen börjar med att ladda alla nödvändiga bibliotek:

#omfatta

#omfatta

#omfatta

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_CC3000.h"

#omfatta

#omfatta >

Efter detta måste du korrigera skissen något genom att infoga parametrarna för ditt WiFi-nätverk, ange SSID och lösenord:

#define WLAN_SECURITY WLAN_SEC_WPA2>

Dessutom måste du ange ditt namn och AIO-nyckel för att logga in på ditt Adafruit IO-konto:

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_name"

#define AIO_KEY "adafruit_io_key">

Följande rader är ansvariga för att interagera och bearbeta data från fingeravtryckssensorn. Om sensorn var aktiverad (fingeravtrycket matchade) kommer det att finnas "1":

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

Adafruit_MQTT_Publish fingerprint = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Dessutom måste vi skapa en instans av SoftwareSerial-objektet för vår sensor:

SoftwareSerial mySerial(3, 4);

Efter detta kan vi skapa ett objekt för vår sensor:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Inuti skissen anger vi vilket fingerID som ska aktivera låset i framtiden. Det här exemplet använder 0, vilket motsvarar ID:t för det första fingeravtrycket som används av sensorn:

int fingerID = 0;

Efter detta initierar vi räknaren och fördröjer vårt projekt. I huvudsak vill vi att låset ska aktiveras automatiskt när det öppnas. Det här exemplet använder en fördröjning på 10 sekunder, men du kan justera detta värde för att passa dina behov:

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

I huvuddelen av setup()-funktionen initierar vi fingeravtryckssensorn och ser till att CC3000-chippet är anslutet till ditt WiFi-nätverk.

I loop()-funktionens kropp ansluter vi till Adafruit IO. Följande rad ansvarar för detta:

Efter att ha anslutit till Adafruit IO-plattformen kontrollerar vi det sista fingeravtrycket. Om det matchar och låset inte är aktiverat skickar vi "1" till Adafruit IO för bearbetning:

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

Serial.println(F("Åtkomst beviljad!"));

lockState = sant;

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

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

lastActivation = millis();

Om låset är aktiverat inom loop()-funktionen och vi har nått fördröjningsvärdet som anges ovan, skickar vi "0":

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

lockState = false;

if (! fingerprint.publish(state)) (

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

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

Du kan ladda ner den senaste versionen av koden på GitHub.

Det är dags att testa vårt projekt! Glöm inte att ladda ner och installera alla nödvändiga bibliotek för Arduino!

Se till att du har gjort alla nödvändiga ändringar i skissen och ladda upp den till din Arduino. Öppna sedan fönstret Serial Monitor.

När Arduino ansluter till WiFi-nätverk, blinkar fingeravtryckssensorn rött. Placera fingret på sensorn. ID-numret ska visas i fönstret för seriell monitor. Om det stämmer kommer meddelandet "OK!" att visas. Det betyder att data har skickats till Adafruit IO-servrarna.

Diagram och skiss för ytterligare konfiguration av låset med exemplet med en lysdiod

Låt oss nu gå vidare till den del av projektet som är direkt ansvarig för att kontrollera dörrlåset. Att ansluta till trådlöst nätverk och aktivera/avaktivera låset, behöver du en extra Adafruit ESP8266-modul (ESP8266-modulen behöver inte vara från Adafruit). Med hjälp av exemplet nedan kan du utvärdera hur enkelt det är att utbyta data mellan två plattformar (Arduino och ESP8266) med Adafruit IO.

I det här avsnittet kommer vi inte att arbeta direkt med låset. Istället kopplar vi helt enkelt lysdioden till stiftet där låset ska kopplas senare. Detta ger oss möjlighet att testa vår kod utan att fördjupa oss i detaljerna i låsdesignen.

Schemat är ganska enkelt: installera först ESP8266 på breadboard. Efter detta, installera LED. Glöm inte att det långa (positiva) benet på lysdioden är anslutet via ett motstånd. Motståndets andra ben är anslutet till stift 5 på ESP8266-modulen. Vi ansluter den andra (katoden) av lysdioden till GND-stiftet på ESP8266.

Den färdigmonterade kretsen visas på bilden nedan.


Låt oss nu titta på skissen vi använder för detta projekt. Återigen är koden ganska stor och komplex, så vi kommer bara att titta på dess huvuddelar:

Vi börjar med att ansluta de nödvändiga biblioteken:

#omfatta

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

Konfigurera WiFi-inställningar:

#define WLAN_SSID "ditt_wifi_ssid"

#define WLAN_PASS "ditt_wifi_lösenord"

#define WLAN_SECURITY WLAN_SEC_WPA2

Vi konfigurerar även Adafruit IO-parametrar. Samma som i föregående avsnitt:

#define AIO_SERVER "io.adafruit.com"

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_username"

#define AIO_KEY "adafruit_io_key"

Vi anger vilket stift vi anslutit lysdioden till (i framtiden kommer detta att vara vårt lås eller relä):

int relayPin = 5;

Interaktion med fingeravtryckssensorn, som i föregående avsnitt:

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

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

I huvuddelen av setup()-funktionen anger vi att stiftet som lysdioden är ansluten till ska fungera i OUTPUT-läge:

pinMode(relayPin, OUTPUT);

Inom loop()-loopen kontrollerar vi först om vi är anslutna till Adafruit IO:

Efter detta kontrollerar vi vilken signal som tas emot. Om "1" sänds, aktiverar vi stiftet som vi deklarerade tidigare, till vilket vår LED är ansluten. Om vi ​​får "0" överför vi kontakten till tillståndet "lågt":

Adafruit_MQTT_Prenumerera *prenumeration;

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

if (prenumeration == &lås) (

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

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

// Spara kommandot till strängdata

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

if (kommando == "0") (

digitalWrite(relayPin, LOW);

if (kommando == "1") (

digitalWrite(relayPin, HIGH);

Hitta senaste versionen Du hittar skissen på GitHub.

Det är dags att testa vårt projekt. Glöm inte att ladda ner alla nödvändiga bibliotek för din Arduino och kontrollera om du har gjort rätt ändringar i skissen.

För att programmera ESP8266-chippet kan du använda en enkel USB-FTDI-omvandlare.

Ladda upp skissen till Arduino och öppna fönstret Serial Monitor. I det här skedet kontrollerade vi helt enkelt om vi kunde ansluta till Adafruit IO: vi kommer att titta närmare på den tillgängliga funktionaliteten.

Testar projektet

Nu ska vi börja testa! Gå till din Adafruit IO:s användarmeny, under menyn Flöden. Kontrollera om fingeravtrycks- och låskanalerna skapas eller inte (på utskriftsskärmen nedanför finns fingeravtrycks- och låslinjerna):


Om de inte finns måste du skapa dem manuellt.

Nu måste vi säkerställa datautbyte mellan fingeravtrycks- och låskanalerna. Låskanalen måste ha värdet "1" när fingeravtryckskanalen tar värdet "1" och vice versa.

För att göra detta använder vi ett mycket kraftfullt Adafruit IO-verktyg: triggers. Utlösare är i huvudsak villkor som du kan tillämpa på konfigurerade kanaler. Det vill säga de kan användas för att koppla samman två kanaler.

Skapa en ny reaktiv trigger från Triggers-sektionen i Adafruit IO. Detta ger möjligheten att utbyta data mellan fingeravtryckssensorn och låskanalerna:


Så här ska det se ut när båda triggarna är konfigurerade:

Allt! Nu kan vi faktiskt testa vårt projekt! Vi sätter fingret på sensorn och ser hur Arduino började blinka med en lysdiod som motsvarar dataöverföring. Efter detta bör lysdioden på ESP8266-modulen börja blinka. Det betyder att den har börjat ta emot data via MQTT. Lysdioden på kretskortet bör också tändas i detta ögonblick.

Efter fördröjningen du ställt in i skissen (standard är 10 sekunder), kommer lysdioden att släckas. Grattis! Du kan styra lysdioden med ditt fingeravtryck från var som helst i världen!

Sätta upp ett elektroniskt lås

Vi har nått den sista delen av projektet: direktanslutning och kontroll av det elektroniska låset med Arduino och en fingeravtryckssensor. Projektet är inte lätt, du kan använda alla källor i den form som de presenteras ovan, men anslut ett relä istället för en lysdiod.

För att ansluta låset direkt behöver du ytterligare komponenter: en 12 V strömförsörjning, ett uttag för anslutning av ström, en transistor (V i detta exempel IRLB8721PbF MOSFET används, men en annan kan användas, till exempel en TIP102 bipolär transistor. Om du använder en bipolär transistor måste du lägga till ett motstånd.

Visas nedan elschema ansluta alla komponenter till ESP8266-modulen:


Observera att om du använder en MOSFET-transistor behöver du inte ett motstånd mellan stift 5 på ESP8266-modulen och transistorn.

Det färdigmonterade projektet visas på bilden nedan:


Driv ESP8266-modulen med FTDI-modulen och anslut 12V-strömförsörjningen till uttaget. Om du använde stiften som rekommenderas ovan för anslutning, behöver du inte ändra något i skissen.

Nu kan du sätta fingret på sensorn: låset bör fungera som svar på ditt fingeravtryck. Videon nedan visar det automatiska smarta låsprojektet i aktion:

Vidareutveckling av Smart Lock-projektet

Släppt i vårt projekt fjärrkontroll dörrlås med ditt fingeravtryck.

Experimentera gärna, modifiera skissen och bindning. Du kan till exempel byta dörren elektroniskt lås på ett relä för att styra kraften i din 3D-skrivare, manipulator eller quadcopter...

Du kan utveckla din smart hus". Till exempel, fjärraktivera ett bevattningssystem på Arduino eller slå på lamporna i ett rum... Glöm inte att du samtidigt kan aktivera ett nästan obegränsat antal enheter med Adafruit IO.

Lämna dina kommentarer, frågor och dela personlig erfarenhet Nedan. Nya idéer och projekt föds ofta i diskussioner!

Vi introducerar ett dörrlås som styrs av en RF-nyckel.

Låset fungerar så här: Presenterade VÅR nyckel (RFID-tagg) - låset stängt, presenterade nyckeln igen - låset öppnade. För att visualisera låsets funktion användes sex tvåfärgade lysdioder (linje). Vid stängning blinkar en röd lampa, vid öppning blinkar en grön lampa. Om du tar med någon annans nyckel kommer de röda lysdioderna att blinka.

Jag bestämde mig för att använda bilens centrallås som ställdon. Du kan köpa en ny, eller en begagnad, skillnaden i pris är inte stor, så jag använde en ny, den är mer pålitlig. Drivstången är ansluten till spärren. Spärren är fortfarande sovjetisk, stark. Och jag behöver inte kraftfull "anti-vandalism".

"Maskinen" styrs via två ledningar. En polaritet förlänger staven, omvänd polaritet drar tillbaka staven. Vid en spänning på 12 volt är strömmen 6 ampere, mycket...
Det finns inga gränslägesbrytare i "maskinen".

Baserat på att låskretsen (genom designen) har en garanterad strömförsörjning är batteriet 12 volt, för att säkerställa låsets funktion, vid förlust på ~220 volt. Utvecklade en brostyrkrets för "maskinen". En speciell egenskap hos kretsen är dess olinjäritet, vilket säkerställer tillförlitlig drift av låsmekanismen, och samtidigt skonsam drift av "maskinen" och nyckeltransistorer.

I diagrammet (ovan) är "Stäng"-armen markerad i rött och "Öppna"-armen är markerad i grönt. Armarna drivs separat, genom motstånd (placerade i strömförsörjningen). Kraftseparering av broarmarna infördes för att eliminera falska positiva resultat.

Förklaring: Genom 33-Ohm-motstånd (på strömförsörjningsdiagrammet) laddar en spänning på 12 volt kondensatorerna (2000-μF i varje arm). När styrspänningen kommer från Arduino_ProMini-styrenheten, 168 till "Stäng"-ingången (eller liknande "Öppna") via optokopplaren PVT322 - motsvarande nyckelarm öppnas. I det här fallet händer följande: I det ögonblick då nycklarna öppnas, "drar" energin från kondensatorerna kraftfullt motorn på "maskinen". När kondensatorerna laddas ur (detta händer snabbt), drivs "maskinens" motor av en ström som begränsas av motstånd (33 Ohm). Tack vare detta, i slutet av processen att "stänga" - "öppna" låset, rör sig stången ganska långsamt.

Denna metod för motorstyrning är optimal.

Strömförsörjningskretsen är transformator. I allmänhet drivs låskretsen av ett 12-volts, 2,8-Ah-batteri. Och strömförsörjningskretsen håller batteriet på sin nominella nivå. Strömlampan indikerar normal drift av strömförsörjningen.

Alla dioder är 1N4007 (jag glömde att ange på diagrammet, och personen ställde en fråga - vilka?).

(1) En maxströmbegränsare har monterats. Motstånd R 1 Den övre strömtröskeln är inställd på 300 mA.
På den inbyggda stabilisatorn LM317 (2) spänningsstabilisator monterad. Stabiliseringsspänningen justeras av ett motståndR 2 . Batterispänningen ska vara 13,7 volt.

Spänning från batteriet tillförs tre punkter.
Genom motstånd (33-Ohm vardera) på (X), (Y) - strömförsörjning till armarna på "förar"-nycklarna på "maskin"-motorn.

Jag monterar de flesta av mina enheter från det som kom till hands. Detta projekt är inget undantag. Som hus använder jag huset :) från elektronisk ballast:

Lysdioder nr.-2 ... nr.-7 är tvåfärgade. De ligger i en rad. Används för att visualisera processerna för att "öppna" och "stänga" låset. Utsmyckning.

I den här lektionen lär vi oss hur man gör enkelt system, som låser upp låset med en elektronisk nyckel (Tag).

I framtiden kan du förfina och utöka funktionaliteten. Till exempel, lägg till funktionen "lägga till nya nycklar och ta bort dem från minnet." I basfallet, låt oss betrakta ett enkelt exempel där en unik nyckelidentifierare är förinställd i programkoden.

I den här handledningen behöver vi:

För att implementera projektet måste vi installera biblioteken:

2) Nu måste du ansluta en summer, som avger en signal om nyckeln fungerar och låset öppnas, och en andra signal när låset stängs.

Vi ansluter summern i följande sekvens:

Arduino Summer
5V VCC
GND GND
stift 5 IO

3) En servodrivning kommer att användas som upplåsningsmekanism. Vilken servodrivning som helst kan väljas beroende på vilken storlek du behöver och kraften som servodrivningen skapar. Servot har 3 kontakter:

Du kan tydligare se hur vi kopplade ihop alla moduler på bilden nedan:

Nu, om allt är anslutet, kan du gå vidare till programmering.

Skiss:

#omfatta #omfatta #omfatta // "RFID" bibliotek. #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); osignerad lång uidDec, uidDecTemp; // för att lagra taggnumret i decimalformat Servo servo; void setup() ( Serial.begin(9600); Serial.println("Väntar på kort..."); SPI.begin(); // SPI-initiering / Init SPI-buss. mfrc522.PCD_Init(); // initialisering MFRC522 / Init MFRC522-kort. servo.attach(6); servo.write(0); // ställ servo till ett stängt tillstånd ) void loop() ( // Sök efter en ny etikett if (! mfrc522.PICC_IsNewCardPresent() ) ( return; ) // Välj en etikett om (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // Output serienummer taggar. för (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); // устанавливаем серву в закрытое сосотояние }

Låt oss titta på skissen mer detaljerat:

För att ta reda på kortets UID (Tag), måste du skriva den här skissen i arduino, montera kretsen som beskrivs ovan och öppna konsolen (Serial Port Monitoring). När du trycker på RFID-taggen visar konsolen ett nummer

Det resulterande UID måste anges på följande rad:

If (uidDec == 3763966293) // Jämför taggens Uid, om den är lika med den givna, öppnar servodrivningen ventilen.

Varje kort har en unik identifierare och upprepas inte. Således, när du presenterar kortet vars identifierare du ställer in i programmet, kommer systemet att öppna åtkomst med hjälp av en servoenhet.

Video:

Dagens lektion handlar om hur man använder en RFID-läsare med Arduino för att skapa ett enkelt låssystem, med enkla ord- RFID-lås.

RFID (English Radio Frequency IDentification, radio frequency identification) är en metod för automatisk identifiering av objekt där data lagrad i så kallade transpondrar, eller RFID-taggar, läses eller skrivs med hjälp av radiosignaler. Alla RFID-system består av en läsenhet (läsare, läsare eller förhör) och en transponder (även känd som RFID-tagg, ibland används också termen RFID-tagg).

Denna handledning kommer att använda en RFID-tagg med Arduino. Enheten läser den unika identifieraren (UID) för varje RFID-tagg som vi placerar bredvid läsaren och visar den på OLED-skärmen. Om UID för taggen är lika med det fördefinierade värdet som är lagrat i Arduino-minnet, kommer vi att se meddelandet "Unlocked" på displayen. Om det unika ID:t inte är lika med ett fördefinierat värde kommer meddelandet "Upplåst" inte att visas - se bilden nedan.

Slottet är stängt

Låset är öppet

Delar som behövs för att skapa detta projekt:

  • RFID-läsare RC522
  • OLED-skärm
  • Brödbräda
  • Ledningar

Ytterligare detaljer:

  • Batteri (powerbank)

Den totala kostnaden för projektets komponenter var cirka $15.

Steg 2: RFID-läsare RC522

Varje RFID-tagg innehåller ett litet chip (vitt kort visas på bilden). Om du lyser med en ficklampa på detta RFID-kort kan du se det lilla chippet och spolen som omger det. Detta chip har inget batteri för att generera ström. Den får ström från läsaren trådlöst med denna stora spole. Det är möjligt att läsa ett RFID-kort som detta på upp till 20 mm avstånd.

Samma chip finns också i RFID-nyckelbrickor.

Varje RFID-tagg har ett unikt nummer som identifierar den. Detta är UID som visas på OLED-skärmen. Förutom detta UID kan varje tagg lagra data. Denna typ av kort kan lagra upp till tusen data. Imponerande, eller hur? Denna funktion kommer inte att användas idag. Idag är allt som är av intresse att identifiera ett specifikt kort med dess UID. Kostnaden för RFID-läsaren och dessa två RFID-kort är cirka $4.

Steg 3: OLED-skärm

Lektionen använder en 0,96" 128x64 I2C OLED-skärm.

Detta är en mycket bra skärm att använda med Arduino. Detta är en OLED-skärm och det betyder att den har låg strömförbrukning. Strömförbrukningen för den här skärmen är runt 10-20mA och det beror på antalet pixlar.

Skärmen har en upplösning på 128 x 64 pixlar och är liten i storlek. Det finns två visningsalternativ. En av dem är monokrom, och den andra, som den som används i lektionen, kan visa två färger: gul och blå. Den övre delen av skärmen kan bara vara gul och den nedre kan bara vara blå.

Denna OLED-skärm är väldigt ljusstark och har ett jättebra och väldigt trevligt bibliotek som Adafruit har utvecklat för denna skärm. Utöver detta använder skärmen ett I2C-gränssnitt, så att ansluta till Arduino är otroligt enkelt.

Du behöver bara ansluta två ledningar förutom Vcc och GND. Om du är ny på Arduino och vill använda en billig och enkel display i ditt projekt, börja här.

Steg 4: Anslut alla delar

Kommunikationen med Arduino Uno-kortet är mycket enkel. Låt oss först ansluta strömmen till både läsaren och skärmen.

Var försiktig, RFID-läsaren måste anslutas till 3,3V-utgången från Arduino Uno annars kommer den att skadas.

Eftersom displayen även kan arbeta på 3,3V ansluter vi VCC från båda modulerna till den positiva skenan på breadboard. Denna buss ansluts sedan till 3,3V-utgången från Arduino Uno. Sedan kopplar vi båda jordarna (GND) till breadboard-jordningsbussen. Sedan ansluter vi breadboard GND-bussen till Arduino GND.

OLED-skärm → Arduino

SCL → Analog stift 5

SDA → Analog Pin 4

RFID-läsare → Arduino

RST → Digital Pin 9

IRQ → Ej ansluten

MISO → Digital Pin 12

MOSI → Digital Pin 11

SCK → Digital Pin 13

SDA → Digital Pin 10

RFID-läsarmodulen använder SPI-gränssnitt för att kommunicera med Arduino. Så vi kommer att använda hårdvara SPI-stift från Arduino UNO.

RST-stiftet går till digitalt stift 9. IRQ-stiftet förblir frånkopplat. MISO-stiftet går till digitalt stift 12. MOSI-stiftet går till digitalt stift 11. SCK-stiftet går till digitalt stift 13, och slutligen går SDA-stiftet till digitalt stift 10. Det är allt.

RFID-läsaren är ansluten. Nu måste vi ansluta OLED-skärmen till Arduino med hjälp av I2C-gränssnittet. Så SCL-stiftet på skärmen går till det analoga stiftet på stift 5 och SDA-stiftet på skärmen till det analoga stiftet 4. Om vi ​​nu slår på projektet och placerar RFID-kortet nära läsaren kan vi se att projektet fungerar bra.

Steg 5: Projektkod

För att projektkoden ska kompileras måste vi inkludera några bibliotek. Först och främst behöver vi MFRC522 Rfid-biblioteket.

För att installera det, gå till Skiss -> Inkludera bibliotek -> Hantera bibliotek(Bibliotekets ledning). Hitta MFRC522 och installera den.

Vi behöver också Adafruit SSD1306-biblioteket och Adafruit GFX-biblioteket för visning.

Installera båda biblioteken. Adafruit SSD1306-biblioteket behöver lite modifiering. Gå till mappen Arduino -> Bibliotek, öppna mappen Adafruit SSD1306 och redigera biblioteket Adafruit_SSD1306.h. Kommentera rad 70 och avkommentera rad 69 eftersom Skärmen har en upplösning på 128x64.

Först deklarerar vi värdet på RFID-taggen som Arduino måste känna igen. Det här är en uppsättning heltal:

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

Sedan initierar vi RFID-läsaren och visar:

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

Efter det, i loop-funktionen kontrollerar vi taggen på läsaren var 100:e ms.

Om det finns en tagg på läsaren läser vi dess UID och skriver ut det på displayen. Vi jämför sedan UID för taggen vi just läste med värdet som är lagrat i kodvariabeln. Om värdena är desamma kommer vi att visa UNLOCK-meddelandet, annars kommer vi inte att visa detta meddelande.

If(match) ( Serial.println("\nJag känner till det här kortet!"); printUnlockMessage(); )else ( Serial.println("\nOkänt kort"); )

Naturligtvis kan du ändra den här koden för att lagra mer än 1 UID-värde så att projektet känner igen fler RFID-taggar. Detta är bara ett exempel.

Projektkod:

#omfatta #omfatta #omfatta #omfatta #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Förekomst av klassen MFRC522::MIFARE_Key nyckel; int kod = (69,141,8,136); //Detta är den lagrade 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); // initiera med I2C-addren 0x3D (för 128x64) // Rensa bufferten. display.clearDisplay(); display.display(); display.setTextColor(WHITE); // eller SVART); display.setTextSize(2); display.setCursor(10,0); display.print("RFID-lås"); display.display(); ) void loop() ( if(rfid.PICC_IsNewCardPresent()) ( readRFID(); ) delay(100); ) void readRFID() ( rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC-typ: ") ); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); // Kontrollera är PICC av klassisk MIFARE-typ if (piccType_52_2:2 = PICCTYPE_2: && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) ( Serial.println(F("Din tagg är inte av typen MIFARE Classic.")); return; ) clearUID(n"Serial); Skannade PICC:s UID:"); 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; boolesk matchning = sant; while(i

Steg 6: Slutresultat

Som du kan se från lektionen kan du för lite pengar lägga till en RFID-läsare till dina projekt. Du kan enkelt skapa ett säkerhetssystem med hjälp av den här läsaren eller skapa mer intressanta projekt, till exempel, så att data från en USB-enhet läses först efter upplåsning.

Publikationer om ämnet