Turinys:
- 1 žingsnis: Surinkite dalis
- 2 žingsnis: reikmenys
- 3 žingsnis: padidinkite dėklo dydį
- 4 žingsnis: vielos DC-DC keitiklis
- 5 veiksmas: prijunkite maitinimą prie įrenginių
- 6 žingsnis: vielos relės modulio įėjimai
- 7 žingsnis: „IMP Power Jumper“
- 8 veiksmas: vielos vartų būsenos įvestys
- 9 veiksmas: atspausdinkite arba nusipirkite dėklą
- 10 žingsnis: papuoškite savo dėklą
- 11 veiksmas: gręžkite skylę laidams
- 12 žingsnis: Paruoškite ir įdiekite prijungimo laidus
- 13 žingsnis: Maršruto prijungimo laidai
- 14 žingsnis: Sumontuokite komponentus
- 15 žingsnis: užsandarinkite sujungimo laidus
- 16 veiksmas: uždarykite dėklą
- 17 veiksmas: įdiekite vartų operatoriuje
- 18 veiksmas: nustatykite papildomo relės režimą
- 19 veiksmas: IMP agentas ir įrenginio kodas
- 20 veiksmas: žiniatinklio tarnybos PHP kodas
Video: „WebApp“valdomų vartų operatoriaus priedas (IoT): 20 žingsnių (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Turiu klientą, kuris turėjo uždarą zoną, kur daug žmonių turėjo ateiti ir išeiti. Jie nenorėjo naudoti klaviatūros išorėje ir turėjo tik ribotą skaičių pultelių siųstuvų. Buvo sunku rasti prieinamą šaltinį papildomiems raktams. Maniau, kad tai būtų puiki proga atnaujinti šį „Liftmaster“vartų operatorių, kad jis būtų suderinamas su daiktų internetu su pasirinkta aparatine įranga, žiniatinklio API ir žiniatinklio programų sąsaja. Tai ne tik išsprendė masinės prieigos problemą, bet ir atvėrė papildomų funkcijų!
Paskutinėje aukščiau esančioje nuotraukoje yra bandymo blokas, kurį beveik metus veikiau su užtrauktuku. Maniau, kad laikas atnaujinti!
Tai visiškai veikiantis sprendimas, turintis visą čia išvardytą kodą, aparatinės įrangos informaciją ir dizainą.
Visi projektų failai taip pat talpinami „GitHub“: github.com/ThingEngineer/IoT-Gate-Operator-Addon
„CodeIgniter WebApp“sąsajos pavyzdys priglobtas čia: project.ajillion.com/gate Šis egzempliorius nėra prijungtas prie tiesioginių vartų, bet yra tiksli sąsaja ir kodas, veikiantis prie vartų (atėmus kai kurias saugumo funkcijas).
--
Jei norite dar didesnės integracijos, galite naudoti IFTTT biblioteką „Electric Imp“.
1 žingsnis: Surinkite dalis
- Jums reikės „Electric IMP“su bent 4 GPIO, aš naudoju IMP001 su balandžio mėnesio pertraukimo lenta.
- Reguliatorius, kuris sumažina šaltinio įtampą iki 5 V. Aš naudoju DC-DC Buck Converter Step Down modulį. „eBoot“MP1584EN versija iš „Amazon“.
- Dvigubas (ar daugiau) relinis modulis arba panašus perjungimo įrenginys, kuris veiks su IMP išvestimi. Aš naudoju šį „JBtek 4 Channel DC 5V Relay Module“iš „Amazon“.
- 4 laidų varžtas. Aš naudoju šį „Amazon“5 vnt. 2 eilučių 12P vielos jungties varžto gnybtų barjerinį bloką 300V 20A.
2 žingsnis: reikmenys
Jums taip pat reikės:
- Prieiga prie 3D spausdintuvo arba mažos projekto dėžutės
- 4 maži varžtai apie 4 mm x 6 mm korpuso dangteliui
- Prijungimo viela
- Vielos pjaustytuvai
- Vielos nuėmikliai
- Maži atsuktuvai
- Lituoklis
- Karštas klijai arba silikonas
- Užsegami užtrauktukais
3 žingsnis: padidinkite dėklo dydį
Išdėstykite dalis, kad nustatytumėte, kokio dydžio dėklo jums reikės. Su išdėstymu, kaip parodyta paveikslėlyje, man reikės maždaug 140 mm pločio, 70 mm gylio ir 30 mm aukščio dėklo.
4 žingsnis: vielos DC-DC keitiklis
Iškirpkite 3 poras raudonos ir juodos prijungimo laido, kad galėtumėte prijungti ir išjungti DC-DC keitiklio plokštę.
- Įėjimas: 100 mm
- Išėjimas į IMP: 90 mm
- Išėjimas į relės modulį: 130 mm
Lituokite juos prie savo lentos, kaip parodyta.
5 veiksmas: prijunkite maitinimą prie įrenginių
- Prijunkite DC-DC keitiklio įvestį prie dviejų varžto gnybtų bloko taškų.
- Lituokite trumpus 5 V išėjimo laidus prie IMP.
- Lituokite ilgesnius 5 V išėjimo laidus prie relės modulio.
6 žingsnis: vielos relės modulio įėjimai
- Iškirpkite 4 x 90 mm laidus relės modulio įvesties jungtims. Koduodamas naudoju 4 atskiras spalvas, kad vėliau būtų lengviau rasti.
- Lituokite laidus prie relės modulio įėjimų 1-4, tada į pirmąsias 4 IMP GPIO vietas (atitinkamai 1, 2, 5 ir 7).
7 žingsnis: „IMP Power Jumper“
Kai iš pradžių programuojate ir bandote savo IMP, gali tekti naudoti USB maitinimą. Baigę būtinai perkelkite maitinimo jungiklį į GPGB pusę.
8 veiksmas: vielos vartų būsenos įvestys
- Nukirpkite 2 x 80 mm laidus, kad galėtumėte įvesti būsenos būseną.
- Prijunkite laidus prie likusių 2 varžtų gnybtų.
- Lituokite laidus prie IMP GPIO taškų (8 ir 9 kaiščiai).
9 veiksmas: atspausdinkite arba nusipirkite dėklą
Šiuo atveju galite atsisiųsti mano. STL arba. F3D iš „GitHub“arba „Thingiverse“
Jei neturite prieigos prie 3D spausdintuvo, veiks nedidelis bendras projekto dėklas.
10 žingsnis: papuoškite savo dėklą
Nes!
Aš įdėjau šiek tiek įdubusio teksto ir tiesiog nuspalvinau jį juodu aštriu. Jei jaučiatės nuotaikingai, galite naudoti akrilinius dažus, nagų laką ar ką nors kitą, kad jie net blizgėtų.
11 veiksmas: gręžkite skylę laidams
Išgręžkite nedidelę skylę 10-15 mm toje pusėje, kurioje yra visi laidai, viduryje.
Aš naudoju „Unibit“, kad plastikas būtų švarus ir lygus.
12 žingsnis: Paruoškite ir įdiekite prijungimo laidus
Iškirpkite 9 x 5-600 mm laidus, kad prijungtumėte mūsų prietaisą prie vartų valdymo plokštės.
- 2 24V maitinimo šaltiniui
- 3 vartų būsenai (2 įėjimai ir bendras pagrindas)
- 2 - atvirų vartų signalas
- 2 uždarymo vartų signalui
Naudodami grąžtą susukite kiekvieną iš aukščiau išvardytų grupių. Taip viskas bus lengviau ir atrodys geriau.
Išimkite ir prijunkite kiekvieną laidą prie atitinkamų gnybtų, kaip parodyta.
13 žingsnis: Maršruto prijungimo laidai
Prijunkite laidus per skylę, kaip parodyta.
14 žingsnis: Sumontuokite komponentus
Įdėkite ir pritvirtinkite komponentus nedideliu karšto klijų arba silikono karoliuku. Nenaudokite per daug, jei jums reikia pašalinti dalį, naudokite tik tiek, kad jas pritvirtintumėte.
Iš pradžių norėjau atspausdinti dėklą su spaustukais/skirtukais, kad plokštės laikytųsi vietoje, bet man reikėjo tai įdiegti ir neturėjau laiko. Pridėti lentos spaustukus prie savo dėklo būtų malonu.
15 žingsnis: užsandarinkite sujungimo laidus
Prijunkite laidus karštu klijais arba silikonu.
16 veiksmas: uždarykite dėklą
Šios 3D spausdintos dėžutės sąraše naudojau mažus ~ 4 mm varžtus. Jei nerimaujate dėl nešvarumų ar drėgmės, prieš uždarydami uždėkite silikono ar karštų klijų granulę aplink dangčio jungtį.
17 veiksmas: įdiekite vartų operatoriuje
Pagrindinėje plokštėje:
- Prijunkite du laidus, prijungtus prie 1 relės išvesties, prie „Open Gate“gnybto. (raudona/ruda nuotraukose)
- Prijunkite du laidus, prijungtus prie 2 relės išvesties, prie „Close Gate“gnybto. (nuotraukose geltona/mėlyna)
- Prijunkite du laidus, prijungtus prie nuolatinės srovės keitiklio įvesties, prie 24 V priedų maitinimo varžtų gnybtų (raudona/juoda nuotraukose)
Išplėtimo plokštėje
- Sujunkite relės bendrus varžtus su mažu vielos gabalu
- Prijunkite bendrą žemę prie vieno iš relės bendrų varžtų gnybtų (žalia nuotraukose)
- Prijunkite 2 vartų būsenos įvestis (IMP Pin8 ir 9) prie įprastai atidarytų (NO) relės varžtų gnybtų (pilka/geltona nuotraukose)
Išveskite laidus, užtraukite juos užtrauktuku, kad jie atrodytų tvarkingai, ir raskite vietą, kur pritvirtinti ar uždėti dėklą.
„GitHub“saugykloje yra papildomų visos raiškos nuotraukų.
18 veiksmas: nustatykite papildomo relės režimą
Nustatykite pagalbinius relės jungiklius, kaip parodyta nuotraukoje.
Tai suteiks IMP signalus, kurių reikia norint nustatyti, ar vartai uždaryti, atsidaryti, atidaryti ar uždaryti.
19 veiksmas: IMP agentas ir įrenginio kodas
„Electric Imp Agent“kodas:
- Sukurkite naują modelį „Electric Imp IDE“:
- Pakeiskite URL, kad nukreiptumėte į savo serverį
// HTTP tvarkyklės funkcija
funkcija httpHandler (req, resp) {try {local d = http.jsondecode (req.body); // serveris.log (d.c); if (d.c == "btn") {//server.log(d.val); device.send ("btn", d.val); arba atsiųsti (200, „Gerai“); }} catch (ex) {// Jei įvyko klaida, atsiųskite ją atgal į atsakymų serverį.log ("error:" + ex); resp.send (500, "Vidinė serverio klaida:" + ex); }} // Registruoti HTTP tvarkyklę http.onrequest (httpHandler); // GateStateChange tvarkyklės funkcijos funkcija gateStateChangeHandler (duomenys) {// URL į žiniatinklio paslaugą vietinis url = "https://projects.ajillion.com/save_gate_state"; // Nustatykite turinio tipo antraštę į json local headers = {"Content-Type": "application/json"}; // koduoti gautus duomenis ir registruoti vietinį kūną = http.jsonencode (duomenys); server.log (body); // Siųsti duomenis į savo žiniatinklio paslaugą http.post (url, headers, body).sendsync (); } // Registruoti gateStateChange tvarkyklę device.on ("gateStateChange", gateStateChangeHandler);
„Electric Imp Agent“kodas:
- Priskirkite „Imp“įrenginį savo modeliui
- Patikrinkite, ar aparatinės įrangos kaiščiai yra slapyvardžiai, kaip prijungti
// Debouce biblioteka
#require "Button.class.nut: 1.2.0" // „gateOpen“slapyvardis (aktyvus žemas) gateOpen <- hardware.pin2; // Vartų slapyvardisClose control GPIO pin (active low) gateClose <- hardware.pin7; // Konfigūruoti „gateOpen“kaip skaitmeninę išvestį, kurios pradinė vertė yra skaitmeninė 1 (aukšta) gateOpen.configure (DIGITAL_OUT, 1); // Konfigūruoti „gateClose“kaip skaitmeninę išvestį, kurios pradinė vertė yra skaitmeninė 1 (aukšta) gateClose.configure (DIGITAL_OUT, 1); // GPIO kaiščio slapyvardis, rodantis, kad vartai juda (N. O.) gateMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // GPIO kaiščio slapyvardis, rodantis, kad vartai yra visiškai atidaryti (N. O.) gateOpenState <- Button (hardware.pin9, DIGITAL_IN_PULLUP); // Visuotinis kintamasis vartų būsenai palaikyti (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Užrakto laikmačio objektas vietinis latchTimer = null agent.on ("btn", funkcija (duomenys) {jungiklis (duomenys.cmd) {atvejis "atviras": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Atidaryta komanda gauta"); pertrauka "latch30m": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Latch30m komanda gavo"); pertrauka "latch8h": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log ("gauta komanda" Latch8h ""); pertrauka "uždaryti": if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log („Gauta komanda uždaryti dabar“); break default: server.log („Mygtuko komanda neatpažinta“);}}); funkcija releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log(" Laikmatis išleido vartusAtidaryti jungiklio kontaktą "); } funkcija releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log(" Laikmatis išleido vartusUždaryti jungiklio kontaktą "); } gateMovingState.onPress (function () {// Relė suaktyvinta, vartai juda //server.log(" Vartai atsidaro "); vietiniai duomenys = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", duomenys);}). onRelease (function () {// Relė atleista, vartai ramybėje // serveris.log ("Vartai uždaryti"); vietiniai duomenys = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", duomenys);}); gateOpenState.onPress (function () {// Relė suaktyvinta, vartai visiškai atidaryti //server.log(" Vartai atidaryti "); vietiniai duomenys = {" gatestate ": 2," laikmatis ": hardware.millis ()); agent.send ("gateStateChange", duomenys);}). onRelease (function () {// Relė atleista, vartai nėra visiškai atidaryti // serveris.log ("Vartai uždaromi"); vietiniai duomenys = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", duomenys);});
20 veiksmas: žiniatinklio tarnybos PHP kodas
Aš parašiau šį kodą „CodeIgniter“sistemai, nes pridėjau jį prie seno esamo projekto. Valdiklį ir rodinio kodą galima lengvai pritaikyti pagal jūsų pasirinktą sistemą.
Kad viskas būtų paprasta, išsaugojau JSON duomenis į plokščią failą duomenims saugoti. Jei jums reikia registravimo ar sudėtingesnių duomenų funkcijų, naudokite duomenų bazę.
„Ajax“biblioteką, kurią parašiau ir naudojau šiame projekte, galima atsisiųsti iš „GitHub“saugyklos: „ThingEngineer“/„Codeigniter-jQuery-Ajax“
PHP valdiklio kodas:
- programa/valdikliai/projektai.php
- Įsitikinkite, kad duomenų kelias pasiekiamas naudojant jūsų PHP scenarijų, tiek buvimo vietą, tiek skaitymo/rašymo teises.
load-> helper (masyvas ('failas', 'data'));
$ data = json_decode (skaitymo_failas ('../ app/logs/gatestate.data'), TRUE); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Uždarytas'; pertrauka; 1 atvejis: $ view_data ['gatestate'] = 'Atidaromas …'; pertrauka; 2 atvejis: $ view_data ['gatestate'] = 'Atviras'; pertrauka; 3 atvejis: $ view_data ['gatestate'] = 'Uždaromas …'; pertrauka; } $ last_opened = json_decode (skaitymo_failas ('../ app/logs/project/gateopened.data'), TRUE); $ view_data ['last_opened'] = laiko tarpas ($ last_opened ['last_opened'], laikas ()). ' prieš'; // Įkelti rodinį $ t ['data'] = $ view_data; $ this-> apkrova-> rodinys ('gate_view', $ t); } function save_gate_state () {$ this-> load-> helper ('failas'); $ data = file_get_contents ('php: // įvestis'); write_file ('../ app/logs/project/gatestate.data', $ duomenys); $ data = json_decode ($ data, TRUE); if ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); write_file ('../ app/logs/project/gateopened.data', json_encode ($ last_opened)); }} function get_gate_state () {$ this-> load-> helper (masyvas ('failas', 'data')); $ this-> apkrova-> biblioteka ('ajax'); $ data = json_decode (skaitymo_failas ('../ app/logs/project/gatestate.data'), TRUE); $ last_opened = json_decode (skaitymo_failas ('../ app/logs/project/gateopened.data'), TRUE); $ data ['last_opened'] = laiko tarpas ($ last_opened ['last_opened'], laikas ()). ' prieš'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // siųskite „json“duomenis, nevykdykite „ajax“užklausos}}/ * Failo projektų pabaiga.php *// * Vieta:./application/controllers/projects.php */
PHP peržiūros kodas:
Priekinėje pusėje naudojau „Bootstrap“, nes tai greita, paprasta ir reaguoja. Ją galite atsisiųsti čia: https://getbootstrap.com (įtraukta „jQuery“)
- programa/valdikliai/gate_view.php
- Pakeiskite savo agento kodą savo „Electric Imp“agento kodu
„IoT Gate Opperator Addon“„IoT Gate Opperator Addon“
- Namai
- Administratorius
Atidaryti vartų skląstį Atidaryti 30 min. agent.electricimp.com/YOUR-AGENT-CODE “; $.post (url, JSONout); } $ ("#open_gate"). spustelėkite (funkcija () {var JSONout = '{"c": "btn", "val": {"cmd": "atidaryti"}}'; sendJSON (JSONout); $ ("#būsena"). text ("Atidaroma …");}); $ ("#latch30m_gate"). spustelėkite (funkcija () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#būsena"). text ("Atidaroma …");}); $ ("#latch8h_gate"). spustelėkite (funkcija () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#būsena"). text ("Atidaroma …");}); $ ("#close_gate"). spustelėkite (funkcija () {var JSONout = '{"c": "btn", "val": {"cmd": "uždaryti"}}'; sendJSON (JSONout); $ ("#būsena"). text ("Closing…");}); function resetStatus () {// Tikslinis url var target = 'https://projects.ajillion.com/get_gate_state'; // Užklausa var data = {agent: 'app'}; // Siųsti ajax įrašo užklausą $.ajax ({url: target, dataType: 'json', type: 'POST', data: data, success: function (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {case 0: $ ("#status"). Text ('Closed'); break; case 1: $ ("#status"). Text ('Open …'); break; case 2: $ ("#status").text ('Open'); break; case 3: $ ("#status"). text ('Closing…'); break; default; $ ("#status"). text ('Error');} $ ("#last_opened"). text (data.last_opened);}, error: function (XMLHttpRequest, textStatus, errorThrown) {// Klaidos pranešimas $ ("#status"). text ('Serverio klaida';}}); setTimeout (resetStatus, 3000); }
Rekomenduojamas:
Namų automatizavimas su infraraudonųjų spindulių ir „Bluetooth“valdomu relės moduliu: 10 žingsnių
Namų automatizavimas naudojant infraraudonųjų spindulių ir „Bluetooth“valdomą relės modulį: Šiame namų automatizavimo projekte parodžiau, kaip galime valdyti šviesą, ventiliatorių ir kitus buitinius prietaisus iš savo išmaniojo telefono programos ir IR nuotolinio valdymo pulto, naudodami „Arduino“valdymo relės modulio grandinę. Ši „Arduino“valdoma išmanioji relė grandinė turi du režimus, Inf
„Thrustmaster Warthog“vairasvirtės priedas: 5 žingsniai (su paveikslėliais)
„Thrustmaster Warthog Joystick Addon“: Sveiki, prašau, būkite švelnus man .. tai yra mano pirmas pamokomas dalykas. Man reikėjo dar kelių mygtukų ir ašių ant mano " warthog " vairasvirtė, skirta žaisti elitui pavojingai. nėra smagu keistis tarp vairasvirtės ir klaviatūros naudojant " plyšį " ant tavęs jis
Slėgio jutiklio kojinių priedas: 18 žingsnių (su nuotraukomis)
Slėgio jutimo kojinių priedas: renkantis pasirinktinius ortopedus, nėra daug patikimų testavimo variantų, kurie galėtų padėti jums nuspręsti, kokio tipo įdėklas geriausiai tinka jūsų kojų poreikiams. Ir egzistuojančios galimybės beveik visada specialiai išbando imb
Aplinkos jutiklių sistemos priedas UAV: 18 žingsnių
Aplinkos jutiklių sistemos priedas UAV: Šios instrukcijos tikslas yra aprašyti, kaip sukurti, pritvirtinti ir valdyti „Integrated Solutions Technology“aplinkos jutiklių sistemą kartu su „DJI Phantom 4“dronu. Šie jutiklių paketai naudoja droną, norėdami perduoti
Kišeninio operatoriaus „Lasercut“dėklas: 3 žingsniai (su nuotraukomis)
Kišeninio operatoriaus „Lasercut“dėklas: „Teenage Engineering“su būsimų naujų kišeninių operatorių PO-33 ir PO-35 hipoteze nusprendžiau, kad atėjo laikas pasidalinti savo paprastu " dėklu " kurį padariau savo PO-20. Tai tikrai paprasta. Tiesą sakant, taip paprasta, kad spaudoje ji laikoma