Мазмұны:

WebApp басқарылатын қақпа операторының қондырмасы (IoT): 20 қадам (суреттермен)
WebApp басқарылатын қақпа операторының қондырмасы (IoT): 20 қадам (суреттермен)

Бейне: WebApp басқарылатын қақпа операторының қондырмасы (IoT): 20 қадам (суреттермен)

Бейне: WebApp басқарылатын қақпа операторының қондырмасы (IoT): 20 қадам (суреттермен)
Бейне: 5 pasos para la integración digital de la empresa 2024, Шілде
Anonim
WebApp басқарылатын қақпа операторының қондырмасы (IoT)
WebApp басқарылатын қақпа операторының қондырмасы (IoT)
WebApp басқарылатын қақпа операторының қондырмасы (IoT)
WebApp басқарылатын қақпа операторының қондырмасы (IoT)
WebApp басқарылатын қақпа операторының қондырмасы (IoT)
WebApp басқарылатын қақпа операторының қондырмасы (IoT)

Менің клиентім бар, оның қақпасы бар, оған көптеген адамдар келіп -кетуі керек. Олар сыртынан пернетақтаны пайдаланғысы келмеді және тек қана кілттер таратқыштарының саны шектеулі болды. Қосымша кілттерге арналған қол жетімді көзді табу қиын болды. Мен бұл Liftmaster қақпасы операторын IoT теңшелетін жабдықпен, веб -API -мен және веб -қосымшаның интерфейсімен үйлесімді етіп жаңартудың тамаша мүмкіндігі болар деп ойладым. Бұл жаппай қол жетімділік мәселесін шешіп қана қоймай, қосымша функционалдылықты ашты!

Жоғарыдағы соңғы фотосуретте мен бір жылға жуық қысқыш сөмкеде жұмыс істеген тест қондырғысы. Мен жаңарту уақыты келді деп ойладым!

Бұл барлық код, аппараттық ақпарат және конструкциялары бар толық жұмыс істейтін шешім.

Жобалардың барлық файлдары GitHub-да орналасқан: github.com/ThingEngineer/IoT-Gate-Operator-Addon

CodeIgniter WebApp интерфейсінің мысалы мына жерде орналасқан: projects.ajillion.com/gate Бұл мысал тірі қақпаға қосылмаған, бірақ қақпада жұмыс істейтін дәл интерфейс пен код (кейбір қауіпсіздік мүмкіндіктерін алып тастағанда).

--

Неғұрлым интеграциялану үшін IFTTT кітапханасын Electric Imp үшін пайдалануға болады.

1 -қадам: Бөлшектерді жинаңыз

Бөлшектерді жинаңыз
Бөлшектерді жинаңыз
  • Сізге кемінде 4 GPIO бар Электрлік IMP қажет болады, мен IMP001 -ді сәуір айындағы тақтаймен қолданамын.
  • Көз кернеуін 5 В дейін төмендететін реттегіш. Мен DC-DC Бак конвертерінің төмен түсу модулін қолданамын. Amazonдан eBoot MP1584EN нұсқасы.
  • IMPs шығысымен жұмыс істейтін қос (немесе одан да көп) реле модулі немесе ұқсас коммутациялық құрылғы. Мен Amazon -дан JBtek 4 арналы DC 5V релелік модулін қолданамын.
  • 4 сымды бұрандалы терминал. Мен мұны Amazon -дан 5Pcs 2 Rows 12P сымдық қосқыш бұрандалы терминалды тосқауыл 300V 20A блогын қолданамын.

2 -қадам: Жабдықтар

Жабдықтар
Жабдықтар

Сізге сондай -ақ қажет болады:

  • 3D принтерге немесе шағын жобалық қорапқа қол жеткізу
  • Корпустың қақпағы үшін 4 мм х 6 мм шамасында 4 кішкентай бұранда
  • Қосылатын сым
  • Сым кескіштер
  • Сымды тазартқыштар
  • Кішкентай бұрағыштар
  • Пісіру темірі
  • Ыстық желім немесе силикон
  • Зип -галстук

3 -қадам: Корпустың көлемін өзгертіңіз

Корпусты ұлғайту
Корпусты ұлғайту

