Elektroninen lukko Arduinossa. Epätavallinen yhdistelmälukko Arduinossa Elektroninen etuoven lukko Arduinossa

Arduino on paras järjestelmä kopioida mitään laitteita. Useimmat ideat eivät voisi toteutua ilman häntä. Tämä idea on ollut pitkään: luoda erityinen yhdistelmälukko Arduinoon. Voit avata sen pitämällä tiettyä näppäintä painettuna. Tässä tapauksessa lukon ei pitäisi avautua, vaikka tietäisit oikean painikkeen. Sen avaamiseksi sinun on ylläpidettävä tiettyjä aikavälejä lihasmuistin avulla. Rikollinen ei voi tehdä sellaista. Mutta tämä kaikki on vain teoriaa.

Sen kokoamiseen on käytettävä erityistä suorakaiteen muotoista pulssilaitetta sekä useita laskureita ja kasa. Mutta valmis laite sillä olisi suuret kokonaismitat ja se olisi hankala käyttää. Yleensä tällaiset ajatukset kummittelevat sinua. Ensimmäinen askel unelmani toteuttamisessa oli ohjelman luominen Arduinolle. Se toimii yhdistelmälukona. Avataksesi sen, sinun ei tarvitse painaa yhtä näppäintä, vaan useita, ja tehdä tämä samanaikaisesti. Valmis kaavio näyttää tältä:

Kuvanlaatu ei ole paras, mutta liitäntä on tehty maahan, D3, D5, D7, D9 ja D11.

Koodi on alla:

Const int ina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; tavu a = 0; tavu b = 0; tavu c = 0; tavu d = 0; etumerkitön pitkä aika = 0; //älä unohda kaikkea, mikä saa arvon millis() unsigned long temp = 0; //tallentaa etumerkittömään pitkän tavun avain = ( 0, 0, 0, 0, 0, 0, 0, 0); //todelliset koodit tavu näppäin = (1, 1, 1, 1, 0, 1, 0, 0); tavuavainc = ( 1, 0, 1, 0, 1, 1, 1, 0); tavu k = 0; void setup() ( pinMode(ina, INPUT_PULLUP); //3 painikkeisiin kytkettyä tuloa pinMode(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT); // sisäänrakennettu LED 13. pin pinMode(7, OUTPUT); //replace maadig. LED digitalWrite(ledPin, HIGH); digitalWrite(ledPin, LOW); // kehotetaan syöttämään koodi ) if (k == 8) ( digitalWrite(ledPin, HIGH); viive(3000); k = 0 ; ) a = digitalRead(ina) //signaalitasot luetaan painikkeista - painetaan /ei painettu b = 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) ( aika = millis (); d++; ) ) temp = millis(); lämpötila = lämpötila - aika; if (lämpö > 10000) ( k= 0; d=0; aika = millis (; ) )

Joitakin kohtia tulee selventää, jotta vältetään koodiin liittyvät tarpeettomat kysymykset. Asetustoimintoa käytetään porttien määrittämiseen. Seuraava toiminto on Input_Pullup, jota tarvitaan pin jännitteen lisäämiseksi 5 V. Tämä tehdään vastuksella. Tämän ansiosta erilaisia ​​oikosulkuja ei tapahdu. Käyttömukavuuden lisäämiseksi on suositeltavaa käyttää vilkku kahdesti -toimintoa. Yleensä, kun luot erilaisia ​​ohjelmia, sinun on kokeiltava muita toimintoja.

Toimintojen määrittämisen jälkeen signaali luetaan porteista. Jos painiketta painetaan, se ilmaistaan ​​numerolla 1, ja jos ei, numerolla 2. Seuraavaksi kaikki arvot analysoidaan. Esiin ilmestyi esimerkiksi yhdistelmä, kuten 0,1,1. Tämä tarkoittaa, että ensimmäistä näppäintä painetaan, mutta kahta muuta ei. Jos kaikki arvot ovat tosi, ehto 8 on myös tosi. Tämä ilmaistaan ​​etupaneelissa olevalla LED-valolla. Seuraavaksi sinun on syötettävä tietty koodi, jota käytetään oven avaamiseen.

Koodin viimeisiä elementtejä käytetään laskurin arvojen nollaukseen. Tämä toiminto suoritetaan, jos viimeisestä näppäimen painalluksesta on kulunut yli 10 sekuntia. Ilman tätä koodia oli mahdollista iteroida kaikkea mahdollisia vaihtoehtoja, vaikka niitä on aika paljon. Luomisen jälkeen tästä laitteesta se on testattava. Lisää

Edistyminen ei pysähdy ja ”älylukot” ilmestyvät yhä enemmän asuntojen, autotallien ja talojen oviin.

