Cuprins:
- Pasul 1: Adunați piesele
- Pasul 2: consumabile
- Pasul 3: Măriți carcasa
- Pasul 4: Convertor cablu DC-DC
- Pasul 5: Alimentarea prin cablu a dispozitivelor
- Pasul 6: Intrări modul modul releu fir
- Pasul 7: IMP Power Jumper
- Pasul 8: Intrări de stare Wire Gate
- Pasul 9: tipăriți sau cumpărați o carcasă
- Pasul 10: Decorează-ți carcasa
- Pasul 11: Găuri pentru fire
- Pasul 12: Pregătiți și instalați fire de conectare
- Pasul 13: Trageți firele de conectare
- Pasul 14: Montați componentele
- Pasul 15: Etanșați firele de conectare
- Pasul 16: Închideți carcasa
- Pasul 17: Instalați în Gate Operator
- Pasul 18: Setați modul releu auxiliar
- Pasul 19: Codul IMP Agent și dispozitiv
- Pasul 20: Cod PHP pentru servicii web
Video: Supliment Web Operator Gate Controlled Gate (IoT): 20 de pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Am un client care avea o zonă închisă unde mulți oameni aveau nevoie să vină și să plece. Nu au vrut să utilizeze o tastatură la exterior și au avut doar un număr limitat de emițătoare keyfob. Găsirea unei surse accesibile pentru keybob-uri suplimentare a fost dificilă. M-am gândit că ar fi o mare oportunitate de a actualiza acest operator de poartă Liftmaster pentru a fi compatibil IoT cu hardware personalizat, API web și interfața aplicației web. Acest lucru nu numai că a rezolvat problema accesului în masă, ci a deschis și funcționalități suplimentare!
În ultima fotografie de mai sus este unitatea de testare pe care am rulat-o aproape un an într-o geantă cu ziplock. Am crezut că este timpul pentru un upgrade!
Aceasta este o soluție pe deplin funcțională, cu toate codurile, informațiile hardware și proiectele enumerate aici.
Toate fișierele proiectelor sunt găzduite și pe GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon
Un exemplu de interfață CodeIgniter WebApp este găzduit aici: projects.ajillion.com/gate Această instanță nu este conectată la o poartă live, ci este interfața exactă și codul care rulează pe porți (minus unele caracteristici de securitate).
--
Pentru o integrare și mai mare, puteți utiliza biblioteca IFTTT pentru Electric Imp.
Pasul 1: Adunați piesele
- Veți avea nevoie de un IMP electric cu cel puțin 4 GPIO-uri disponibile, eu folosesc IMP001 cu o placă de aprilie.
- Un regulator pentru a scădea tensiunea sursei până la 5V. Folosesc un modul DC-DC Buck Converter Step Down. Versiunea MP1584EN eBoot de la Amazon.
- Un modul de releu dual (sau mai multe) sau un dispozitiv de comutare similar care va funcționa cu ieșirea IMP-uri. Folosesc acest modul de releu JBtek 4 canale DC 5V de la Amazon.
- Un terminal cu șurub cu 4 fire. O folosesc pe aceasta 5Pcs 2 Rânduri 12P Sârmă Conector Șurub Terminal Bară Bloc 300V 20A de la Amazon.
Pasul 2: consumabile
De asemenea, veți avea nevoie de:
- Acces la o imprimantă 3D sau la o cutie mică de proiect
- 4 șuruburi mici de aproximativ 4mm x 6mm pentru capacul carcasei
- Sârmă de conectare
- Freze de sârmă
- Decapanti de sârmă
- Șurubelnițe mici
- Ciocan de lipit
- Lipici fierbinte sau silicon
- Cravate cu fermoar
Pasul 3: Măriți carcasa
Așezați-vă piesele pentru a determina ce dimensiune aveți nevoie. Cu un aspect așa cum este ilustrat, voi avea nevoie de o carcasă care are aproximativ 140 mm lățime, 70 mm adâncime și 30 mm înălțime.
Pasul 4: Convertor cablu DC-DC
Tăiați 3 perechi de sârmă de conectare roșie și neagră pentru conexiunile de alimentare în și din placa convertorului DC-DC.
- Intrare: 100mm
- Iesire la IMP: 90mm
- Ieșire la modulul de releu: 130 mm
Lipiți-le pe tablă, așa cum se arată.
Pasul 5: Alimentarea prin cablu a dispozitivelor
- Conectați intrarea convertorului DC-DC la două dintre punctele de pe blocul de borne cu șurub.
- Lipiți cablurile scurte de ieșire de 5V către IMP.
- Lipiți cele mai lungi fire de ieșire de 5V către modulul de releu.
Pasul 6: Intrări modul modul releu fir
- Tăiați fire de 4 x 90 mm pentru conexiunile de intrare ale modulului releu. Am folosit 4 culori separate pentru o referință ușoară mai târziu în timp ce codificați.
- Lipiți firele la intrările modulului releu 1-4, apoi la primele 4 spoturi IMP GPIO (Pin1, 2, 5 și respectiv 7).
Pasul 7: IMP Power Jumper
Este posibil să fie necesar să utilizați alimentarea USB în timp ce programați și testați IMP-ul inițial. Când terminați, asigurați-vă că mutați jumperul de putere în partea BAT.
Pasul 8: Intrări de stare Wire Gate
- Tăiați 2 fire de 80 mm pentru intrările de stare a stării.
- Conectați firele la restul de 2 borne cu șurub.
- Sârmă de lipit la următorul spot IMP GPIO (Pin8 și respectiv 9).
Pasul 9: tipăriți sau cumpărați o carcasă
Puteți descărca fișierele. STL sau. F3D pentru acest caz pe GitHub sau Thingiverse
Dacă nu aveți acces la o imprimantă 3D, va funcționa un mic caz de proiectare generic.
Pasul 10: Decorează-ți carcasa
Pentru că!
Am pus niște text indentat pe al meu și tocmai l-am colorat cu un sharpie negru. Dacă vă simțiți aventuros, ați putea folosi vopsea acrilică, ojă de unghii sau altceva pentru a o face și mai strălucitoare.
Pasul 11: Găuri pentru fire
Găuriți o gaură mică de 10-15 mm pe partea din apropierea mijlocului de unde toate firele se vor uni.
Am folosit un Unibit pentru o gaură curată și netedă din plastic.
Pasul 12: Pregătiți și instalați fire de conectare
Tăiați sârme de 9 x 5-600 mm pentru conectarea dispozitivului nostru la placa operatorului de poartă.
- 2 pentru intrarea de alimentare de 24V
- 3 pentru starea porții (2 intrări și un teren comun)
- 2 pentru semnalul porții deschise
- 2 pentru semnalul de poartă de închidere
Răsuciți împreună fiecare dintre grupurile enumerate mai sus folosind un burghiu. Acest lucru va face totul mai ușor și va arăta mai bine.
Îndepărtați și conectați fiecare dintre fire la bornele respective așa cum se arată.
Pasul 13: Trageți firele de conectare
Treceți firele de conectare prin gaură așa cum se arată.
Pasul 14: Montați componentele
Așezați și montați componentele cu o mică margele de adeziv fierbinte sau silicon. Nu utilizați prea mult în cazul în care trebuie să eliminați o piesă, utilizați doar suficient pentru a le asigura.
Inițial am vrut să imprim carcasa cu cleme / file pentru a menține plăcile în loc, dar trebuia să instalez acest lucru și nu aveam timp. Adăugarea de cleme de bord la carcasa dvs. ar fi o atingere plăcută.
Pasul 15: Etanșați firele de conectare
Sigilați firele de conectare cu adeziv fierbinte sau silicon.
Pasul 16: Închideți carcasa
Am folosit șuruburi mici de ~ 4mm pe lista acestei huse imprimate 3D. Dacă sunteți îngrijorat de murdărie sau umezeală, puneți o margele de silicon sau lipici fierbinte în jurul articulației capacului înainte de a o închide.
Pasul 17: Instalați în Gate Operator
Pe tabloul principal:
- Cârligați cele două fire conectate la ieșirea 1 a releului la terminalul Open Gate. (roșu / maro în fotografii)
- Cârligați cele două fire conectate la ieșirea 2 a releului la terminalul Close Gate. (galben / albastru în fotografii)
- Cârligați cele două fire conectate la intrarea convertorului DC-DC la bornele cu șurub de alimentare accesoriu de 24V (roșu / negru în fotografii)
Pe placa de expansiune
- Sariți bornele comune cu șurub ale releului împreună cu o bucată mică de sârmă
- Conectați pământul comun la unul dintre bornele cu șurub comune ale releului (verde în fotografii)
- Conectați cele 2 intrări de stare a porții (IMP Pin8 & 9) la bornele cu șurub cu releu normal deschis (NU) (gri / galben în fotografii)
Direcționați firele, legați-le cu fermoar pentru a arăta îngrijite și găsiți un loc unde să vă montați sau să vă setați carcasa.
Există fotografii suplimentare, cu rezoluție completă, găzduite în depozitul GitHub.
Pasul 18: Setați modul releu auxiliar
Setați comutatoarele releului auxiliar așa cum se arată în fotografie.
Acest lucru va oferi IMP semnalele de care are nevoie pentru a determina dacă poarta este închisă, deschizându-se, deschisă sau închisă.
Pasul 19: Codul IMP Agent și dispozitiv
Cod agent agent electric imp:
- Creați un model nou în ID-ul Electric Imp:
- Înlocuiți adresa URL pentru a indica serverul
// Funcția de gestionare
funcția httpHandler (req, resp) {try {local d = http.jsondecode (req.body); //server.log(d.c); if (d.c == "btn") {//server.log(d.val); device.send ("btn", d.val); trimitere resp. (200, „OK”); }} catch (ex) {// Dacă a apărut o eroare, trimiteți-o înapoi în server.log de răspuns ("error:" + ex); resp.send (500, "Eroare internă a serverului:" + ex); }} // Înregistrați gestionarul HTTP http.onrequest (httpHandler); // GateStateChange handler function function function gateStateChangeHandler (data) {// URL to web service local url = "https://projects.ajillion.com/save_gate_state"; // Setați Content-Type header la json local headers = {"Content-Type": "application / json"}; // Codificați datele primite și jurnalizați corpul local = http.jsonencode (date); server.log (corp); // Trimiteți datele către serviciul dvs. web http.post (url, anteturi, corp).sendsync (); } // Înregistrează dispozitivul de gestionare gateStateChange ("gateStateChange", gateStateChangeHandler);
Cod agent electric imp:
- Atribuiți un dispozitiv Imp modelului dvs.
- Verificați pinii hardware sunt Aliased ca conectați
// Biblioteca Debouce
#require "Button.class.nut: 1.2.0" // Alias pentru gateOpen GPIO pin (activ low) gateOpen <- hardware.pin2; // Alias pentru gateClose control GPIO pin (activ scăzut) gateClose <- hardware.pin7; // Configurați „gateOpen” pentru a fi o ieșire digitală cu o valoare de pornire digitală 1 (mare) gateOpen.configure (DIGITAL_OUT, 1); // Configurați „gateClose” pentru a fi o ieșire digitală cu o valoare inițială de 1 digitală (mare) gateClose.configure (DIGITAL_OUT, 1); // Alias pentru pinul GPIO care indică poarta în mișcare (N. O.) gateMovingState <- Buton (hardware.pin8, DIGITAL_IN_PULLUP); // Alias pentru pinul GPIO care indică faptul că poarta este complet deschisă (N. O.) gateOpenState <- Buton (hardware.pin9, DIGITAL_IN_PULLUP); // Variabilă globală pentru a menține starea porții (Deschis = 1 / Închis = 0) local lastGateOpenState = 0; // Latch Timer obiect local latchTimer = agent nul.on ("btn", funcție (date) {switch (data.cmd) {case "open": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Deschidere comandă primită"); break case "latch30m": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Latch30m comandă recepționată"); break case "latch8h": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log ("Comanda Latch8h primită"); break case "close": if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1);.wakeup (1, releaseClose); server.log („Închideți acum comanda primită”); break implicit: server.log („Comanda buton nu este recunoscută”);}}); funcție releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timer a lansat contactul gateOpen switch "); } funcție releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Timer a lansat gateClose contact contact "); } gateMovingState.onPress (function () {// Releul este activat, poarta se mută //server.log("Gate is opening "); local data = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", date);}). onRelease (funcția () {// Releul este eliberat, poarta este în repaus //server.log("Gate is closed "); local data = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", date);}); gateOpenState.onPress (function () {// Releul este activat, poarta este complet deschisă //server.log("Gate is open "); local data = {" gatestate ": 2," timer ": hardware.millis ()}; agent.send ("gateStateChange", date);}). onRelease (funcție () {// Releul este eliberat, poarta nu este complet deschisă //server.log("Gate se închide "); date locale = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);});
Pasul 20: Cod PHP pentru servicii web
Am scris acest cod pentru cadrul CodeIgniter deoarece l-am adăugat la un proiect vechi existent. Controlerul și codul de vizualizare pot fi ușor adaptate la cadrul ales de dvs.
Pentru a simplifica lucrurile, am salvat datele JSON într-un fișier plat pentru stocarea datelor. Dacă aveți nevoie de înregistrare sau funcții legate de date mai complexe, utilizați o bază de date.
Biblioteca ajax pe care am scris-o și am folosit-o în acest proiect se poate descărca din depozitul GitHub: ThingEngineer / Codeigniter-jQuery-Ajax
Cod controler PHP:
- app / controllers / projects.php
- Asigurați-vă că calea de date este accesibilă de scriptul dvs. PHP, atât de privilegii de locație, cât și de citire / scriere.
load-> helper (matrice („fișier”, „dată”));
$ data = json_decode (read_file ('../ app / logs / gatestate.data'), TRUE); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Închis'; pauză; caz 1: $ view_data ['gatestate'] = 'Deschidere …'; pauză; caz 2: $ view_data ['gatestate'] = 'Deschis'; pauză; caz 3: $ view_data ['gatestate'] = 'Închidere …'; pauză; } $ last_opened = json_decode (read_file ('../ app / logs / projects / gateopened.data'), TRUE); $ view_data ['last_opened'] = interval de timp ($ last_opened ['last_opened'], time ()). ' în urmă'; // Încărcați vizualizarea $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } funcție save_gate_state () {$ this-> load-> helper ('fișier'); $ data = file_get_contents ('php: // input'); write_file ('../ app / logs / projects / gatestate.data', $ data); $ data = json_decode ($ data, TRUE); if ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); write_file ('../ app / logs / projects / gateopened.data', json_encode ($ last_opened)); }} funcție get_gate_state () {$ this-> load-> helper (matrice ('fișier', 'dată')); $ this-> load-> library ('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'] = interval de timp ($ last_opened ['last_opened'], time ()). ' în urmă'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // trimiteți date json, nu aplicați cererea ajax}} / * Sfârșitul proiectului fișier.php * / / * Locație:./application/controllers/projects.php * /
Cod vizualizare PHP:
Am folosit Bootstrap pentru front-end pentru că este rapid, ușor și receptiv. Puteți să-l descărcați aici: https://getbootstrap.com (jQuery este inclus)
- app / controllers / gate_view.php
- Înlocuiți CODUL-AGENTUL DVS. cu codul agentului Electric Imp
IoT Gate Opperator Addon IoT Gate Opperator Addon
- Acasă
- Administrator
Deschideți poarta Deschideți timp de 30 de minute Deschideți timp de 8 ore Închideți acum Stare poartă: Ultima deschidere $ (document). Ready (funcție () {resetStatus ();}) funcție sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("# open_gate"). click (function () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ ("#status"). text ("Deschiderea …");}); $ ("# latch30m_gate"). click (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). text ("Deschiderea …");}); $ ("# latch8h_gate"). click (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#status"). text ("Deschiderea …");}); $ ("# close_gate"). click (function () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). text ("Închidere …");}); funcție resetStatus () {// URL țintă var target = 'https://projects.ajillion.com/get_gate_state'; // Solicitare var date = {agent: 'app'}; // Trimiteți o cerere de postare ajax $.ajax ({url: target, dataType: 'json', tip: 'POST', date: date, succes: funcție (date, textStatus, XMLHttpRequest) {switch (data.gatestate) {case 0: $ ("# status"). Text ('Închis'); break; caz 1: $ ("# status"). Text ('Opening …'); break; case 2: $ ("# status").text („Deschis”); pauză; caz 3: $ („# stare”). text („Închidere …”); pauză; implicit: $ („# stare”). text („Eroare”);} $ ("#last_opened"). text (data.last_opened);}, eroare: funcție (XMLHttpRequest, textStatus, errorThrown) {// Mesaj de eroare $ ("# status"). text ('Server Error');}}); setTimeout (resetStatus, 3000); }
Recomandat:
Reutilizați un modul de cameră Web HP WebCam 101 Aka 679257-330 ca o cameră Web USB generică: 5 pași
Reutilizați un modul de cameră Web HP WebCam 101 Aka 679257-330 ca o cameră web USB generică: vreau să condimentez Panasonic CF-18 de 14 ani cu o cameră web nouă, dar Panasonic nu mai suportă această mașină minunată, așa că trebuie să folosiți materia cenușie pentru ceva mai ușor decât b & b (beri și burgeri). Aceasta este prima parte
Ceas de animație SMART LED conectat la web cu panou de control bazat pe web, Time Server sincronizat: 11 pași (cu imagini)
Ceas de animație SMART LED conectat la web cu panou de control bazat pe web, sincronizat cu serverul de timp: povestea acestui ceas se întoarce mult - mai bine de 30 de ani. Tatăl meu a fost pionierul acestei idei când aveam doar 10 ani, cu mult înainte de revoluția LED-urilor - când LED-urile erau 1/1000 luminozitatea strălucirii lor orbitoare actuale. Un adevar
Web Driver IO Tutorial Utilizarea unui site Web live și exemple de lucru: 8 pași
Web Driver IO Tutorial Utilizarea unui site Web live și exemple de lucru: Web Driver IO Tutorial Utilizarea unui site Web live și exemple de lucru Ultima actualizare: 26.07.2015 (Verificați din nou, deoarece actualizez aceste instructabile cu mai multe detalii și exemple) Context Am avut recent o provocare interesantă care mi-a fost prezentată. Aveam nevoie să
Carcasă Lasercut pentru operator de buzunar: 3 pași (cu imagini)
Cazul Lasercut pentru operatorul de buzunar: Cu hype pentru viitoarele noi operatori de buzunar PO-33 și PO-35 de către Teenage Engineering, am decis că este timpul să împărtășesc „carcasa” mea simplă pe care l-am făcut pentru PO-20. Este foarte simplu. De fapt, atât de simplu, încât este ținut în loc de presă
Gate Mate: 10 pași (cu imagini)
Gate Mate: Gate Mate vă poate opera poarta sau garajul folosind comenzi vocale sau automat cu geofencing sau prin simpla apăsare a unui buton. Gate Mate este format din două componente majore, aplicația și hardware-ul. Hardware-ul este două microcontrolere ESP8266 și