Obsah:
- Krok 1: Shromážděte součásti
- Krok 2: Spotřební materiál
- Krok 3: Zvětšete pouzdro
- Krok 4: Wire DC-DC Converter
- Krok 5: Připojte napájení k zařízením
- Krok 6: Vstupy modulu drátového relé
- Krok 7: IMP Power Jumper
- Krok 8: Vstupy stavu brány Wire
- Krok 9: Vytiskněte nebo zakupte pouzdro
- Krok 10: Ozdobte svůj případ
- Krok 11: Vyvrtejte otvor pro dráty
- Krok 12: Příprava a instalace připojovacích vodičů
- Krok 13: Propojte dráty pro připojení
- Krok 14: Namontujte součásti
- Krok 15: Utěsněte připojovací vodiče
- Krok 16: Zavřete případ
- Krok 17: Instalace v Gate Operator
- Krok 18: Nastavte režim Aux Relay
- Krok 19: IMP Agent a kód zařízení
- Krok 20: Webový kód PHP
Video: WebApp Controlled Gate Operator Add-on (IoT): 20 Steps (with Pictures)
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Mám klienta, který měl uzavřenou oblast, kam muselo přijít a odejít mnoho lidí. Nechtěli používat klávesnici zvenčí a měli jen omezený počet vysílačů ovladačů. Bylo obtížné najít cenově dostupný zdroj pro další ovladače. Říkal jsem si, že by byla skvělá příležitost upgradovat tento pohon brány Liftmaster tak, aby byl IoT kompatibilní s vlastním hardwarem, webovým API a rozhraním webové aplikace. To nejen vyřešilo problém s hromadným přístupem, ale také otevřelo další funkce!
Na poslední fotografii výše je testovací jednotka, kterou jsem nechal běžet téměř rok v tašce na ziplock. Myslel jsem, že je čas na upgrade!
Toto je plně funkční řešení se všemi zde uvedenými kódy, hardwarovými informacemi a návrhy.
Všechny soubory projektů jsou také hostovány na GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon
Zde je umístěn příklad rozhraní CodeIgniter WebApp: projects.ajillion.com/gate Tato instance není připojena k živé bráně, ale je přesným rozhraním a kódem, který běží na bráně (minus některé funkce zabezpečení).
--
Pro ještě větší integraci můžete použít knihovnu IFTTT pro Electric Imp.
Krok 1: Shromážděte součásti
- Budete potřebovat elektrický IMP s minimálně 4 dostupnými GPIO, já používám IMP001 s dubnovou odpočinkovou deskou.
- Regulátor pro snížení napětí zdroje až na 5V. Používám krokový modul převaděče DC-DC. Verze eBoot MP1584EN od Amazonu.
- Duální (nebo více) reléový modul nebo podobné spínací zařízení, které bude pracovat s výstupem IMP. Používám tento 4kanálový reléový modul JBtek DC 5V od Amazonu.
- 4vodičový šroubový terminál. Používám tento 5pcs 2 řádky 12P drátový konektor šroubovací svorkovnice 300V 20A od Amazonu.
Krok 2: Spotřební materiál
Budete také potřebovat:
- Přístup k 3D tiskárně nebo malému projektovému boxu
- 4 malé šrouby asi 4 mm x 6 mm pro víko pouzdra
- Propojovací drát
- Nůžky na drát
- Odstraňovače drátů
- Malé šroubováky
- Páječka
- Horké lepidlo nebo silikon
- Kravaty na zip
Krok 3: Zvětšete pouzdro
Rozvržením dílů určete, jaký případ velikosti budete potřebovat. S rozložením podle obrázku budu potřebovat pouzdro široké asi 140 mm, hluboké 70 mm a vysoké 30 mm.
Krok 4: Wire DC-DC Converter
Odřízněte 3 páry červeného a černého propojovacího vodiče pro připojení napájení dovnitř a ven z desky převodníku DC-DC.
- Vstup: 100 mm
- Výstup na IMP: 90 mm
- Výstup na reléový modul: 130 mm
Připájejte je k desce podle obrázku.
Krok 5: Připojte napájení k zařízením
- Připojte vstup měniče DC-DC ke dvěma bodům na šroubové svorkovnici.
- Pájejte krátké 5V výstupní vodiče k IMP.
- Připojte delší 5V výstupní vodiče k reléovému modulu.
Krok 6: Vstupy modulu drátového relé
- Odřízněte 4 x 90 mm vodiče pro vstupní připojení reléového modulu. Použil jsem 4 oddělené barvy pro snadnou orientaci později při kódování.
- Pájejte vodiče na vstupy reléových modulů 1-4 a poté na první 4 IMP GPIO body (Pin1, 2, 5 a 7).
Krok 7: IMP Power Jumper
Během počátečního programování a testování IMP bude možná nutné použít napájení USB. Až skončíte, přesuňte propojku napájení na stranu BAT.
Krok 8: Vstupy stavu brány Wire
- Odřízněte 2 x 80 mm dráty pro stavové vstupy.
- Připojte vodiče ke zbývajícím 2 šroubovým svorkám.
- Pájejte vodiče k místům IMP GPIO (Pin8 a 9).
Krok 9: Vytiskněte nebo zakupte pouzdro
Můj. STL nebo. F3D pro tento případ si můžete stáhnout na GitHub nebo Thingiverse
Pokud nemáte přístup k 3D tiskárně, bude fungovat malý obecný projektový případ.
Krok 10: Ozdobte svůj případ
Protože!
Vložil jsem na svůj odsazený text a jen jej vybarvil černým ostřím. Pokud se cítíte dobrodružně, můžete použít akrylovou barvu, lak na nehty nebo něco jiného, aby byl ještě hladší.
Krok 11: Vyvrtejte otvor pro dráty
Vyvrtejte malý otvor 10–15 mm na straně blízko středu místa, kde se všechny dráty spojí.
Použil jsem Unibit pro čistý, hladký otvor v plastu.
Krok 12: Příprava a instalace připojovacích vodičů
Odřízněte 9 x 5-600 mm dráty pro zavěšení našeho zařízení na desku pohonu brány.
- 2 pro 24V napájecí vstup
- 3 pro stav brány (2 vstupy a společná zem)
- 2 pro signál otevřené brány
- 2 pro signál zavření brány
Twist dohromady každou ze skupin uvedených výše pomocí vrtačky. Díky tomu bude vše snazší a bude vypadat lépe.
Odizolujte a připojte každý z vodičů k příslušným svorkám podle obrázku.
Krok 13: Propojte dráty pro připojení
Propojovací vodiče veďte otvorem podle obrázku.
Krok 14: Namontujte součásti
Umístěte a namontujte součásti pomocí malého korálku horkého lepidla nebo silikonu. Nepoužívejte příliš mnoho v případě, že potřebujete odebrat součást, použijte jen tolik, abyste je zajistili.
Původně jsem chtěl vytisknout pouzdro sponami/záložkami, aby desky držely na svém místě, ale potřeboval jsem to nainstalovat a neměl jsem čas. Bylo by hezké přidat klipy na desku do pouzdra.
Krok 15: Utěsněte připojovací vodiče
Zapojte připojovací vodiče horkým lepidlem nebo silikonem.
Krok 16: Zavřete případ
V seznamu tohoto 3D tištěného pouzdra jsem použil malé ~ 4 mm šrouby. Pokud vám dělá starosti špína nebo vlhkost, před uzavřením spoje víčka umístěte kolem silikonového nebo horkého lepidla.
Krok 17: Instalace v Gate Operator
Na hlavní desce:
- Připojte dva vodiče připojené k reléovému výstupu 1 ke svorce Open Gate. (na fotkách červená/hnědá)
- Zahákněte dva vodiče připojené k reléovému výstupu 2 ke svorce Close Gate. (na fotkách žlutá/modrá)
- Připojte dva vodiče připojené ke vstupu převodníku DC-DC k napájecím šroubovacím svorkám příslušenství 24 V (na fotografiích červená/černá)
Na rozšiřující desce
- Propojte společné šroubové svorky relé s malým kouskem drátu
- Připojte společnou zem k jedné ze společných šroubových svorek relé (na fotografiích zelená)
- Připojte 2 vstupy stavu brány (IMP Pin8 a 9) ke šroubovým svorkám normálně otevřeného relé (NO) (na fotkách šedá/žlutá)
Veďte dráty, zavažte je na zip, aby vypadaly úhledně, a najděte místo pro montáž nebo nastavení pouzdra.
V úložišti GitHub jsou hostovány další fotografie v plném rozlišení.
Krok 18: Nastavte režim Aux Relay
Nastavte spínače pomocných relé, jak je znázorněno na fotografii.
To poskytne IMP signály, které potřebuje k určení, zda se brána zavírá, otevírá, otevírá nebo zavírá.
Krok 19: IMP Agent a kód zařízení
Kód elektrického impaktního agenta:
- Vytvořte nový model v IDE Electric Imp:
- Nahraďte adresu URL tak, aby směřovala na váš server
// Funkce obsluhy
funkce 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); resp. odeslat (200, „OK“); }} catch (ex) {// Pokud došlo k chybě, odešlete ji zpět do odpovědi server.log ("chyba:" + ex); resp.odeslat (500, "Interní chyba serveru:" + ex); }} // Registrace obsluhy HTTP http.onrequest (httpHandler); // Funkce obslužné funkce GateStateChange funkce gateStateChangeHandler (data) {// URL na webovou službu místní url = "https://projects.ajillion.com/save_gate_state"; // Nastavit hlavičku Content-Type na místní hlavičky json = {"Content-Type": "application/json"}; // Zakódujte přijatá data a protokolujte místní tělo = http.jsonencode (data); server.log (tělo); // Odeslání dat do vaší webové služby http.post (URL, hlavičky, tělo).sendsync (); } // Registrace obslužného programu gateStateChange device.on ("gateStateChange", gateStateChangeHandler);
Kód elektrického impaktního agenta:
- Přiřaďte svému modelu zařízení Imp
- Ověřte, zda jsou hardwarové piny spojeny jako připojené
// Knihovna Debouce
#require "Button.class.nut: 1.2.0" // Alias pro gateOpen GPIO pin (aktivní low) gateOpen <- hardware.pin2; // Alias pro gateClose ovládání GPIO pin (aktivní low) gateClose <- hardware.pin7; // Nakonfigurujte 'gateOpen' na digitální výstup s počáteční hodnotou digital 1 (high) gateOpen.configure (DIGITAL_OUT, 1); // Nakonfigurujte 'gateClose' jako digitální výstup s počáteční hodnotou digital 1 (high) gateClose.configure (DIGITAL_OUT, 1); // Alias pro pin GPIO, který indikuje, že se brána pohybuje (N. O.) gateMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // Alias pro pin GPIO, který indikuje, že brána je plně otevřená (N. O.) gateOpenState <- Button (hardware.pin9, DIGITAL_IN_PULLUP); // Globální proměnná pro udržení stavu brány (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Objekt Latch Timer local latchTimer = null agent.on ("btn", function (data) {switch (data.cmd) {case "open": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Open command receive"); break case "latch30m": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log („příkaz Latch30m přijat“); případ přerušení „latch8h“: gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log („Příkaz Latch8h přijat“); případ přerušení „zavřít“: if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log („Příkaz Zavřít nyní přijat“); výchozí nastavení: server.log („Příkaz tlačítka nebyl rozpoznán“)}}); funkce releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timer uvolněn gateOpen switch contact "); } function releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Timer uvolněn gateClose spínač kontaktu "); } gateMovingState.onPress (funkce () {// Relé je aktivováno, brána se pohybuje //server.log("Gate is opening "); local data = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", data);}). onRelease (funkce () {// Relé je uvolněno, brána je v klidu //server.log("Gate is closed "); local data = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);}); gateOpenState.onPress (funkce () {// Relé je aktivováno, brána je plně otevřená //server.log("Gate is open "); local data = {" gatestate ": 2," timer ": hardware.millis ()}; agent.send ("gateStateChange", data);}). onRelease (funkce () {// Relé je uvolněno, brána není plně otevřená //server.log("Gate is closeing "); lokální data = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);});
Krok 20: Webový kód PHP
Tento kód jsem napsal pro framework CodeIgniter, protože jsem ho přidal do starého existujícího projektu. Řadič a zobrazovací kód lze snadno přizpůsobit rámci podle vašeho výběru.
Aby to bylo jednoduché, uložil jsem data JSON do plochého souboru pro ukládání dat. Pokud potřebujete protokolování nebo složitější funkce související s daty, použijte databázi.
Knihovnu ajax, kterou jsem napsal a použil v tomto projektu, lze stáhnout z úložiště GitHub: ThingEngineer/Codeigniter-jQuery-Ajax
Kód ovladače PHP:
- aplikace/řadiče/projects.php
- Zajistěte přístup k datové cestě pomocí skriptu PHP, umístění i oprávnění ke čtení/zápisu.
load-> helper (pole ('soubor', 'datum'));
$ data = json_decode (read_file ('../ app/logs/gatestate.data'), PRAVDA); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Zavřeno'; přestávka; případ 1: $ view_data ['gatestate'] = 'Otevírá se …'; přestávka; případ 2: $ view_data ['gatestate'] = 'Otevřít'; přestávka; případ 3: $ view_data ['gatestate'] = 'Zavírání …'; přestávka; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), PRAVDA); $ view_data ['last_opened'] = timespan ($ last_opened ['last_opened'], time ()). 'před'; // Načíst pohled $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } funkce save_gate_state () {$ this-> load-> helper ('file'); $ data = file_get_contents ('php: // vstup'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ data = json_decode ($ data, PRAVDA); if ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} funkce get_gate_state () {$ this-> load-> helper (pole ('soubor', 'datum')); $ 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'] = timespan ($ last_opened ['last_opened'], time ()). 'před'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // odeslat data json, nevynucovat požadavek ajax}}/ * Konec souboru projects.php *// * Umístění:./application/controllers/projects.php */
PHP Zobrazit kód:
Jako front-end jsem použil Bootstrap, protože je rychlý, snadný a citlivý. Můžete si jej stáhnout zde: https://getbootstrap.com (jQuery je součástí balení)
- aplikace/ovladače/gate_view.php
- Vyměňte SVŮJ KÓD AGENTA za kód svého agenta Electric Imp
Doplněk IoT Gate Opperator Addon IoT Gate Opperator Addon
- Domov
- Admin
Západka otevřené brány Otevřená 30 minut Západka otevřená 8 hodin Zavřít Nyní Stav brány: Poslední otevřená $ (document).ready (function () {resetStatus ();}) funkce sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("#open_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ („#status“). text („Otevírá se…“);}); $ ("#latch30m_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). text ("Otevírá se …");}); $ ("#latch8h_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#status"). text ("Otevírá se …");}); $ ("#close_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). text ("Zavírání …");}); funkce resetStatus () {// Target url var target = 'https://projects.ajillion.com/get_gate_state'; // Žádost var data = {agent: 'app'}; // Odeslat žádost o příspěvek ajax $.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 ('Opening …'); break; case 2: $ ("#status").text ('Open'); break; case 3: $ ("#status"). text ('Closing …'); break; default: $ ("#status"). text ('Error');} $ ("#last_opened"). text (data.last_opened);}, chyba: funkce (XMLHttpRequest, textStatus, errorThrown) {// Chybová zpráva $ ("#status"). text ('Chyba serveru');}}); setTimeout (resetStatus, 3000); }