Samanlainen lukko avautuu, kun painat älypuhelimen painiketta. Onneksi älypuhelimet ja tabletit ovat jo tulleet jokapäiväiseen elämäämme. Joissakin tapauksissa "älykkäät lukot" on yhdistetty " pilvipalvelut"kuten Google Drive ja avaa se etänä. Lisäksi tämä vaihtoehto mahdollistaa oven avaamisen muille ihmisille.

Tässä projektissa on DIY-versio älykäs lukko Arduinossa, jota voidaan ohjata etänä mistä päin maailmaa tahansa.

Lisäksi projektiin on lisätty mahdollisuus avata lukko sormenjäljen tunnistamisen jälkeen. Tätä tarkoitusta varten integroidaan sormenjälkitunnistin. Molemmat oven avausvaihtoehdot saavat tehonsa Adafruit IO -alustalta.

Tällainen lukko voi olla loistava ensimmäinen askel Smart Home -projektissasi.

Sormenjälkitunnistimen asennus

Sormenjälkitunnistimen kanssa työskentelemistä varten Arduinolle on erinomainen kirjasto, joka yksinkertaistaa huomattavasti anturin asennusprosessia. Tämä projekti käyttää Arduino Unoa. Adafruit CC3000 -korttia käytetään yhteyden muodostamiseen Internetiin.

Aloitetaan kytkemällä virta:

  • Liitä 5 V:n nasta Arduino-kortista punaiseen virtakiskoon;
  • Arduinon GND-nasta kytkeytyy juotettoman piirilevyn siniseen kiskoon.

Siirrytään sormenjälkitunnistimen kytkemiseen:

  • Kytke ensin virta. Tätä varten punainen johto liitetään +5 V kiskoon ja musta johto GND-kiskoon;
  • Anturin valkoinen johto liitetään Arduinon nastaan ​​4.
  • Vihreä johto menee mikro-ohjaimen nastaan ​​3.

Siirrytään nyt CC3000-moduuliin:

  • Yhdistämme IRQ-nastan CC3000-kortista Arduinon nastaan ​​2.
  • VBAT - nastaan ​​5.
  • CS - nastaan ​​10.
  • Tämän jälkeen sinun on kytkettävä SPI-nastat Arduinoon: MOSI, MISO ja CLK - nastoihin 11, 12 ja 13.

No, lopussa sinun on annettava virtaa: Vin - Arduino 5V: lle (punainen kisko piirilevylläsi) ja GND GND: lle (sininen kisko korkolevyllä).

Alla on kuva täysin kootusta projektista:

Ennen kuin kehität luonnoksen, joka lataa tietoja Adafruit IO:lle, sinun on siirrettävä tiedot sormenjäljestäsi anturiin. Muuten hän ei tunnista sinua jatkossa ;). Suosittelemme sormenjälkitunnistimen kalibrointia Arduinolla erikseen. Jos tämä on ensimmäinen kerta, kun työskentelet tämän anturin kanssa, suosittelemme, että tutustut kalibrointiprosessiin ja yksityiskohtaisiin ohjeisiin sormenjälkitunnistimen kanssa työskentelemisestä.

Jos et ole vielä tehnyt niin, luo tili Adafruit IO:lle.

Tämän jälkeen voimme siirtyä seuraavaan vaiheeseen "älylukon" kehittämisessä Arduinoon: nimittäin luonnoksen kehittämiseen, joka välittää tietoja Adafruit IO:lle. Koska ohjelma on melko laaja, tässä artikkelissa korostamme ja tarkastelemme vain sen pääosia, ja sitten tarjoamme linkin GitHubiin, josta voit ladata koko luonnoksen.

Luonnos alkaa lataamalla kaikki tarvittavat kirjastot:

#sisältää

#sisältää

#sisältää

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_CC3000.h"

#sisältää

#sisältää >

Tämän jälkeen sinun on korjattava luonnos hieman lisäämällä WiFi-verkkosi parametrit määrittämällä SSID ja salasana:

#define WLAN_SECURITY WLAN_SEC_WPA2>

Lisäksi sinun on annettava nimesi ja AIO-avaimesi kirjautuaksesi Adafruit IO -tilillesi:

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_name"

#define AIO_KEY "adafruit_io_key">

Seuraavat rivit ovat vastuussa sormenjälkitunnistimen tietojen vuorovaikutuksesta ja käsittelystä. Jos anturi on aktivoitu (sormenjälki täsmäsi), siellä on "1":

const char FINGERPRINT_FEED PROGMEM = AIO_KÄYTTÄJÄNIMI "/syötteet/sormenjälki";

