Orodha ya maudhui:
- Hatua ya 1: Kusanya Sehemu
- Hatua ya 2: Vifaa
- Hatua ya 3: Ukuza kesi hiyo
- Hatua ya 4: Waya DC-DC Converter
- Hatua ya 5: Nguvu ya waya kwa Vifaa
- Hatua ya 6: Pembejeo za Moduli ya Kupeleka waya
- Hatua ya 7: Jumper ya Nguvu ya IMP
- Hatua ya 8: Pembejeo za Hali ya Lango la Waya
- Hatua ya 9: Chapisha au Nunua Kesi
- Hatua ya 10: Pamba Kesi yako
- Hatua ya 11: Piga Hole kwa waya
- Hatua ya 12: Andaa na usakinishe waya zinazounganishwa
- Hatua ya 13: Njia za Kuunganisha Njia
- Hatua ya 14: Vipengee vya Mlima
- Hatua ya 15: Funga waya za Kuunganisha
- Hatua ya 16: Funga Kesi
- Hatua ya 17: Sakinisha katika Opereta wa Lango
- Hatua ya 18: Weka Njia ya Kupokea Aux
- Hatua ya 19: Wakala wa IMP na Msimbo wa Kifaa
- Hatua ya 20: Nambari ya Huduma ya Wavuti ya PHP
Video: Programu-jalizi ya Operesheni ya Lango la WebApp (IoT): Hatua 20 (na Picha)
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:54
Nina mteja ambaye alikuwa na eneo lenye lango ambalo watu wengi walihitaji kuja na kwenda. Hawakutaka kutumia keypad kwa nje na walikuwa na idadi ndogo ya vipitishaji vya keyfob. Kupata chanzo cha bei rahisi cha nyongeza za vitufe ilikuwa ngumu. Nilidhani itakuwa fursa nzuri ya kuboresha mwendeshaji wa lango la Liftmaster kuwa IoT inayoendana na vifaa vya kawaida, API ya wavuti, na kiolesura cha programu ya wavuti. Hii haikutatua tu shida ya ufikiaji wa watu wengi ilifungua utendaji wa ziada pia!
Katika picha ya mwisho hapo juu ni kitengo cha majaribio ambacho nilikuwa nikifanya kwa karibu mwaka katika mfuko wa ziplock. Nilidhani ni wakati wa kuboresha!
Hili ni suluhisho linalofanya kazi kikamilifu na msimbo wote, habari ya vifaa, na miundo iliyoorodheshwa hapa.
Faili zote za miradi pia zinashikiliwa kwenye GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon
Mfano wa kiolesura cha CodeIgniter WebApp kimehifadhiwa hapa:
--
Kwa ujumuishaji mkubwa zaidi unaweza kutumia maktaba ya IFTTT ya Imp ya Umeme.
Hatua ya 1: Kusanya Sehemu
- Utahitaji IMP ya Umeme na angalau 4 GPIO zinazopatikana, ninatumia IMP001 na bodi ya kuzuka ya Aprili.
- Mdhibiti wa kuacha voltage ya chanzo hadi 5V. Ninatumia Moduli ya DC-DC Buck Converter Module. Toleo la MP1584EN la eBoot kutoka Amazon.
- Moduli ya kupeleka mbili (au zaidi) au kifaa sawa cha kubadilisha ambacho kitatumika na pato la IMP. Ninatumia Moduli hii ya JBtek 4 Channel DC 5V Relay kutoka Amazon.
- Kituo cha waya 4 cha waya. Ninatumia hii 5Pcs 2 Mistari 12P waya Connector Screw Terminal Barrier Block 300V 20A kutoka Amazon.
Hatua ya 2: Vifaa
Utahitaji pia:
- Ufikiaji wa printa ya 3D au kisanduku kidogo cha mradi
- Screw 4 ndogo juu ya 4mm x 6mm kwa kifuniko cha kesi
- Kuunganisha waya
- Wakata waya
- Vipande vya waya
- Bisibisi ndogo
- Chuma cha kulehemu
- Gundi moto au silicone
- Mahusiano ya Zip
Hatua ya 3: Ukuza kesi hiyo
Mpangilio wa sehemu zako ili kuamua ni saizi gani utahitaji. Na mpangilio kama picha nitahitaji kesi ambayo ina urefu wa 140mm, 70mm kirefu, na 30mm mrefu.
Hatua ya 4: Waya DC-DC Converter
Kata jozi 3 za waya mwekundu na mweusi wa kushona kwa unganisho la umeme ndani na nje ya bodi ya kubadilisha DC-DC.
- Ingizo: 100mm
- Pato kwa IMP: 90mm
- Pato kwa Moduli ya Kupokea: 130mm
Wauze kwa bodi yako kama inavyoonyeshwa.
Hatua ya 5: Nguvu ya waya kwa Vifaa
- Unganisha pembejeo ya kibadilishaji cha DC-DC kwa alama mbili kwenye kizuizi cha terminal.
- Weka waya mfupi wa pato la 5V kwa IMP.
- Solder waya mrefu zaidi wa pato la 5V kwenye moduli ya kupeleka tena.
Hatua ya 6: Pembejeo za Moduli ya Kupeleka waya
- Kata waya 4 x 90mm kwa viunganisho vya kuingiza moduli. Nilitumia rangi 4 tofauti kwa kumbukumbu rahisi baadaye wakati wa kuweka alama.
- Weka waya kwa pembejeo za moduli ya kupeleka 1-4 kisha kwa matangazo 4 ya kwanza ya IMP GPIO (Pin1, 2, 5, & 7) mtawaliwa.
Hatua ya 7: Jumper ya Nguvu ya IMP
Unaweza kuhitaji kutumia nguvu ya USB wakati unapoandaa programu na kujaribu IMP yako. Unapomaliza, hakikisha kusogeza jumper ya nguvu upande wa BAT.
Hatua ya 8: Pembejeo za Hali ya Lango la Waya
- Kata waya 2 x 80mm kwa pembejeo za hali ya sate.
- Unganisha waya kwenye vituo 2 vilivyobaki vya screw.
- Solder waya kwa karibu na matangazo ya IMP GPIO (Pin8 & 9) mtawaliwa.
Hatua ya 9: Chapisha au Nunua Kesi
Unaweza kupakua. STL yangu au. F3D kwa kesi hii kwenye GitHub au Thingiverse
Ikiwa huna ufikiaji wa printa ya 3D kesi ndogo ya mradi wa generic itafanya kazi.
Hatua ya 10: Pamba Kesi yako
Kwa sababu!
Niliweka maandishi yaliyowekwa ndani yangu na niliipaka rangi na mkali mweusi. Ikiwa unahisi kupendeza unaweza kutumia rangi ya akriliki, kucha ya kucha au kitu kingine kuifanya iwe nyepesi.
Hatua ya 11: Piga Hole kwa waya
Piga shimo ndogo 10-15mm upande karibu na katikati ya ambapo waya zote zitakutana.
Nilitumia Unibit kwa shimo safi, laini kwenye plastiki.
Hatua ya 12: Andaa na usakinishe waya zinazounganishwa
Kata waya 9 x 5-600mm kwa kuunganisha kifaa chetu hadi bodi ya mwendeshaji wa lango.
- 2 kwa uingizaji wa umeme wa 24V
- 3 kwa hadhi ya lango (pembejeo 2 na ardhi ya kawaida)
- 2 kwa ishara wazi ya lango
- 2 kwa ishara ya lango la karibu
Pindisha pamoja kila moja ya vikundi vilivyoorodheshwa hapo juu kwa kutumia kuchimba visima. Hii itafanya kila kitu kuwa rahisi na kuonekana bora.
Kanda na unganisha kila waya kwenye vituo husika kama inavyoonyeshwa.
Hatua ya 13: Njia za Kuunganisha Njia
Tumia waya wa kushikamana kupitia shimo kama inavyoonyeshwa.
Hatua ya 14: Vipengee vya Mlima
Weka na weka vipengee na shanga ndogo ya gundi moto au silicone. Usitumie mengi ikiwa unahitaji kuondoa sehemu, tumia ya kutosha kuilinda.
Awali nilitaka kuchapisha kesi hiyo na klipu / tabo kushikilia bodi mahali lakini nilihitaji kupata hii imewekwa na sikuwa na wakati. Kuongeza klipu za bodi kwenye kesi yako itakuwa kugusa mzuri.
Hatua ya 15: Funga waya za Kuunganisha
Funga waya za kushikamana na gundi moto au silicone.
Hatua ya 16: Funga Kesi
Nilitumia screws ndogo ~ 4mm kwenye orodha ya kesi hii iliyochapishwa ya 3D. Ikiwa una wasiwasi juu ya uchafu au unyevu weka shanga ya silicone au gundi moto karibu na kifuniko pamoja kabla ya kuifunga.
Hatua ya 17: Sakinisha katika Opereta wa Lango
Kwenye bodi kuu:
- Hook waya mbili zilizounganishwa na kupeleka pato 1 kwa kituo cha Open Gate. (nyekundu / hudhurungi kwenye picha)
- Hook waya mbili zilizounganishwa na kupeleka pato la 2 kwa kituo cha Karibu cha Lango. (njano / bluu kwenye picha)
- Hook waya mbili zilizounganishwa na pembejeo ya DC-DC ya ubadilishaji kwenye vituo vya nguvu vya nyongeza ya 24V (nyekundu / nyeusi kwenye picha)
Kwenye bodi ya upanuzi
- Jumper vituo vya kawaida vya screw pamoja na kipande kidogo cha waya
- Unganisha ardhi ya kawaida kwa mojawapo ya vituo vya kupokezana vya kawaida (kijani kwenye picha)
- Unganisha pembejeo za hali ya lango 2 (IMP Pin8 & 9) kwenye vituo vya kawaida vya wazi (HAPANA) vya visu (kijivu / manjano kwenye picha)
Peleka waya, zip kuzifunga ili kuonekana nadhifu na upate mahali pa kuweka au kuweka kesi yako.
Kuna picha za ziada, zenye azimio kamili, zilizowekwa kwenye hazina ya GitHub.
Hatua ya 18: Weka Njia ya Kupokea Aux
Weka swichi za upitishaji msaidizi kama inavyoonekana kwenye picha.
Hii itampa IMP ishara inazohitaji kuamua ikiwa lango limefungwa, kufungua, kufunguliwa au kufungwa.
Hatua ya 19: Wakala wa IMP na Msimbo wa Kifaa
Nambari ya Wakala wa Umeme:
- Unda Mfano mpya katika IDE ya Umeme:
- Badilisha URL ili uelekeze kwenye seva yako
// kazi ya kushughulikia
kazi httpHandler (req, resp) {jaribu {local d = http.jsondecode (req.body); //server.log (d.c); ikiwa (d.c == "btn") {//server.log (d.val); tuma kifaa ("btn", d.val); tuma (tuma 200, "Sawa"); }} kukamata (ex) {// Ikiwa kulikuwa na hitilafu, irudishe kwenye seva ya majibu.log ("kosa:" + ex); resp.send (500, "Kosa la Seva ya Ndani:" + ex); }} // // Kusajili mshughulikiaji wa HTTP http.onrequest (httpHandler); // GateStateChange kazi ya mshughulikiaji wa kazi gateStateChangeHandler (data) {// URL kwa huduma ya wavuti url = "https://projects.ajillion.com/save_gate_state"; // Weka kichwa cha Aina ya Yaliyomo kwa vichwa vya ndani vya json = {"" Type-Type ":" application / json "}; // Encode ilipokea data na ingia mwili wa ndani = http.jsonencode (data); seva.log (mwili); // Tuma data kwenye huduma ya wavuti yako http.post (url, vichwa, mwili).sendync (); } // Kusajili kifaa cha kushughulikia lango laStateChange.on ("gateStateChange", gateStateChangeHandler);
Nambari ya Wakala wa Umeme:
- Peana kifaa cha Imp kwa mfano wako
- Thibitisha pini za vifaa zimetengwa kama zimeunganishwa
// Maktaba ya Debouce
#hitaji "Kitufe.class.nut: 1.2.0" // Jina la lango Fungua pini ya GPIO (chini chini) langoFungua <- hardware.pin2; // Jina la lango Funga kudhibiti GPIO pini (chini ya kazi) langoFunga <- hardware.pin7; // Sanidi 'langoFungua' kuwa pato la dijiti na thamani ya kuanzia ya dijiti 1 (juu) langoOpen.configure (DIGITAL_OUT, 1); // Sanidi 'langoFunga' kuwa pato la dijiti na thamani ya kuanzia ya dijiti 1 (ya juu) langoClose.configure (DIGITAL_OUT, 1); // Alias ya pini ya GPIO inayoonyesha lango linahamia (NO) langoMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // Jina la pini ya GPIO inayoonyesha lango limefunguliwa kikamilifu (NO) langoOpenState <- Button (hardware.pin9, DIGITAL_IN_PULLUP); // Kubadilika kwa ulimwengu kushikilia hali ya lango (Open = 1 / Closed = 0) localGateOpenState = 0; // kitu cha kipima muda cha 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 ("Fungua amri imepokea"); kesi ya kuvunja "latch30m": gateOpen.write (0); ikiwa (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Amri ya Latch30m imepokea"); kesi ya kuvunja "latch8h": gateOpen.write (0); ikiwa (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, kutolewaOpen); server.log ("Amri ya Latch8h imepokea"); kesi ya kuvunja "karibu": ikiwa (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp..wakeup (1, releaseClose); server.log ("Funga sasa amri imepokea"); vunja chaguo-msingi: server.log ("Amri ya kitufe haijatambuliwa");}}); kutolewa kwa kaziFungua () {if (latchTimer) imp.cancelwakeup (latchTimer); langoFungua. andika (1); //server.log ("Timer iliyotolewa lango Fungua mawasiliano ya kubadili"); } kutolewa kwa kaziFunga () {if (latchTimer) imp.cancelwakeup (latchTimer); langoFunga.andika (1); //server.log ("Timer iliyotolewa lango Funga kubadili mawasiliano"); } gateMovingState.onPress (kazi () {// Relay imeamilishwa, lango linahamia //server.log ("Gate linafunguliwa"); data ya ndani = {"gatestate": 1, "timer": hardware.millis (wakala.send ("gateStateChange", data);})) onRelease (kazi () {// Relay imetolewa, lango limepumzika //server.log ("Gate imefungwa"); data ya ndani = {"gatestate": 0, "timer": hardware.millis ()}; wakala.send ("gateStateChange", data);}); gateOpenState. wakala.send ("gateStateChange", data);})) onRelease (kazi () {// Relay imetolewa, lango halijafunguliwa kabisa //server.log ("Gate linafungwa"); data ya hapa = {"gatestate": 3, "timer": hardware.millis ()}; wakala.send ("gateStateChange", data);});
Hatua ya 20: Nambari ya Huduma ya Wavuti ya PHP
Niliandika nambari hii kwa mfumo wa CodeIgniter kwa sababu niliiongeza kwenye mradi wa zamani uliopo. Msimamizi na nambari ya kutazama inaweza kubadilishwa kwa urahisi kwa mfumo wa chaguo lako.
Ili kuweka mambo rahisi nilihifadhi data ya JSON kwenye faili tambarare ya kuhifadhi data. Ikiwa unahitaji magogo au kazi ngumu zaidi zinazohusiana na data tumia hifadhidata.
Maktaba ya ajax niliyoandika na kutumia katika mradi huu inaweza kupakua kutoka kwa ghala la GitHub: ThingEngineer / Codeigniter-jQuery-Ajax
Nambari ya Mdhibiti wa PHP:
- programu / watawala / miradi.php
- Hakikisha njia ya data inapatikana kwa hati yako ya PHP, eneo na nafasi za kusoma / kuandika.
mzigo-> msaidizi (safu ('faili', 'tarehe'));
data ya data = json_decode (kusoma_file ('../ app / logs / gatestate.data'), KWELI); kubadili ($ data ['gatestate']) {kesi 0: $ view_data ['gatestate'] = 'Ilifungwa'; kuvunja; kesi 1: $ view_data ['gatestate'] = 'Inafunguliwa…'; kuvunja; kesi 2: $ view_data ['gatestate'] = 'Fungua'; kuvunja; kesi 3: $ view_data ['gatestate'] = 'Kufunga…'; kuvunja; } $ last_opened = json_decode (read_file ('../ app / logs / projects / gateopened.data'), KWELI); $ view_data ['last_opened'] = muda wa saa ($ last_opened ['last_opened'], time ()). 'iliyopita'; // Tazama Mzigo $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } kazi save_gate_state () {$ this-> load-> msaidizi ('file'); $ data = file_get_contents ('php: // input'); andika_file ('../ app / logs / projects / gatestate.data', $ data); data ya data = json_decode (data ya data, KWELI); ikiwa ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); andika_file ('../ app / logs / projects / gateopened.data', json_encode ($ last_opened)); }} kazi get_gate_state () {$ hii-> mzigo-> msaidizi (safu ('faili', 'tarehe')); $ this-> mzigo-> maktaba ('ajax'); data ya data = json_decode (kusoma_file ('../ app / logs / projects / gatestate.data'), TRUE); $ last_opened = json_decode (read_file ('../ app / logs / projects / gateopened.data'), KWELI); data ya data ['last_opened'] = muda wa saa ($ last_opened ['last_opened'], time ()). 'iliyopita'; $ this-> ajax-> output_ajax (data data, 'json', UONGO); // tuma data ya json, usitekeleze ombi la ajax}} / * Mwisho wa miradi ya faili.php * / / * Mahali:./application/controllers/projects.php * /
Nambari ya Kuangalia ya PHP:
Nilitumia Bootstrap kwa mwisho wa mbele kwa sababu ni haraka, rahisi na msikivu. Unaweza kuipakua hapa: https://getbootstrap.com (jQuery imejumuishwa)
- programu / watawala / gate_view.php
- Badilisha nafasi ya WAKALA-WAKALA wako na nambari yako ya wakala wa Umeme
Opereta ya lango la IoT Addon
- Nyumbani
- Usimamizi
Fungua Latch ya Lango Fungua kwa dakika 30 Latch Fungua kwa masaa 8 Funga sasa Hali ya Lango: Ilifunguliwa mwisho $ (hati). Tayari (kazi () {resetStatus ();}) kazi sendJSON (JSONout) {var url = 'https:// wakala.electricimp.com/YOUR-AGENT-CODE '; $.chapisho (url, JSONout); } $ ("# open_gate"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ ("#status"). maandishi ("Kufungua…");}); $ ("# latch30m_gate"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). maandishi ("Kufungua…");}); $ ("# latch8h_gate"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; tumaJSON (JSONout); $ ("#status"). maandishi ("Kufungua…");}); $ ("# karibu_lango"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). maandishi ("Kufunga…");}); kazi resetStatus () {// Lengo url var target = 'https://projects.ajillion.com/get_gate_state'; // Omba var data = {wakala: 'programu'}; // Tuma ombi la posta ya ajax $.ajax ({url: target, dataType: 'json', aina: 'POST', data: data, mafanikio: kazi (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {kesi 0: $ ("# status"). Maandishi ('Imefungwa'); kuvunja; kesi 1: $ ("# status"). Maandishi ('Kufungua …'); kuvunja; kesi 2: $ ("# status") maandishi ('Open'); kuvunja; kesi 3: $ ("# status"). maandishi ('Kufunga…'); kuvunja; chaguomsingi: $ ("# status"). maandishi ('Kosa');} $ ("#last_opened"). maandishi (data.last_opened);}, makosa: kazi (XMLHttpRequest, textStatus, errorThrown) {// Kosa la ujumbe $ ("# status"). maandishi ('Kosa la Seva');}}})); kuwekaTimeout (resetStatus, 3000); }
Ilipendekeza:
Arduino: Programu za Muda na Udhibiti wa Kijijini Kutoka kwa Programu ya Android: Hatua 7 (na Picha)
Arduino: Programu za Wakati na Udhibiti wa Kijijini Kutoka kwa Programu ya Android: Nimekuwa nikijiuliza kila wakati ni nini kinatokea na bodi zote za Arduino ambazo watu hawaitaji baada ya kumaliza miradi yao nzuri. Ukweli ni wa kukasirisha kidogo: hakuna chochote. Nimeona hii nyumbani kwa familia yangu, ambapo baba yangu alijaribu kujenga nyumba yake mwenyewe
Gari la IoT RC na Kijijini cha Taa ya Smart au Lango: Hatua 8 (na Picha)
Gari la IoT RC na Kiwango cha Taa ya Kijijini au Lango: Kwa mradi ambao hauhusiani, nilikuwa nimeandika nambari kadhaa ya Arduino kuzungumza na taa za MiLight na taa za taa ambazo ninazo nyumbani kwangu. Niliamua kutengeneza gari ndogo ya RC kujaribu
Mchezo wa Makey Makey na Scratch Operesheni: Hatua 6 (na Picha)
Makey makey na mchezo wa mwanzo wa operesheni: Fanya mchezo wa kufurahisha, wa ukubwa wa maisha wa tabia yako mwenyewe! Mradi mzuri sana kwa miaka yote
Kesi ya Operesheni ya Mfukoni Lasercut: Hatua 3 (na Picha)
Kesi ya Operesheni ya Mfukoni Lasercut: Kwa heri kwa Waendeshaji wa Mfukoni mpya ujao PO-33 na PO-35 na Uhandisi wa Vijana niliamua ni wakati wa kushiriki kesi yangu rahisi " " ambayo nilitengeneza kwa PO-20 yangu. Ni rahisi sana. Ni rahisi sana kwa kweli kwamba inashikiliwa na waandishi wa habari
Jinsi ya Kuendesha Operesheni za Sauti za Msingi kwenye Moyo wa Mkutano: Hatua 8
Jinsi ya Kuendesha Operesheni za Sauti za Msingi kwenye Moyo wa Mkutano: Hii inayoweza kufundishwa ni kwa kazi ya mtu yeyote ni kuendesha shughuli za sauti / kompyuta kwenye Heart of Junction huko Grand Junction, CO wakati mimi, mtu wa sauti / techie, lazima niende kwa wengine sababu au nyingine. Naomba radhi ikiwa ni ndefu, lakini nitajaribu