Hvordan lage en kodelås på arduino. Elektronisk lås på arduino. Montering forberedelse

I denne artikkelen vil jeg fortelle deg hvordan du lager en kombinasjonslås fra arduino. For å gjøre dette trenger vi røde og grønne lysdioder, en summer, en arduino nano, en LCD-skjerm med en I2C-omformer, en servostasjon og et 4x4 matrise-tastatur. Når den er slått på, vil displayet skrive "Angi kode.",

den røde lysdioden slås på

og det grønne slukker, servoen er satt til 0 °. Når du legger inn tall, vil * lyse på displayet.

Hvis koden er lagt inn feil, vil displayet lese “Angi torsk.”. Hvis koden er riktig, høres et pip, servostasjonen roterer 180 °, og displayet viser "Åpne."

den grønne lysdioden slås på

og rødt vil slå seg av. Etter 3 sekunder vil servoen gå tilbake til utgangsposisjonen, den røde lysdioden slås på, og det grønne slås av, displayet viser "Lukk."

så vil displayet si “Angi kode.”. Nå om ordningen. Først må du koble arduino-ledningene med en brødplate (strømkontakter).

Så kobler vi matrikstastaturet til kontaktene D9 - D2.

Så servoen. Vi kobler den til pinne 10.

Rød LED til pinne 11.

Grønn - å pinne 12.

Summer - til å pinne 13.

Last nå skissen.

#inkludere #inkludere #inkludere #inkludere iarduino_KB KB (9, 8, 7, 6, 5, 4, 3, 2); LiquidCrystal_I2C lcd (0x27, 16, 2); Servo servo; int pass \u003d (3, 6, 1, 8); int i; int r \u003d 11; int g \u003d 12; void setup () (KB.begin (KB1); pinMode (r, OUTPUT); pinMode (g, OUTPUT); lcd.init (); lcd.backlight (); digitalWrite (g, LOW); digitalWrite (r, HIGH ); servo.attach (10); servo.write (0); lcd.setCursor (0, 0);) void loop () (lcd.clear (); lcd.print ("Skriv inn kode."); mens ( ! KB.check (KEY_DOWN)) (forsinkelse (1);) i \u003d KB.getNum; lcd.clear (); lcd.setCursor (0, 0); lcd.print ("*"); mens (! KB. sjekk (KEY_DOWN)) (forsinkelse (1);) i \u003d KB.getNum; lcd.print ("*"); mens (! KB.check (KEY_DOWN))) (forsinkelse (1);) i \u003d KB.getNum; lcd.print ("*"); mens (! KB.check (KEY_DOWN)) (forsinkelse (1);) i \u003d KB.getNum; lcd.print ("*"); if (i \u003d\u003d pass) (hvis (in \u003d\u003d pass) (if (in \u003d\u003d pass) (if (in \u003d\u003d pass) (lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Open."); tone ( 13, 400, 750); servo.write (180); digitalWrite (r, LOW); digitalWrite (g, HIGH); forsinkelse (3000); lcd.clear (); lcd.setCursor (0, 0); lcd. print ("Lukk."); tone (13, 300, 700); servo.write (0); digitalWrite (g, LOW); digitalWrite (r, HIGH); dela y (1000); )))))

Det er alt. Kos deg med kombinasjonslåsen!

Liste over radioelementer

betegnelse En type Pålydende beløp MerkScoreNotatboken min
E1 Arduino styre

Arduino Nano 3.0

1 5V Til notisbok
E8, E9 motstand

220 ohm

2 SMD Til notisbok
E6 Lysemitterende diode

AL102G

1 rød Til notisbok
E7 Lysemitterende diode

AL307G

1 Grønn Til notisbok
E3 LCD-skjermMed I2C-grensesnitt1 Grønn bakgrunnsbelysning Til notisbok
E5 ServoSG901 180 grader Til notisbok
E2 buzzer5V1 Bu Til notisbok
E4 Tastatur4x41 Matrise Til notisbok
Ikke Breadboard640 poeng1 Ingen lodding