Қажетті өлшемді корпусты анықтау үшін бөлшектерді орналастырыңыз. Суретте көрсетілгендей маған ені 140 мм, тереңдігі 70 мм және биіктігі 30 мм болатын корпус қажет.

4-қадам: DC-DC конвертерінің сымы

Сымды DC-DC түрлендіргіші
Сымды DC-DC түрлендіргіші

Тұрақты токтың түрлендіргіш тақтасына және одан шығу үшін 3 жұп қызыл және қара қосқыш сымды кесіңіз.

  • Енгізу: 100 мм
  • IMP шығысы: 90 мм
  • Реле модуліне шығыс: 130 мм

Оларды тақтаға суретте көрсетілгендей дәнекерлеңіз.

5 -қадам: Құрылғыларға электр сымын қосыңыз

Құрылғыларға электр сымы
Құрылғыларға электр сымы
  • DC-DC түрлендіргішінің кірісін бұрандалы терминал блогындағы екі нүктеге қосыңыз.
  • Қысқа 5В шығыс сымдарын IMP -ге дәнекерлеңіз.
  • Ұзын 5В шығыс сымдарын реле модуліне дәнекерлеңіз.

6 -қадам: Сымды реле модулінің кірістері

Сымды реле модулінің кірістері
Сымды реле модулінің кірістері
  • Реле модулінің кіріс қосылыстары үшін 4х90 мм сымдарды кесіңіз. Мен кодтау кезінде кейінірек сілтеме жасау үшін 4 бөлек түсті қолдандым.
  • Сымдарды реле модулінің 1-4 кірісіне, содан кейін сәйкесінше IMP GPIO-ның алғашқы 4 нүктесіне дәнекерлеңіз (Pin1, 2, 5, & 7).

7 -қадам: IMP Power Jumper

IMP Power Jumper
IMP Power Jumper

IMP бағдарламалау және тестілеу кезінде сізге USB қуатын пайдалану қажет болуы мүмкін. Аяқтаған кезде, қуат секіргішін BAT жағына жылжытыңыз.

8 -қадам: Wire Gate күйінің кірістері

Wire Gate күйінің кірістері
Wire Gate күйінің кірістері
  • Статус кірістері үшін 2х80 мм сымдарды кесіңіз.
  • Сымдарды қалған 2 бұрандалы терминалға қосыңыз.
  • Дәнекерлеу сымдары сәйкесінше IMP GPIO нүктелерінің (Pin8 & 9) жанында.

9 -қадам: қапты басып шығарыңыз немесе сатып алыңыз

Корпусты басып шығарыңыз немесе сатып алыңыз
Корпусты басып шығарыңыз немесе сатып алыңыз

Сіз бұл үшін менің. STL немесе. F3D файлын GitHub немесе Thingiverse -те жүктей аласыз

Егер сізде 3D принтері болмаса, кішігірім жалпы жоба корпусы жұмыс істейді.

10 -қадам: Корпусты безендіріңіз

Ісіңізді безендіріңіз
Ісіңізді безендіріңіз

Өйткені!

Мен өзіме шегініс мәтінін қойдым және оны қара өткірмен боядым. Егер сіз өзіңізді қызықты сезінсеңіз, оны жылтырату үшін акрил бояуын, тырнақ бояуын немесе басқа нәрсені қолдануға болады.

11 -қадам: сымдарға арналған тесік

Бұрғылау сымдары үшін тесік
Бұрғылау сымдары үшін тесік

Барлық сымдар жиналатын ортасына жақын жерде 10-15 мм кішкене тесік бұрғылаңыз.

Мен Unibit -ті пластмассадан таза, тегіс тесік үшін қолдандым.

12 -қадам: Қосылатын сымдарды дайындаңыз және орнатыңыз

Қосылатын сымдарды дайындаңыз және орнатыңыз
Қосылатын сымдарды дайындаңыз және орнатыңыз
Қосылатын сымдарды дайындаңыз және орнатыңыз
Қосылатын сымдарды дайындаңыз және орнатыңыз

Біздің құрылғыны қақпа операторының тақтасына қосу үшін 9 x 5-600 мм сымдарды кесіңіз.

  • 24 В қуат көзі үшін 2
  • 3 қақпа күйі үшін (2 кіріс және ортақ жер)
  • 2 ашық қақпа сигналы үшін
  • 2 қақпаны жабу сигналы үшін

