Arduino-da Bluetooth vasitəsilə işləyən ağıllı elektron kilid - Spiderman kimi ön qapı. Arduino-da avtomatik "ağıllı" kilid və Arduino Elektron birləşmə kilidi

Bu layihə moduldur, yəni. aktivləşdirilə/deaktiv edilə bilər müxtəlif elementlər və fərqli funksionallıq əldə edin. Yuxarıdakı şəkillər tam funksionallığa malik variantı göstərir, yəni:

  • kilidləmə mexanizmi. Qapını açmaq və bağlamaq üçün istifadə olunur. Bu layihə üç fərqli mexanizmdən istifadəni nəzərdə tutur:
    • Servo. Böyükləri də var, kiçikləri də var. Çox yığcam və ağır sürgü ilə birlikdə - əla seçimdir
    • Elektrikli avtomobilin qapı kilidi. Böyük və güclü bir şey, amma sadəcə dəli cərəyanları yeyir
    • Solenoid kilidi. Yaxşı seçimdir, özünü bağladığı kimi

    Firmware parametrlərində siz hər hansı birini seçə bilərsiniz üç növ(tənzimləmə kilid_növü)

  • Daxili düymə. Qapını içəridən AÇMAQ və bağlamaq üçün istifadə olunur. Qapının tutacağına (xurma tərəfi və ya barmaq tərəfi), qapının özünə və ya dirəyə yerləşdirilə bilər
  • Çöldə düymə. Qapını bağlamaq, həmçinin enerjiyə qənaətdən oyanmaq üçün xidmət edir. Qapının tutacağına (xurma tərəfi və ya barmaq tərəfi), qapının özünə və ya dirəyə yerləşdirilə bilər
  • treyler qapını bağlamaq üçün. Qapı bağlı olduqda kilidin avtomatik bağlanmasına xidmət edir. Onlar ola bilər:
    • Nəzakət düyməsi
    • Hall sensoru + qapının özündə maqnit
    • Qamış açarı + qapının özündə maqnit
  • sirr giriş sıfırlama düyməsi. Parolu sıfırlamaq / yeni parol daxil etmək / yeni düyməni / kombinasiyanı yadda saxlamaq və s. üçün istifadə olunur. Bədənin bir yerində gizlənə bilər
  • İşıq yayan diodəməliyyatı göstərmək üçün. RGB LED, qırmızı və yaşıl rənglər(qarışdıqda sarı rəng verirlər):
    • Yaşıl açıq - kilid AÇIQDIR. Qapını bağlamağı xatırlamaq üçün yanıb
    • Sərt sarı - sistem oyaqdır və parol gözləyir
    • Qırmızı yanıb-sönür - az batareya

Bu elementlərdən hər hansı biri sistemdən xaric edilə bilər:

  • Treyleri çıxarırıq. Parametrlərdəki proqram təminatında biz də onu söndürürük (parametrlər quyruq_düyməsi). İndi kilidi bağlamaq üçün düyməni basmalısınız
  • Xarici düyməni çıxarın. Parametrlərdəki proqram təminatında biz də onu söndürürük (parametrlər oyandırma_düyməsi). İndi sistemin oyanmasına ehtiyac yoxdur, özü oyanır (enerji sərfiyyatı bir qədər yüksəkdir). Həm də artıq qapının ön hissəsində bağlama düyməmiz yoxdur və limit açarına ehtiyacımız var. Ya qala heckdir
  • Daxili düyməni çıxarırıq. Bu seçim şkaflar və seyflər üçün uyğundur. Parametrlərdə heç nəyi dəyişməyə ehtiyac yoxdur.
  • LED-i çıxarırıq. Parametrlərdə heç nəyi dəyişməyə ehtiyac yoxdur.
  • Giriş sıfırlama düyməsi ilk istifadədən sonra lehimlənə bilər və ya kodu özünüz üçün yenidən yaza bilərsiniz
  • Qapı bağlandı, KƏNƏRDƏ sıxıldı - oyan, parolun daxil olmasını gözləyin/RFID etiketi/elektron açar/barmaq izi
  • Qapı bağlıdır, sistem oyanıb, parolun daxil olmasını gözləyir. Vaxt təyin edilə bilər (tənzimləmə yuxu vaxtı)
  • Qapı bağlı, parol/etiket/açar daxil edilib və s. - açıq
  • Qapı bağlıdır, İÇİNƏ basılır - açıq
  • Qapı açıq, KARŞI sıxılır - bağlayın
  • Qapı açıq, INSIDE sıxılır - bağlayın
  • Qapı açıqdır, LIMIT açarı sıxılır - bağlayın

Kilid aşağı enerjiyə qənaət rejimində batareya gücü ilə işləmək üçün nəzərdə tutulmuşdur (aktiv et: parametr yuxu_aktiv edin), yəni:

  • Bir neçə saniyədən bir oyan, TƏDBİR-i izlə (istəyə görə, kənarda düymə yoxdursa. Bunu parametrlərdə aktivləşdirə bilərsiniz. oyandırma_düyməsi)
  • Batareyanın gərginliyinə bir neçə dəqiqədən bir nəzarət edin (on/off parametri). batareya_monitor)
  • Batareya boşaldıqda (gərginlik parametrdə təyin olunur bat_low):
    • qapını açın (isteğe bağlı, proqram təminatında konfiqurasiya edilə bilər open_bat_low)
    • daha da açılmasını və bağlanmasını qadağan edin
    • düyməni basarkən qırmızı LED yanıb-sönür
    • HADİSƏni izləməyi dayandırın (məsələn, parol girişi/etiket və s.)

