duinozone.cz - Arduino a Raspberry fórum

Poslední příspěvky

Stran: 1 ... 8 9 [10]
91
Projekty / Inteligentný dom - NodeMCU
« Poslední příspěvek od martinius96 kdy Listopad 10, 2017, 23:07:09 odpoledne »
Dobrý večer všetkým, rád by som sa s vami podelil o projekt, ktorý som realizoval. Oslovil ma pán, ktorý chcel vyhotoviť projekt inteligentnej domácnosti na platforme NodeMCU so správou cez web. Tomu som samozrejme nemohol odolať a do projektu som sa pustil. Nakoľko sa jedná o projekt v platenej šablóne, zdrojové kódy web časti v tejto téme nebudú umiestnené.
Projekt riešil implementáciu týchto prvkov:
    Termostat s automatickým/manuálnym ovládaním z internetu
    Systém závlahy s automatickým/manuálnym ovládaním z internetu
    Ovládanie svetla cez internet + manuálne z domu vypínačom
    Ovládanie garážovej brány cez internet + manuálne z garáže tlačidlom
    Stav, či je auto v garáži
    Alarm domácnosti zapínaný z internetu
Použité moduly:
    DS18B20, teplota [/list]
      DHT12, vlhkosť[/list]
        HC-SR-04, ultrazvukový snímač prekážky[/list]
          HC-SR-501, Pir senzor pohybu[/list]
            8-kanálové relé, svetlo, brána, termostat, závlaha[/list]
            Web časť:
            Projekt web časti bolo zoznámenie sa s novou technológiou - Angular. Celá webstránka funguje na jednej PHP stránke, ktorá obsahuje množstvo javascriptu, ktorý dokáže generovať podstránky dynamicky, teda používateľ sa dynamicky premiestní na inú stránku, bez requestu na stránke, niečo v štýle Ajaxu. Tento systém spôsoboval problémy pri vykreslovaní dát AJAX-om na stránku, ktorá bola dynamický zmenená bez requestu. Na stránku som implementoval vykresľovanie real-time dát technológiou AJAX. Stránka ponúka dashboard, kde je tabuľka, kde je možné prehliadať v reálnom čase údaje o teplote, vlhkosti, stave brány, svetla, stave auta, alarmu. V prípade, že je alarm aktívny a zaznamená pohyb, na webstránke sa spustí hudobná slučka s alarm tónom. Okrem toho je možné do kódu doplniť aj odoslanie e-mailu na vybranú e-mailovú adresu, čo sa môže hodiť v prípade, že používateľ nemá práve stránku otvorenú a nachádza sa na smartfóne kdekoľvek na svete. Časť dashboardu ponúka aj výpis referenčných hodnôt, na ktoré sa systém v automatickom režime viaže. V prípade, že má používateľ nastavenú referenčnú teplotu na 21°C a má aktivovaný automatický režim, tak relé zopne termostat pri teplota 19°C a menej a kúri do dosiahnutia 22°C. Systém je modulárny a je jednoduché doprogramovať funkcionalitu iných senzorov a rozšíriť systém. V projekte som využil 2 dosky NodeMCU, nakoľko som o nich zistil nepríjemnú vec. Piny D8, D9, D10, SD3, SD2 nie je možné využiť. Hľadal som problém v napájaní, skúšal iné zdroje ale problém bol v pinoch.

            V prípade, že do dosky nahráte program, ten sa spustí a pripojíte senzory, všetko beží, ale akonáhle dosku reštartujete, tak nenabootuje. Pre systém, ktorý má byť schopný fungovať nepretržite a po výpadku elektrickej energie následne bežať sú tieto piny nepoužiteľné. Pin D4 je taktiež problémový, nakoľko je napojený na integrovanú diódu na doske. V prípade nahrávania programu tento pin ide striedavo do hodnôt LOW, HIGH... V prípade, že tam máte pripojený modul ako input, je možné, že ho to odpáli, alebo trvalo poškodí. Dosky NodeMCU vykonávajú requesty na stránku nezávislé od seba. Requesty sa vykonávajú na PHP súbory, )ktoré som umiestnil do samostatného priečinka, kde pristupujú iba NodeMCU dosky) realizujú pri zápise dát a pri update stavu, napríklad v prípade automatického režimu s kontrolou teplôt, vlhkosti real-time. Do requestu sa vloží aj nameraná hodnota a vkladá sa cez GET metódu do príslušného súboru. NodeMCU s knižnicou vie aj parsovať obsah txt súborov a vložiť ich do premennej, ktorú vieme následne porovnať. V prípade, že sa v súbore nachádza ZAP, zapne sa výstup. Hodnota v súbore sa zmení vždy pred prečítaním tohto súboru, keď NodeMCU updatuje stav, ktorý sa má nastaviť. NodeMCU doskáva odpoveď ZAP/VYP na základe porovnania hodnoty s referenčnom v Automatickom režime a v manuálnom na základe nastaveného stavu ZAP/VYP manuálne z webu.

            Mal som obavy, či to bude doska NodeMCU zvládať, skompilovaný kód zaberal cca 30% pamäte a takt procesora bol 80Mhz. Za dva týždne skúšobnej prevádzky som nezaznamenal žiaden výpadok, doska "nevytuhla". Skúšal som napájať prostredníctvom USB, kedy je možné na 5V napájanie modulov použiť priamo 5V z USB napájania, aj napájanie adaptérom, kde je možné zvoliť napätie 6-24V, napájal som na 9V a na napájanie po 5V bolo nutné využiť Vin pin, všetko fungovalo v poriadku. Jedna NodeMCU doska spravuje teplotu, termostat, vlhkosť, závlahu pir senzor. Druhá NodeMCU doska sa stará o stav auta v garáži, garážovú bránu, svetlo. Svetlo funguje na princípe schodiskového vypínača, preto je nutné použiť prerušenie na základe CHANGE na pine, na ktorom meriame, či je na žiarovke napätie. Funkciu schodiskového vypínača na strane NodeMCU robí rozpínacie relé na 8-channel relé module.

            Krízové situácie:
            V prípade, že realizujete takýto projekt je nutné premýšľať o tom, aké situácie môžu nastať. Výpadok internetu môže spôsobiť, že systém nebude vykonávať to, čo mu bolo nastavené, prakticky zotrváva v stave, v akom bol naposledy. V prípade, že internet nabehne, NodeMCU v nekonečnej slučke loop obsahuje while, ktorý pripojenie do internetu zabezpečí (získa IP adresu) inak sa kód nevykonáva ďalej.

            V prípade, že vypadne elektrina a následne sa späť nahodí, systém sa vždy najprv synchronizuje podľa internetu, vďaka čomu je možné zaručiť, že ak je nastavené uzavretie brány a je náhodou otvorená, tak sa okamžite uzavrie.

            Štandardný dopyt NodeMCU na PHP stránku GET metódou - funkcia odoslania teploty s výpisom aj na UART.
            Kód: [Vybrat]
            void send_teplota() {
              sensors.requestTemperatures();
              WiFiClientSecure client;
              if (!client.connect(host, httpsPort)) {
                return;
              }
              if (client.verify(fingerprint, host)) {
              }
              else {
              }
              String teplota = String (sensors.getTempCByIndex(0));
              String url = "/system/nodemcu/zapisteplotu.php?teplota=" + teplota;
              client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
              Serial.println("Odoslane: Teplota");
              Serial.println(url);
            }

            Štandardný dopyt NodeMCU na TXT  súbor, ktorý parsuje - porovnanie s podmienkami (rozpínacie relé, stav LOW ho aktivuje)
            Kód: [Vybrat]
            void get_termostat() {
              WiFiClientSecure client;
              if (!client.connect(host, httpsPort)) {
                return;
              }
              if (client.verify(fingerprint, host)) {
              }
              else {
              }
              String url = "/mojsystem/termostat.txt";
              client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");

              while (client.connected()) {
                String line = client.readStringUntil('\n');
                if (line == "\r") {
                  break;
                }
              }
              String line = client.readStringUntil('\n');
              if (line == "ZAP") {
                Serial.println("Zapni termostat");
                digitalWrite(termostat, LOW);
              } else if (line == "VYP") {
                Serial.println("Vypni termostat");
                digitalWrite(termostat, HIGH);
              }
            }
            Tieto časti kódu sú základom systému, ktorý vie odosielať dáta a následne čítať textové súbory, v ktorých môže byť umiestnený text, hodnota, čísla.
            Príklad PHP súboru pre zápis teploty s ošetrením chybovej teploty spôsobenej zlým zapojením, problémovým čidlom:
            Kód: [Vybrat]
            <?php
             $teplota 
            $_GET["teplota"];
                 if(
            $teplota==|| $teplota==-127 || $teplota==85){
              echo'Neplatný údaj!';

             }else{
             
            file_put_contents('teplota.txt'$teplota);}
             
            ?>

            Vizualizácia web časti:



            Tipy: Webstránku je dobré zabezpečiť menom a heslom, v mojom prípade som využil statické zadanie mena a hesla, či viacerých priamo do PHP kódu, čo eliminuje napríklad SQL Injection útok.
            Možnosť rozšírenia do budúcnosti: Modulárny systém umožňuje pripojiť mnoho NodeMCU dosiek z celého sveta so správou cez centrálnu webstránku. Pridanie možnosti ovládania hlasom, iná šablóna v štýle Metro, mobilná aplikácia.
            V prípade, že chcete vytvoriť vlastný projekt a chcete použiť totožnú šablónu, nájdete ju na internete pod názvom ControlR. Kódy, ktoré sú tu publikované vykonávajú requesty na HTTPS stránky, takže je nutné použiť knižnicu WiFiClientSecure, kde je možné umiestniť aj fingerprint certifikátu do kódu, ktorý sa používa na stránke (SHA1, nie MD5). POZOR! Po uplynutí fingerprintu a vystavení nového certifikátu s iným fingerprintom nebude prenos na stránku úspešný. Následne je nutné zmenu fingerprintu pozmeniť aj v kóde.
            Vzorový kód s WifiSecure knižnicou a fingerprintom na Githube: https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/HTTPSRequest/HTTPSRequest.ino
            Podporiť ma, nájsť zaujímavé projekty môžete aj na mojej webstránke: https://arduino.php5.sk
            Článok o inteligentnej domácnosti na mojej stránke: https://arduino.php5.sk/inteligentna-domacnost.php
            92
            Vědátorna / Re:Programovanie 8 relátka pomocou arduino mega 2650 s bluetooth modulom
            « Poslední příspěvek od dodo15 kdy Listopad 10, 2017, 20:43:21 odpoledne »
            áno v mobile mám 4.1 . Čítal som: Príklad modulu HC-05 (06), ktorý sa pripája cez HardwareSerial pomocou kolíkov 0 (RX) a 1 (TX) na obrázku. Vezmite prosím na vedomie, že ku kolíčke RX modulu musíte pripojiť kolíky kĺbov, pin 0 (RX) Arduino na TX modulu HC-05 (06) a pin 1 (TX). Čo to môže znamenať ?
            94
            Vědátorna / Re:Programovanie 8 relátka pomocou arduino mega 2650 s bluetooth modulom
            « Poslední příspěvek od dodo15 kdy Listopad 10, 2017, 20:01:52 odpoledne »
            Bluetooh modul mám HC-06
            95
            Vědátorna / Re:Programovanie 8 relátka pomocou arduino mega 2650 s bluetooth modulom
            « Poslední příspěvek od dodo15 kdy Listopad 10, 2017, 20:00:05 odpoledne »
            Nechce ma pripojiť cez mobil . Bluetooth mám napojený podľa tej schémy.  .
            96
            Vědátorna / Re:Programovanie 8 relátka pomocou arduino mega 2650 s bluetooth modulom
            « Poslední příspěvek od K.K kdy Listopad 10, 2017, 18:41:53 odpoledne »
            No kdybys přesně napsal co ti nefunguje, možná by někoho něco napadlo, i když něco takoveho nikdy nedělal. ;)
            Co je u tebe s "bluetooth modulom"?
            Modulu je spousta.
            Toto ti funguje?
            http://navody.arduino-shop.cz/navody-k-produktum/arduino-bluetooth-modul-hc-05.html



            97
            Vědátorna / Programovanie 8 relátka pomocou arduino mega 2650 s bluetooth modulom
            « Poslední příspěvek od dodo15 kdy Listopad 10, 2017, 16:23:59 odpoledne »
            Dobrý deň. Chcel by som sa opýtat či to už niekto robil programovanie 8 relátka pomocou arduino mega 2650 s bluetooth modulom ? ...Po toľkých pokusoch aby to fungovalo mi to nejde vôbec skúšal som veľa stránok a žiadna z nich nefungovala.
            98
            Vědátorna / Re:Linearni actuator
            « Poslední příspěvek od Micky kdy Listopad 10, 2017, 13:49:38 odpoledne »
            Pratele program jsem vyresil, mel jsem prehazene piny na procesoru a v programu. Nicmene mam jeste otazku kdyby nekoho neco napadlo. Pouzivam dva actuatory v jednom programu, v podstate jen zkopirovany program. Nicmene kvuli smycce While se mi motory ovlivnuji. Pokud jeden nedojede na pozicic, druhy nejede. Jak to udelat aby fungovali oba dva nezavisle na sobe? Nejaka jina smycka misto while? Diky za kazdou radu.
            99
            Bastlírna / Re:Arduino Pro Mini spojenie s PC
            « Poslední příspěvek od K.K kdy Listopad 08, 2017, 12:35:42 odpoledne »
            Já se kdysi dočet, že bez toho DTS to je nepoužitelný.
            Proto když kupují, dávám si bach aby tam byl.
            http://martin.vancl.eu/programovani-arduino-pro-mini-autoreset-dtr/
            100
            Bastlírna / Re:Arduino Pro Mini spojenie s PC
            « Poslední příspěvek od josa kdy Listopad 08, 2017, 11:25:06 dopoledne »
            Podla tohto som to zapajal, ale nemam na tom prevodniku DTR, zostavaju mi tam len piny CTS a RTS, no nech akykolvek z nich som tam dal, tak stale nezname USB zariadenie.
            Stran: 1 ... 8 9 [10]