05.03.2020

Avtomatik "aqlli" qulf va Arduino. Arduino-dan kombinatsiyalangan qulf Arduino-da ikki darajali autentifikatsiya bilan kombinatsiyalangan qulf


Shunday bo'ldiki, biz ish joyida eshigimizga kombinatsiyalangan qulfni o'rnatishga qaror qildik, chunki biz doimo yugurib borganimizdan so'ng, biz aholi yo'qligida eshik doimo yopiq bo'lishi kerak bo'lgan ofisdan yuguramiz. Ichkarida kalitlar ko'pincha unutiladi. Umuman olganda, biz kombinatsiyalangan qulfni chiqishning ajoyib usuli deb qaror qildik.

Xitoyning bit bozorlari va ebay-ni kezib chiqqanimdan so'ng, men arzon va jiddiyroq narsa topolmadim va uni o'zim qilishga qaror qildim. Men darhol Arduino platformasi soddaligi uchun tanlanganligini aytib o'taman, chunki mikrokontrollerlar bilan umuman tajriba yo'q edi.

Fikr

Eshikda, eshikning tashqi tomonida, parol kiritilgan klaviatura bo'lishi kerak va strukturaning qolgan qismi ichki qismga o'rnatiladi. Eshikning to'liq yopilishini nazorat qilish uchun qamish kaliti ishlatiladi. Ofisdan chiqib ketayotgan kishi klaviaturada “*” tugmasini bosadi va eshik yopilishini kutmasdan, eshik yaqinroq o‘z ishini davom ettiradi, eshik to‘liq yopilganda, qamish tugmasi yopiladi va qulf yopiladi. Eshik 4 xonali parolni kiritish va "#" tugmasini bosish orqali ochiladi.

Aksessuarlar

Arduino UNO = 18 dollar
Arduino protoshield + breadboard = 6 dollar
L293D = 1 dollar
Bredboard uchun 30 dona simlar to'plami = 4 dollar
2 ta RJ45 rozetkalari = 4 dollar
2 ta RJ45 vilkasi = $0,5
markaziy qulf aktuatori = 250 rubl.
Reed switch = eski oynadan bepul yirtilgan.
Espagnolet metall gigant o'lchamlari = bepul
1,5 mm temirdan yasalgan eski D-LINK uyasidan quti = bepul
12 va 5v uchun bir xil D-LINK hubdan quvvat manbai = ham bepul
Bularning barchasini korpusga ulash uchun bir nechta vintlardek va yong'oqlar = 100 rubl.
Xavfsizlik signalizatsiya tizimidan boshqaruv paneli = bepul.

Jami: 33,5 dollar va 350 rubl.

Juda oz emas, deysiz va siz albatta haq bo'lasiz, lekin siz zavq uchun pul to'lashingiz kerak! Va o'z qo'llaringiz bilan biror narsa to'plash har doim yoqimli. Bundan tashqari, agar siz Arduinosiz yalang'och MK dan foydalansangiz, dizayn narxini sezilarli darajada kamaytirishi mumkin.

Assambleyaga tayyorgarlik

Men aktuator dizaynining asosiy elementini sotib olish haqida bir necha so'z aytmoqchiman. Mahalliy avtodo'konda ular menga ikkita turdagi aktuatorlarni taklif qilishdi: "ikki simli va beshta". Sotuvchi ayolning so'zlariga ko'ra, ular mutlaqo bir xil edi va simlar sonidagi farq mutlaqo hech narsani anglatmaydi. Biroq, keyinroq ma'lum bo'lishicha, bu unday emas! Men ikkita simli qurilmani tanladim, u 12v quvvatga ega edi. Besh simli dizaynda tutqichning harakatini boshqarish uchun cheklovchi kalitlar mavjud. Men noto'g'ri sotib olganimni faqat uni ajratib olganimda angladim va uni o'zgartirishga juda kech edi. Tutqichning zarbasi mandalni to'g'ri bosish uchun juda qisqa bo'lib chiqdi, shuning uchun uni biroz o'zgartirish kerak edi, ya'ni aktuator tutqichining zarbasini qisqartiradigan ikkita rezina yuvgichni olib tashlash kerak edi. Buning uchun tanani oddiy arra bilan birga arralash kerak edi, chunki ikkinchi yuvish mashinasi ichida edi. Bizga ko'k yopishqoq lenta, har doimgidek, keyinchalik uni yig'ishda yordam berdi.
Aktuator motorini boshqarish uchun L293D dvigatel drayveri ishlatilgan, u 1200 mA gacha bo'lgan eng yuqori yukga bardosh bera oladi, bizning holatlarimizda, aktuator motori to'xtatilganda, eng yuqori yuk atigi 600 mA ga oshdi.
Klaviatura, karnay va ikkita LEDning kontaktlari xavfsizlik signalizatsiyasidan boshqaruv panelidan olib tashlandi. Masofadan boshqarish pulti va asosiy qurilma o'ralgan juftlik va RJ45 ulagichlari yordamida ulanishi kerak edi.