Adafruit_MQTT_Julkaise sormenjälki = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Lisäksi meidän on luotava SoftwareSerial-objektin esiintymä sensorillemme:

SoftwareSerial mySerial(3, 4);

Tämän jälkeen voimme luoda kohteen anturillemme:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Piirroksen sisällä ilmoitamme, minkä sormen ID:n tulee aktivoida lukko tulevaisuudessa. Tässä esimerkissä käytetään 0:ta, joka vastaa anturin käyttämän ensimmäisen sormenjäljen tunnusta:

int sormitunnus = 0;

Tämän jälkeen alustamme laskurin ja viive projektissamme. Pohjimmiltaan haluamme lukon lukittuvan automaattisesti, kun se avataan. Tässä esimerkissä käytetään 10 sekunnin viivettä, mutta voit säätää tätä arvoa tarpeidesi mukaan:

int aktivointilaskuri = 0;

int lastActivation = 0;

int aktivointiaika = 10 * 1000;

Setup()-funktion rungossa alustamme sormenjälkitunnistimen ja varmistamme, että CC3000-siru on yhdistetty WiFi-verkkoosi.

Loop()-funktion rungossa yhdistämme Adafruit IO:n. Tästä vastaa seuraava rivi:

Kun olet muodostanut yhteyden Adafruit IO -alustaan, tarkistamme viimeisen sormenjäljen. Jos se täsmää eikä lukko ole aktivoitu, lähetämme "1" Adafruit IO:lle käsittelyä varten:

if (sormenjälkitunnus == sormentunnus && lockState == false) (

Serial.println(F("Pääsy myönnetty!"));

lockState = tosi;

Serial.println(F("epäonnistui"));

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

lastActivation = millis();

Jos loop()-funktiossa lukko on aktivoitu ja olemme saavuttaneet yllä olevan viivearvon, lähetämme "0":

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

lockState = false;

jos (! sormenjälki.julkaisu(valtio)) (

Serial.println(F("epäonnistui"));

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

Voit ladata koodin uusimman version GitHubista.

On aika testata projektiamme! Älä unohda ladata ja asentaa kaikki tarvittavat kirjastot Arduinolle!

Varmista, että olet tehnyt kaikki tarvittavat muutokset luonnokseen ja lataa se Arduinoosi. Avaa sen jälkeen Serial Monitor -ikkuna.

Kun Arduino muodostaa yhteyden WiFi-verkot, sormenjälkitunnistin vilkkuu punaisena. Aseta sormesi anturin päälle. ID-numeron tulee näkyä sarjamonitori-ikkunassa. Jos se täsmää, näyttöön tulee viesti "OK!" Tämä tarkoittaa, että tiedot on lähetetty Adafruit IO -palvelimille.

Kaavio ja luonnos lukon lisäkonfiguraatiota varten LED-esimerkin avulla

Siirrytään nyt siihen osaan projektista, joka on suoraan vastuussa oven lukon ohjaamisesta. Yhteyden muodostamiseksi langaton verkko ja lukon aktivointi/deaktivointi, tarvitset ylimääräisen Adafruit ESP8266 -moduulin (ESP8266-moduulin ei tarvitse olla Adafruitilta). Alla olevan esimerkin avulla voit arvioida, kuinka helppoa on vaihtaa tietoja kahden alustan (Arduino ja ESP8266) välillä Adafruit IO:n avulla.

Tässä osiossa emme työskentele suoraan lukon kanssa. Sen sijaan yhdistämme LEDin nastan, johon lukko liitetään myöhemmin. Tämä antaa meille mahdollisuuden testata koodiamme syventymättä lukon suunnittelun yksityiskohtiin.

Järjestelmä on melko yksinkertainen: asenna ensin ESP8266 koepalevylle. Tämän jälkeen asenna LED. Älä unohda, että LEDin pitkä (positiivinen) jalka on kytketty vastuksen kautta. Vastuksen toinen jalka on kytketty ESP8266-moduulin nastaan ​​5. Yhdistämme LEDin toisen (katodi) ESP8266:n GND-nastaan.

Täysin koottu piiri näkyy alla olevassa kuvassa.


Katsotaan nyt luonnosta, jota käytämme tässä projektissa. Koodi on jälleen melko suuri ja monimutkainen, joten tarkastelemme vain sen pääosia:

Aloitamme yhdistämällä tarvittavat kirjastot:

#sisältää

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

WiFi-asetusten määrittäminen:

#define WLAN_SSID "oma_wifi_ssid"

#define WLAN_PASS "oma_wifi-salasanasi"

#define WLAN_SECURITY WLAN_SEC_WPA2

Määritämme myös Adafruit IO -parametrit. Sama kuin edellisessä osiossa:

#define AIO_SERVER "io.adafruit.com"

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "adafruit_io_username"

#define AIO_KEY "adafruit_io_key"

Ilmoitamme, mihin nastaan ​​liitimme LEDin (tulevaisuudessa tämä on lukkomme tai releemme):

int relayPin = 5;

Vuorovaikutus sormenjälkitunnistimen kanssa, kuten edellisessä osiossa:

const char LOCK_FEED PROGMEM = AIO_KÄYTTÄJÄNIMI "/feeds/lock";

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Tilaa(&mqtt, LUKITUS_SYÖTTE);

Setup()-funktion rungossa osoitamme, että nastan, johon LED on kytketty, tulee toimia OUTPUT-tilassa:

pinMode(relayPin, OUTPUT);

Loop()-silmukan sisällä tarkistamme ensin, olemmeko yhteydessä Adafruit IO:han:

Tämän jälkeen tarkistamme, mitä signaalia vastaanotetaan. Jos "1" lähetetään, aktivoimme aiemmin ilmoittamamme nastan, johon LED on kytketty. Jos saamme "0", siirrämme kontaktin "matala"-tilaan:

Adafruit_MQTT_Tilaa *tilaus;

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

jos (tilaus == &lukko) (

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

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

// Tallenna komento merkkijonotietoihin

Merkkijono komento = String((char *)lock.lastread);

if (komento == "0") (

digitalWrite(relayPin, LOW);

if (komento == "1") (

digitalWrite(relayPin, HIGH);

löytö uusin versio Löydät luonnoksen GitHubista.

On aika testata projektiamme. Älä unohda ladata kaikkia tarvittavia kirjastoja Arduinollesi ja tarkistaa, oletko tehnyt luonnokseen oikeat muutokset.

ESP8266-sirun ohjelmoimiseksi voit käyttää yksinkertaista USB-FTDI-muunninta.

Lataa luonnos Arduinoon ja avaa Serial Monitor -ikkuna. Tässä vaiheessa tarkistimme vain, pystyimmekö muodostamaan yhteyden Adafruit IO:hen: tarkastelemme käytettävissä olevia toimintoja tarkemmin.

Projektin testaus

Nyt aloitetaan testaus! Siirry Adafruit IO:n käyttäjävalikkoon Syötteet-valikon alla. Tarkista, onko sormenjälki- ja lukituskanavat luotu vai ei (alla tulostusnäytössä ovat sormenjälki- ja lukitusviivat):


Jos niitä ei ole, sinun on luotava ne manuaalisesti.

Nyt meidän on varmistettava tiedonvaihto sormenjälki- ja lukituskanavien välillä. Lukituskanavan on saatava arvo "1", kun sormenjälkikanava saa arvon "1" ja päinvastoin.

Tätä varten käytämme erittäin tehokasta Adafruit IO -työkalua: laukaisimia. Triggerit ovat pohjimmiltaan ehtoja, joita voit soveltaa määritettyihin kanaviin. Eli niitä voidaan käyttää kahden kanavan yhdistämiseen.

Luo uusi reaktiivinen triggeri Adafruit IO:n Triggers-osiosta. Tämä tarjoaa mahdollisuuden vaihtaa tietoja sormenjälkitunnistimen ja lukituskanavien välillä:


Tältä sen pitäisi näyttää, kun molemmat liipaisimet on määritetty:

Kaikki! Nyt voimme todella testata projektiamme! Laitoimme sormemme anturin päälle ja näemme kuinka Arduino alkoi vilkkua tiedonsiirtoa vastaavalla LEDillä. Tämän jälkeen ESP8266-moduulin LED-valon pitäisi alkaa vilkkua. Tämä tarkoittaa, että se on alkanut vastaanottaa tietoja MQTT:n kautta. Piirilevyn LEDin pitäisi myös syttyä tällä hetkellä.

Luonnoksessa asettamasi viiveen (oletus on 10 sekuntia) jälkeen LED sammuu. Onnittelut! Voit ohjata LEDiä sormenjäljelläsi mistä päin maailmaa tahansa!

Sähköisen lukon asentaminen

Olemme saavuttaneet projektin viimeisen osan: elektronisen lukon liittäminen ja hallinta suoraan Arduinon ja sormenjälkitunnistimen avulla. Projekti ei ole helppo, voit käyttää kaikkia lähteitä siinä muodossa, jossa ne on esitetty yllä, mutta kytkeä rele LEDin sijaan.

Lukon kytkemiseen suoraan tarvitset lisäkomponentteja: 12 V virtalähde, liitin virran kytkemiseen, transistorin (V tässä esimerkissä Käytössä on IRLB8721PbF MOSFET, mutta voidaan käyttää toista, esimerkiksi bipolaarista TIP102-transistoria. Jos käytät bipolaarista transistoria, sinun on lisättävä vastus.

Nähtävissä alapuolella sähkökaavio kaikkien komponenttien liittäminen ESP8266-moduuliin:


Huomaa, että jos käytät MOSFET-transistoria, et tarvitse vastusta ESP8266-moduulin nastan 5 ja transistorin väliin.

Täysin koottu projekti näkyy alla olevassa kuvassa:


Syötä ESP8266-moduuli FTDI-moduulilla ja liitä 12 V:n virtalähde liittimeen. Jos käytit liittämiseen yllä suositeltuja nastoja, sinun ei tarvitse muuttaa luonnoksessa mitään.

Nyt voit laittaa sormesi anturin päälle: lukon pitäisi toimia sormenjäljesi perusteella. Alla oleva video näyttää automaattisen älylukkoprojektin toiminnassa:

Smart Lock -projektin jatkokehitys

Julkaistu projektissamme kaukosäädin oven lukitus sormenjäljelläsi.

Voit vapaasti kokeilla, muokata luonnosta ja sidontaa. Voit esimerkiksi vaihtaa oven elektroninen lukko releellä ohjaamaan 3D-tulostimesi, manipulaattorisi tai nelikopterisi tehoa...

Voit kehittää omaasi älykäs talo". Esimerkiksi etäaktivoida kastelujärjestelmä Arduinossa tai sytyttää valot huoneessa... Älä unohda, että voit aktivoida samanaikaisesti lähes rajattoman määrän laitteita Adafruit IO:n avulla.

Jätä kommenttisi, kysymyksesi ja jaa henkilökohtainen kokemus alla. Keskusteluissa syntyy usein uusia ideoita ja projekteja!

Esittelyssä RF-avaimella ohjattava oven lukko.

Lukko toimii näin: Esitettiin MEIDÄN avain (RFID-tunniste) - lukko kiinni, esitettiin avain uudelleen - lukko avautui. Lukon toiminnan visualisoimiseksi käytettiin kuutta kaksiväristä LEDiä (viiva). Suljettaessa vilkkuu punainen valo, avattaessa vihreä valo. Jos tuot jonkun muun avaimen, punaiset LED-valot vilkkuvat.

Päätin käyttää auton keskuslukituskäyttöä toimilaitteena. Voit ostaa uuden tai käytetyn, hintaero ei ole suuri, joten käytin uutta, se on luotettavampi. Käyttötanko on kytketty salpaan. Salpa on edelleen neuvostoliittolainen, vahva. Enkä tarvitse voimakasta "vandalismia".

"Konetta" ohjataan kahdella johdolla. Yksi napaisuus pidentää sauvaa, käänteinen napaisuus vetää tangon sisään. 12 voltin jännitteellä virta on 6 ampeeria, paljon...
"Koneessa" ei ole rajakytkimiä.

Perustuen siihen, että lukkopiirissä (suunniteltu) on taattu virransyöttö, akku on 12 volttia, jotta varmistetaan lukon toiminta ~220 tappion sattuessa. Kehittänyt siltaohjauspiirin "koneelle". Piirin erityispiirre on sen epälineaarisuus, joka varmistaa lukkomekanismin luotettavan toiminnan ja samalla "koneen" ja avaintransistorien hellävaraisen toiminnan.

Kaaviossa (yllä) “Close”-varsi on korostettu punaisella ja “Avaa”-varsi on korostettu vihreällä. Varret saavat virtansa erikseen, vastusten kautta (sijaitsevat virtalähteessä). Siltavarsien tehoerotus otettiin käyttöön väärien positiivisten tulosten poistamiseksi.

Selitys: 33 ohmin vastusten kautta (virtalähdekaaviossa) 12 voltin jännite lataa kondensaattoreita (2000 μF kummassakin varressa). Kun ohjausjännite tulee Arduino_ProMini-ohjaimesta, 168 "Sulje"-tuloon (tai samalla tavalla kuin "Open") optoerottimen PVT322 kautta - vastaava näppäinvarsi avautuu. Tässä tapauksessa tapahtuu seuraavaa: Avainten avaamisen hetkellä kondensaattoreiden energia "vetää" voimakkaasti "koneen" moottoria. Kun kondensaattorit purkautuvat (tämä tapahtuu nopeasti), "koneen" moottori saa virtaa vastusten rajoittamasta virrasta (33 ohmia). Tämän ansiosta "sulkemis" - "avaa" -prosessin lopussa sauva liikkuu melko hitaasti.

Tämä moottorin ohjausmenetelmä on optimaalinen.

Virtalähdepiiri on muuntaja. Yleensä lukkopiiri saa virtansa 12 voltin, 2,8 Ah:n akusta. Ja virtalähdepiiri pitää akun nimellistasolla. Virran merkkivalo ilmaisee virtalähteen normaalin toiminnan.

Kaikki diodit ovat 1N4007 (unohdin ilmoittaa kaaviossa, ja henkilö kysyi - mitkä?).

(1) Maksimivirran rajoitin on koottu. Vastus R 1 Ylempi virrankynnys on asetettu 300 mA:iin.
Sisäänrakennetussa stabilisaattorissa LM317 (2) jännitteen stabilisaattori koottu. Stabilointijännitettä säädetään vastuksellaR 2 . Akun jännitteen tulee olla 13,7 volttia.

Jännite akusta syötetään kolmeen pisteeseen.
Vastusten (kukin 33 ohmia) kautta (X), (Y) - virtalähde "koneen" moottorin "ohjain" -näppäinten käsivarsiin.

Kokoan suurimman osan laitteistani siitä, mikä on saatavilla. Tämä projekti ei ole poikkeus. Kotelona käytän koteloa :) elektronisesta liitäntälaitteesta:

LEDit nro-2 ... nro-7 ovat kaksivärisiä. Ne sijaitsevat rivissä. Käytetään visualisoimaan lukon "avaaminen" ja "sulkeminen". Kaunistus.

Tällä oppitunnilla opimme kuinka tehdä yksinkertainen järjestelmä, joka avaa lukon elektronisella avaimella (Tag).

Jatkossa voit tarkentaa ja laajentaa toimintoja. Lisää esimerkiksi toiminto "uusien avainten lisääminen ja niiden poistaminen muistista". Tarkastellaan perustapauksessa yksinkertaista esimerkkiä, jossa ohjelmakoodissa on esiasetettu yksilöllinen avaintunniste.

Tässä opetusohjelmassa tarvitsemme:

Projektin toteuttamiseksi meidän on asennettava kirjastot:

2) Nyt sinun on kytkettävä summeri, joka antaa äänimerkin, jos avain toimii ja lukko aukeaa, ja toinen merkki, kun lukko sulkeutuu.

Yhdistämme summerin seuraavassa järjestyksessä:

Arduino Summeri
5V VCC
GND GND
tappi 5 IO

3) Servokäyttöä käytetään lukituksen avausmekanismina. Mikä tahansa servokäyttö voidaan valita riippuen tarvitsemastasi koosta ja voimasta, jonka servokäyttö luo. Servossa on 3 kontaktia:

Alla olevasta kuvasta näet tarkemmin, kuinka liitimme kaikki moduulit:

Nyt, jos kaikki on kytketty, voit jatkaa ohjelmointia.

Luonnos:

#sisältää #sisältää #sisältää // "RFID"-kirjasto. #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); allekirjoittamaton pitkä uidDec, uidDecTemp; // taginumeron tallentaminen desimaalimuodossa Servo servo; void setup() ( Serial.begin(9600); Serial.println("Odotetaan korttia..."); SPI.begin(); // SPI-alustus / Init SPI-väylä. mfrc522.PCD_Init(); // alustus MFRC522 / Init MFRC522 -kortti servo.attach(6); // aseta servo suljettuun tilaan ( return; ) // Valitse nimike, jos (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0 // Lähtö sarjanumero tunnisteet. for (tavu 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); // устанавливаем серву в закрытое сосотояние }

Katsotaanpa luonnosta tarkemmin:

Kortin (Tag) UID:n selvittämiseksi sinun on kirjoitettava tämä luonnos arduinoon, koottava yllä kuvattu piiri ja avattava konsoli (Serial Port Monitoring). Kun kosketat RFID-tunnistetta, konsoli näyttää numeron

Tuloksena oleva UID on syötettävä seuraavalle riville:

Jos (uidDec == 3763966293) // Vertaa tagin Uid:tä, jos se on sama kuin annettu, niin servokäyttö avaa venttiilin.

Jokaisella kortilla on yksilöllinen tunniste, eikä sitä toisteta. Siten, kun esität kortin, jonka tunnisteen asetit ohjelmassa, järjestelmä avaa pääsyn servoaseman avulla.

Video:

Tämän päivän oppitunti käsittelee RFID-lukijan käyttämistä Arduinon kanssa yksinkertaisen lukitusjärjestelmän luomiseen, yksinkertaisilla sanoilla- RFID-lukko.

RFID (englanninkielinen Radio Frequency IDentification, radiofrekvenssitunnistus) on kohteiden automaattinen tunnistamismenetelmä, jossa ns. transpondereihin eli RFID-tunnisteisiin tallennettua tietoa luetaan tai kirjoitetaan radiosignaalien avulla. Mikä tahansa RFID-järjestelmä koostuu lukulaitteesta (lukija, lukija tai kyselylaite) ja transponderista (tunnetaan myös nimellä RFID-tunniste, joskus käytetään myös termiä RFID-tunniste).

Tämä opetusohjelma käyttää RFID-tunnistetta Arduinon kanssa. Laite lukee jokaisen lukijan viereen sijoittamamme RFID-tunnisteen (UID) ja näyttää sen OLED-näytöllä. Jos tunnisteen UID on sama kuin ennalta määritetty arvo, joka on tallennettu Arduino-muistiin, näemme näytöllä viestin "Unlocked". Jos yksilöllinen tunnus ei ole yhtä suuri kuin ennalta määritetty arvo, "Unlocked" -viesti ei tule näkyviin - katso kuva alla.

Linna on suljettu

Lukko on auki

Tämän projektin luomiseen tarvittavat osat:

  • RFID-lukija RC522
  • OLED-näyttö
  • Leipälauta
  • Johdot

Lisätiedot:

  • Akku (virtalähde)

Projektin komponenttien kokonaiskustannukset olivat noin 15 dollaria.

Vaihe 2: RFID-lukija RC522

Jokainen RFID-tunniste sisältää pienen sirun (kuvassa valkoinen kortti). Jos valaistat taskulampun tähän RFID-korttiin, näet pienen sirun ja sitä ympäröivän kelan. Tässä sirussa ei ole akkua virran tuottamiseksi. Se saa virtaa lukijasta langattomasti tämän suuren kelan avulla. Tällaista RFID-korttia on mahdollista lukea jopa 20 mm:n etäisyydeltä.

Sama siru on myös RFID-avaimenperätunnisteissa.

Jokaisella RFID-tunnisteella on yksilöllinen numero, joka tunnistaa sen. Tämä on UID, joka näkyy OLED-näytössä. Tätä UID:tä lukuun ottamatta jokainen tunniste voi tallentaa tietoja. Tämäntyyppinen kortti voi tallentaa jopa tuhat tietoa. Vaikuttavaa, eikö? Tätä ominaisuutta ei käytetä tänään. Nykyään kiinnostaa vain tietyn kortin tunnistaminen sen UID:n perusteella. RFID-lukijan ja näiden kahden RFID-kortin hinta on noin 4 dollaria.

Vaihe 3: OLED-näyttö

Oppitunnilla käytetään 0,96" 128x64 I2C OLED-näyttöä.

Tämä on erittäin hyvä näyttö käytettäväksi Arduinon kanssa. Tämä on OLED-näyttö, mikä tarkoittaa, että sen virrankulutus on alhainen. Tämän näytön virrankulutus on noin 10-20mA ja se riippuu pikselien määrästä.

Näytön resoluutio on 128 x 64 pikseliä ja se on kooltaan pieni. Näyttövaihtoehtoja on kaksi. Toinen niistä on yksivärinen, ja toinen, kuten oppitunnilla käytetty, voi näyttää kaksi väriä: keltaisen ja sinisen. Näytön yläosa voi olla vain keltainen ja alaosa vain sininen.

Tämä OLED-näyttö on erittäin kirkas ja siinä on upea ja erittäin mukava kirjasto, jonka Adafruit on kehittänyt tätä näyttöä varten. Tämän lisäksi näyttö käyttää I2C-liitäntää, joten yhteyden muodostaminen Arduinoon on uskomattoman helppoa.

Sinun tarvitsee vain liittää kaksi johtoa paitsi Vcc ja GND. Jos olet uusi Arduino ja haluat käyttää edullista ja yksinkertaista näyttöä projektissasi, aloita tästä.

Vaihe 4: Kytke kaikki osat

Viestintä Arduino Uno -levyn kanssa on hyvin yksinkertaista. Ensin kytketään virta sekä lukijaan että näyttöön.

Ole varovainen, RFID-lukija on kytkettävä Arduino Unon 3,3 V:n lähtöön, muuten se vaurioituu.

Koska näyttö voi toimia myös 3,3 V jännitteellä, yhdistämme molemmista moduuleista VCC:n leipälevyn positiiviseen kiskoon. Tämä väylä liitetään sitten Arduino Unon 3,3 V lähtöön. Sitten yhdistämme molemmat maadoitukset (GND) koepalevyn maadoitusväylään. Sitten yhdistämme leipälevyn GND-väylän Arduino GND:hen.

OLED-näyttö → Arduino

SCL → Analoginen nasta 5

SDA → Analoginen nasta 4

RFID-lukija → Arduino

RST → Digital Pin 9

IRQ → Ei yhdistetty

MISO → Digital Pin 12

MOSI → Digital Pin 11

SCK → digitaalinen nasta 13

SDA → Digital Pin 10

RFID-lukijamoduuli käyttää SPI-liitäntää viestiäkseen Arduinon kanssa. Joten aiomme käyttää Arduino UNO:n laitteiston SPI-nastoja.

RST-nasta menee digitaaliseen nastaan ​​9. IRQ-nasta ei ole kytkettynä. MISO-nasta menee digitaaliseen nastaan ​​12. MOSI-nasta menee digitaaliseen nastaan ​​11. SCK-nasta menee digitaaliseen nastaan ​​13, ja lopuksi SDA-nasta menee digitaaliseen nastaan ​​10. Siinä kaikki.

RFID-lukija on kytketty. Nyt meidän on yhdistettävä OLED-näyttö Arduinoon I2C-liitännän avulla. Joten näytön SCL-nasta menee nastan 5 analogiseen nastaan ​​ja näytön SDA-nasta analogiseen nastaan ​​4. Jos nyt käynnistämme projektin ja asetamme RFID-kortin lukijan lähelle, voimme nähdä, että projekti toimii hyvin.

Vaihe 5: Projektikoodi

Jotta projektikoodi voidaan kääntää, meidän on sisällytettävä joitain kirjastoja. Ensinnäkin tarvitsemme MFRC522 Rfid -kirjaston.

Asenna se siirtymällä osoitteeseen Luonnos -> Sisällytä kirjastot -> Hallitse kirjastoja(Kirjastonhallinta). Etsi MFRC522 ja asenna se.

Tarvitsemme myös Adafruit SSD1306 -kirjaston ja Adafruit GFX -kirjaston näyttöä varten.

Asenna molemmat kirjastot. Adafruit SSD1306 -kirjasto tarvitsee hieman muutosta. Siirry kansioon Arduino -> Kirjastot, avaa Adafruit SSD1306 -kansio ja muokkaa kirjastoa Adafruit_SSD1306.h. Kommentoi rivi 70 ja poista rivi 69, koska Näytön resoluutio on 128x64.

Ensin ilmoitamme RFID-tunnisteen arvon, joka Arduinon on tunnistettava. Tämä on joukko kokonaislukuja:

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

Sitten alustamme RFID-lukijan ja näytämme:

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

Tämän jälkeen silmukkatoiminnossa tarkistamme lukijan tagin 100 ms:n välein.

Jos lukijassa on tunniste, luemme sen UID:n ja tulostamme sen näytölle. Tämän jälkeen vertaamme juuri lukemamme tunnisteen UID:tä koodimuuttujaan tallennettuun arvoon. Jos arvot ovat samat, näytämme UNLOCK-viestin, muuten emme näytä tätä viestiä.

If(match) ( Serial.println("\nTunnen tämän kortin!"); printUnlockMessage(); )else ( Serial.println("\nTuntematon kortti"); )

Voit tietysti muuttaa tämän koodin tallentamaan enemmän kuin yhden UID-arvon, jotta projekti tunnistaa enemmän RFID-tunnisteita. Tämä on vain esimerkki.

Hankkeen koodi:

#sisältää #sisältää #sisältää #sisältää #define OLED_RESET 4 Adafruit_SSD1306 näyttö(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Luokan MFRC522::MIFARE_Key avain esiintymä; int-koodi = (69,141,8,136); //Tämä on tallennettu UID int codeRead = 0; Merkkijono uidString; void setup() ( Serial.begin(9600); SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // alusta I2C addr 0x3D (128x64) // Tyhjennä puskuri display.clearDisplay(); display.setTextSize(2); display.setCursor(10,0); display.print("RFID-lukko"); näyttö.näyttö(); ) void loop() ( if(rfid.PICC_IsNewCardPresent()) ( readRFID(); ) delay(100); ) void readRFID() ( rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC-tyyppi: ") MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); && piccType PICC_TYPE_MIFARE_4K) ( Sarja .println("Sinun tyyppi ei ole MIFARE Classic.") return; ) clearUID(); uidString = Merkkijono(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+" "+ String(rfid.uid.uidByte)+ " "String(rfid.uid.uidByte()); looginen vastaavuus = tosi;

Vaihe 6: Lopullinen tulos

Kuten oppitunnista näet, pienellä rahalla voit lisätä projekteihisi RFID-lukijan. Tämän lukijan avulla voit helposti luoda turvajärjestelmän tai luoda mielenkiintoisempia projekteja esimerkiksi siten, että USB-aseman tiedot luetaan vasta lukituksen avaamisen jälkeen.

Aiheeseen liittyviä julkaisuja