Sistem oyaq olduqda, parol dəyişdirmək düyməsini (gizli düymə) basın. daxil oluruq parol dəyişdirmə rejimi:
Nömrələrdən parol daxil edin ( MAKSİMUM 10 NÖMRƏ!!!)

  • * düyməsini sıxdığınız zaman parol yaddaşa yazılır və sistem parol dəyişikliyindən çıxır
  • # düyməsini basdığınız zaman parol sıfırlanır (yenidən daxil edə bilərsiniz)
  • 10 saniyə heç nə basmasanız, biz avtomatik olaraq parol dəyişdirmə rejimindən çıxacağıq, parol köhnəsi olaraq qalacaq.

Sistem yatmadıqda (düymə ilə oyandı və ya yuxu söndürüldü), parol giriş rejiminə daxil olmaq üçün * düyməsini basın.
Sistem yatırsa və HADİSƏni yoxlamaq üçün vaxtaşırı oyanırsa, * düyməsini basın və qırmızı LED yanana qədər saxlayın
Parol daxiletmə rejimi:

  • Parolla işləmə elə aparılır ki, düzgün parol yalnız yazarkən nəzərə alınsın düzgün ardıcıllıq rəqəmlər, yəni parol 345-dirsə, 345 ardıcıllığı görünənə qədər istənilən nömrələri daxil edə bilərsiniz, yəni. 30984570345 345-də bitdiyi üçün kilidi açacaq.
  • Şifrə düzgündürsə, qapı açılacaq
  • Heç bir şeyə basmasanız, 10 saniyədən sonra sistem normal (gözləmə) rejiminə qayıdacaq
  • Əgər # düyməsini sıxsanız, biz dərhal parol daxiletmə rejimindən çıxacağıq
  • Parolun daxil edilməsi rejimində parolu dəyişmək üçün gizli düyməni sıxsanız, biz də ondan çıxacağıq

Tərəqqi hələ də dayanmır və mənzillərin, qarajların və evlərin qapılarında "Ağıllı kilidlər" getdikcə daha çox görünür.

Bənzər bir kilid smartfonunuzdakı düyməni basdığınız zaman açılır. Xoşbəxtlikdən, smartfonlar və planşetlər artıq gündəlik həyatımıza daxil olub. Bəzi hallarda "ağıllı kilidlər" " bulud xidmətləri"Google drive kimi və uzaqdan açın. Bundan əlavə, bu seçim qapını digər insanlara açmağa icazə verməyə imkan verir.

Bu layihədə Arduino-da dünyanın istənilən yerindən uzaqdan idarə oluna bilən smart kilidin DIY versiyası həyata keçiriləcək.

Bundan əlavə, layihəyə barmaq izinin tanınmasından sonra kilidi açmaq imkanı əlavə edilib. Bunun üçün barmaq izi sensoru inteqrasiya olunacaq. Qapıların açılması üçün hər iki variant Adafruit IO platforması əsasında işləyəcək.

Belə bir kilid Ağıllı Ev layihənizdə əla ilk addım ola bilər.

Barmaq izi sensorunun qurulması

Barmaq izi sensoru ilə işləmək üçün Arduino üçün sensorun qurulması prosesini xeyli asanlaşdıran əla kitabxana var. Bu layihə istifadə edir Arduino Uno. Adafruit CC3000 lövhəsi internetə qoşulmaq üçün istifadə olunur.

Gücü birləşdirərək başlayaq:

  • Arduino lövhəsindən 5V pinini qırmızı elektrik relsinə qoşun;
  • Arduino-dan olan GND pin lehimsiz dövrə lövhəsindəki mavi relsə qoşulur.

Barmaq izi sensorunu birləşdirməyə davam edək:

  • Əvvəlcə gücü birləşdirin. Bunun üçün qırmızı tel +5 V relsinə, qara tel isə GND relsinə birləşdirilir;
  • Ağ sensor teli Arduino-nun 4-cü pininə qoşulur.
  • Yaşıl tel mikrokontrolörün 3-cü pininə keçir.

İndi CC3000 moduluna nəzər salaq:

  • CC3000 lövhəsindən IRQ pinini Arduino-da 2-ci pinlə birləşdirin.
  • VBAT - 5-i bağlamaq üçün.
  • CS - pin 10 üçün.
  • Bundan sonra, SPI pinlərini Arduino-ya qoşmalısınız: MOSI, MISO və CLK - müvafiq olaraq 11, 12 və 13-cü pinlərə.

Və nəhayət, enerji təmin etməlisiniz: Vin - Arduino 5V-ə (dövrə lövhənizdəki qırmızı rels) və GND-dən GND-yə (çörək lövhəsindəki mavi rels).

Tam yığılmış layihənin fotoşəkili aşağıda göstərilir:

Adafruit IO-ya məlumat yükləyəcək eskiz hazırlamazdan əvvəl barmaq izi məlumatlarınızı sensora ötürməlisiniz. Yoxsa gələcəkdə səni tanımaz;). Arduino-dan istifadə edərək barmaq izi sensorunu ayrıca kalibrləməyi tövsiyə edirik. Bu sensorla ilk dəfə işləyirsinizsə, kalibrləmə prosesini və barmaq izi sensoru ilə işləmək üçün ətraflı təlimatları oxumağınızı tövsiyə edirik.

Əgər bunu etməmisinizsə, Adafruit IO hesabı üçün qeydiyyatdan keçin.