Жоғарыда аталған топтардың әрқайсысын бұрғы көмегімен бұраңыз. Бұл бәрін жеңілдетеді және жақсы көрінеді.

Сымдардың әрқайсысын көрсетілген терминалдарға жалғап, жалғаңыз.

13 -қадам: Қосылатын сымдарды бағыттау

Маршрутизатор сымдары
Маршрутизатор сымдары

Қосылатын сымдарды суретте көрсетілгендей тесік арқылы өткізіңіз.

14 -қадам: Компоненттерді орнату

Құрастыру компоненттері
Құрастыру компоненттері

Компоненттерді ыстық желім немесе силиконнан жасалған кішкене бисермен салыңыз және бекітіңіз. Бөлшекті алып тастау қажет болған жағдайда тым көп пайдаланбаңыз, оларды бекіту үшін жеткілікті мөлшерде пайдаланыңыз.

Мен бастапқыда тақтаны ұстап тұру үшін корпусты клиптермен/қойындылармен басып шығарғым келді, бірақ мен оны орнатуым керек болды, бірақ уақыт болмады. Корпусқа клиптерді қосу жағымды әсер етеді.

15 -қадам: Қосылатын сымдарды тығыздау

Ілінісу сымдарын тығыздау
Ілінісу сымдарын тығыздау

Қосылатын сымдарды ыстық желіммен немесе силиконмен тығыздаңыз.

16 -қадам: Істі жабыңыз

Істі жабыңыз
Істі жабыңыз

Мен 3D басып шығарылған корпустың тізімінде ~ 4мм кішкене бұрандаларды қолдандым. Егер сіз кір немесе ылғалға алаңдайтын болсаңыз, қақпақты жабудың алдында силикон немесе ыстық желім моншағын салыңыз.

17 -қадам: Қақпа операторына орнатыңыз

Gate операторына орнатыңыз
Gate операторына орнатыңыз
Gate операторына орнатыңыз
Gate операторына орнатыңыз

Негізгі тақтада:

  • Ашық қақпа терминалына 1 реле шығысына қосылған екі сымды іліңіз. (суреттерде қызыл/қоңыр)
  • 2 реле шығысына қосылған екі сымды Close Gate терминалына жалғаңыз. (суретте сары/көк)
  • DC-DC түрлендіргішінің кірісіне қосылған 24 сымды қосалқы қуат бұрандалы терминалдарға жалғаңыз (суретте қызыл/қара)

Кеңейту тақтасында

  • Кішкене сыммен бірге релелік жалпы бұрандалы терминалдарды секіріңіз
  • Ортақ жерді релелік бұрандалы терминалдардың біріне қосыңыз (фотода жасыл)
  • 2 қақпа күйінің кірісін (IMP Pin8 & 9) релелік қалыпты ашық (NO) бұрандалы терминалдарға қосыңыз (суреттерде сұр/сары)

Сымдарды бағыттаңыз, ұқыпты көрінуі үшін және қаптамаңызды орнататын немесе орнататын орын табу үшін оларды байлап қойыңыз.

GitHub репозиторийінде орналасқан қосымша, толық ажыратымдылықтағы фотосуреттер бар.

18 -қадам: Aux Relay режимін орнатыңыз

Aux Relay режимін орнатыңыз
Aux Relay режимін орнатыңыз

Көмекші реле қосқыштарын фотода көрсетілгендей орнатыңыз.

Бұл IMP -ге қақпаның жабылғанын, ашылатынын, ашылатынын немесе жабылатынын анықтауға қажет сигналдарды береді.

19 -қадам: IMP агенті мен құрылғы коды

IMP агенті мен құрылғы коды
IMP агенті мен құрылғы коды

Электрлік импресс -агент коды:

  • Electric Imp IDE -де жаңа модель жасаңыз:
  • URL мекенжайын серверге бағыттау үшін ауыстырыңыз

// HTTP өңдегіші функциясы

