Mundarija:
- 1 -qadam: qismlarni yig'ing
- 2 -qadam: materiallar
- 3 -qadam: Kosonni kattalashtiring
- 4-qadam: simli DC-DC konverteri
- 5 -qadam: Quvvatni qurilmalarga ulash
- 6 -qadam: simli o'rni modulining kirishlari
- 7 -qadam: IMP Power Jumper
- 8 -qadam: Simli eshiklar holatiga kirishlar
- 9 -qadam: Kosonni chop eting yoki sotib oling
- 10 -qadam: sumkangizni bezang
- 11 -qadam: simlar uchun teshik
- 12 -qadam: ulash simlarini tayyorlash va o'rnatish
- 13 -qadam: O'rnatish simlarini yo'naltiring
- 14 -qadam: Komponentlarni o'rnatish
- 15 -qadam: O'rnatish simlarini muhrlang
- 16 -qadam: Kosonni yoping
- 17 -qadam: Gate operatoriga o'rnating
- 18 -qadam: Aux Relay rejimini o'rnating
- 19 -qadam: IMP agenti va qurilma kodi
- 20 -qadam: PHP veb -xizmati
Video: WebApp boshqariladigan eshiklar operatori qo'shilishi (IoT): 20 qadam (rasmlar bilan)
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Mening mijozim bor, uning darvozasi bor edi, u erga ko'p odamlar kelishi va ketishi kerak edi. Ular tashqi tomondan klaviatura ishlatishni xohlamadilar va faqat cheklangan kalitli kalit uzatgichlarga ega edilar. Qo'shimcha keyfoblar uchun arzon manbani topish qiyin edi. Men bu Liftmaster darvoza operatorini IoT -ni maxsus apparat, veb -API va veb -ilovalar interfeysi bilan moslashtirish uchun yangilash uchun ajoyib imkoniyat bo'ladi deb o'yladim. Bu nafaqat ommaviy kirish muammosini hal qildi, balki qo'shimcha funktsiyalarni ham ochdi!
Yuqoridagi oxirgi rasmda men deyarli bir yil davomida qulflangan sumkada yugurgan test birligi. Men yangilanish vaqti keldi deb o'yladim!
Bu erda keltirilgan barcha kodlar, apparat ma'lumotlari va dizaynlari bilan to'liq ishlaydigan echim.
Loyihalarning barcha fayllari GitHub-da joylashgan: github.com/ThingEngineer/IoT-Gate-Operator-Addon
CodeIgniter WebApp interfeysi misoli bu erda joylashtirilgan: projects.ajillion.com/gate Bu misol jonli eshikka ulanmagan, lekin eshiklarda ishlaydigan aniq interfeys va kod (ba'zi xavfsizlik xususiyatlarini hisobga olmaganda).
--
Kattaroq integratsiya uchun IFTTT kutubxonasidan Electric Imp uchun foydalanishingiz mumkin.
1 -qadam: qismlarni yig'ing
- Sizga kamida 4 ta GPIO -ga ega bo'lgan elektr IMP kerak bo'ladi, men IMP001 -ni aprel oyidagi taxtali ishlataman.
- Manba kuchlanishini 5 V ga tushirish uchun regulyator. Men DC-DC Buck Converter Step Down Modulidan foydalanmoqdaman. Amazondan eBoot MP1584EN versiyasi.
- IMP chiqishi bilan ishlaydigan ikkita (yoki undan ko'p) o'rni moduli yoki shunga o'xshash kommutatsiya moslamasi. Men Amazon -dan JBtek 4 kanalli DC 5V o'rni modulidan foydalanayapman.
- 4 simli vintli terminal. Men Amazondan 5Pcs 2 qatorli 12P simli ulagichli vintli terminalli to'siqni 300V 20A blokidan foydalanayapman.
2 -qadam: materiallar
Sizga ham kerak bo'ladi:
- 3D printer yoki kichik loyiha qutisiga kirish
- Koson qopqog'i uchun taxminan 4 mm x 6 mm bo'lgan 4 ta kichik vint
- Ulanish simlari
- Tel kesgichlar
- Tel -chiziqlar
- Kichik tornavidalar
- Lehimlash temir
- Issiq elim yoki silikon
- Fermuar bog'lamlari
3 -qadam: Kosonni kattalashtiring
Qaysi o'lchamdagi sumka kerakligini aniqlang. Rasmda ko'rsatilganidek, menga kengligi 140 mm, chuqurligi 70 mm va balandligi 30 mm bo'lgan quti kerak bo'ladi.
4-qadam: simli DC-DC konverteri
DC-DC konvertor platasiga va tashqarisiga ulanish uchun 3 juft qizil va qora ulash simini kesib oling.
- Kirish: 100 mm
- IMPga chiqish: 90 mm
- O'rnimizni moduliga chiqish: 130 mm
Ko'rsatilganidek, ularni taxtaga lehimlang.
5 -qadam: Quvvatni qurilmalarga ulash
- DC-DC konvertorining kirishini vintli terminal blokidagi ikkita nuqtaga ulang.
- Qisqa 5V chiqish simlarini IMP ga lehimlang.
- Uzunroq 5V chiqish simlarini o'rni moduliga lehimlang.
6 -qadam: simli o'rni modulining kirishlari
- O'rnimizni modulining kirish ulanishlari uchun 4 x 90 mm simlarni kesib oling. Keyinchalik kodlashda osonroq ma'lumot olish uchun 4 ta alohida rang ishlatilgan.
- Simlarni o'rni moduliga 1-4, so'ngra IMP GPIO-ning birinchi 4 nuqtasiga (Pin1, 2, 5 va 7) lehimlang.
7 -qadam: IMP Power Jumper
IMP -ni dasturlash va sinash paytida USB quvvatidan foydalanish kerak bo'lishi mumkin. Ishni tugatgandan so'ng, quvvat o'tish moslamasini BAT tomoniga o'tkazganingizga ishonch hosil qiling.
8 -qadam: Simli eshiklar holatiga kirishlar
- Quvvat holatini kiritish uchun 2 x 80 mm simlarni kesib oling.
- Qolgan 2 vintli terminalga simlarni ulang.
- Lehim simlari navbati bilan IMP GPIO nuqtalari (Pin8 va 9) yoniga.
9 -qadam: Kosonni chop eting yoki sotib oling
GitHub yoki Thingiverse -da bu holat uchun mening. STL yoki. F3D -ni yuklab olishingiz mumkin
Agar sizda 3D printerga kirish imkoni bo'lmasa, kichik umumiy loyiha ishi ishlaydi.
10 -qadam: sumkangizni bezang
Chunki!
Men o'zim yozgan matnni qo'ydim va uni qora sharf bilan bo'yadim. Agar siz o'zingizni sarguzashtli his qilsangiz, uni silliq qilish uchun akril bo'yoq, tirnoq yoki boshqa narsalardan foydalanishingiz mumkin.
11 -qadam: simlar uchun teshik
Yon tomoni 10-15 mm bo'lgan teshikni burang, uning o'rtasi yaqinida, barcha simlar birlashadi.
Men Unibit -dan plastmassadagi toza, silliq teshik uchun foydalanardim.
12 -qadam: ulash simlarini tayyorlash va o'rnatish
Qurilmamizni eshik boshqaruv paneliga ulash uchun 9 x 5-600 mm simlarni kesib oling.
- 24V kuchlanishli kirish uchun 2
- Darvoza holati uchun 3 (2 kirish va umumiy nuqta)
- 2 ochiq eshik signali uchun
- Yopiq eshik signallari uchun 2
Matkap yordamida yuqorida sanab o'tilgan har bir guruhni bir -biriga bog'lab qo'ying. Bu hamma narsani osonlashtiradi va yaxshi ko'rinishga ega bo'ladi.
Har bir simni echib oling va ko'rsatilganidek, tegishli terminallarga ulang.
13 -qadam: O'rnatish simlarini yo'naltiring
Ko'rsatilganidek, ulanish simlarini teshikdan o'tkazing.
14 -qadam: Komponentlarni o'rnatish
Issiq yopishtiruvchi yoki silikonli kichik boncuk bilan komponentlarni joylashtiring va o'rnating. Agar biror qismni olib tashlash kerak bo'lsa, ko'p ishlatmang, ularni mahkamlash uchun yetarli darajada foydalaning.
Dastlab men taxtalarni joyida ushlab turish uchun sumkani kliplar/yorliqlar bilan chop qilmoqchi edim, lekin uni o'rnatishim kerak edi va vaqtim yo'q edi. Sizning ishingizga taxtali kliplarni qo'shish juda yoqimli bo'lardi.
15 -qadam: O'rnatish simlarini muhrlang
Ulanish simlarini issiq elim yoki silikon bilan mahkamlang.
16 -qadam: Kosonni yoping
Men 3D bosilgan quti ro'yxatida kichik ~ 4 mm vintlarni ishlatardim. Agar siz axloqsizlik yoki namlikdan xavotirda bo'lsangiz, uni yopishdan oldin uning atrofiga silikon yoki issiq elim taqing.
17 -qadam: Gate operatoriga o'rnating
Asosiy taxtada:
- Ochilish darvozasi terminaliga 1 -o'rni chiqishiga ulangan ikkita simni ulang. (rasmlarda qizil/jigarrang)
- 2 -o'rni chiqishiga ulangan ikkita simni Gate Close terminaliga ulang. (rasmlarda sariq/ko'k)
- DC-DC konvertorining kirishiga ulangan ikkita simni 24V kuchlanishli vintli terminallarga ulang (rasmlarda qizil/qora)
Kengaytirish taxtasida
- O'rnimizni umumiy vintli terminallarini simning kichik bo'lagi bilan birlashtiring
- Umumiy erni o'rni vintli terminallaridan biriga ulang (rasmlarda yashil)
- 2 ta eshik holatidagi kirishni (IMP Pin8 va 9) o'rni oddiy ochiq (NO) vintli terminallariga ulang (rasmlarda kulrang/sariq)
Simlarni yo'naltiring, ularni zip bilan bog'lang, shunda ular chiroyli ko'rinishga ega bo'ladi va sumkangizni o'rnatish yoki o'rnatish uchun joy topadi.
GitHub omborida joylashtirilgan qo'shimcha aniqlikdagi fotosuratlar mavjud.
18 -qadam: Aux Relay rejimini o'rnating
Yordamchi o'rni kalitlarini rasmda ko'rsatilgandek o'rnating.
Bu IMPga eshikning yopilganligini, ochilishini, ochilishini yoki yopilishini aniqlashi kerak bo'lgan signallarni beradi.
19 -qadam: IMP agenti va qurilma kodi
Elektr imp agenti kodi:
- Electric Imp IDE -da yangi model yarating:
- Serverni ko'rsatish uchun URL manzilini o'zgartiring
// HTTP ishlov berish funktsiyasi
httpHandler (req, resp) funktsiyasi {harakat qilib ko'ring {mahalliy d = http.jsondecode (req.body); //server.log(d.c); agar (dc == "btn") {//server.log(d.val); device.send ("btn", d.val); resp.send (200, "OK"); }} catch (ex) {// Agar xato bo'lsa, uni server.log javobiga yuboring ("xato:" + ex); resp.send (500, "Ichki server xatosi:" + ex); }} // HTTP ishlovchilarini ro'yxatdan o'tkazish http.onrequest (httpHandler); // GateStateChange ishlovchi funktsiyasining vazifasi gateStateChangeHandler (ma'lumotlar) {// veb -xizmatiga URL mahalliy url = "https://projects.ajillion.com/save_gate_state"; // Content-Type sarlavhasini json local headers = {"Content-Type": "application/json"} ga o'rnating; // Qabul qilingan ma'lumotlarni kodlang va mahalliy tanani kiriting = http.jsonencode (ma'lumotlar); server.log (tanasi); // Ma'lumotlarni http.post (url, header, body).sendsync () veb -xizmatiga yuboring; } // gateStateChange ishlov beruvchisi device.on -da ro'yxatdan o'ting ("gateStateChange", gateStateChangeHandler);
Elektr imp agenti kodi:
- Modelingizga Imp qurilmasini tayinlang
- Uskuna pinlari ulanganligi uchun taxallusli ekanligini tekshiring
// Debouce kutubxonasi
#require "Button.class.nut: 1.2.0" // gateOpen GPIO pin (faol past) gateOpen <- apparat.pin2; // Gap uchun taxallusClose control GPIO pin (faol past) gateClose <- hardware.pin7; // "gateOpen" ni boshlang'ich qiymati raqamli 1 (yuqori) gateOpen.configure (DIGITAL_OUT, 1) raqamli chiqish qilib sozlang; // "gateClose" ni raqamli 1 (yuqori) gateClose.configure (DIGITAL_OUT, 1) boshlang'ich qiymati bo'lgan raqamli chiqish sifatida sozlang; // GPIO pinining taxallusi, u eshik harakatlanayotganini ko'rsatadi (N. O.) gateMovingState <- Button (apparat.pin8, DIGITAL_IN_PULLUP); // GPIO pinining taxallusi eshik to'liq ochilganligini bildiradi (N. O.) gateOpenState <- Button (apparat.pin9, DIGITAL_IN_PULLUP); // Gap holatini ushlab turish uchun global o'zgaruvchi (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Latch Timer ob'ekti mahalliy); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Ochiq buyruq qabul qilindi"); "latch30m" buzish holati: gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Latch30m buyrug'i qabul qilindi"); buzilish holati "latch8h": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log ("Latch8h buyrug'i qabul qilindi"); "yop" tugmachasi: agar (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log ("Hozir yopish" buyrug'i qabul qilingan); standartni uzish: server.log ("Tugma buyrug'i tan olinmagan");}}); funksiya releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timeer gateOpen switch kontaktini bo'shatdi "); } funksiya releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Taymer gateClose switch kontaktini qo'ydi "); } gateMovingState.onPress (function () {// Röle faollashtirilgan, eshik harakatlanmoqda //server.log("Gate ochilmoqda "); mahalliy ma'lumotlar = {" gatestate ": 1," taymer ": hardware.millis ()}; agent.send ("gateStateChange", ma'lumotlar);}). onRelease (function () {// Röle bo'shatildi, eshik tinch holatda //server.log("Gate yopildi "); mahalliy ma'lumotlar = {"gatestate": 0, "taymer": apparat.millis ()}; agent.send ("gateStateChange", ma'lumotlar);}); gateOpenState.onPress (function () {// o'rni faollashtirilgan, eshik to'liq ochiq //server.log("Gate ochiq "); mahalliy ma'lumotlar = {" gatestate ": 2," taymer ": hardware.millis ()}; agent.send ("gateStateChange", ma'lumotlar);}). onRelease (function () {// Röle qo'yildi, eshik to'liq ochilmagan //server.log("Gate yopilmoqda "); mahalliy ma'lumotlar = {"gatestate": 3, "taymer": apparat.millis ()}; agent.send ("gateStateChange", ma'lumotlar);});
20 -qadam: PHP veb -xizmati
Men bu kodni CodeIgniter ramkasi uchun yozdim, chunki uni eski mavjud loyihaga qo'shdim. Nazoratchi va ko'rish kodi siz tanlagan doiraga osongina moslashtirilishi mumkin.
Oddiy bo'lish uchun men JSON ma'lumotlarini ma'lumotlarni saqlash uchun tekis faylga saqladim. Agar sizga jurnalni yozish yoki ma'lumotlar bilan bog'liq murakkabroq funktsiyalar kerak bo'lsa, ma'lumotlar bazasidan foydalaning.
Men yozgan va bu loyihada ishlatgan ajax kutubxonasini GitHub omboridan yuklab olish mumkin: ThingEngineer/Codeigniter-jQuery-Ajax
PHP boshqaruvchi kodi:
- ilova/tekshirgichlar/project.php
- Ma'lumotlar yo'lini PHP skriptingiz, ham joylashuvi, ham o'qish/yozish imtiyozlari bilan olishiga ishonch hosil qiling.
load-> yordamchi (qator ('fayl', 'sana'));
$ data = json_decode (read_file ('../ app/logs/gatestate.data'), TRUE); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Yopiq'; tanaffus; 1 -holat: $ view_data ['gatestate'] = 'Ochilmoqda…'; tanaffus; 2 -holat: $ view_data ['gatestate'] = 'Ochiq'; tanaffus; 3 -holat: $ view_data ['gatestate'] = 'Yopilmoqda…'; tanaffus; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ view_data ['last_opened'] = vaqt oralig'i ($ last_opened ['last_opened'], time ()). "oldin"; // Ko'rinishni yuklash $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } function save_gate_state () {$ this-> load-> helper ('file'); $ data = file_get_contents ('php: // input'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ data = json_decode ($ ma'lumotlar, TRUE); if ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} funktsiyasi get_gate_state () {$ this-> load-> yordamchi (qator ('fayl', 'sana')); $ this-> yuk-> kutubxona ('ajax'); $ data = json_decode (read_file ('../ app/logs/projects/gatestate.data'), TRUE); $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ data ['last_opened'] = vaqt oralig'i ($ last_opened ['last_opened'], time ()). "oldin"; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // json ma'lumotlarini yuboring, ajax so'rovini bajarmang}}/ * Fayl loyihalarining oxiri.php *// * Manzil:./application/controllers/projects.php */
PHP ko'rish kodi:
Men Bootstrap-ni old tomondan ishlatardim, chunki u tez, oson va sezgir. Siz uni bu yerdan yuklab olishingiz mumkin: https://getbootstrap.com (jQuery kiritilgan)
- ilova/tekshirgichlar/gate_view.php
- YOUR-AGENT-KODingizni Electric Imp agent kodingiz bilan almashtiring
IoT Gate Opperator Addon IoT Gate Opperator Addon
- Uy
- Admin
Darvoza qulfini ochish 30 minutga ochiladi. 8 soatga ochiladi. Endi yopiladi Darvoza holati: Oxirgi marta ochilgan $ (hujjat).ready (function () {resetStatus ();}) funktsiyasi sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("#open_gate"). bosing (function () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ ("#status"). matn ("Ochilish…");}); $ ("#latch30m_gate"). bosing (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}}; sendJSON (JSONout); $ ("#status"). matn ("Ochilish…");}); $ ("#latch8h_gate"). bosing (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#status"). matn ("Ochilish…");}); $ ("#close_gate"). bosing (function () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). matn ("Yopilmoqda…");}); function resetStatus () {// Target url var target = 'https://projects.ajillion.com/get_gate_state'; // Var data = {agent: 'app'} so'rovi; // Ajax post so'rovini yuborish $.ajax ({url: target, dataType: 'json', type: 'POST', ma'lumotlar: ma'lumotlar, muvaffaqiyat: funksiya (ma'lumotlar, textStatus, XMLHttpRequest) {switch (data.gatestate) {hol 0: $ ("#status"). Matn ("Yopiq"); tanaffus; 1 -holat: $ ("#holat"). Matn ('Ochilish…'); tanaffus; 2 -holat: $ ("#holat").text ('Ochiq'); tanaffus; 3 -holat: $ ("#holat"). matn ('Yopilmoqda…'); tanaffus; standart: $ ("#holat"). matn ('Xato');} $ ("#last_opened"). matn (data.last_opened);}, xato: funksiya (XMLHttpRequest, textStatus, errorThrown) {// Xato xabari $ ("#holat"). matn ('Server xatosi');}}); setTimeout (resetStatus, 3000); }