Bundan sonra biz Arduino-da “ağıllı kilid”in yaradılmasının növbəti mərhələsinə keçə bilərik: daha doğrusu, məlumatları Adafruit IO-ya ötürəcək eskizin hazırlanması. Proqram kifayət qədər həcmli olduğundan, məqalədə yalnız onun əsas hissələrini vurğulayacağıq və nəzərdən keçirəcəyik, sonra tam eskizini yükləyə biləcəyiniz GitHub-a bir keçid verəcəyik.

Eskiz bütün lazımi kitabxanaları yükləməklə başlayır:

#daxildir

#daxildir

#daxildir

#daxil edin "Adafruit_MQTT.h"

#daxil edin "Adafruit_MQTT_CC3000.h"

#daxildir

#daxildir >

Bundan sonra, WiFi şəbəkənizin parametrlərini daxil edərək, SSID və parol (parol) göstərərək eskizi bir az düzəltməlisiniz:

#WLAN_SECURITY WLAN_SEC_WPA2> müəyyən edin

Bundan əlavə, Adafruit IO hesabınıza daxil olmaq üçün ad və AIO açarı (açar) daxil etməlisiniz:

#AIO_SERVERPORT 1883 təyin edin

#AIO_USERNAME "adafruit_io_name" təyin edin

#AIO_KEY "adafruit_io_key"> müəyyən edin

Aşağıdakı sətirlər barmaq izi sensorundan məlumatların qarşılıqlı əlaqəsi və emalı üçün cavabdehdir. Sensor işə salınıbsa (barmaq izi uyğun gəlir), o, "1" olacaq:

const char FINGERPRINT_FEED PROGMEM = AIO_USERNAME "/feeds/barmaq izi";

Adafruit_MQTT_Publish barmaq izi = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Bundan əlavə, sensorumuz üçün SoftwareSerial obyektinin nümunəsini yaratmalıyıq:

SoftwareSerial mySerial(3, 4);

Bundan sonra sensorumuz üçün bir obyekt yarada bilərik:

Adafruit_Fingerprint barmaq = Adafruit_Fingerprint(&mySerial);

Eskizin içərisində gələcəkdə hansı barmaq identifikatorunun kilidi aktivləşdirməli olduğunu müəyyənləşdiririk. Bu nümunədə sensorun istifadə etdiyi ilk barmaq izinin identifikatoruna uyğun gələn 0 istifadə olunur:

int barmaq ID = 0;

Bundan sonra layihəmizdə sayğac və gecikməni (gecikməni) işə salırıq. Əsasən, kilidin açıldıqdan sonra avtomatik işləməsini istəyirik. Bu nümunə 10 saniyəlik gecikmədən istifadə edir, lakin siz bu dəyəri ehtiyaclarınıza uyğunlaşdıra bilərsiniz:

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

Setup() funksiyasının korpusunda biz barmaq izi sensorunu işə salırıq və CC3000 çipinin WiFi şəbəkənizə qoşulmasını təmin edirik.

Loop() funksiyasının gövdəsində biz Adafruit IO-ya qoşuluruq. Aşağıdakı xətt buna cavabdehdir:

Adafruit IO platformasına qoşulduqdan sonra sonuncu barmaq izini yoxlayırıq. Əgər uyğun gəlirsə və kilid aktiv deyilsə, biz emal üçün Adafruit IO-ya "1" göndəririk:

əgər (barmaq izi ID == barmaq ID && lockState == yanlış) (

Serial.println(F("Giriş verilib!"));

lockState=true;

Serial.println(F("Uğursuz"));

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

lastActivation = millis();

Əgər loop() funksiyası daxilində kilid aktivləşdirilibsə və yuxarıda göstərilən gecikmə dəyərinə çatmışıqsa, "0" göndəririk:

əgər ((activationCounter - lastActivation > activationTime) && lockState == true) (

lockState=false;

əgər (! fingerprint.publish(state)) (

Serial.println(F("Uğursuz"));

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

Kodun son versiyasını GitHub-da yükləyə bilərsiniz.

Layihəmizi sınaqdan keçirməyin vaxtı gəldi! Bütün tələb olunan Arduino kitabxanalarını yükləməyi və quraşdırmağı unutmayın!

Eskizdə bütün lazımi dəyişiklikləri etdiyinizə əmin olun və onu Arduino-ya yükləyin. Sonra serial monitor pəncərəsini açın.

Arduino WiFi şəbəkəsinə qoşulduqda barmaq izi sensoru qırmızı yanıb-sönəcək. Barmağınızı sensorun üzərinə qoyun. Serial monitor pəncərəsi ID nömrəsini göstərməlidir. Uyğundursa, "OK!" mesajı görünəcək. Bu o deməkdir ki, məlumat Adafruit IO serverlərinə göndərilib.

Bir LED nümunəsindən istifadə edərək kilidin daha da qurulması üçün sxem və eskiz

İndi isə layihənin idarə etmək üçün birbaşa məsul olan hissəsi ilə məşğul olaq qapı kilidi. Simsiz şəbəkəyə qoşulmaq və kilidi aktivləşdirmək/deaktiv etmək üçün sizə lazım olacaq əlavə modul Adafruit ESP8266 (ESP8266 modulunun Adafruit-dən olması lazım deyil). Aşağıdakı nümunə Adafruit IO istifadə edərək iki platforma (Arduino və ESP8266) arasında əlaqə qurmağın nə qədər asan olduğunu sizə göstərəcək.

Bu bölmədə biz birbaşa kilidlə işləməyəcəyik. Bunun əvəzinə biz sadəcə olaraq LED-i kilidin sonradan bağlanacağı pinlə birləşdirəcəyik. Bu, kilid dizaynının xüsusiyyətlərini öyrənmədən kodumuzu sınamağa imkan verəcəkdir.

Sxem olduqca sadədir: əvvəlcə ESP8266-nı çörək lövhəsinə quraşdırın. Sonra LED-i quraşdırın. Unutmayın ki, LED-in uzun (müsbət) ayağı bir rezistor vasitəsilə bağlanır. Rezistorun ikinci ayağı ESP8266 modulunda 5-ci pinlə birləşdirilir. İkinci (katod) LED ESP8266-da GND pininə qoşulur.

Tamamilə yığılmış dövrə aşağıdakı fotoda göstərilmişdir.


İndi bu layihə üçün istifadə etdiyimiz eskizə nəzər salaq. Yenə də kod kifayət qədər böyük və mürəkkəbdir, ona görə də biz onun yalnız əsas hissələrini əhatə edəcəyik:

Lazımi kitabxanaları daxil etməklə başlayırıq:

#daxildir

#daxil edin "Adafruit_MQTT.h"

#daxil edin "Adafruit_MQTT_Client.h"

WiFi parametrlərini konfiqurasiya edin:

#WLAN_SSID "wifi_ssid"inizi təyin edin

#WLAN_PASS "wifi_parolunuzu" təyin edin

#WLAN_SECURITY WLAN_SEC_WPA2-ni təyin edin

Adafruit IO parametrlərini də konfiqurasiya edirik. Əvvəlki hissədə olduğu kimi:

#AIO_SERVER "io.adafruit.com"u müəyyən edin

#AIO_SERVERPORT 1883 təyin edin

#AIO_USERNAME "adafruit_io_username" təyin edin

#AIO_KEY "adafruit_io_key" təyin edin

LED-i hansı pinlə bağladığımızı göstəririk (gələcəkdə bu, bizim kilidimiz və ya rölemiz olacaq):

int relayPin = 5;

Əvvəlki hissədə olduğu kimi barmaq izi sensoru ilə qarşılıqlı əlaqə:

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

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

Setup() funksiyasının gövdəsində göstəririk ki, LED-in qoşulduğu pin OUTPUT rejimində işləməlidir:

pinMode(relayPin, OUTPUT);

Loop() döngəsi daxilində əvvəlcə Adafruit IO-ya qoşulduğumuzu yoxlayırıq:

Bundan sonra hansı siqnalın gəldiyini yoxlayırıq. Əgər "1" ötürülürsə, biz daha əvvəl elan etdiyimiz, LED-imizin bağlı olduğu pinini aktivləşdiririk. "0" aldıqsa, kontaktı "aşağı" vəziyyətinə qoyduq:

Adafruit_MQTT_Subscribe *abunə;

isə ((abunə = mqtt.readSubscription(1000)))) (

əgər (abunə == &lock) (

Serial.print(F("Aldım:"));

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

// Komandanı sətir verilənləri kimi yadda saxlayın

String əmri = String((char *)lock.lastread);

əgər (əmr == "0") (

digitalWrite(relayPin, LOW);

əgər (əmr == "1") (

digitalWrite(relayPin, HIGH);

Tapın son versiya Eskizi GitHub-da yoxlaya bilərsiniz.

Layihəmizi sınaqdan keçirməyin vaxtı gəldi. Arduino-nuz üçün bütün lazımi kitabxanaları yükləməyi və eskizdə düzgün dəyişikliklər edib-etmədiyinizi yoxlamağı unutmayın.

ESP8266 çipini proqramlaşdırmaq üçün sadə USB-FTDI çeviricisi istifadə edilə bilər.

Eskizi Arduino-ya yükləyin və serial monitor pəncərəsini açın. Aktiv bu mərhələ Adafruit IO-ya qoşula bildiyimizi yoxladıq: mövcud funksionallığa daha sonra baxacağıq.

Layihənin sınaqdan keçirilməsi

İndi test etməyə başlayaq! Feeds menyusunda Adafruit IO-nun istifadəçi menyusuna keçin. Barmaq izi və kilidləmə kanallarının yaradılıb-yaratılmadığını yoxlayın (aşağıdakı çap ekranında bunlar barmaq izi və kilid xətləridir):


Əgər onlar mövcud deyilsə, onları əl ilə yaratmalı olacaqsınız.

İndi barmaq izi və kilid kanalları arasında məlumat mübadiləsini təmin etməliyik. Barmaq izi kanalı "1" və əksinə qurulduqda kilid kanalı "1" olaraq təyin edilməlidir.

Bunun üçün biz çox güclü Adafruit IO alətindən istifadə edirik: tetikler. Tətiklər əsasən konfiqurasiya edilmiş kanallara tətbiq edə biləcəyiniz şərtlərdir. Yəni, onlar iki kanalı birləşdirmək üçün istifadə edilə bilər.

Adafruit IO-da Tətiklər bölməsindən yeni reaktiv tətik yaradın. Bu, barmaq izi sensoru və kilidin kanalları arasında məlumat mübadiləsi imkanını təmin edəcək:


Hər iki tetikleyici konfiqurasiya edildikdə belə görünməlidir:

Hamısı! İndi layihəmizi həqiqətən sınaqdan keçirə bilərik! Barmağımızı sensora qoyuruq və Arduino-nun məlumat ötürülməsinə uyğun gələn LED ilə necə göz qırpmağa başladığını görürük. Bundan sonra, ESP8266 modulundakı LED yanıb-sönməyə başlamalıdır. Bu o deməkdir ki, o, MQTT vasitəsilə məlumat almağa başlayıb. Bu anda dövrə lövhəsindəki LED də yanmalıdır.

Eskizdə təyin etdiyiniz gecikmədən sonra (standart 10 saniyədir), LED sönəcək. Təbrik edirik! Dünyanın istənilən yerindən barmaq izinizlə LED-i idarə edə bilərsiniz!

Elektron kilidin qurulması

Layihənin son hissəsinə çatdıq: birbaşa əlaqə və nəzarət elektron kilid ilə Arduino və barmaq izi sensoru. Layihə asan deyil, bütün mənbələri yuxarıda təqdim olunduğu formada istifadə edə bilərsiniz, ancaq bir LED əvəzinə bir röleyi birləşdirin.

Kilidi birbaşa birləşdirmək üçün əlavə komponentlərə ehtiyacınız olacaq: 12V enerji təchizatı, elektrik yuvası, tranzistor (bu nümunədə IRLB8721PbF MOSFET istifadə olunur, lakin TIP102 bipolyar tranzistor kimi başqa biri istifadə edilə bilər. Əgər. bipolyar tranzistor istifadə edirsinizsə, bir rezistor əlavə etməlisiniz.

Aşağıda göstərilmişdir dövrə diaqramı bütün komponentləri ESP8266 moduluna qoşmaq:


Qeyd edək ki, MOSFET istifadə edirsinizsə, ESP8266 pin 5 və tranzistor arasında rezistora ehtiyacınız olmayacaq.

Tam yığılmış layihə aşağıdakı fotoda göstərilir:


FTDI modulundan istifadə edərək ESP8266 modulunu işə salın və 12V enerji təchizatı yuvasına qoşun. Bağlantı üçün yuxarıda tövsiyə olunan sancaqlardan istifadə etmisinizsə, eskizdə heç nə dəyişməli olmayacaqsınız.

İndi barmağınızı sensorun üzərinə qoya bilərsiniz: kilid barmaq izinizə cavab olaraq işləməlidir. Aşağıdakı video avtomatik smart kilid layihəsini göstərir:

Smart Lock layihəsinin sonrakı inkişafı

Layihəmizdə yayımlandı uzaqdan nəzarət barmaq izi ilə qapı kilidi.

Təcrübə etməkdən, eskizi və qoşqu dəyişdirməkdən çəkinin. Məsələn, siz 3D printerinizin, robot qolunuzun və ya kvadrokopterinizin gücünü idarə etmək üçün elektron qapı kilidini rele ilə əvəz edə bilərsiniz...

Özünüzü inkişaf etdirə bilərsiniz ağıllı ev". Məsələn, Arduino-da suvarma sistemini uzaqdan aktivləşdirin və ya otaqda işığı yandırın... Unutmayın ki, eyni zamanda Adafruit IO-dan istifadə edərək demək olar ki, qeyri-məhdud sayda cihazı aktivləşdirə bilərsiniz.

Şərhlərinizi, suallarınızı və paylaşın Şəxsi təcrübə aşağıda. Müzakirələrdə tez-tez yeni ideyalar və layihələr doğulur!

Elə oldu ki, iş yerində quraşdırmaq qərarına gəldik kod kilidi qapımıza, çünki daim içəri qaçdıqca, sakinlərin olmadığı yerdə qapısı daim bağlanmalı olan ofisdən qaçırıq. Açarlar çox vaxt içəridə unudulur. Ümumiyyətlə, kombinasiyalı kilidin əla çıxış yolu olduğuna qərar verdik.

Çinin birə bazarlarını və ebay-ı gəzdikdən sonra ucuz və ya daha az ciddi bir şey tapmadım və bunu özüm etmək qərarına gəldim. Dərhal qeyd edəcəyəm ki, Arduino platforması sadəliyinə görə seçilib, çünki mikrokontrollerlərlə ümumiyyətlə təcrübə yox idi.

İdeya

ilə qapıda kənarda qapıda parolun daxil edildiyi klaviatura olmalıdır içəri strukturun qalan hissəsini düzəldin. Qapının tam bağlanmasına nəzarət etmək üçün qamış açarı istifadə olunur. Ofisdən çıxan şəxs klaviaturada “*” düyməsini sıxır və qapının bağlanmasını gözləmədən qapıya yaxınlaşan şəxs öz işinə gedir, qapı tamamilə bağlandıqda qamış açarı bağlanır və qıfıl bağlanır. Qapı 4 rəqəmli parol daxil edilərək "#" düyməsini sıxmaqla açılır.

Aksesuarlar

Arduino UNO = 18 dollar
Arduino protoshield + çörək lövhəsi = 6 dollar
L293D = 1 dollar
Bredboard üçün 30 ədəd məftil dəsti = 4 dollar
2 RJ45 rozetka = 4 dollar
2 RJ45 fiş = 0,5 dollar
aktuator mərkəzi kilid= 250 rubl.
Reed açarı = köhnə pəncərədən pulsuz cırıq.
Espagnolet metal nəhəng ölçüləri = pulsuz
1,5 mm dəmirdən hazırlanmış köhnə D-LINK hubdan qutu = pulsuz
12 və 5v üçün eyni D-LINK hubdan enerji təchizatı = həm də pulsuz
Bütün bunları qutuya bağlamaq üçün bir dəstə vint və qoz-fındıq = 100 rubl.
İdarəetmə paneli oğurluq siqnalı= pulsuz.

Ümumi: 33,5 dollar və 350 rubl.

O qədər də az deyil, deyirsən və mütləq haqlı olacaqsan, amma zövq üçün pul ödəməlisən! Öz əlinizlə bir şey toplamaq həmişə xoşdur. Bundan əlavə, Arduino olmadan çılpaq MK istifadə etsəniz, dizayn qiymətdə xeyli azaldıla bilər.

Montaj hazırlığı

Satınalma haqqında bir neçə söz demək istərdim əsas element aktuator dizaynı. Yerli avtomobil mağazasında mənə iki növ ötürücü təklif etdilər: "iki naqilli və beşli". Satıcının sözlərinə görə, onlar tamamilə eyni idi və naqillərin sayındakı fərq tamamilə heç nə demək deyildi. Ancaq sonradan məlum olduğu kimi, bu belə deyil! İki naqilli bir cihaz seçdim, 12v ilə işləyirdi. Beş naqilli dizayn qolun hərəkətini idarə etmək üçün məhdudlaşdırıcı açarlara malikdir. Yanlış aldığımı yalnız onu sökəndə başa düşdüm və onu dəyişdirmək üçün çox gec idi. Qolun vuruşu mandalı düzgün itələmək üçün çox qısa oldu, buna görə də onu bir az dəyişdirmək, yəni aktuator qolunun vuruşunu qısaldan iki rezin yuyucunu çıxarmaq lazım idi. Bunu etmək üçün cəsədi adi bir mişarla birlikdə mişar etmək lazım idi, çünki ikinci yuyucu içəridə idi. Mavi lent lenti, həmişə olduğu kimi, sonradan onu yığarkən bizə kömək etdi.
Ötürücü mühərriki idarə etmək üçün 1200 mA-a qədər pik yükə tab gətirə bilən L293D motor sürücüsü istifadə edilmişdir, bizim vəziyyətimizdə aktuator mühərriki dayandırıldıqda pik yük yalnız 600 mA-a qədər artmışdır.
Təhlükəsizlik siqnalından idarəetmə panelindən klaviatura, dinamik və iki LED-dən olan kontaktlar çıxarılıb. Uzaqdan idarəetmə və əsas cihazın bükülmüş cüt və RJ45 konnektorlarından istifadə etməklə birləşdirilməli idi.

Proqramlaşdırma.

Beləliklə, indiyə qədər Arduino proqramlaşdırma ilə heç bir təcrübəm olmadığı üçün. Mən arduino.cc saytından başqa insanların inkişaflarından və məqalələrindən istifadə etdim. Kim maraqlanır, bu çirkin koda baxa bilər :)

Foto və video



Arduino və aktuator


güc qurğusu


Klaviatura


Espanolette (gücləndiriciyə metal iynə ilə birləşdirilir və gözəllik üçün istilik büzüşməsi qoyulur)

Cihazın işləmə prosesinin videosu:

Bugünkü dərslik sadə kilidləmə sistemi yaratmaq üçün Arduino ilə RFID oxuyucudan necə istifadə etmək haqqındadır, sadə sözlərlə- RFID kilidi.

RFID (İngiliscə Radio Frequency Identification, radio tezlik identifikasiyası) transponderlər və ya RFID teqlərində saxlanılan məlumatların radio siqnallarından istifadə edərək oxunduğu və ya yazıldığı obyektlərin avtomatik identifikasiyası üsuludur. İstənilən RFID sistemi oxuyucudan (oxuyucu, oxucu və ya sorğulayıcı) və transponderdən (aka RFID etiketi, bəzən RFID etiketi termini də istifadə olunur) ibarətdir.

Dərslik Arduino ilə RFID etiketindən istifadə edəcəkdir. Cihaz oxucunun yanına yerləşdirdiyimiz hər bir RFID etiketinin unikal identifikatorunu (UID) oxuyur və onu OLED displeydə göstərir. Teqin UID-i Arduino yaddaşında saxlanılan əvvəlcədən təyin edilmiş dəyərə bərabərdirsə, ekranda “Kilidi açıldı” mesajını görəcəyik. Unikal identifikator əvvəlcədən təyin edilmiş dəyərə bərabər deyilsə, "Kilidi açıldı" mesajı görünməyəcək - aşağıdakı fotoya baxın.

Qala bağlıdır

Qala açıqdır

Bu layihəni yaratmaq üçün lazım olan təfərrüatlar:

  • RFID Reader RC522
  • OLED displey
  • Çörək lövhəsi
  • məftillər

Əlavə təfərrüatlar:

  • Batareya (powerbank)

Layihə komponentlərinin ümumi dəyəri təxminən 15 dollar təşkil etmişdir.

Addım 2: RFID Reader RC522

Hər bir RFID etiketində kiçik bir çip var (şəkildə ağ kart). Bu RFID kartına bir fənər yönəltsəniz, kiçik bir çip və onu əhatə edən rulon görə bilərsiniz. Bu çipin enerji yaratmaq üçün batareyası yoxdur. Bu böyük rulondan istifadə edərək oxuyucudan kabelsiz olaraq enerji alır. Belə bir RFID kartı 20 mm-ə qədər məsafədən oxumaq mümkündür.

Eyni çip RFID açar fob etiketlərində mövcuddur.

Hər bir RFID etiketinin onu müəyyən edən unikal nömrəsi var. Bu, OLED displeydə göstərilən UID-dir. Bu UID istisna olmaqla, hər bir teq məlumatları saxlaya bilər. Bu tip kart 1000-ə qədər məlumat saxlaya bilər. Təsirli, elə deyilmi? Bu xüsusiyyət bu gün istifadə edilməyəcək. Bu gün maraq doğuran hər şey konkret kartın onun UID-si ilə eyniləşdirilməsidir. RFID oxuyucusu və bu iki RFID kartı təxminən 4 dollara başa gəlir.

Addım 3OLED Ekran

Dərslik 0,96" 128x64 I2C OLED monitordan istifadə edir.

Bu Arduino ilə istifadə etmək üçün çox yaxşı ekrandır. Bu OLED displeydir və bu o deməkdir ki, onun aşağı enerji sərfiyyatı var. Bu ekranın enerji istehlakı təxminən 10-20 mA-dır və bu, piksel sayından asılıdır.

Ekran 128x64 piksel təsvir ölçüsünə malikdir və kiçik ölçülüdür. İki ekran variantı var. Onlardan biri monoxromdur, digəri isə dərslikdə istifadə olunan kimi iki rəng göstərə bilər: sarı və mavi. Üst hissə ekran yalnız sarı ola bilər, və Alt hissə- mavi.

Bu OLED displey çox parlaqdır və Adafruit-in bu displey üçün hazırladığı böyük və çox gözəl kitabxanaya malikdir. Bundan əlavə, displey I2C interfeysindən istifadə edir, ona görə də Arduino-ya qoşulmaq inanılmaz dərəcədə asandır.

Vcc və GND istisna olmaqla, yalnız iki teli birləşdirmək lazımdır. Arduino-da yenisinizsə və layihənizdə ucuz və sadə ekrandan istifadə etmək istəyirsinizsə, buradan başlayın.

Addım 4: Bütün hissələri bir yerə qoyun

Arduino Uno lövhəsi ilə əlaqə çox sadədir. Birincisi, gücü həm oxuyucuya, həm də ekrana qoşun.

Ehtiyatlı olun, RFID oxuyucu Arduino Uno-dan 3.3V çıxışa qoşulmalıdır, əks halda o zədələnəcək.

Ekran 3.3V-də də işləyə bildiyi üçün biz VCC-ni hər iki moduldan müsbət çörək lövhəsi relsinə birləşdiririk. Bu rels daha sonra Arduino Uno-dan 3.3V çıxışa qoşulur. Sonra hər iki əsası (GND) çörək lövhəsinin yer avtobusuna bağlayırıq. Sonra çörək lövhəsinin GND avtobusunu Arduino GND-yə bağlayırıq.

OLED Ekran → Arduino

SCL → Analoq Pin 5

SDA → Analoq Pin 4

RFID Reader → Arduino

RST → Rəqəmsal Pin 9

IRQ → Qoşulmayıb

MISO → Rəqəmsal Pin 12

MOSI → Rəqəmsal Pin 11

SCK → Rəqəmsal Pin 13

SDA → Rəqəmsal Pin 10

RFID oxuyucu modulu Arduino ilə əlaqə saxlamaq üçün SPI interfeysindən istifadə edir. Beləliklə, biz Arduino UNO aparat SPI sancaqlarından istifadə edəcəyik.

RST pin rəqəmsal pin 9-a keçir. IRQ sancağı əlaqəsiz qalır. MISO pin 12 rəqəmsal pinə keçir. MOSI pin 11 rəqəmsal pinə keçir. SCK pin 13 rəqəmsal pinə, nəhayət SDA pin 10 rəqəmsal pinə keçir. Bu qədər.

RFID oxuyucu qoşuldu. İndi I2C interfeysindən istifadə edərək OLED displeyini Arduino-ya qoşmalıyıq. Beləliklə, ekrandakı SCL pin analoq Pin 5-ə və displeydəki SDA analoq Pin 4-ə keçir. İndi layihəni yandırıb RFID kartı oxucunun yanında yerləşdirsək, layihənin yaxşı işlədiyini görə bilərik.

Addım 5: Layihə Kodu

Layihə kodunun tərtib edilməsi üçün bəzi kitabxanaları daxil etməliyik. İlk növbədə, MFRC522 Rfid kitabxanasına ehtiyacımız var.

Quraşdırmaq üçün keçin Eskiz -> Kitabxanaları daxil et -> Kitabxanaları idarə et(Kitabxanaların idarə edilməsi). MFRC522 tapın və quraşdırın.

Göstərmək üçün bizə Adafruit SSD1306 kitabxanası və Adafruit GFX kitabxanası da lazımdır.

Hər iki kitabxananı quraşdırın. Adafruit SSD1306 kitabxanasına bir az dəyişiklik lazımdır. Qovluğa keçin Arduino -> Kitabxanalar, Adafruit SSD1306 qovluğunu açın və kitabxananı redaktə edin Adafruit_SSD1306.h. 70-ci sətri şərh edin və 69-cu sətri şərhdən çıxarın, çünki Ekran 128x64 təsvir ölçüsünə malikdir.

Birincisi, biz Arduino-nun tanımalı olduğu RFID etiketinin dəyərini elan edirik. Bu tam ədədlər massividir:

int kodu = (69,141,8,136); // UID

Daha sonra RFID oxuyucusunu işə salırıq və göstəririk:

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

Bundan sonra, loop funksiyasında biz hər 100 ms-dən bir oxucuda etiketi yoxlayırıq.

Oxucunun etiketi varsa, biz onun UID-ni oxuyuruq və onu displeydə çap edirik. Sonra oxuduğumuz etiketin UID-ni kod dəyişənində saxlanan dəyərlə müqayisə edirik. Dəyərlər eyni olarsa, biz KİLİDİ ​​AÇ mesajını göstəririk, əks halda bu mesajı göstərməyəcəyik.

If(match) ( Serial.println("\nMən bu kartı tanıyıram!"); printUnlockMessage(); )else ( Serial.println("\nNaməlum Kart"); )

Əlbəttə ki, layihənin daha çox RFID teqlərini tanıması üçün 1-dən çox UID dəyəri saxlamaq üçün bu kodu dəyişə bilərsiniz. Bu sadəcə bir nümunədir.

Layihə kodu:

#daxildir #daxildir #daxildir #daxildir #OLED_RESET 4 Adafruit_SSD1306 displeyini təyin edin(OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // MFRC522::MIFARE_Key açarı sinfinin nümunəsi; int kodu = (69,141,8,136); //Bu saxlanılan UID int codeRead = 0; Simli uidString; void setup() ( Serial.begin(9600); SPI.begin(); // SPI avtobusunu işə salın rfid.PCD_Init(); // MFRC522 display.begin başlat (SSD1306_SWITCHCAPVCC, 0x3C); // I2C adr 0x3D ilə işə salın (128x64 üçün) // Buferi silin.display.clearDisplay(); display.display(); display.setTextColor(WHITE); // və ya QARA); display.setTextSize(2); display.setCursor(10,0); display.print("RFID Kilidi"); display.display(); ) void loop() ( if(rfid.PICC_IsNewCardPresent()) ( readRFID(); ) gecikmə(100); ) void readRFID() ( rfid.PICC_ReadCardSerial(); Serial.print(F("\nPICC növü: ") ); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); // Yoxlayın, əgər (piccType:MINFAMICC_2!=MINMFRC5TY_2!) Klassik MIFARE növünün PICC-dir. && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) ( Serial.println(F("Sizin teqiniz MIFARE Classic tipində deyil.")); return;() erial.printl("n); Skan edilmiş PICC-nin 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; boolean uyğunluğu = doğru; while(i)

Addım 6: Yekun Nəticə

Dərsdən göründüyü kimi - az pulla layihələrinizə RFID oxuyucu əlavə edə bilərsiniz. Bu oxucu ilə asanlıqla təhlükəsizlik sistemi yarada və ya daha maraqlı layihələr yarada bilərsiniz, məsələn, USB sürücüsündən verilənlər yalnız kilidi açdıqdan sonra oxunsun.

Bu yazıda sizə arduino-dan kombinasiyalı kilidi necə edəcəyinizi göstərəcəyəm. Bunun üçün bizə qırmızı və yaşıl işıq diodları, səs siqnalı, arduino nano, I2C çeviricisi olan LCD displey, servo sürücü və 4x4 matris klaviaturası lazımdır. Yandırıldıqda ekranda "Kodu daxil edin."

qırmızı LED yanacaq,

və yaşıl sönür, servo 0°-yə qurulacaq. Nömrələr daxil edildikdə, ekranda * yanır.

Əgər kod səhv daxil edilibsə, ekranda "Cod daxil edin." yazısı görünəcək. Kod düzgündürsə, səs siqnalı səslənəcək, servo 180° dönəcək, ekranda "Açıq" yazısı görünəcək.

yaşıl LED yanacaq,

və qırmızı sönəcək. 3 saniyədən sonra servo öz vəziyyətinə qayıdacaq, qırmızı LED yanacaq və yaşıl LED sönəcək, displeydə "Bağla" yazacaq.

sonra ekranda "Kodu daxil edin." yazacaq. İndi sxem haqqında. Əvvəlcə arduino-nu naqillərlə çörək lövhəsinə (güc kontaktları) bağlayırıq.

Sonra matris klaviaturasını D9 - D2 kontaktlarına bağlayırıq.

Sonra servo. Onu pin 10-a bağlayırıq.

Pin 11-ə qırmızı LED.

Yaşıl - pin 12 üçün.

Siqnal - 13 pininə.

İndi eskizi yükləyin.

#daxildir #daxildir #daxildir #daxildir iarduino_KB KB(9, 8, 7, 6, 5, 4, 3, 2); LiquidCrystal_I2C lcd(0x27, 16, 2); Servo servo int pass = (3, 6, 1, 8); int in; int r = 11; int g = 12; etibarsız quraşdırma() ( 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("Kod daxil edin."); while ( !KB.check(KEY_DOWN)) ( gecikmə(1); ) in = KB.getNum; lcd.clear(); lcd.setCursor(0, 0); lcd.print("*"); while (!KB. check(KEY_DOWN)) ( gecikmə(1); ) in = KB.getNum; lcd.print("*"); while (!KB.check(KEY_DOWN)) ( gecikmə(1); ) in = KB.getNum; lcd.print("*"); while (!KB.check(KEY_DOWN)) ( gecikmə(1); ) in = KB.getNum; lcd.print("*"); if (in == pass) ( əgər (== keçdikdə) ( əgər (== keçdikdə) ( əgər (== keçiddə)) ( lcd.clear(); lcd.setCursor(0, 0); lcd.print("Açıq."); ton( 13, 400, 750); servo.write(180); digitalWrite(r, LOW); digitalWrite(g, HIGH); gecikmə (3000); lcd.clear(); lcd.setCursor(0, 0); lcd. print("Bağla."); ton(13, 300, 700); servo.write(0); digitalWrite(g, LOW); digitalWrite(r, HIGH); gecikmə(1000); )))

Hamısı budur. Kod kilidindən həzz alın!

Radio elementlərinin siyahısı

Təyinat Növ Denominasiya Kəmiyyət QeydMağazaMənim bloknotum
E1 Arduino lövhəsi

Arduino Nano 3.0

1 5V Notepad üçün
E8, E9 Rezistor

220 ohm

2 smd Notepad üçün
E6 İşıq yayan diod

AL102G

1 Qırmızı Notepad üçün
E7 İşıq yayan diod

AL307G

1 Yaşıl Notepad üçün
E3 LCD displeyI2C interfeysi ilə1 Yaşıl arxa işıq Notepad üçün
E5 ServoSG901 180 dərəcə Notepad üçün
E2 Buzzer5V1 Bu Notepad üçün
E4 Klaviatura4x41 matris Notepad üçün
Yox Çörək lövhəsi640 xal1 lehimsiz