Dasturlash.

Shunday qilib, men hozirgacha Arduino dasturlash bilan hech qanday tajribaga ega emasman. Men arduino.cc veb-saytidagi boshqa odamlarning ishlanmalari va maqolalaridan foydalandim. Kimga g'amxo'rlik qiladi, bu xunuk kodni ko'rishi mumkin :)

Foto va video



Arduino va aktuator


Quvvatlantirish manbai


Klaviatura


Espagnolet (metall igna bilan aktuatorga ulangan va go'zallik uchun issiqlik qisqarishi qo'yilgan)

Qurilmaning ishlash jarayonining videosi:

Taraqqiyot hali ham to'xtamaydi va kvartiralar, garajlar va uylarning eshiklarida "Aqlli qulflar" tobora ko'proq paydo bo'lmoqda.

Smartfoningizdagi tugmani bosganingizda xuddi shunday qulf ochiladi. Yaxshiyamki, smartfon va planshetlar bizning kundalik hayotimizga allaqachon kirib kelgan. Ba'zi hollarda "aqlli qulflar" Google Drive kabi "bulut xizmatlari" ga ulanadi va masofadan turib ochiladi. Bunga qo'shimcha ravishda, ushbu parametr eshikning ochilishiga boshqa odamlarga kirish imkonini beradi.

Ushbu loyihada Arduino-da dunyoning istalgan nuqtasidan masofadan turib boshqarilishi mumkin bo'lgan aqlli qulfning DIY versiyasi amalga oshiriladi.

Bundan tashqari, loyiha barmoq izini aniqlashdan keyin qulfni ochish imkoniyatini qo'shdi. Buning uchun barmoq izi sensori o'rnatiladi. Eshiklarni ochishning ikkala varianti Adafruit IO platformasi asosida ishlaydi.

Bunday qulf sizning Smart Home loyihangizdagi ajoyib birinchi qadam bo'lishi mumkin.

Barmoq izi sensori sozlanmoqda

Barmoq izi sensori bilan ishlash uchun Arduino uchun ajoyib kutubxona mavjud bo'lib, u sensorni sozlash jarayonini sezilarli darajada osonlashtiradi. Ushbu loyiha Arduino Uno-dan foydalanadi. Adafruit CC3000 platasi internetga ulanish uchun ishlatiladi.

Quvvatni ulashdan boshlaylik:

  • Arduino platasidan 5V pinni qizil elektr relsga ulang;
  • Arduino-dan GND pin lehimsiz elektron platadagi ko'k relsga ulanadi.

Barmoq izi sensorini ulashga o'tamiz:

  • Avval quvvatni ulang. Buning uchun qizil sim +5 V relsga, qora sim esa GND rayiga ulanadi;
  • Oq sensorli sim Arduino-dagi 4-pinga ulanadi.
  • Yashil sim mikrokontrollerdagi 3-pinga o'tadi.

Endi CC3000 modulini ko'rib chiqamiz:

  • CC3000 platasidan IRQ pinini Arduino-dagi 2-pinga ulang.
  • VBAT - 5-pin uchun.
  • CS - 10-pin uchun.
  • Shundan so'ng, siz SPI pinlarini Arduino-ga ulashingiz kerak: MOSI, MISO va CLK - mos ravishda 11, 12 va 13-pinlarga.

Va nihoyat, siz quvvatni ta'minlashingiz kerak: Vin - Arduino 5V (sizning elektron platangizdagi qizil rels) va GND dan GND (nonboarddagi ko'k rels).

To'liq yig'ilgan loyihaning fotosurati quyida ko'rsatilgan:

Adafruit IO-ga ma'lumotlarni yuklaydigan eskizni ishlab chiqishdan oldin, barmoq izingiz ma'lumotlarini sensorga o'tkazishingiz kerak. Aks holda u sizni kelajakda tanimaydi;). Arduino yordamida barmoq izi sensorini alohida kalibrlashni tavsiya etamiz. Agar siz ushbu sensor bilan birinchi marta ishlayotgan bo'lsangiz, kalibrlash jarayoni va barmoq izi sensori bilan ishlash bo'yicha batafsil ko'rsatmalar bilan tanishib chiqishingizni tavsiya qilamiz.

Agar siz hali buni qilmagan bo'lsangiz, Adafruit IO hisobiga ro'yxatdan o'ting.

Shundan so'ng, biz Arduino-da "aqlli qulf" ni ishlab chiqishning keyingi bosqichiga o'tishimiz mumkin: aniqrog'i, Adafruit IO-ga ma'lumotlarni uzatuvchi eskizni ishlab chiqish. Dastur juda katta hajmli bo'lganligi sababli, maqolada biz uning faqat asosiy qismlarini ajratib ko'rsatamiz va ko'rib chiqamiz, keyin esa to'liq eskizni yuklab olishingiz mumkin bo'lgan GitHub-ga havola beramiz.

Eskiz barcha kerakli kutubxonalarni yuklash bilan boshlanadi:

#o'z ichiga oladi

#o'z ichiga oladi

#o'z ichiga oladi

# "Adafruit_MQTT.h" ni o'z ichiga oladi

#shu jumladan "Adafruit_MQTT_CC3000.h"

#o'z ichiga oladi

#o'z ichiga oladi >

Shundan so'ng, siz SSID va parolni (parol) ko'rsatib, WiFi tarmog'ingiz parametrlarini kiritish orqali eskizni biroz tuzatishingiz kerak:

#aniqlash WLAN_SECURITY WLAN_SEC_WPA2>

Bundan tashqari, siz Adafruit IO hisob qaydnomangizni kiritish uchun ism va AIO kalitini (kalit) kiritishingiz kerak:

#AIO_SERVERPORT 1883 ni aniqlang

#AIO_USERNAME "adafruit_io_name"ni aniqlang

#AIO_KEY "adafruit_io_key"ni aniqlang>

Quyidagi qatorlar barmoq izi sensori ma'lumotlarining o'zaro ta'siri va qayta ishlanishi uchun javobgardir. Agar sensor faollashtirilgan bo'lsa (barmoq izi mos kelsa), u "1" bo'ladi:

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

Adafruit_MQTT_Publish barmoq izini = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Bundan tashqari, sensorimiz uchun SoftwareSerial ob'ektining namunasini yaratishimiz kerak:

SoftwareSerial mySerial(3, 4);

Shundan so'ng biz sensorimiz uchun ob'ekt yaratishimiz mumkin:

Adafruit_Fingerprint barmoq = Adafruit_Fingerprint(&mySerial);

Eskiz ichida biz kelajakda qaysi fingerID qulfni faollashtirishi kerakligini aniqlaymiz. Ushbu misolda sensor tomonidan ishlatiladigan birinchi barmoq izining identifikatoriga mos keladigan 0 ishlatiladi:

int fingerID = 0;

Shundan so'ng biz hisoblagichni va loyihamizdagi kechikish (kechikish) ni ishga tushiramiz. Asosan, biz qulfni ochgandan keyin avtomatik ravishda ishlashini xohlaymiz. Ushbu misolda 10 soniya kechikish qo'llaniladi, ammo siz ushbu qiymatni ehtiyojlaringizga mos ravishda sozlashingiz mumkin:

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

Setup() funksiyasining korpusida biz barmoq izi sensorini ishga tushiramiz va CC3000 chipi WiFi tarmog'ingizga ulanganligini ta'minlaymiz.

Loop() funksiyasining tanasida biz Adafruit IO ga ulanamiz. Buning uchun quyidagi qator javobgardir:

Adafruit IO platformasiga ulangandan so'ng biz oxirgi barmoq izini tekshiramiz. Agar u mos kelsa va qulf yoqilmagan bo'lsa, biz Adafruit IO-ga ishlov berish uchun "1" yuboramiz:

agar (barmoq izi ID == barmoq ID && lockState == noto'g'ri) (

Serial.println(F("Kirish ruxsat berilgan!"));

lockState=true;

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

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

lastActivation = millis();

Agar loop() funksiyasi ichida blokirovka faollashtirilgan bo'lsa va biz yuqorida ko'rsatilgan kechikish qiymatiga erishgan bo'lsak, biz "0" yuboramiz:

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

lockState=false;

agar (! fingerprint.publish(state)) (

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

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

Kodning so'nggi versiyasini GitHub-da yuklab olishingiz mumkin.

Loyihamizni sinab ko'rish vaqti keldi! Barcha kerakli Arduino kutubxonalarini yuklab olishni va o'rnatishni unutmang!

Eskizga barcha kerakli o'zgarishlarni kiritganingizga ishonch hosil qiling va uni Arduino-ga yuklang. Keyin ketma-ket monitor oynasini oching.

Arduino WiFi tarmog'iga ulanganda barmoq izi sensori qizil yonib-o'chadi. Barmog'ingizni sensorga qo'ying. Seriya monitor oynasi ID raqamini ko'rsatishi kerak. Agar u mos kelsa, "OK!" degan xabar paydo bo'ladi. Bu ma'lumotlar Adafruit IO serverlariga yuborilganligini anglatadi.

LED misolidan foydalanib, qulfni keyingi sozlash uchun sxema va eskiz

Keling, loyihaning eshik qulfini boshqarish uchun bevosita mas'ul bo'lgan qismi bilan shug'ullanamiz. Simsiz tarmoqqa ulanish va qulfni faollashtirish / o'chirish uchun sizga qo'shimcha Adafruit ESP8266 moduli kerak bo'ladi (ESP8266 moduli Adafruit-dan bo'lishi shart emas). Quyidagi misol sizga Adafruit IO yordamida ikkita platforma (Arduino va ESP8266) o'rtasida muloqot qilish qanchalik osonligini ko'rsatadi.

Ushbu bo'limda biz to'g'ridan-to'g'ri qulf bilan ishlamaymiz. Buning o'rniga, biz shunchaki LEDni keyinchalik qulf ulanadigan pinga ulaymiz. Bu qulf dizaynining o'ziga xos xususiyatlarini o'rganmasdan kodimizni sinab ko'rish imkonini beradi.

Sxema juda oddiy: avval ESP8266 ni non taxtasiga o'rnating. Keyin LEDni o'rnating. LEDning uzun (musbat) oyog'i rezistor orqali ulanganligini unutmang. Rezistorning ikkinchi oyog'i ESP8266 modulidagi 5-pinga ulangan. Ikkinchi (katod) LED ESP8266 dagi GND piniga ulangan.

To'liq yig'ilgan sxema quyidagi fotosuratda ko'rsatilgan.


Keling, ushbu loyiha uchun foydalanayotgan eskizni ko'rib chiqaylik. Shunga qaramay, kod juda katta va murakkab, shuning uchun biz uning faqat asosiy qismlarini ko'rib chiqamiz:

Biz kerakli kutubxonalarni kiritishdan boshlaymiz:

#o'z ichiga oladi

# "Adafruit_MQTT.h" ni o'z ichiga oladi

# "Adafruit_MQTT_Client.h" ni o'z ichiga oladi

Wi-Fi sozlamalarini sozlang:

#WLAN_SSID "sizning_wifi_ssid" ni aniqlang

#WLAN_PASS "sizning_wifi_parolingizni" belgilang

#WLAN_SECURITY WLAN_SEC_WPA2 ni aniqlang

Biz Adafruit IO parametrlarini ham sozlaymiz. Oldingi bo'limda bo'lgani kabi:

#AIO_SERVER "io.adafruit.com" ni aniqlang

#AIO_SERVERPORT 1883 ni aniqlang

#AIO_USERNAME "adafruit_io_username"ni aniqlang

#AIO_KEY "adafruit_io_key" ni aniqlang

Biz LEDni qaysi pinga ulaganimizni ko'rsatamiz (kelajakda bu bizning qulfimiz yoki o'rnimiz bo'ladi):

int relayPin = 5;

Oldingi bo'limda bo'lgani kabi barmoq izi sensori bilan o'zaro aloqa:

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

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

Setup() funksiyasining tanasida biz LED ulangan pin OUTPUT rejimida ishlashi kerakligini ko'rsatamiz:

pinMode (relayPin, OUTPUT);

Loop() siklida avval Adafruit IO ga ulangan-ulanmaganimizni tekshiramiz:

Shundan so'ng biz qanday signal kelishini tekshiramiz. Agar "1" uzatilsa, biz ilgari e'lon qilgan pinni faollashtiramiz, unga bizning LED ulangan. Agar biz "0" ni olgan bo'lsak, biz kontaktni "past" holatga keltiramiz:

Adafruit_MQTT_Subscribe *obuna;

esa ((obuna = mqtt.readSubscription(1000)))) (

agar (obuna == &lock) (

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

Serial.println((char *)lock.so'nggi oqim);

// Buyruqni satr ma'lumotlari sifatida saqlang

String buyrug'i = String((char *)lock.lastread);

agar (buyruq == "0") (

digitalWrite (relayPin, LOW);

agar (buyruq == "1") (

digitalWrite(relayPin, HIGH);

Eskizning so'nggi versiyasini GitHub-da topishingiz mumkin.

Loyihamizni sinab ko'rish vaqti keldi. Arduino uchun barcha kerakli kutubxonalarni yuklab olishni va eskizga to'g'ri o'zgartirish kiritganingizni tekshirishni unutmang.

ESP8266 chipini dasturlash uchun oddiy USB-FTDI konvertoridan foydalanish mumkin.

Eskizni Arduino-ga yuklang va ketma-ket monitor oynasini oching. Ushbu bosqichda biz Adafruit IO-ga ulanish imkoniga ega bo'lganimizni tekshirdik: biz mavjud funksiyalarni batafsil ko'rib chiqamiz.

Loyihani sinovdan o'tkazish

Endi sinovni boshlaylik! Tasmalar menyusida Adafruit IO-ning foydalanuvchi menyusiga o'ting. Barmoq izi va qulflash uchun kanallar yaratilgan yoki yaratilmaganligini tekshiring (quyidagi chop etish ekranida bular barmoq izi va qulflash chiziqlari):


Agar ular mavjud bo'lmasa, ularni qo'lda yaratishingiz kerak bo'ladi.

Endi biz barmoq izi va blokirovka kanallari o'rtasida ma'lumotlar almashinuvini ta'minlashimiz kerak. Barmoq izi kanali "1" ga o'rnatilganda qulflash kanali "1" ga o'rnatilishi kerak va aksincha.

Buning uchun biz juda kuchli Adafruit IO vositasidan foydalanamiz: triggerlar. Triggerlar asosan sozlangan kanallarga qo'llashingiz mumkin bo'lgan shartlardir. Ya'ni, ular ikkita kanalni bir-biriga ulash uchun ishlatilishi mumkin.

Adafruit IO-dagi Triggerlar bo'limidan yangi reaktiv trigger yarating. Bu barmoq izi sensori va qulf kanallari o'rtasida ma'lumot almashish imkoniyatini beradi:


Ikkala trigger ham sozlanganda u qanday ko'rinishi kerak:

Hammasi! Endi biz haqiqatan ham loyihamizni sinab ko'rishimiz mumkin! Biz barmog'imizni sensorga qo'yamiz va Arduino ma'lumotlar uzatilishiga mos keladigan LED bilan qanday qilib ko'z qisishni boshlaganini ko'ramiz. Shundan so'ng, ESP8266 modulidagi LED miltillay boshlashi kerak. Demak, u MQTT orqali ma’lumotlarni qabul qila boshlagan. Ushbu nuqtada elektron platadagi LED ham yoqilishi kerak.

Eskizda o'rnatgan kechikishdan so'ng (standart 10 soniya), LED o'chadi. Tabriklaymiz! Dunyoning istalgan nuqtasidan barmoq izingiz bilan LEDni boshqarishingiz mumkin!

Elektron qulfni o'rnatish

Biz loyihaning oxirgi qismiga yetib keldik: Arduino va barmoq izi sensori yordamida elektron qulfni bevosita ulash va boshqarish. Loyiha oson emas, siz barcha manbalarni yuqorida ko'rsatilgan shaklda ishlatishingiz mumkin, lekin LED o'rniga o'rni ulang.

Qulfni to'g'ridan-to'g'ri ulash uchun sizga qo'shimcha komponentlar kerak bo'ladi: 12V quvvat manbai, quvvat ulagichi, tranzistor (bu misolda IRLB8721PbF MOSFET ishlatiladi, lekin TIP102 bipolyar tranzistor kabi boshqasidan foydalanish mumkin. Agar. Agar bipolyar tranzistordan foydalansangiz, sizga rezistor qo'shishingiz kerak bo'ladi.

Barcha komponentlarni ESP8266 moduliga ulash uchun simlar diagrammasi quyida ko'rsatilgan:


E'tibor bering, agar siz MOSFET dan foydalansangiz, sizga ESP8266 pin 5 va tranzistor o'rtasida rezistor kerak bo'lmaydi.

To'liq yig'ilgan loyiha quyidagi fotosuratda ko'rsatilgan:


FTDI moduli yordamida ESP8266 modulini quvvatlang va 12V quvvat manbaini uyaga ulang. Agar siz ulanish uchun yuqorida tavsiya etilgan pinlardan foydalangan bo'lsangiz, eskizdagi biror narsani o'zgartirishingiz shart emas.

Endi siz barmog'ingizni sensorga qo'yishingiz mumkin: qulf barmoq izingizga javoban ishlashi kerak. Quyidagi videoda avtomatik aqlli qulf loyihasi amalda ko'rsatilgan:

Smart Lock loyihasini yanada rivojlantirish

Bizning loyihamizda barmoq izi yordamida eshik qulfini masofadan boshqarish imkoniyati mavjud.

Tajriba qiling, eskiz va jabduqni o'zgartiring. Masalan, siz 3D printer, robot qo'l yoki kvadrokopter quvvatini boshqarish uchun elektron eshik qulfini o'rni bilan almashtirishingiz mumkin...

Siz o'zingizning "aqlli uy" ni rivojlantirishingiz mumkin. Misol uchun, Arduino-da sug'orish tizimini masofadan turib faollashtirish yoki xonadagi yorug'likni yoqish ... Yodda tutingki, siz bir vaqtning o'zida Adafruit IO yordamida deyarli cheksiz ko'p qurilmalarni faollashtirishingiz mumkin.

Quyida sharhlaringizni, savollaringizni qoldiring va shaxsiy tajribangizni o'rtoqlashing. Munozarada ko'pincha yangi g'oyalar va loyihalar tug'iladi!

Arduino har qanday uskunani nusxalash uchun eng yaxshi tizimdir. Aksariyat g'oyalar usiz amalga oshmas edi. Bunday g'oya uzoq vaqtdan beri mavjud edi: arduino-da maxsus kombinatsiyalangan qulfni yaratish. Uni ochish uchun ma'lum bir tugmachani bosib ushlab turish kerak. Bunday holda, siz o'ng tugmani bilsangiz ham, qulf ochilmasligi kerak. Uni ochish uchun siz mushak xotirasi yordamida ma'lum intervallarni saqlashingiz kerak. Jinoyatchi bunday ishni qila olmaydi. Ammo bularning barchasi faqat nazariya.

Uni yig'ish uchun siz to'rtburchaklar impulslarning maxsus moslamasini, shuningdek, bir nechta hisoblagich va uyumni ishlatishingiz kerak. Lekin tayyor qurilma katta umumiy o'lchamlarga ega bo'ladi va foydalanish noqulay bo'ladi. Qoida tariqasida, bunday fikrlar tinchlanmaydi. Orzuni amalga oshirishdagi birinchi qadam Arduino uchun dastur yaratish edi. U kombinatsiyalangan qulf sifatida xizmat qiladi. Uni ochish uchun siz bitta tugmani emas, balki bir nechta tugmani bosishingiz va bir vaqtning o'zida bajarishingiz kerak bo'ladi. Tayyor sxema quyidagicha ko'rinadi:

Rasm sifati eng yaxshi emas, lekin ulanish erga, D3, D5, D7, D9 va D11 bilan amalga oshiriladi.

Kod quyida keltirilgan:

Const intina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; bayt a = 0; bayt b = 0; bayt c = 0; bayt d = 0; imzosiz uzoq vaqt = 0; //millis() qiymatini oladigan hech narsani unutmang unsigned long temp = 0; //belgisiz uzun baytda saqlash keya = ( 0, 0, 0, 0, 0, 0, 0, 0); //kodlar aslida bayt klavish = ( 1, 1, 1, 1, 0, 1, 0, 0); bayt kaliti = ( 1, 0, 1, 0, 1, 1, 1, 0); bayt k = 0; void setup() ( pinMode(ina, INPUT_PULLUP); //3 ta kirish pinMode tugmalariga ulangan(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT); //pin 13-pinda o‘rnatilgan LED (7, OUTPUT); pinMode(11, OUTPUT); digitalWrite(7, LOW); //yerli digitalWrite(11, LOW); vaqt = millis(); //vaqt uchun kerak ) void blinktwice() ( // LEDning ikki marta miltillashi digitalWrite(ledPin, HIGH); kechikish(100); digitalWrite(ledPin, LOW); kechikish(100); digitalWrite(ledPin, HIGH); kechikish (100); digitalWrite(ledPin, LOW); kechikish( 200); ) void loop() ( if(k==0) ( blinktwice(); // kodni kiritish talabi ) if (k == 8) ( digitalWrite(ledPin, HIGH); kechikish (3000); k = 0 ; ) a = digitalRead(ina); //tugmalardan signal darajalarini o'qing - bosilgan/bosilmagan b = digitalRead(inb); c = digitalRead(inc); kechikish(100); //keyingi bo'lsa - himoyalanish noto'g'ri musbat, if((digitalRead(ina) == a)&&(digitalRead(inb) ==b)&&(digitalRead(inc)==c)) ( if (a == keya[k]) ( if (b) == keyb[k]) ( if (c == keyc[k]) ( k++; ) ) ) ) agar (k==1) ( agar (d ==0) ( vaqt = millis (); d++; ) ) temp = millis(); temp = temp - vaqt; agar (harorat > 10000) ( k= 0; d=0; vaqt = millis (); ) )

Kod bo'yicha keraksiz savollarning oldini olish uchun ba'zi fikrlarni aniqlashtirish kerak. O'rnatish funksiyasi portlarni belgilash uchun ishlatiladi. Keyingi funktsiya Input_Pullup bo'lib, u pin kuchlanishini 5 V ga oshirish uchun kerak. Bu qarshilik yordamida amalga oshiriladi. Shu sababli, turli xil qisqa tutashuvlar sodir bo'lmaydi. Kattaroq qulaylik uchun ikki marta miltillash funksiyasidan foydalanish tavsiya etiladi. Umuman olganda, turli xil dasturlarni yaratishda siz boshqa funktsiyalarni sinab ko'rishingiz kerak.

Funksiyalarni tayinlagandan so'ng, signal portlardan o'qiladi. Agar tugma bosilsa, bu 1 raqami bilan ko'rsatiladi, agar bo'lmasa - 2. Bundan tashqari, barcha qiymatlar tahlil qilinadi. Masalan, 0,1,1 kabi kombinatsiya mavjud. Bu degani, birinchi tugma bosilsa, qolgan ikkitasi bosilmaydi. Agar barcha qiymatlar rost bo'lsa, 8-shart ham to'g'ri. Bu old paneldagi yoritilgan LED bilan ko'rsatilgan. Keyinchalik, eshikni ochish uchun xizmat qiladigan maxsus kodni kiritishingiz kerak.

Kodning oxirgi elementlari hisoblagich qiymatlarini tiklash uchun ishlatiladi. Agar tugma oxirgi marta bosilganidan keyin 10 soniyadan ko'proq vaqt o'tgan bo'lsa, bu funktsiya bajariladi. Ushbu kodsiz barcha mumkin bo'lgan variantlarni saralash mumkin edi, garchi ularning ko'pi bor. Ushbu qurilmani yaratgandan so'ng, uni sinab ko'rishingiz kerak. Ko'proq

Ushbu darsda biz elektron kalit (Label) yordamida qulfni ochadigan oddiy tizimni qanday qilishni o'rganamiz.

Kelajakda siz funksionallikni yaxshilash va kengaytirishingiz mumkin. Masalan, "yangi kalitlarni qo'shish va ularni xotiradan olib tashlash" funktsiyasini qo'shing. Asosiy holatda, dastur kodida noyob kalit identifikatori oldindan ko'rsatilgan bo'lsa, oddiy misolni ko'rib chiqing.

Ushbu qo'llanmada bizga kerak bo'ladi:

Loyihani amalga oshirish uchun biz kutubxonalarni o'rnatishimiz kerak:

2) Endi siz signalni ulashingiz kerak, agar kalit ishlagan bo'lsa va qulf ochilsa, ikkinchi signal esa qulf yopilganda signal beradi.

Biz signalni quyidagi ketma-ketlikda ulaymiz:

Arduino Buzzer
5V VCC
GND GND
pin 5 IO

3) Qulfni ochish mexanizmi sifatida servo ishlatiladi. Siz talab qiladigan o'lchamlarga va servo yaratadigan kuchlarga qarab har qanday servo tanlanishi mumkin. Servo 3 ta pinga ega:

Quyidagi rasmda barcha modullarni qanday ulaganimizni aniqroq ko'rishingiz mumkin:

Endi, agar hamma narsa ulangan bo'lsa, siz dasturlashga o'tishingiz mumkin.

Eskiz:

#o'z ichiga oladi #o'z ichiga oladi #o'z ichiga oladi // "RFID" kutubxonasi. #SS_PIN 10 ni aniqlang #RST_PIN 9 ni aniqlang MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; // teg raqamini o'nlik formatda saqlash uchun Servo servo; void setup() ( Serial.begin(9600); Serial.println("Karta kutilmoqda..."); SPI.begin(); // SPI ishga tushirish / Init SPI avtobus. mfrc522.PCD_Init(); // ishga tushirish MFRC522 / Init MFRC522 card.servo.attach(6); servo.write(0); // servoni yopiq holatga o'rnating ) void loop() ( // Agar (! mfrc522.PICC_IsNewCardPresent()) yangi yorliqni qidiring return; ) // Tegni tanlash, agar (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // (bayt i = 0; i) uchun tegning seriya raqamini berish< 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); // устанавливаем серву в закрытое сосотояние }

Keling, eskizni batafsil tahlil qilaylik:

Kartaning UID (yorliqlar) ni bilish uchun siz ushbu eskizni arduino-ga yozishingiz, yuqorida tavsiflangan sxemani yig'ishingiz va Konsolni ochishingiz kerak (ketma-ket portni kuzatish). Tegni RFID-ga keltirganingizda, konsolda raqam ko'rsatiladi

Olingan UID quyidagi qatorga kiritilishi kerak:

Agar (uidDec == 3763966293) // Yorliqning Uid-ni solishtiring, agar u belgilanganiga teng bo'lsa, u holda servo valfni ochadi.

Har bir karta uchun bu identifikator noyobdir va takrorlanmaydi. Shunday qilib, siz dasturda identifikatorini o'rnatgan kartani taqdim etganingizda, tizim servo yordamida kirishni ochadi.

Video: