jamesonman
Vytvořené odpovědi
-
AutorPříspěvky
-
johnyhol
ÚčastníkTak jsem to proměřil a celkový odběr měřený před napájecím konektorem je od 200 do 320mA když sepne relé. Napojil jsem to stejně pro jistotu na lab. zdroj s nastaveným napětím 9V a proudem 1A, ale výsledek je stejný jako přes USB – pořád to padá. Vysledoval jsem, že je problém hned po zapnutí. Podle sériový linky se připojuje na Exosite a při tom se to sekne. Konkrétně na displeji svítí „NAST.VSTUPY/VYST“ + „VYPINAM VS. RELE“, na pár sekund sepne relé alarmu a po rozepnutí se to sekne. Normálně by měly procvaknout všechny relé a na displeji přeskočit „TERMOSTAT VYPNUT“ + ZADNA PORUCHA… a čekat na sepnutí termostatu. Když už se povede, že to naběhne tak se hodnoty z čidel normálně posílají na Exosite, ale do tý doby než zapnu termostat. Pak se spojení přeruší a naskočí to, až přestane kotel topit. To je asi problém, že je část kódu pro Exosite ve smyčce „void loop“.? Až bys měl tedy chvilku tak mi na to prosím koukni.
Díky moc!Vojtěch Vosáhlo
ÚčastníkMohl by být problém třeba s tím že pokud je spínač nespojený, pin „lítá“ -> neni ani na 1 ani na 0. Chtělo by to tedy rezistor jako máte u arduina. Taky bych ještě přidal jeden rezistor mezi tím spínačem a pinem aby omezil proud který se dostane na pin jak u arduina, tak u shieldu.
Vojtěch Vosáhlo
ÚčastníkI když už to máte vyřešené, mohlo by být zajímavé to zkusit čistě přes assembler i když jde o arduino. Jedna instrukce by měla při 16MHZ trvat asi jen 62,5ns takže by se dalo docílit i zajímavých frekvencí. Ale to be spíš taková volovina 🙂
Pavel72
ÚčastníkMomentálně nijak, teď nestíhám pracovně (a ten akutni problém jsem měl vyřešený klasickou 555 už v době psaní dotazu), nicméně až to zkusím, výsledek zde uvedu, to slibuju.
Luke_CZ
ÚčastníkTož jak jsi dopadl?
L.
Luke_CZ
ÚčastníkTož já bych v tomto případě určitě šel do rychlejší alternativy mcu. Pokud chceš ušetřit(kdo by nechtěl), tak bych zkusil i ESP8266. Wifi se dá vypnout, samotný 32-bit procák jede na 80MHz, 96 KiB RAM, 4MB FLASH (jsou i 16MB verze), SPI a I2C samozřejmostí.
Předpokládám, že budeš chtít na displeji zobrazovat rychlejší děje a mít hezké rozhraní, to samozřejmě nese nemalé nároky na rychlost a SRAM. Arduino v tomto případě jede na hraně(8-bit frekvence 16MHz a 2KiB SRAM).
Pro vývoj bych ti doporučil NodeMcu, ta má na sobě nejen ESP8266, ale rovnou i převodník USB<>RS232, programuje se v IDE Arduina a používá většinu knihoven jak klasické arduino. Stačí připojit a programovat.
Pokud by vadil pomalejší A/D převodník v mcu, tak dáš externí.L.
Vojtěch Vosáhlo
ÚčastníkU těhle dvou arduin se prakticky nespleteš, obě jsou totiž identický. Jen nano nemá 328p ale 328, takže trošku energeticky náročnější procesor (ale malinko). Jde tam třeba i o to, jak rychle chceš aby se obnovoval display, těmhle základním 8bitům to bude trvat déle než něčemu na vyšší frekvenci, třeba m0. Na netu se dají najít videa pro srovnání. Dá se třeba dokoupit i rychlejší čip pro ten display a mohl by si zůstat u Una/Nana.
Ty moduly jsou asi dobrá volba.technik91
ÚčastníkDěkuju moc mému zachránci… Přemáznul jsem to pak klasickým FW flasherem a sketch už pak šel jak po másle. Ušetřil jsi mi pár kaček a hlavně sr..ní s tím. Mám to totiž D1 mini a už jsem si plánoval že z toho to ESP odpájim a dám tam jiný pač mi ty destičky bylo líto, ale fakt se mi do toho nechtělo 😀
Mohu se zeptat co a proč s tím vlastně bylo?jirik610
ÚčastníkTak právě přemýšlím o výberu modulů , u sigmálového generátoru bych rád použil modul AD9851 což je genráto 70Mhz, přičemž pro moje potřeby by asi vyhověl i AD9850 ,ale jeho símus už u 30Mhz vykazuje 1% zkreslení ,kdežto AD9851 od 20 do 30Mhz jen 0,1% což je v tomto přípaďe přesňejši jako generátor u analizérů ukrajinské výroby AA200.
O displaji mám taky jasno rád bych tento:http://arduino-shop.cz/arduino/909-arduino-display-dotykovy-240x320px–1420987998.html
Nemohu se bohužel rozhodnout pro srdce .
Dle počtu vstupů a výstupů by mě měl stačit arduino nano http://arduino-shop.cz/arduino/1069-arduino-zakladni-deska-nano-v-30-driver-ch340.html , i když pohrávám si spíš s myší-lenkou na tento klon uno http://arduino-shop.cz/arduino/1353-klon-arduino-uno-r3-atmega328p-ch340-mini-usb-1466635561.html
Tady jde spíše o rozměr pod display.
Kopněte mě jestli na to jdu blbě, diky Jurajankop
ÚčastníkNevěš hlavu, to se mi povedlo mnohokrát. Jen pracuji v Lue a ne s Arduinem. Primárně vyzkoušej připojit GPIO0 na zem a současně dej reset. I když po resetu uvolníš GPIO0, tak by nic blikat už nemělo a bootloader by měl čekat na data. Já bych pak modul přemazal „prázdným souborem“ a bylo by. Teď se objevil na esp8266.com nový jednoduchý windows flasher, který dovede jednoduše paměť smazat, ale myslím, že má ještě nějaké nedostatky.
Nevím, jaký máš modul, ale můžeš ho zkusit přehrát třeba hodinama z mého webu, najdeš tam vše potřebné. Ta Lua by měla jít pak přeplácnout sketchem bez problémů.
technik91
ÚčastníkZdravím,
při hraní si s OTA se mi podařilo ESP nějak zkur…, od té doby jen tak pofidérně bliká ledka na modulu a nejde nahrát sketch… nepovedlo se někomu něco podobného? Myslím že opravdu zničené nebude, jen že tam je něco spatně zapsáno nebo tak něco. Klasické Arduino at s ním bylo cokoliv jsem vždy mohl natvrdo přehrát ISP programátorem ale tady nějak nevím co s tím….johnyhol
ÚčastníkAha, tak to je dobrej nápad, večer zkusím změřit celk. odběr a když tak zapojím na tráfko. Jinak jsem to napájel pouze přes USB 2.0 tak by to mohlo být ono. Ten modul mám opravdu W5100.
Díky za postřeh!
Dzaraaa
ÚčastníkJasný… Používá tedy wifi shield pro komunikaci TX a RX? Jesli bych mohl mít wifi shield zaklesnut do pinů arduina a musel bych tedy propojit RX a TX piny z boku?
MilosD
Účastníkjj , zkoušel , nahrál jsem FW a zkusil nahrát program na zkoušku.
// original sketch: http://shin-ajaran.blogspot.ro/2014/12/noobs-guide-to-esp8266-with-arduino.html // rewrite after photo by niq_ro from http://nicuflorica.blogspot.com/ // and http://arduinotehniq.blogspot.com/ void setup() { // initialize both serial ports: Serial.begin(115200); Serial2.begin(115200); } void loop() { while(Serial2.available()) Serial.write(Serial2.read()); while(Serial.available()) Serial2.write(Serial.read()); }
Jen to mam zabojené z RX TX z boku desky na 16,17 RX2 TX2 na Mega
edit:
Ještě ty Piny mám všechny doleMiroslava
ÚčastníkĎakujem pozrela som si článok 🙂 takže ide o to že neustále nazerám na stránku, resp. databázu či sa niečo nezmenilo – to je chytré použijem 🙂
posjirka
Účastníknavíc jestli máš čip wiznet w5100 tak ten má sám o sobě téměř 200mA …
posjirka
Účastníkpitvat ten kod teď vážně nestíhám a bez simulace zapojení celého zařízení i zbytečné.
Napadlo mě něco uplně jiného. jak celé zařízení napájíš?
On ethernet shield nemá zrovna zanedbatelný odběr i když se 150mA může zdát jako prd.
Většinou je Arduino stavěné na 500mA. Do to ho si dej LCD s podsvícením, ethernet sheild, čidla, případně relé, alarm … . Navíc by to odpovídalo té nahodilé konstelaci.Zbyšek Voda
ÚčastníkO té možnosti ovládání zařízení vzdáleně jsem psal tady: https://bastlirna.hwkitchen.cz/programovani-webovych-rozhrani-pro-arduino/.
Zařízení vystupuje v roli klienta a periodicky se připojuje na stránku a zkoumá například nějaký text – když narazí na L, tak motor vypne, když na H, zapne apod.
Stejně může fungovat informování o jeho stavu – když se stav změní, zaloguje se změna na stránku.
Vojtěch Vosáhlo
ÚčastníkJak psal Luke, lokálně to je úplně bez problému, webovky by v tomhle případě běželi přímo na ESP. A bez veřejné ip by mohla být řešením nějaká jednoduchá stránka třeba na webzdarma. Něco ve smyslu ovládací stránky. Modul by se potom mohl periodicky připojovat na tento web a číst nějaký soubor do kterého by bylo uloženo vaše nastavení a stavy když jste to na webu zadala. Stejně tak by mohl někam i zapisovat a stránky by ukazovala jeho stav. Odezva by sice asi nebyla dokonalá ale dá se to řešit i takhle.
Dzaraaa
ÚčastníkAno, děkuji, postup z uvedených odkazů se dá vyzkoušet. Zkoušel jste konkrétně vy?
johnyhol
ÚčastníkAhoj, tak jsem udělal několik testů pro odhalení závady.
1) jsem nahrál zpátky poslední funkční program (pouze jsem upravil/zaměnil LCD pin D4 za D30) bez měření teploty a výstupu na Exosite -> to fungovalo bez problémů
2) jsem zkusil pouze měření teploty a výstup na Exosite -> taky bez problémů
3) jsem zkusil znovu spojený program kotel + exosite -> a tady už byl zase problém – seknutý procesor
Takže problém bude asi to, že jsem přidal do funkčního kódu tu část pro měření teploty a výstup na Exosite na špatný místo a proto se to mezi sebou hádá. Zkus na to prosím mrknout jak by se to dalo spojit, aby to nedělalo neplechu.
Tady poslední funkční kód (pouze regulace kotle s LCD):// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 2_1_2017 // changelog // v 2_1_2017 // zmena desky na MEGA // precislovani pinu kvuli displeji a ethernetu // doplneny/zmeneny komentare // v 16_12_2016 // precislovani pinu kvuli displeji // testovani displeje // v 13_11_2016 // zrusena reakce na prostorovy termostat -> není potreba, reseno jiz v kotli // v 10_11_2016 // uprava seriove komunikace -> pridani casovacu jednotlivych funkci // v 5_11_2016 // zmena casu - upraveno pro realny provoz // v 4_11_2016 // zmena vsech vystupu na rele // v 14_5_2016 // precislovani pinu // zmena funkce fotobunky z digitalu na analog // dolpneni seriove komunikace o hodnotu fotobunky // v 30_3_2016 // oprava funkce tlacitka kvitace poruchy -> HIGH->LOW // umazani parametru "long cas=13000;" -> jiz neni potreba // umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba // umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba // umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne" u funkce zapaleni // drobne upravy textu/popisu jednotlivych parametru/funkci // v 27_3_2016 // uprava procesu zapalovani - nebude reagovat na prostorovy termostat // uprava dlouhych delayu na smycky, pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s // nastaveni definice poruch pro pozdejsi vyuziti // v22_3_2016 // uprava ladicich textu pro termostaty // v21_3_2016 // presunuti testuPlamene pouze do smycky udrzuj horeni // doplneni textu do testu horeni // oprava textu zprav // zruseni diakritiky // zapnuti alarmu pri vyskytu poruchy // v20_3_2016 // slouceni podminenych funkci // vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy) // rozdeleni funkci do vlastnich funkcnich bloku // zapojeni seriove komunikace pro odladeni funkci // v16_3_2016 // uprava podminky smycek (zruseno =) // posun zpozdeni 5s z procesu zapaleni na jeho konec // doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni // upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle // nastaveni poruchy a jeji kvitance tlacitkem na pinu 9 // definice poruch // bit funkce // 0 prehrati kotle pri zapalovani // 1 ztrata plamene pri horeni // 2 volne // 3 volne // 4 volne // 5 volne // 6 volne // 7 volne // knihovna watchdogu #include <avr/wdt.h> // knihovna displeje #include <LiquidCrystal.h> // nastaveni pinu displeje LiquidCrystal lcd(8, 9, 30, 5, 6, 7); #define davkovaniPelet 22 //davkovani pelet snek #define spirala 24 //zapalovaci spirala #define ventilator 26 //ventilator #define alarm 28 //signalizace poruchy #define kotlovyTermostat 2 //kotlovy termostat #define fotobunka 55 //fotobunka pro kontrolu plamene DI55 = A1 pro arduino MEGA #define trimr1 56 // nastaveni doby zapaleni DI56 = A2 pro arduino MEGA #define tlacitkoKvitance 3 // pin tlacitka kvitance poruchy //pin DI54 = A0 -> rezervace pro tlacitka displeje //pin D13 -> rezervace pro Ethernet Schield //pin D12 -> rezervace pro Ethernet Schield //pin D11 -> rezervace pro Ethernet Schield //pin D10 -> rezervace pro Ethernet Schield + pro podsviceni displeje //pin D4 -> rezervace pro SD kartu + pro displej //pin D1 -> rezervace pro seriovou linku //pin D0 -> rezervace pro seriovou linku int smycka1 = 0; // pomocna smycka - zapaleni int smycka1max = 720; // max.pomocne smycky - ted jiz nastavitelne trimrem na A2 60-720s int smycka2 = 0; // pomocna smycka - udrzeni horeni int smycka2max = 2; // max.pomocne smycky int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni int smycka3max = 2; // max.pomocne smycky int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet int smycka4max = 10; // max.pomocne smycky int smycka5 = 0; // pomocna smycka - rozhoreni int smycka5max = 5; // max.pomocne smycky int smycka6 = 0; // pomocna smycka - dohoreni int smycka6max = 84; // max.pomocne smycky byte porucha = 0; // promenna pro zaznam poruchy int ldr = 1; //analogovy pin kde je pripojen fotorezistor int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace lcd.begin(16, 2); // nastaveni displeje lcd.print("NAST.VSTUPY/VYST"); // zobrazeni na displeji lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("VYPINAM VS. RELE"); // zobrazeni na displeji delay (2000); pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(kotlovyTermostat, INPUT); pinMode(fotobunka, INPUT); pinMode(trimr1, INPUT); pinMode(tlacitkoKvitance, INPUT); // vsechno vypni vypniVse(); // nastav watchdog na 8s wdt_enable(WDTO_8S); } void loop() { wdt_reset(); // resetuj watchdog ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 720); // nastaveni doby zapaleni trimrem na A2 if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("TERMOSTAT ZAPNUT"); // zobrazeni na displeji delay (2000); // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapaleni //---------------- zapaleni(); // test poruchy // ----------------- //testPlamene(); // udrzeni horeni //-------------- udrzujHoreni(); // dohoreni //--------- dohoreni(); } else { Serial.println("Kotlovy/Prostorovy termostat vypnut"); // ladici seriova komunikace lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("TERMOSTAT VYPNUT"); // zobrazeni na displeji } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vse Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //vypni davkovani digitalWrite(spirala, HIGH); //vypni zhaveni digitalWrite(ventilator, HIGH); //vypni ventilator } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("ST.DAVKA "); // zobrazeni na displeji digitalWrite(davkovaniPelet, LOW); //davkuj pelety for (smycka4 = 0; smycka4 < smycka4max; smycka4 ++){ delay(1000); wdt_reset(); // resetuj watchdog Serial.print("Stav: "); Serial.print(smycka4); Serial.print("s/"); Serial.print(smycka4max); Serial.println("s "); lcd.setCursor(9, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print(smycka4); lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("/"); // zobrazeni na displeji lcd.print(smycka4max); } digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani digitalWrite(ventilator, LOW); //zapni ventilator digitalWrite(spirala, LOW); //zapni zhaveni } void zapaleni() { // funkce zapaleni pelet // 2 pokusy o zapaleni Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("ZAPALENI "); // zobrazeni na displeji for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smycka "1-10" minut zapalovani for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ wdt_reset(); // resetuj watchdog Serial.print("Pokus o zapaleni "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.println(smycka3max); // ladici seriova komunikace Serial.print("Stav: "); // ladici seriova komunikace Serial.print(smycka1); // ladici seriova komunikace Serial.print("s/"); // ladici seriova komunikace Serial.print(smycka1max); // ladici seriova komunikace Serial.println("s "); // ladici seriova komunikace lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("POKUS "); // zobrazeni na displeji lcd.setCursor(6, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print(smycka3); lcd.setCursor(7, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("/"); // zobrazeni na displeji lcd.print(smycka3max); lcd.setCursor(9, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print(smycka1); lcd.print(" "); // zobrazeni na displeji lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("/"); // zobrazeni na displeji lcd.print(smycka1max); if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace bitSet(porucha,0); // nastav poruchu bit c.0 na "1" } if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println(" hori ..."); // ladici seriova komunikace Serial.println("Rozhoreni ... 50s "); lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("ROZHORENI "); // zobrazeni na displeji lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("HORI... "); // zobrazeni na displeji } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } for (smycka5 = 0; smycka5 < smycka5max; smycka5 ++){ delay(1000); wdt_reset(); // resetuj watchdog Serial.print("Stav: "); Serial.print(smycka5); Serial.print("s/"); Serial.print(smycka5max); Serial.println("s "); lcd.setCursor(10, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print(smycka5); lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("/"); // zobrazeni na displeji lcd.print(smycka5max); } //delay(5000); //cekej 5s } } void udrzujHoreni() { // funkce udrzeni horeni ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ wdt_reset(); // resetuj watchdog smycka2 = 0; // vynuluj smycku if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen Serial.println("Test plamene ... hori"); // ladici seriova komunikace Serial.println("Davkuji pelety ... "); lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("DAVKOVANI "); // zobrazeni na displeji digitalWrite(davkovaniPelet, LOW); //davkuj pelety delay(4000); //pockej 4s wdt_reset(); // resetuj watchdog delay(4000); //pockej 4s wdt_reset(); // resetuj watchdog Serial.println("Pauza ... "); lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("HORENI "); // zobrazeni na displeji digitalWrite(davkovaniPelet, HIGH); //vypni davkovani delay(5000); //pockej 5s wdt_reset(); // resetuj watchdog delay(5000); //pockej 5s wdt_reset(); // resetuj watchdog } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(analogRead(fotobunka) >= 500){ //pokud fotobunka nevidi plamen Serial.println("Test plamene ... porucha"); // ladici seriova komunikace //lcd.clear(); // smaze displej pred dalsi smyckou lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("NEHORI - PORUCHA"); // zobrazeni na displeji //delay (500); smycka2 = smycka2max; // ukonci smycku //porucha = 1; // nastav poruchu bitSet(porucha,1); // nastav poruchu bit c.1 na "1" digitalWrite(alarm, LOW); // zapni alarm } } } else { smycka2 = smycka2max; // ukonci smycku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ... 840s "); // ladici seriova komunikace lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("DOHORENI "); // zobrazeni na displeji digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu for (smycka6 = 0; smycka6 < smycka6max; smycka6 ++){ Serial.print("Stav: "); Serial.print(smycka6); Serial.print("s/"); Serial.print(smycka6max); Serial.println("s "); lcd.setCursor(9, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print(smycka6); lcd.print(" "); // zobrazeni na displeji lcd.setCursor(12, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("/"); // zobrazeni na displeji lcd.print(smycka6max); delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(ventilator, HIGH); //vypni ventilator } void kvitancePoruchy() { // funkce kvitance poruchy if(porucha > 0 ){ // kdyz je porucha aktivni Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace // vypni vse vypniVse(); while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka digitalWrite(alarm, LOW); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace lcd.setCursor(0, 0); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("CEKAM NA KVITACI"); // zobrazeni na displeji wdt_reset(); // resetuj watchdog } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadna porucha ..."); // ladici seriova komunikace lcd.setCursor(0, 1); // (1 znak => sloupec,druhy znak => radek, prvni radek je 0) lcd.print("ZADNA PORUCHA..."); // zobrazeni na displeji digitalWrite(alarm, HIGH); // vypni alarm } }
a tady kód pro měření teploty a napojení na Exosite:
#include <EEPROM.h> #include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Exosite.h> // Pin use #define ONEWIRE 23 //pin to use for One Wire interface // Set up which Arduino pin will be used for the 1-wire interface to the sensor OneWire oneWire(ONEWIRE); DallasTemperature sensors(&oneWire); /*============================================================================== * Configuration Variables * * Change these variables to your own settings. *=============================================================================*/ //String cikData = "6c1d94611bda02dbaa5cc6640218cd0360088b7f"; // <-- FILL IN YOUR CIK HERE! (https://portals.exosite.com -> Add Device) byte macData[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; // <-- Fill in your Ethernet shield's MAC address here. // Enter your Unique Identifier code here char unique_id[11] = "0020024A24"; // <-- Generated from Adding your device in portals.exosite.com // Use these variables to customize what datasources are read and written to. const String readString = "d25"; // Number of Errors before we try a reprovision. const unsigned char reprovisionAfter = 3; // User defined variables for Exosite reporting period and averaging samples #define REPORT_TIMEOUT 30000 //milliseconds period for reporting to Exosite.com #define SENSOR_READ_TIMEOUT 5000 //milliseconds period for reading sensors in loop /*============================================================================== * End of Configuration Variables *=============================================================================*/ unsigned char errorCount = reprovisionAfter; // Force Provision On First Loop char macString[18]; // Used to store a formatted version of the MAC Address EthernetClient client; //Exosite exosite(cikData, &client); Exosite exosite(&client); String tempString; int index = 0; int lastIndex = -1; float tempC; // // The 'setup()' function is the first function that runs on the Arduino. // It runs completely and when complete jumps to 'loop()' // void setup() { Serial.begin(115200); Serial.println("Boot"); pinMode(25, OUTPUT); //assume using D25 as output to control remotely // Start up the OneWire Sensors library sensors.begin(); delay(1000); Serial.println("Starting Exosite Temp Monitor"); Serial.print("OneWire Digital Pin Specified: "); Serial.println(ONEWIRE); Ethernet.begin(macData); // wait 3 seconds for connection delay(3000); } // // The 'loop()' function is the 'main' function for Arduino // and is essentially a constant while loop. // void loop() { static unsigned long sendPrevTime = 0; static unsigned long sensorPrevTime = 0; char buffer[7]; String readParam = ""; String writeParam = ""; String writeString = ""; String returnString = ""; index = 0; lastIndex = -1; // Check if we should reprovision. if (errorCount >= reprovisionAfter) { if (exosite.provision("exosite", "ard-generic", unique_id)) { errorCount = 0; } } String uptime_str = String(millis()/1000); writeString += "uptime="+ uptime_str; //GET ANALOG 1 VALUE //get average of a number of readings int avgValue=0; int readings = 0; unsigned long avgTot = 0; int avgCnt = 0; while(readings<10) { avgTot += analogRead(A1); avgCnt += 1; avgValue = avgTot/avgCnt; readings++; } String analog1_str = String(avgValue); writeString += "&a1="+ analog1_str; //Make Write and Read request to Exosite Platform Serial.println("---- Do Read and Write ----"); if (exosite.writeRead(writeString, readString, returnString)) { Serial.println("OK"); Serial.print("Returned: "); Serial.println(returnString); Serial.println("Parse out dataport alias values"); errorCount = 0; for(;;){ index = returnString.indexOf("=", lastIndex+1); if(index != 0){ String alias = ""; tempString = returnString.substring(lastIndex+1, index); Serial.println(tempString); lastIndex = returnString.indexOf("&", index+1); alias = tempString; if(lastIndex != -1){ tempString = returnString.substring(index+1, lastIndex); }else{ tempString = returnString.substring(index+1); } if (alias == "d25"){ if(tempString == "1"){ digitalWrite(25, 1); Serial.println("set Digital25 to 1"); }else if(tempString == "0"){ digitalWrite(25, 0); Serial.println("set Digital25 to 0"); }else{ Serial.println(tempString); } } else if (alias == "msg"){ Serial.print("Message: "); Serial.println(tempString); } else { Serial.println("Unknown Alias Dataport"); } if(lastIndex == -1) break; }else{ //Serial.println(F("No Index")); break; } } } else { Serial.println("No Connection"); errorCount++; } Serial.print("."); // print to show running // Read sensor every defined timeout period if (millis() - sensorPrevTime > SENSOR_READ_TIMEOUT) { Serial.println(); Serial.println("Requesting temperature..."); sensors.requestTemperatures(); // Send the command to get temperatures tempC = sensors.getTempCByIndex(0); Serial.print("Celsius: "); Serial.print(tempC); Serial.println(" C ..........DONE"); sensorPrevTime = millis(); } // Send to Exosite every defined timeout period if (millis() - sendPrevTime > REPORT_TIMEOUT) { Serial.println(); //start fresh debug line Serial.println("Sending data to Exosite..."); readParam = ""; //nothing to read back at this time e.g. 'control&status' if you wanted to read those data sources writeParam = "temp="; //parameters to write e.g. 'temp=65.54' or 'temp=65.54&status=on' String tempValue = dtostrf(tempC, 1, 2, buffer); // convert float to String, minimum size = 1, decimal places = 2 writeParam += tempValue; //add converted temperature String value //writeParam += "&message=hello"; //add another piece of data to send if ( exosite.writeRead(writeParam, readParam, returnString)) { Serial.println("Exosite OK"); if (returnString != "") { Serial.println("Response:"); Serial.println(returnString); } } else { Serial.println("Exosite Error"); } sendPrevTime = millis(); //reset report period timer Serial.println("done sending."); } delay(1000); //slow down loop }
Nefunkční kód (moje spojení dvou předešlých kódů) je v mým příspěvku #9905.
Předem moc díky!MilosD
ÚčastníkJsem na tom stejně , ale našel jsem pár dalších odkazů , kde by to už mělo být jasnější 🙂
http://nicuflorica.blogspot.cz/2016/09/placa-de-retea-wifi-shield-cu-esp8266mod.html
http://blog.jeronimus.net/2016/07/esp8266-wangtongze-arduino-uno-shield.html
http://forum.arduino.cc/index.php?topic=353502.0
https://github.com/sleemanj/ESP8266_Simple/tree/master/firmwareLuke_CZ
ÚčastníkTo je nutné vyzkoušet, ačkoliv jsou i 3.3V LCD moduly. Zrovna jich tu pár mám 🙂
L.
posjirka
Účastníkpcf8574 má opravdu rozsah napajeni jak pises, je ty LCD nemusi byt spolehlive.
třeba winstary maji rozsah napajeni 4,7-5,3V, LED podsvícení 4,2V:
https://www.gme.cz/data/attachments/dsh.513-215.1.pdf
Je mi jasné že to může fungovat jen nevěřím spolehlivé funkci…Luke_CZ
Účastníkto posjirka:
Použitý IC backpacku PCF8574 má rozsah napájení 2.5 – 6V, tož jde jen o to, aby se s 3,3V popral LCD. Ty levné to zvládají.L.
Dzaraaa
ÚčastníkProšel jsem pár odkazovaných článků ale nic mě nedovedlo k mému řešení.
Potřeboval bych pomoci najít postup, jak skloubit chod shieldu, který bude zapojen na arduinu. Je-li třeba propojit nějaké piny nebo stačí zastrčené? Část začátku programu a uvedení do provozu. Děkuji.posjirka
Účastníkto luke_CZ:
to máš i napájení LCD na 3,3V ? to mi přijde strašně málo. Mám právě strach, že nebude LCD na 3,3V stabilní. Když dá napájení na 5V, data na 3,3V tak je to akorát na odpálení arduina.Strojek
ÚčastníkLuke a co podsviceni neni to na 3,3V slabe ?? radeji si pockam na ten prevodnik a ds3231 take pripojim na tech 5V i kdyz bezi na 3,3V.
Luke_CZ
ÚčastníkMě jede I2C lcd i na 3,3V, tož to taky vyzkoušej. Jen budeš muset poladit trimrem kontrast.
L.
posjirka
Účastníkkoukám, že dám příspěvek a mezi tím se vloží jiný dotaz/odpově´d.
Už vím jak se cítí schizofrenik 🙂 -
AutorPříspěvky