httpHandler функциясы (req, resp) {көріңіз {local d = http.jsondecode (req.body); //server.log(d.c); егер (d.c == «btn») {//server.log(d.val); device.send («btn», d.val); resp.send (200, «Жарайды»); }} catch (ex) {// Егер қате болса, оны жауап server.log -ға қайта жіберіңіз («error:» + ex); resp.send (500, «Ішкі сервер қатесі:» + ex); }} // HTTP өңдегішін тіркеу http.onrequest (httpHandler); // GateStateChange өңдегіш функциясының функциясы gateStateChangeHandler (деректер) {// веб -сервис URL мекенжайы жергілікті url = «https://projects.ajillion.com/save_gate_state»; // Content-Type тақырыбын json жергілікті тақырыптарына орнатыңыз = {«Content-Type»: «application/json»}; // Алынған деректерді кодтау және жергілікті органды тіркеу = http.jsonencode (деректер); server.log (негізгі); // Деректерді http.post (url, headers, body).sendsync () веб -қызметіне жіберіңіз; } // gateStateChange өңдегішін device.on тіркеңіз («gateStateChange», gateStateChangeHandler);

Электрлік импресс -агент коды:

  • Модельге Imp құрылғысын тағайындаңыз
  • Жабдық түйреуіштері жалғанғанын тексеріңіз

// Debouce кітапханасы

#require «Button.class.nut: 1.2.0» // gateOpen GPIO pin (белсенді төмен) gateOpen <- hardware.pin2; // Бүркеншік аты gateClose басқару GPIO түйреуіші (белсенді төмен) gateClose <- hardware.pin7; // 'gateOpen' параметрін цифрлық шығыс ретінде теңшеңіз, бастапқы мәні цифрлық 1 (жоғары) gateOpen.configure (DIGITAL_OUT, 1); // 'gateClose' параметрін цифрлық 1 (жоғары) gateClose.configure (DIGITAL_OUT, 1) бастапқы мәні бар сандық шығыс ретінде теңшеңіз; // GPIO түйрегінің лақап аты қақпаның қозғалатынын көрсетеді (N. O.) gateMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // GPIO түйреуішінің лақап аты қақпаның толық ашылғанын көрсетеді (N. O.) gateOpenState <- Түйме (hardware.pin9, DIGITAL_IN_PULLUP); // Қақпаның күйін ұстайтын жаһандық айнымалы (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Latch Timer нысаны жергілікті); latchTimer = imp.wakeup (1, releaseOpen); server.log («Ашық пәрмен алынды»); үзіліс «latch30m»: gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log («Latch30m пәрмені алынды»); үзіліс «latch8h»: gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log («Latch8h пәрмені қабылданды»); үзіліс регистрі «жабу»: егер (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log («Қазір жабу пәрмені алынды»); әдепкі үзіліс: server.log («Түймешік пәрмені танылмады»);}}); release releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timeer gateOpen коммутаторының контактісін шығарды »); } функция releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Timeer release gateClose switch contact «); } gateMovingState.onPress (function () {// Реле іске қосылды, қақпа жылжуда //server.log("Gate ашылып жатыр «); жергілікті деректер = {» gatestate «: 1,» timer «: hardware.millis ()}; agent.send («gateStateChange», деректер);}). onRelease (function () {// Реле босатылды, қақпа тыныш күйде //server.log("Gate жабық «); жергілікті деректер = {«gatestate»: 0, «timer»: hardware.millis ()}; agent.send («gateStateChange», деректер);}); gateOpenState.onPress (function () {// Реле іске қосылды, қақпа толық ашылды //server.log("Gate is open «); жергілікті деректер = {» gatestate «: 2,» timer «: hardware.millis ()}; agent.send («gateStateChange», деректер);}). onRelease (function () {// Реле босатылды, қақпа толық ашылмаған //server.log("Gate жабылады «); жергілікті деректер = {«gatestate»: 3, «timer»: hardware.millis ()}; agent.send («gateStateChange», деректер);});

20 -қадам: PHP веб -қызметі

PHP веб -қызметі
PHP веб -қызметі

Мен бұл кодты CodeIgniter құрылымы үшін жаздым, себебі мен оны ескі жобаға қостым. Контроллер мен қарау коды сіз таңдаған шеңберге оңай бейімделуі мүмкін.

Қарапайым нәрсені сақтау үшін мен JSON деректерін деректерді сақтауға арналған тегіс файлға сақтадым. Егер сізге тіркеу қажет болса немесе деректерге қатысты күрделі функциялар дерекқорды пайдаланады.

Мен жазған және осы жобада қолданған ajax кітапханасын GitHub репозиторийінен жүктеуге болады: ThingEngineer/Codeigniter-jQuery-Ajax

PHP контроллер коды:

  • app/controllers/projects.php
  • Деректер жолына PHP сценарийі арқылы қол жетімді екеніне көз жеткізіңіз, орналасуы мен оқу/жазу артықшылықтары.

load-> көмекші (массив ('файл', 'күн')));

$ data = json_decode (read_file ('../ app/logs/gatestate.data'), TRUE); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Жабық'; үзіліс; 1 -жағдай: $ view_data ['gatestate'] = 'Ашылуда…'; үзіліс; 2 -жағдай: $ view_data ['gatestate'] = 'Ашық'; үзіліс; 3 -жағдай: $ view_data ['gatestate'] = 'Жабылады…'; үзіліс; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ view_data ['last_opened'] = уақыт аралығы ($ last_opened ['last_opened'], time ()). 'бұрын'; // Load View $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } function save_gate_state () {$ this-> load-> helper ('file'); $ data = file_get_contents ('php: // input'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ деректер = json_decode ($ деректер, ШЫНДЫҚ); if ($ data ['gatestate'] == 1) {$ last_opened = массив ('last_opened' => time ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} функциясы get_gate_state () {$ this-> load-> helper (массив ('файл', 'күні')); $ 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'] = уақыт аралығы ($ last_opened ['last_opened'], time ()). 'бұрын'; $ this-> ajax-> output_ajax ($ деректер, 'json', FALSE); // json деректерін жіберіңіз, ajax сұрауын орындамаңыз}}/ * Файл жобаларының соңы.php *// * Орны:./application/controllers/projects.php */

PHP қарау коды:

Мен Bootstrap-ты алдыңғы жаққа қолдандым, себебі ол тез, оңай және жауап береді. Сіз оны мына жерден жүктей аласыз: https://getbootstrap.com (jQuery қосылған)

  • app/controllers/gate_view.php
  • YOUR-AGENT-CODE кодын Electric Imp агентінің кодымен ауыстырыңыз

IoT Gate Opperator Addon IoT Gate Opperator Addon

  • Үй
  • Әкімші

Қақпа ысырмасын ашу 30 минутқа ашылады 8 сағатқа ашылады. Қазір жабу қақпасының күйі: Соңғы ашылған $ (құжат).ready (функция () {resetStatus ();}) функциясы sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ («#open_gate»). басыңыз (function () {var JSONout = '{«c»: «btn», «val»: {«cmd»: «open»}}'; sendJSON (JSONout); $ («#статус»). мәтін («Ашылу…»);}); $ («#latch30m_gate»). басыңыз (function () {var JSONout = '{«c»: «btn», «val»: {«cmd»: «latch30m»}}}; sendJSON (JSONout); $ («#статус»). мәтін («Ашылу…»);}); $ («#latch8h_gate»). басыңыз (function () {var JSONout = '{«c»: «btn», «val»: {«cmd»: «latch8h»}}}; sendJSON (JSONout); $ («#статус»). мәтін («Ашылу…»);}); $ («#close_gate»). басыңыз (function () {var JSONout = '{«c»: «btn», «val»: {«cmd»: «close»}}'; sendJSON (JSONout); $ («#статус»). мәтін («Жабылу…»);}); resetStatus () функциясы {// Target url var target = 'https://projects.ajillion.com/get_gate_state'; // var data = {agent: 'app'} сұрау; // $.ajax ajax хабарына сұраныс жіберу 0: $ («#күй»). Мәтін ('Жабық'); үзіліс; 1 -жағдай: $ («#күй»). Мәтін ('Ашылу…'); үзіліс; 2 -жағдай: $ («#күй»).text ('Ашық'); үзіліс; 3 -жағдай: $ («#күй»). мәтін ('Жабылу…'); үзіліс; әдепкі: $ («#күй»). мәтін ('Қате');} $ («#соңғы_ашылған»). мәтін (data.last_opened);}, қате: функция (XMLHttpRequest, textStatus, errorThrown) {// Қате туралы хабар $ («#күй»). мәтін ('Сервер қатесі');}}); setTimeout (resetStatus, 3000); }

Ұсынылған: