Indholdsfortegnelse:
- Trin 1: Saml delene
- Trin 2: Forbrugsvarer
- Trin 3: Størrelse af sagen
- Trin 4: Wire DC-DC-konverter
- Trin 5: Tilslut strøm til enheder
- Trin 6: Wire Relay Module Inputs
- Trin 7: IMP Power Jumper
- Trin 8: Wire Gate -statusindgange
- Trin 9: Udskriv eller køb en sag
- Trin 10: Dekorer din sag
- Trin 11: Bor hul til ledninger
- Trin 12: Forbered og installer tilslutningskabler
- Trin 13: Rutetilslutningstråde
- Trin 14: Monter komponenter
- Trin 15: Forsegl tilslutningstråde
- Trin 16: Luk sagen
- Trin 17: Installer i Gate Operator
- Trin 18: Indstil Aux Relay Mode
- Trin 19: IMP -agent og enhedskode
- Trin 20: Web Service PHP -kode
Video: WebApp Controlled Gate Operator Add-on (IoT): 20 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Jeg har en klient, der havde et lukket område, hvor mange mennesker skulle komme og gå. De ville ikke bruge et tastatur på ydersiden og havde kun et begrænset antal fjernbetjeningssendere. Det var svært at finde en overkommelig kilde til yderligere fjernbetjeninger. Jeg tænkte, at det ville være en fantastisk mulighed for at opgradere denne Liftmaster gate -operatør til at være IoT -kompatibel med brugerdefineret hardware, web -API og webapp -grænseflade. Dette løste ikke kun masseadgangsproblemet, det åbnede også ekstra funktionalitet!
På det sidste foto ovenfor er den testenhed, som jeg havde kørt i næsten et år i en lynlåspose. Jeg troede, det var tid til en opgradering!
Dette er en fuldt fungerende løsning med al den kode, hardwareinformation og design, der er angivet her.
Alle projektfilerne er også hostet på GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon
Et eksempel på CodeIgniter WebApp -grænsefladen er hostet her: projects.ajillion.com/gate Denne forekomst er ikke forbundet til en live gate, men er den nøjagtige grænseflade og kode, der kører på portene (minus nogle sikkerhedsfunktioner).
--
For endnu større integration kan du bruge IFTTT -biblioteket til Electric Imp.
Trin 1: Saml delene
- Du skal bruge en elektrisk IMP med mindst 4 GPIO'er til rådighed, jeg bruger IMP001 med et april -breakout -kort.
- En regulator til at sænke kildespændingen til 5V. Jeg bruger et DC-DC Buck Converter Step Down-modul. eBoot's MP1584EN -version fra Amazon.
- Et dobbelt (eller flere) relæmodul eller lignende koblingsenhed, der fungerer med IMP -udgangen. Jeg bruger dette ene JBtek 4 -kanals DC 5V relæmodul fra Amazon.
- En 4 -leder skrueterminal. Jeg bruger denne 5Pcs 2 Rows 12P Wire Connector Screw Terminal Barrier Block 300V 20A fra Amazon.
Trin 2: Forbrugsvarer
Du skal også bruge:
- Adgang til en 3D -printer eller en lille projektboks
- 4 små skruer ca. 4 mm x 6 mm til kabinettets låg
- Tilslutningstråd
- Trådskærere
- Wire strippere
- Små skruetrækkere
- Loddekolbe
- Varm lim eller silikone
- Lynlåse
Trin 3: Størrelse af sagen
Layout dine dele for at afgøre, hvilken størrelse sag du skal bruge. Med et layout som afbildet skal jeg bruge en kasse, der er omkring 140 mm bred, 70 mm dyb og 30 mm høj.
Trin 4: Wire DC-DC-konverter
Skær 3 par røde og sorte tilslutningskabler til strømforbindelser ind og ud af DC-DC-omformerkortet.
- Indgang: 100 mm
- Output til IMP: 90 mm
- Udgang til relæmodul: 130 mm
Lod dem til dit bræt som vist.
Trin 5: Tilslut strøm til enheder
- Tilslut DC-DC-omformerens indgang til to af punkterne på skrueklemmen.
- Lod de korte 5V udgangstråde til IMP.
- Lod de længere 5V udgangstråde til relæmodulet.
Trin 6: Wire Relay Module Inputs
- Klip 4 x 90 mm ledninger til relæmodulets inputforbindelser. Jeg brugte 4 separate farver til let reference senere under kodning.
- Lod lodningerne til relæmodulets input 1-4 derefter til de første 4 IMP GPIO-punkter (henholdsvis Pin1, 2, 5 og 7).
Trin 7: IMP Power Jumper
Du skal muligvis bruge USB -strøm, mens du i første omgang programmerer og tester din IMP. Når du er færdig, skal du flytte power -jumperen til BAT -siden.
Trin 8: Wire Gate -statusindgange
- Klip 2 x 80 mm ledninger til statusindgangene.
- Tilslut ledninger til de resterende 2 skrueterminaler.
- Lodde ledninger til den næste til henholdsvis IMP GPIO spots (Pin8 & 9).
Trin 9: Udskriv eller køb en sag
Du kan downloade min. STL eller. F3D til denne sag på GitHub eller Thingiverse
Hvis du ikke har adgang til en 3D -printer, fungerer en lille generisk projektkasse.
Trin 10: Dekorer din sag
Fordi!
Jeg lagde lidt indrykket tekst på min og farvede den bare med en sort skarp. Hvis du føler dig eventyrlysten, kan du bruge akrylmaling, neglelak eller noget andet for at gøre det endnu glattere.
Trin 11: Bor hul til ledninger
Bor et lille hul 10-15 mm på siden nær midten af hvor alle ledninger kommer sammen.
Jeg brugte en Unibit til et rent, glat hul i plasten.
Trin 12: Forbered og installer tilslutningskabler
Klip 9 x 5-600 mm ledninger til tilslutning af vores enhed til portens operatørkort.
- 2 til 24V effektindgang
- 3 til portstatus (2 indgange og fælles grund)
- 2 for signalet om åben port
- 2 for signalet om lukkeport
Vrid hver af grupperne ovenfor sammen ved hjælp af en boremaskine. Dette vil gøre alt lettere og se bedre ud.
Strip og tilslut hver af ledningerne til de respektive terminaler som vist.
Trin 13: Rutetilslutningstråde
Før tilslutningstrådene gennem hullet som vist.
Trin 14: Monter komponenter
Placer og monter komponenterne med en lille perle varm lim eller silikone. Brug ikke for meget, hvis du skal fjerne en del. Brug lige nok til at sikre dem.
Jeg ville oprindeligt udskrive sagen med clips/faner for at holde brædderne på plads, men jeg havde brug for at få dette installeret og havde ikke tid. Tilføjelse af brætklip til din sag ville være et godt strejf.
Trin 15: Forsegl tilslutningstråde
Forsegl tilslutningstrådene med varm lim eller silikone.
Trin 16: Luk sagen
Jeg brugte små ~ 4 mm skruer på listen over denne 3D -trykte sag. Hvis du er bekymret for snavs eller fugt, skal du placere en perle af silikone eller varm lim rundt om låget, før du lukker det op.
Trin 17: Installer i Gate Operator
På hovedtavlen:
- Hægt de to ledninger tilsluttet relæudgang 1 til Open Gate -terminalen. (rød/brun på fotos)
- Hægt de to ledninger tilsluttet relæudgang 2 til Close Gate -terminalen. (gul/blå på fotos)
- Tilslut de to ledninger, der er forbundet til DC-DC-konverterindgangen til 24V-tilbehørsklemmerne (rød/sort på fotos)
På udvidelseskortet
- Jumper relæets almindelige skrueterminaler sammen med et lille stykke ledning
- Tilslut den fælles jord til en af relæets fælles skrueterminaler (grøn på fotos)
- Tilslut de 2 portstatusindgange (IMP Pin8 & 9) til relæets normale åbne (NO) skrueterminaler (grå/gul på fotos)
Før ledningerne, lynlås dem for at se pæne ud og find et sted at montere eller indstille din sag.
Der er yderligere fotos i fuld opløsning, der er hostet på GitHub -depotet.
Trin 18: Indstil Aux Relay Mode
Indstil hjælpe -relækontakterne som vist på billedet.
Dette vil give IMP de signaler, den har brug for for at afgøre, om porten er lukket, åbner, åbner eller lukker.
Trin 19: IMP -agent og enhedskode
Kode til elektrisk imp -agent:
- Opret en ny model i Electric Imp IDE:
- Erstat URL for at pege på din server
// HTTP -handler -funktion
funktion httpHandler (req, resp) {try {local d = http.jsondecode (req.body); //server.log(d.c); hvis (d.c == "btn") {//server.log(d.val); device.send ("btn", d.val); resp.send (200, "OK"); }} catch (ex) {// Hvis der var en fejl, skal du sende den tilbage i svarserveren.log ("fejl:" + ex); resp.send (500, "Intern serverfejl:" + ex); }}} // Registrer HTTP -handler http.onrequest (httpHandler); // GateStateChange -handlerfunktionsfunktion gateStateChangeHandler (data) {// URL til webtjeneste lokal url = "https://projects.ajillion.com/save_gate_state"; // Indstil Content-Type header til json local headers = {"Content-Type": "application/json"}; // Koder modtagne data og log lokalt organ = http.jsonencode (data); server.log (krop); // Send dataene til din webtjeneste http.post (url, headers, body).sendsync (); } // Registrer gateStateChange handler device.on ("gateStateChange", gateStateChangeHandler);
Kode til elektrisk imp -agent:
- Tildel en Imp -enhed til din model
- Kontroller, at hardware -pins er Alias som tilsluttet
// Debouce bibliotek
#require "Button.class.nut: 1.2.0" // Alias for gateOpen GPIO pin (active low) gateOpen <- hardware.pin2; // Alias til gateLuk kontrol GPIO pin (aktiv lav) gateLuk <- hardware.pin7; // Konfigurer 'gateOpen' til at være en digital udgang med en startværdi på digital 1 (høj) gateOpen.configure (DIGITAL_OUT, 1); // Konfigurer 'gateClose' til at være et digitalt output med en startværdi på digital 1 (høj) gateClose.configure (DIGITAL_OUT, 1); // Alias for GPIO-pin, der angiver, at porten bevæger sig (N. O.) gateMovingState <- Knap (hardware.pin8, DIGITAL_IN_PULLUP); // Alias for GPIO-pin, der angiver, at porten er helt åben (N. O.) gateOpenState <- Knap (hardware.pin9, DIGITAL_IN_PULLUP); // Global variabel til at holde gate -tilstanden (Open = 1 / Closed = 0) lokal lastGateOpenState = 0; // Latch Timer -objekt lokalt latchTimer = null agent.on ("btn", funktion (data) {switch (data.cmd) {case "open": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Open kommando modtaget"); break case "latch30m": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Latch30m kommando modtaget"); break case "latch8h": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log ("Latch8h -kommando modtaget"); break case "close": if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log ("Luk nu kommando modtaget"); break default: server.log ("Knapkommando genkendes ikke");}}); function releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timer frigivet gateOpen switch contact "); } funktion releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Timer frigivet gateLuk kontaktkontakt "); } gateMovingState.onPress (funktion () {// Relæet er aktiveret, gate bevæger sig //server.log("Gate åbner "); lokale data = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", data);}). onRelease (funktion () {// Relæet frigives, gate er i ro //server.log("Gate er lukket "); lokale data = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);}); gateOpenState.onPress (funktion () {// Relæet er aktiveret, porten er helt åben //server.log("Gate er åben "); lokale data = {" gatestate ": 2," timer ": hardware.millis ()}; agent.send ("gateStateChange", data);}). onRelease (funktion () {// Relæet frigives, gate er ikke helt åben //server.log("Gate lukker "); lokale data = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);});
Trin 20: Web Service PHP -kode
Jeg skrev denne kode til CodeIgniter -rammen, fordi jeg føjede den til et gammelt eksisterende projekt. Controlleren og visningskoden kan let tilpasses den ramme, du ønsker.
For at holde tingene enkle gemte jeg JSON -data i en flad fil til datalagring. Hvis du har brug for logning eller mere komplekse datarelaterede funktioner, skal du bruge en database.
Det ajax-bibliotek, jeg skrev og brugte i dette projekt, kan downloades fra GitHub-depotet: ThingEngineer/Codeigniter-jQuery-Ajax
PHP Controller -kode:
- app/controllere/projects.php
- Sørg for, at datastien er tilgængelig med dit PHP -script, både placering og læse-/skrive -privilegier.
load-> hjælper (array ('fil', 'dato'));
$ data = json_decode (read_file ('../ app/logs/gatestate.data'), TRUE); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Lukket'; pause; case 1: $ view_data ['gatestate'] = 'Åbner …'; pause; case 2: $ view_data ['gatestate'] = 'Åben'; pause; case 3: $ view_data ['gatestate'] = 'Lukker …'; pause; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ view_data ['last_opened'] = tidsrum ($ last_opened ['last_opened'], time ()). ' siden'; // Load View $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } funktion save_gate_state () {$ this-> load-> hjælper ('fil'); $ data = file_get_contents ('php: // input'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ data = json_decode ($ data, TRUE); hvis ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} funktion get_gate_state () {$ this-> load-> helper (array ('fil', 'dato')); $ this-> load-> bibliotek ('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'] = tidsrum ($ last_opened ['last_opened'], time ()). ' siden'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // Send json -data, håndhæv ikke ajax -anmodning}}/ * Slut på filprojekter.php *// * Placering:./application/controllers/projects.php */
PHP View Code:
Jeg brugte Bootstrap til front-end, fordi den er hurtig, let og lydhør. Du kan downloade det her: https://getbootstrap.com (jQuery er inkluderet)
- app/controllere/gate_view.php
- Erstat DIN-AGENT-KODEN med din Electric Imp agent-kode
IoT Gate Opperator Addon IoT Gate Opperator Addon
- Hjem
- Admin
Open Gate Latch Åben i 30 min Latch Open i 8 timer Luk nu Gate Status: Sidst åbnet $ (dokument).ready (funktion () {resetStatus ();}) funktion sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("#open_gate"). klik (function () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ ("#status"). tekst ("Åbner …");}); $ ("#latch30m_gate"). klik (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). tekst ("Åbner …");}); $ ("#latch8h_gate"). klik (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#status"). tekst ("Åbner …");}); $ ("#close_gate"). klik (function () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). tekst ("Lukker …");}); function resetStatus () {// Target url var target = 'https://projects.ajillion.com/get_gate_state'; // Anmod om var data = {agent: 'app'}; // Send ajax -postanmodning $.ajax ({url: target, dataType: 'json', type: 'POST', data: data, success: function (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {case 0: $ ("#status"). Tekst ('Lukket'); pause; sag 1: $ ("#status"). Tekst ('Åbning …'); pause; sag 2: $ ("#status").text ('Open'); break; case 3: $ ("#status"). text ('Closing …'); break; default: $ ("#status"). text ('Error');} $ ("#last_opened"). tekst (data.last_opened);}, fejl: funktion (XMLHttpRequest, textStatus, errorThrown) {// Fejlmeddelelse $ ("#status"). tekst ('Serverfejl');}})); setTimeout (resetStatus, 3000); }
Anbefalede:
WebApp Puzzle LED -lampe med ESP32: 5 trin (med billeder)
WebApp Puzzle LED -lampe Med ESP32: Jeg har leget med LED -strips i årevis og flyttede for nylig ind i en vens sted, hvor jeg ikke kunne foretage store ændringer som at montere strimlen på væggene, så jeg sammensatte denne lampe, der har en enkelt ledning kommer ud for strøm og kan placeres
Alexa Voice Controlled Raspberry Pi Drone Med IoT og AWS: 6 trin (med billeder)
Alexa Voice Controlled Raspberry Pi Drone Med IoT og AWS: Hej! Mit navn er Armaan. Jeg er en 13-årig dreng fra Massachusetts. Denne vejledning viser, som du kan udlede af titlen, hvordan man bygger en Raspberry Pi Drone. Denne prototype demonstrerer, hvordan droner udvikler sig, og også hvor stor en rolle de kan spille i
Automatic Gate Slider Under $ 100: 15 trin (med billeder)
Automatic Gate Slider Under $ 100: I løbet af sommeren motiverede min far mig til at kigge på at købe et portautomatiseringssystem og opsætte det. Så jeg startede min forskning og undersøgte pakkeløsninger på AliExpress og lokale leverandører. De lokale leverandører tilbød komplette løsninger inklusive
Magnetisk smartlås med hemmeligt slag, IR -sensor og webapp: 7 trin (med billeder)
Magnetisk smart lås med hemmeligt slag, IR -sensor og webapp: Hvis du kan lide dette projekt, kan du følge mig på Instagram og YouTube.I dette projekt skal jeg bygge en magnetisk lås til mit hjemmekontor, der åbnes, hvis du kender hemmeligt bank. Åh … og det kommer også til at have et par tricks mere i ærmet. Magnet
Pocket Operator Lasercut Case: 3 trin (med billeder)
Pocket Operator Lasercut Case: Med hype for de kommende nye Pocket Operators PO-33 og PO-35 af Teenage Engineering besluttede jeg, at det var tid til at dele min enkle " sag " som jeg lavede til min PO-20. Det er virkelig simpelt. Så enkelt faktisk, at det bliver holdt på plads af pressen