Fremgangen står ikke stille og Smart Locks dukker stadig oftere opp på dørene til leiligheter, garasjer og hus.

En lignende lås åpnes når du trykker på en knapp på smarttelefonen. Heldigvis er smarttelefoner og nettbrett allerede inkludert i hverdagen vår. I noen tilfeller kobler "smarte låser" seg til "skytjenester" som Google Drive og åpnes eksternt. I tillegg gjør dette alternativet det mulig å gi andre mennesker tilgang til døren.

Dette prosjektet vil implementere DIY-versjonen av smartlåsen på Arduino, som kan kontrolleres eksternt fra hvor som helst i verden.

I tillegg er muligheten til å åpne låsen etter gjenkjennelse av fingeravtrykk lagt til prosjektet. For dette vil en fingeravtrykssensor være integrert. Begge døråpningsalternativene vil fungere på basis av Adafruit IO-plattformen.

En slik lås kan være et flott første skritt i utformingen av ditt smarte hjem.

Fingerprint Sensor Setup

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

La oss starte med å koble strømmen:

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

Vi fortsetter å koble fingeravtrykssensoren:

  • Koble strømmen først. For å gjøre dette kobles den røde ledningen til +5 V skinnen, og den svarte ledningen kobles 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å inn i CC3000-modulen:

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

Vel, til slutt må du levere strøm: Vin - til Arduino 5V (rød skinne på kretskortet), og GND til GND (blå skinne på brødbordet).

Et bilde av et ferdig montert prosjekt er vist nedenfor:

Før du utvikler en skisse som vil laste opp data til Adafruit IO, må du overføre data om fingeravtrykket ditt til sensoren. Ellers, i fremtiden vil han ikke kjenne deg igjen;). Vi anbefaler å kalibrere fingeravtrykssensoren ved bruk av Arduino separat. Hvis dette er første gang du bruker denne sensoren, anbefaler vi deg å bli kjent med kalibreringsprosessen og detaljerte instruksjoner for å jobbe med fingeravtrykssensoren.

Hvis du ikke allerede har gjort det, kan du opprette en konto på Adafruit IO.

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

En skisse starter med å laste inn alle nødvendige biblioteker:

#inkludere

#inkludere

#inkludere

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_CC3000.h"

#inkludere

#inkludere >

Etter det må du justere skissen litt ved å sette inn parametrene til WiFi-nettverket ditt, spesifisere SSID og passord (passord):

#definere WLAN_SECURITY WLAN_SEC_WPA2\u003e

I tillegg må du oppgi navn og AIO-nøkkel (nøkkel) for å oppgi Adafruit IO-kontoen din:

#definere AIO_SERVERPORT 1883

#definere AIO_USERNAME "adafruit_io_name"

#definere AIO_KEY "adafruit_io_key"\u003e

Følgende linjer er ansvarlige for interaksjonen og behandlingen av data fra fingeravtrykssensoren. Hvis sensoren ble aktivert (fingeravtrykket falt sammen), vil det være "1":

const char FINGERPRINT_FEED PROGMEM \u003d AIO_USERNAME "/ feeds / fingerprint";

Adafruit_MQTT_Publish fingerprint \u003d 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 det kan vi lage et objekt for sensoren vår:

Adafruit_Fingerprint finger \u003d Adafruit_Fingerprint (& mySerial);

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

int fingerID \u003d 0;

Etter det initialiserer vi telleren og forsinkelsen i prosjektet vårt. I hovedsak ønsker vi at låsen skal utløses automatisk etter åpning. Dette eksemplet bruker en forsinkelse på 10 sekunder, men du kan justere denne verdien til dine egne behov:

int activationCounter \u003d 0;

int lastActivation \u003d 0;

int activationTime \u003d 10 * 1000;

I hoveddelen av konfigurasjonsfunksjonen () initialiserer vi fingeravtrykssensoren og sikrer at CC3000-brikken er koblet til ditt WiFi-nettverk.

I kroppen til 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 den samsvarer og låsen ikke er aktivert, sender vi "1" for behandling til Adafruit IO:

if (fingerprintID \u003d\u003d fingerID && lockState \u003d\u003d false) (

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

lockState \u003d sant;

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

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

lastActivation \u003d millis ();

Hvis låsen er aktivert innenfor loop-funksjonen, og vi har nådd forsinkelsesverdien som ble indikert over, send "0":

if ((activationCounter - lastActivation\u003e activationTime) && lockState \u003d\u003d true) (

lockState \u003d falsk;

if (! fingerprint.publish (tilstand)) (

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!

Forsikre deg om at du gjør alle nødvendige endringer på skissen og laster den opp til din Arduino. Etter det åpner du serielmonitorvinduet.

Når Arduino kobles til WiFi-nettverket, vil fingeravtrykssensoren blinke rødt. Plasser fingeren på sensoren. Serienummeret skal vise ID-nummeret. Hvis det stemmer, vises en melding: "OK!". Dette betyr at dataene er sendt til Adafruit IO-serveren.

Oppsett og skisse for ytterligere låseinnstillinger ved å bruke eksemplet på en LED

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

I dette avsnittet vil vi ikke arbeide direkte med låsen. I stedet kobler vi ganske enkelt LED til kontakten som låsen skal kobles til senere. Dette vil gjøre det mulig å teste koden vår uten å gå inn i den spesielle utformingen av slottet.

Opplegget er ganske enkelt: installer først ESP8266 på brødbordet. Etter det, installer LED. Ikke glem at det lange (positive) benet til LED-en er koblet gjennom en motstand. Motstandens andre etappe er koblet til pinne 5 på ESP8266-modulen. Den andre LED-lampen (katode) er koblet til GND-pinnen på ESP8266.

En ferdig montert krets er vist på bildet nedenfor.


La oss nå finne ut skissen vi bruker til dette prosjektet. Igjen er koden ganske omfangsrik og sammensatt, så vi vil bare vurdere hoveddelene:

Vi starter med å koble sammen nødvendige biblioteker:

#inkludere

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

Konfigurer WiFi-innstillinger:

#definere WLAN_SSID "din_wifi_ssid"

#definere WLAN_PASS "ditt_wifi_passord"

#definere WLAN_SECURITY WLAN_SEC_WPA2

Tilpass også Adafruit IO-innstillingene. Samme som i forrige seksjon:

#definere AIO_SERVER "io.adafruit.com"

#definere AIO_SERVERPORT 1883

#definere AIO_USERNAME "adafruit_io_username"

#definere AIO_KEY "adafruit_io_key"

Vi angir hvilken pinne vi koblet til LED-en (i fremtiden vil det være låsen eller reléet vårt):

int relayPin \u003d 5;

Samhandling med fingeravtrykssensoren, som i forrige seksjon:

const char LOCK_FEED PROGMEM \u003d AIO_USERNAME "/ feeds / lock";

Adafruit_MQTT_Subscribe lock \u003d Adafruit_MQTT_Subscribe (& mqtt, LOCK_FEED);

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

pinMode (relayPin, OUTPUT);

Innen loop () -sløyfen, sjekk først om vi er koblet til Adafruit IO:

Etter det sjekker vi hvilket signal som kommer inn. Hvis "1" overføres, aktiverer vi kontakten som vi kunngjorde tidligere, som LED-en er koblet til. Hvis vi får "0", setter du kontakten i "lav" tilstand:

Adafruit_MQTT_Subscribe-abonnement;

mens ((abonnement \u003d mqtt.readSubscription (1000))) (

if (abonnement \u003d\u003d & lock) (

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

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

// Lagre kommandoen i strengdata

Strengkommando \u003d String ((char *) lock.lastread);

if (kommando \u003d\u003d "0") (

digitalWrite (relayPin, LOW);

if (kommando \u003d\u003d "1") (

digitalWrite (relayPin, HIGH);

Du finner den siste versjonen av skissen på GitHub.

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

En enkel USB-FTDI-omformer kan brukes til å programmere ESP8266-brikken.

Last ned skissen til Arduino og åpne serievinduet. På dette stadiet sjekket vi bare om vi klarte å koble til Adafruit IO: vi vil vurdere den tilgjengelige funksjonaliteten videre.

Testing av prosjektet

La oss begynne å teste! Gå til brukermenyen til Adafruit IO, i Feeds-menyen. Sjekk om kanalene for fingeravtrykket og låsen er opprettet eller ikke (på utskriftsskjermen under disse er fingeravtrykket og låselinjene):


Hvis de ikke er det, må du opprette det manuelt.

Nå må vi sikre utveksling av data mellom fingeravtrykket og låsekanalene. Låskanalen må settes til "1" når fingeravtrykkskanalen er satt til "1" og omvendt.

For å gjøre dette bruker vi det veldig kraftige Adafruit IO-verktøyet: triggere. Utløsere er i hovedsak forhold som du kan bruke på innstilte kanaler. Det vil si at de kan brukes til å sammenkoble de to kanalene.

Lag en ny reaktiv trigger fra Triggers-delen i Adafruit IO. Dette vil gi muligheten til å utveksle data mellom kanalene til fingeravtrykssensoren og låsen:


Slik ser det ut når begge triggerne er konfigurert:

Alle! Nå kan vi virkelig teste prosjektet vårt! Vi satte en finger på sensoren og ser hvordan Arduino begynte å blinke med en LED som tilsvarer dataoverføring. Etter dette skulle LED på ESP8266-modulen begynne å blinke. Dette betyr at han begynte å motta data gjennom MQTT. LED på kretskortet skal også slå på på dette punktet.

Etter forsinkelsen du har angitt i skissen (som standard er denne verdien 10 sekunder), lyser LED-en. Gratulerer! Du kan kontrollere LED med fingeravtrykket, hvor som helst i verden!

Konfigurer elektronisk lås

Vi kom til den siste delen av prosjektet: direkte tilkobling og kontroll av den elektroniske låsen ved bruk av Arduino og en fingeravtrykssensor. Prosjektet er ikke enkelt, du kan bruke alle kildene i den formen de er beskrevet ovenfor, men i stedet for en LED, koble til et relé.

For å koble låsen direkte, trenger du flere komponenter: en 12 V strømforsyning, en jack for strømforsyning, en transistor (i dette eksempelet IRLB8721PbF MOSFET brukes, men du kan bruke en annen, for eksempel en TIP102 bipolar transistor. Hvis du bruker en bipolar transistor, trenger du legg til motstand.

Nedenfor er det elektriske diagrammet for tilkobling av alle komponenter til ESP8266-modulen:


Vær oppmerksom på at hvis du bruker en MOSFET-transistor, trenger du ikke en motstand mellom pinne 5 på ESP8266-modulen og transistoren.

Et ferdig montert prosjekt vises på bildet nedenfor:


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

Nå kan du sette fingeren på sensoren: låsen skal fungere ved å reagere på fingeravtrykket ditt. Videoen nedenfor viser designet til en automatisk smartlås i aksjon:

Videreutvikling av Smart Lock-prosjektet

I prosjektet vårt har fjernkontrollen til en dørlås med et fingeravtrykk blitt utgitt.

Eksperimenter gjerne, modifiser skissen og innbindingen. For eksempel kan du bytte ut den elektroniske dørlåsen med et relé for å kontrollere kraften til 3D-skriveren, manipulatoren eller quadrocopter ...

Du kan utvikle ditt "smarte hjem". For eksempel kan du eksternt aktivere et vanningsanlegg på Arduino eller slå på lyset i rommet ... Ikke glem at du samtidig kan aktivere et nesten ubegrenset antall enheter ved å bruke Adafruit IO.

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

Arduino er det beste systemet for kopiering av utstyr. De fleste ideene kunne ikke realiseres uten det. I lang tid har det vært en slik ide: å lage en spesiell kombinasjonslås for arduino. For å åpne den, må du holde nede en bestemt tast. I dette tilfellet skal ikke låsen åpne seg, selv om du vet riktig knapp. For å åpne den, er det nødvendig å tåle visse intervaller ved bruk av muskelminne. En slik kriminell vil ikke kunne begå. Men dette er bare en teori.

For å sette sammen det må du bruke en spesiell enhet med rektangulære pulser, i tillegg til flere tellere og en haug. Men den ferdige enheten ville ha store generelle dimensjoner, og den vil være upraktisk å bruke. Som regel hjemsøker slike tanker. Det første trinnet i realiseringen av en drøm var å lage et program for Arduino. Det vil fungere som en kombinasjonslås. For å åpne den, må du trykke på ikke én tast, men flere, og gjøre det samtidig. Det ferdige opplegget ser slik ut:

Bildekvaliteten er ikke den beste, men forbindelsen er laget til bakken, D3, D5, D7, D9 og D11.

Koden presenteres nedenfor:

Const int ina \u003d 3; const int inb \u003d 5; const int øker \u003d 9; const int ledPin \u003d 13; int i \u003d 1000; byte a \u003d 0; byte b \u003d 0; byte c \u003d 0; byte d \u003d 0; usignert lang tid \u003d 0; // ikke glem alt som tar en verdi millis () usignert lang temp \u003d 0; // lagre i usignert lang byte keya \u003d (0, 0, 0, 0, 0, 0, 0, 0); // koder faktisk byttastb \u003d (1, 1, 1, 1, 0, 1, 0, 0); byte keyc \u003d (1, 0, 1, 0, 1, 1, 1, 0); byte k \u003d 0; void setup () (pinMode (ina, INPUT_PULLUP); // 3 innganger koblet til pinMode-knappene (inb, INPUT_PULLUP); pinMode (inc, INPUT_PULLUP); pinMode (ledPin, OUTPUT); // innebygd LED på den 13. pin pinMode (7, OUTPUT); pinMode (11, OUTPUT); digitalWrite (7, LOW); // erstatte bakken digitalWrite (11, LOW); time \u003d millis (); // nødvendig for å telle tiden) tomrom blinktwice () ( // dobbelt blinkende LED digitalWrite (ledPin, HIGH); forsinkelse (100); digitalWrite (ledPin, LOW); delay (100); digitalWrite (ledPin, HIGH); forsinkelse (100); digitalWrite (ledPin, LOW); forsinkelse ( 200);) void loop () (hvis (k \u003d\u003d 0) (blinktwice (); // invitasjon til å angi koden) if (k \u003d\u003d 8) (digitalWrite (ledPin, HIGH); forsinkelse (3000); k \u003d 0 ;) a \u003d digitalRead (ina); // lese signalnivåer fra knappene - trykket / ikke trykket b \u003d digitalRead (inb); c \u003d digitalRead (inc); forsinkelse (100); // neste hvis - beskyttelse mot falske alarmer, du kan ikke bruke if ((digitalRead (ina) \u003d\u003d a) && (digitalRead (inb) \u003d\u003d b) && (digitalRead (inc) \u003d\u003d c)) (if (a \u003d\u003d keya [k]) (if (b \u003d\u003d tasten [k]) (hvis (c \u003d\u003d keyc [k]) (k ++; )))) if (k \u003d\u003d 1) (if (d \u003d\u003d 0) (tid \u003d millis (); d ++;)) temp \u003d millis (); temp \u003d temp - tid; if (temp\u003e 10000) (k \u003d 0; d \u003d 0; tid \u003d millis ();))

For å unngå unødvendige spørsmål om koden, bør noen punkter avklares. Oppsettfunksjonen brukes til å tilordne porter. Den neste funksjonen er Input_Pullup, som er nødvendig for å øke pinnespenningen med 5 V. Dette gjøres ved å bruke en motstand. På grunn av dette vil ikke forskjellige kortslutninger oppstå. For større bekvemmelighet anbefales det å bruke blinktwice-funksjonen. Generelt sett, når du lager forskjellige programmer, må du prøve andre funksjoner.

Etter at funksjonene er tildelt, leses signalet fra portene. Hvis du trykker på knappen, vil den indikeres med nummer 1, og hvis ikke - 2. Deretter analyseres alle verdiene. For eksempel var det en slik kombinasjon som 0,1,1. Dette betyr at den første tasten trykkes, og de to andre ikke. Hvis alle verdier er sanne, er tilstand 8 også sann. Dette fremgår av en tent LED på frontpanelet. Deretter må du oppgi en spesifikk kode som skal tjene til å åpne døren.

De siste kodeelementene brukes til å tilbakestille telleren. En slik funksjon utføres hvis mer enn 10 sekunder har gått siden forrige tastetrykk. Uten denne koden kan du gå gjennom alle mulige alternativer, selv om det er mange av dem. Etter å ha opprettet denne enheten, må du teste den. Ennå

I denne leksjonen lærer vi hvordan du lager et enkelt system som låses opp med en elektronisk nøkkel (Tag).

I fremtiden kan du avgrense og utvide funksjonaliteten. Legg for eksempel til funksjonen "legg til nye taster og slett dem fra minnet". I utgangspunktet kan du vurdere et enkelt eksempel når en unik nøkkelidentifikator er forhåndsdefinert i programkoden.

I denne leksjonen trenger vi:

For å implementere prosjektet må vi installere bibliotekene:

2) Nå må du koble Buzzer, som vil gi et signal hvis nøkkelen har fungert og låsen åpnes, og det andre signalet når låsen lukkes.

Summeren er tilkoblet i følgende sekvens:

Arduino buzzer
5v Vcc
GND GND
pinne 5 IO

3) En servo-stasjon vil bli brukt som låsemekanisme. Enhver servo kan velges, avhengig av størrelsen og innsatsen som kreves av deg, som servoen lager. Servoen har 3 kontakter:

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

Hvis alt er tilkoblet, kan du fortsette med programmering.

Skisse:

#inkludere #inkludere #inkludere // bibliotek "RFID". #definere SS_PIN 10 # definere RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); usignert lang uidDec, uidDecTemp; // for lagring av etikettnummer i desimalformat Servo servo; void setup () (Serial.begin (9600); Serial.println ("Venter på kort ..."); SPI.begin (); // initialisering SPI / Init SPI-buss. mfrc522.PCD_Init (); // initialisering MFRC522 / Init MFRC522 card.servo.attach (6); servo.write (0); // sett servoen til en lukket tilstand) void loop () (// Søk etter en ny etikett hvis (! Mfrc522.PICC_IsNewCardPresent ()) (retur; ) // Valg av etikett hvis (! Mfrc522.PICC_ReadCardSerial ()) (retur;) uidDec \u003d 0; // Returner serienummeret til etiketten.for (byte i \u003d 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 analysere skissen mer detaljert:

For å finne ut UID på kortet (Tagger), må du skrive denne skissen på arduino, samle kretsen beskrevet over og åpne konsollen (Serial Port Monitoring). Når du merker RFID, vil konsollen vise nummeret

Den resulterende UID må legges inn på følgende linje:

Hvis (uidDec \u003d\u003d 3763966293) // Sammenlign Uid for taggen, hvis den er lik den spesifiserte, åpner servoen ventilen.

For hvert kort er denne identifikatoren unik og gjentas ikke. Når du tar opp et kort, identifikatoren du angir i programmet, vil systemet åpne tilgang ved hjelp av en servo.

video:

Det bare skjedde at vi bestemte oss for på jobb å installere en kombinasjonslås på døren vår, fordi når vi stadig løper inn, løper vi ut av kontoret, hvor døren må lukkes kontinuerlig i mangel av innbyggere. Tastene blir ofte glemt inni. Generelt bestemte vi oss for at kombinasjonslåsen er en utmerket løsning.

Etter å ha tullet på de kinesiske loppemarkedene og ebay fant jeg ikke noe billig og mer eller mindre alvorlig og bestemte meg for å lage det med egne hender. Jeg vil ta en reservasjon med en gang at Arduino-plattformen ble valgt for sin enkelhet, siden det ikke var noen erfaring med mikrokontrollere i det hele tatt.

Idé

På døren fra utsiden av døren skal det være et tastatur som passordet er lagt inn på, resten av strukturen er festet på innsiden. For å kontrollere fullstendig lukking av døren brukes en vassbryter. Når han forlater kontoret, trykker en person på "*" -tasten på tastaturet, og uten å vente på at døren skal stenges nærmere, går virksomheten hans i gang, når døren er helt lukket, lukkes reed-bryteren og låsen lukkes. Døren åpnes ved å taste inn et firesifret passord og trykke "#".

Tilbehør

Arduino UNO \u003d $ 18
Arduino protoshield + breadboard \u003d $ 6
L293D \u003d $ 1
En pakke med ledninger 30stk for en tavle \u003d $ 4
2 RJ45-kontakter \u003d $ 4
2 gafler RJ45 \u003d $ 0,5
sentrallåsaktuator \u003d 250 rubler.
Vassbryter \u003d revet fri fra det gamle vinduet.
Gigantisk metallklink \u003d gratis
Veske fra det gamle D-LINK-navet på 1,5 mm jern \u003d fritt
Strømforsyningen fra samme D-LINK-hub for 12 og 5v \u003d er også gratis
En haug med skruer og muttere for å feste alle disse tingene til saken \u003d 100rub.
Kontrollpanel fra innbruddsalarm \u003d gratis.

Total: $ 33,5 og 350 rubler.

Ikke så lite, sier du, og du vil definitivt ha rett, men du må betale for gleden! Og å samle noe med egne hender er alltid hyggelig. I tillegg kan designet reduseres kraftig hvis du bruker en bare MK uten en Arduino.

Montering forberedelse

Jeg vil si noen få ord om kjøp av et sentralt element i utformingen av aktuatoren. I den lokale bilbutikken tilbød de meg to typer aktuatorer: "med to ledninger og fem." I følge salgskvinnen var de nøyaktig de samme, og forskjellen i antall ledninger betydde absolutt ingenting. Som det viste seg senere, er dette imidlertid ikke slik! Jeg valgte en enhet med to ledninger, den ble drevet av 12v. I designen med fem ledninger er det installert grensebrytere, som lar deg kontrollere bevegelsen til spaken. Jeg skjønte at jeg kjøpte feil først da jeg tok den fra hverandre, og det var for sent å endre den. Håndtakets kjede viste seg å være for kort til normalt å trekke inn sperren, derfor var det nødvendig å modifisere den litt, nemlig å fjerne to gummiskiver som forkortet aktuatorhendelen. For dette måtte saken sages sammen med en vanlig baufil, fordi den andre skiven var inne. Det blå elektriske båndet, som alltid, hjalp oss i fremtiden når vi monterte det tilbake.
For å kontrollere aktuatormotoren ble L293D-motorføreren brukt, som tåler en topplast på opptil 1200 mA; da aktuatormotoren stoppet, vokste topplasten til bare 600 mA.
Fra kontrollpanelet fra innbruddsalarmen ble kontakter fjernet fra tastaturet, høyttaleren og to lysdioder. Fjernkontrollen og hovedenheten skulle være tilkoblet ved hjelp av tvinnede par- og RJ45-kontakter

Programmering.

Så fra programmeringserfaring har jeg ikke hatt Arduino så langt. Jeg benyttet meg av andres utvikling og artikler fra nettstedet arduino.cc. Hvem bryr seg, denne stygge koden kan se ut :)

Foto og video



Arduino og aktuator


Strømforsyning


Tastatur


Espagnolette (koblet til aktuatoren med en metalløk og på hvilken varmekrymping er slitt for skjønnhet)

Video av enhetsoperasjonsprosessen: