yenda.net
Vytvořené odpovědi
-
AutorPříspěvky
-
Simakai
ÚčastníkProjekt mám víceméně hotový. Nepodařilo se mi rozběhnout MicroSD modul na klasickém SPI rozhraní spolu s termočlánky (MAX6675), tak jsem na to musel od lesa. Stáhl jsem si SDfat knihovnu a použil tam SoftwareSPI definici pro objekt SD a drátově jsem zapojil MicroSD modul na jiné piny než mám termočlánky. Pak zbývalo jen poladit správné příkazy pro SDfat a fičí to. Po hardwarových SPI pinech 50, 51, 52 mi jedou termočlánky a po softwarových SPI pinech 10, 11, 12 mi jede SD karta.
Onygzz
ÚčastníkKnihovnu pro servo mám jinou než defaultní právě pro to, že ta původní používala stejný časovač jako knihovna pro melodie Tone.h. V této knihovně se to zapisuje délkou pulzu a ne ve stupních. Samostatně to ovládání serva fungovalo, jen mi to nechtělo chodit po té podmínce X úspěšných pokusů. Nakonec jsme to s kamarádem rozchodili. Udělali jsme samostatnou funkci pro otevřít/zavřít servo a tu jsme pak po splnění podmínky X úspěšných tahů jen zavolali. Takže už to víceméně funguje 😉
posjirka
ÚčastníkTak jsem ti zrušil reakci na prostorovy termostat pri procesu zapalovani.
Navic je tam watchdog – resetuje sam procesor kdyz se zakousne (8s)
to tedy vyvolalo zmenu dlouhych delayu na smycku kratkych dealyu.
Pritom tam je navic na kazdem rohu reset casovace watchdogu – zabranuje autoresetu.
Zkus to prosím otestovat. novy kod:// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 27_3_2016 // changelog // 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 termostat� (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> #define davkovaniPelet 6 //davkovani pelet � snek #define spirala 5 //zapalovaci spirala #define ventilator 3 //ventilator #define alarm 10 //signalizace poruchy #define prostorovyTermostat 12 //prostorovy termostat #define kotlovyTermostat 2 //kotlovy termostat #define fotobunka 8 //fotobu�ka pro kontrolu plamene #define trimr1 14 // nastaveni doby zapaleni DI14 = A0 pro arduino UNO #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy long cas=13000; int smycka1 = 0; // pomocna smycka - zapaleni int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s 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 = 12; // 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 void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(prostorovyTermostat, INPUT); 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 Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0 if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty Serial.println("Prostorovy termostat zapnut"); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapaleni //---------------- zapaleni(); // test poruchy // ----------------- //testPlamene(); // udrzeni horeni //-------------- udrzujHoreni(); // dohoreni //--------- dohoreni(); } } else { Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vse Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //vypni davkovani digitalWrite(spirala, LOW); //vypni zhaveni digitalWrite(ventilator, LOW); //potom vypni ventilator } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ... 12s"); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //davkuj pelety for (smycka4 = 0; smycka4 < smycka4max; smycka4 ++){ delay(1000); wdt_reset(); // resetuj watchdog } //delay(12000); //po dobu 12s digitalWrite(davkovaniPelet, LOW); //potom vypni davkovani digitalWrite(ventilator, HIGH); //zapni ventilator digitalWrite(spirala, HIGH); //zapni zhaveni } void zapaleni() { // funkce zapaleni pelet // 3 pokusy o zapaleni Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smycka "1-10" minut zapalovani for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ wdt_reset(); // resetuj watchdog Serial.print("Pokus "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.print(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 //if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne if(digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne digitalWrite(spirala, LOW); //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(digitalRead(fotobunka) == HIGH){ //pokud fotobunka vidi plamen digitalWrite(spirala, LOW); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println(" hori ..."); // ladici seriova komunikace } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } for (smycka5 = 0; smycka5 < smycka5max; smycka5 ++){ delay(1000); wdt_reset(); // resetuj watchdog } //delay(5000); //cekej 5s } } void udrzujHoreni() { // funkce udrzeni horeni Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ wdt_reset(); // resetuj watchdog smycka2 = 0; // vynuluj smycku if(digitalRead(prostorovyTermostat) == HIGH && digitalRead(kotlovyTermostat) == HIGH){ // prostorovy + kotlovy termostat je zapnuty if(digitalRead(fotobunka) == HIGH){ //pokud fotobunka vidi plamen Serial.println("Test plamene ... hori"); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //davkuj pelety delay(1000); //pockej 1s digitalWrite(davkovaniPelet, LOW); //vypni davkovani delay(1000); //pockej 1s } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(digitalRead(fotobunka) == LOW){ //pokud fotobunka nevidi plamen Serial.println("Test plamene ... porucha"); // ladici seriova komunikace smycka2 = smycka2max; // ukonci smycku //porucha = 1; // nastav poruchu bitSet(porucha,1); // nastav poruchu bit c.1 na "1" digitalWrite(alarm, HIGH); // zapni alarm } } } else { smycka2 = smycka2max; // ukonci smycku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //vypni davkovani pelet digitalWrite(spirala, LOW); //vypni zhaveni - pro jistotu for (smycka6 = 0; smycka6 < smycka6max; smycka6 ++){ delay(1000); wdt_reset(); // resetuj watchdog } //delay(84000); //pockej 84s digitalWrite(ventilator, LOW); //potom 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) == HIGH) { // zapni alarm a cekej na stisk tlacitka digitalWrite(alarm, HIGH); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace wdt_reset(); // resetuj watchdog } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, LOW); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadna porucha ..."); // ladici seriova komunikace digitalWrite(alarm, LOW); // vypni alarm } }
posjirka
Účastníkve výsledku, napiš nám co přesně má tvůj program dělat a podíváme se na to, nebo tě aspon nasměrujeme. někdy je vhodné použít podmínku „if“ pro přesný čas, nekdy pro časový usek …
možná ti trochu pomůžu příspěvkem z trochu jiného tématu, ale výsledk je podobný.
http://arduino.sk/viewtopic.php?f=4&t=152&sid=48998740df66b243127485c0f35cd739případně tady máš příklad budíku:
http://arduino.sk/viewtopic.php?f=3&t=209&sid=48998740df66b243127485c0f35cd739posjirka
Účastníknrf24l01 mám doma si rok a půl a leží celou dobu v šuplíku 🙂
nechal jsem se nachytat a na ebayi byl veden jako wifi adapter.
Tak jsem jej objednal bez ověření si informací 🙂 . důvěřuj ale prověřuj.
50 m je vcelku dost a moc bych na tu spolehlivost nedal ani v jednom případě.
Nemáš tam třeba ethernet? i tak by to šlo řešit.
Bezdrát budeš ladit dlouho a zbytečně…
Toto budou vcelku choulostivé data a udržet je v pořádku bude znamenat poslat min.2x-3x a porovnat si výsledky. přípaně výběr 2 ze 3 …použij Rs485 a budeš mít klid.
posjirka
Účastníka po 2 hodinách se ti zhroutí komunikace nebo resetuje arduno?
Pokud linka videl bych to na zahlcený buffer, pokud reset arduna tak chyba v čipu.
zkoušel jsi i jiný arduino?
Stačil by čip s ledkou…posjirka
Účastníkodkud máš knihovnu na ovládání serva?
Ano vidím že je pro časovač timer2, ale i tak se na servo zapisuje uhel natočení serva v rozsahu 0-180 st.
Ty máš zapsané
a.write(2000);
tedy 2000 st.
dej tama.write(0); delay(2000); a.write(180); delay(2000);
to by mělo otočit servem zleva doprava.
Navíc
a.attach(9);
by se měl definovat pouze 1x a to ve funkci Setup()rob.brno
Účastníkčlánek připojuj na analog. vstup přes odpor, který při otočení polarity vstup ochrání. Na vstupech atmegy jsou připojeny ochranné diody vůči zemi a VCC, takže veškerá napětí mimo intervalu od asi -0,3V až VCC+0,3V „zkratuje“. Ten odpor omezí zkratový proud, takže zvol vhodnou velikost např. 10k(max. proud při 1,4V do vstupu bude 1,1/10000).
rakocid
Účastníkvyskúšal som posielať 3 bajty, vzdialenosť minimálna, zdroj som zvýšil na 2 ampere, nikdy to nevydrží dlhšie ako hodinu.
rob.brno
ÚčastníkNebo můžeš použít knihovnu time, která interpretuje čas a datum jako jedno číslo typu long a udává počet sekund tuším od 1.1.1970 0:0:0
Má v sobě i funkce na převod z tohoto formátu na datum a čas i nazpět. Porovnával bys pak vlastně jen dvě long čísla s „vymaskovanýma“ vteřinama nebo i minutama.rob.brno
ÚčastníkPrávě přemýšlím nad komunikací mezi dvěma arduiny(v domě a v rámci pozemku, tedy nějakých max.50m daleko), po drátech bych ji řešil po RS485. Vzduchem mě prvně napadl bluetooth, ale to je pro tento případ asi zbytečné.
Tyhlety moduly RF: http://www.ebay.com/itm/433Mhz-WL-RF-Transmitter-Receiver-Module-Link-Kit-for-Arduino-ARM-MCU-Wireless-/380717845396?hash=item58a48d4b94:g:x9cAAMXQigBSMp4X jsou jen pro jednosměrnou komunikaci?Ted jsem viděl i moduly NRF24 na 2,4GHz, např.: http://www.ebay.com/itm/2PCS-Arduino-NRF24L01-2-4GHz-Wireless-RF-Transceiver-Module-New-/262150618543?hash=item3d0964fdaf:g:YP4AAOSwLzdWTYYk
Chci dělat řízení nabíjení elektroauta z FVE na konektoru Mennekes podle volného výkonu z FVE. Měřící zařízení bude v rozvaděči na přípojce a nabíjení kdekoliv okolo domu. Jde o to, aby se např. každou vteřinu přenesla informace o volném dostupném výkonu ve Wattech(takže na to budou stačit 2B).
Byl by pro tento účel modul NRF24 vhodný?
johnyhol
ÚčastníkNo mělo by to prakticky reagovat jenom na prostorák. Kotlový termostat vypne pouze, když je teplota kotle vyšší než cca. 85°, takže je to během zapalování vyloučený. (proces zapalování začíná cca. při 75°)
oplocky
ÚčastníkDěkuji, – zkusil jsem poslat mail kolem možná budoucího projektu
můj také dočasný mail – oplockyj@volny.czposjirka
Účastníkto oplocky:
nechci sem dávat svuj soukromý mail, tak mi napiš na
posjirka-arduino@seznam.cz
je to dočasný mail a nebudu tam pořád, nicméně tě pak přesměruju na soukromý mail…posjirka
Účastníknedělal jsem s tím nic (tlačítko potvrzení poruchy).
K tomu bodu 3.
3) test vypnutí termostatu během zapalování
na jaký termostat má reagovat a najaký nemá.
Předpokládám, že kotlový termostat může vypnout i při žhavení a v tu chvíli bych měl se vším skončit a nechat dohořet.
Prostorový termostat bude jak při žhavení?
Na začátku aby vubec začal proces žhavení je třeba mít oba dva termostaty sepnuté.
Po startu muže prostorový termostat vypnout.
Jestli to chápu správně chceš aby zapálení už po startu nebylo na prostorovém termostatu závislé a na jeho vypnutí by reagoval až v procesu udržení hoření?oplocky
Účastníkjohnyhol
ÚčastníkTak jsem na to koukal a mám to přesně tak zapojený jako je to tam. Je zajímavý, že tam ta ztráta plamene funguje tak jak jsem požadoval: vypne dávkování, zapne/ohlásí to poruchu a doběhne ventilátor. Po stisknutí tlačítka to opět normálně naběhne. (tzn. začne proces zapalování) Ty už jsi s tím něco dělal? Jinak ten bod tři z posledního příspěvku je i tam stejný jak píšu v předešlým příspěvku. Jo a jak píšeš, že když kliknu na součástku tak se ukáže popis, tak to nefunguje, ale to nevadí, dá se v tom v pohodě vyznat.
posjirka
Účastníkzkus jestli se dostaneš sem:
https://123d.circuits.io/circuits/1638547-regulace-pro-peletkovy-kotel
Je tam celé zapojení + simulator včetně kodu.
Autor jsem já, takže jen já mám právo změn, ale můžeš si to vyzkoušet a podívat se jak je co zapojený. Ať zbytečně zasaviníme toto forum …
Když klikneš na součástku tak se ti ukáže co je to zač/co simuluje …jurisek81
Účastníkjurisek81
ÚčastníkDobrý den,
Arduino sice neumím ale mohl bych to udělat na PLC. Amit ADiR. Cena jednotky je ale 8.000 bez DPH. Programování velmi jednoduché. Je to PLC, má to dlouhou životnost a vysokou spolehlivost. Programově nic složitého. Uměl bych i navrhnout a vyrobit rozvaděč pro silové řízení. Jsem z Ostravy.
S pozdravem
Jiří Krmašek
johnyhol
ÚčastníkZdravím, tak jsem to vyzkoušel a poznatky jsou následující:
1) test zapálení, rozhoření, hoření, vypnutí jednoho z termostatů, dohoření -> OK
2) test ztráty plamene během hoření -> tady je něco špatně. Pokud fotobuňka nevidí plamen, tak správně vypne dávkování pelet, ale potom běží čas na dohoření 84s a až pak to začne znovu dávkovat pelety a začne nový pokus o zapálení (respektive dva a pak to jede od znova pořád dokola) a hlavně to nesignalizuje chybu „Alarm“ na výstupu 10 – tady bych to řešil pouze vypnutím dávkování, mohl by ještě doběhnout ventilátor a pak by to zapnulo/ohlásilo poruchu. Jak jsem psal už dřív, tak se tato situace stává pouze když dojdou pelety, proto bych se tím zbytečně moc nezabýval.
3) test vypnutí termostatu během zapalování -> vypne to spirálu a začne běžet dohoření. Taky bych to trochu poopravil, aby to nechalo žhavit po nastavenou maximální dobu (10min.), nebo pokud to nezapálí a pak aby to dalo řekněme dvě dávky paliva a začal proces dohoření. Tím by se vyřešil případný problém s kopou pelet v komoře hořáku při dalším zapálení/zapnutí termostatu.
Díky!dejvicz
ÚčastníkKoukni na https://www.youtube.com/watch?v=ED-eUlwiN6I
Je to více méně použití bezdrátového ovládání a posílání dat na frekvenci 433 jak zmiňoval posjirkaposjirka
Účastníkto je fakt zvláštní. Jak budu mít trochu času a prostředků, tak to zkusím na normálním arduinu. Teď jedu přes simulátor. v příloze je hrubý diagram funkce …
Attachments:
johnyhol
ÚčastníkTakhle by to asi šlo, vyzkouším a dám vědět. Jenom u toho nastavení max. zapalovací doby mně to tak jak píšeš nefunguje. Když dám pin přímo na zem tak to běží cca. 3,5min. a když ho dám na 5V tak to běží cca. 21,5min. Takže když jsem dal 10K trimr na střed, tak mi to běželo cca. 12min a proto jsem to musel honit abych tam dostal těch požadovaných 10min.
posjirka
Účastník// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 20_3_2016 // changelog // v20_3_2016 // sloučení podmíněných funkcí // vypnuti zhaveni pri rozepnutí termostatů (kotlový nebo prostorový) // rozdeleni funkci do vlastnich funkcnich bloku // zapojeni seriove komunikace pro odladeni funkci // v16_3_2016 // uprava podmínky smyček (zrušeno =) // posun zpoždění 5s z procesu zapálení na jeho konec // doplněna podmínka reakce na termostaty (kotlový/prostorový) v procesu zapálení // 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 // nastavení poruchy a její kvitance tlačítkem na pinu 9 #define davkovaniPelet 6 //dávkování pelet – šnek #define spirala 5 //zapalovací spirála #define ventilator 3 //ventilátor #define alarm 10 //signalizace poruchy #define prostorovyTermostat 12 //prostorový termostat #define kotlovyTermostat 2 //kotlový termostat #define fotobunka 8 //fotobuňka pro kontrolu plamene #define trimr1 14 // nastaveni doby zapaleni DI14 = A0 pro arduino UNO #define tlacitkoKvitance 9 // pin tlačítka kvitance poruchy long cas=13000; int smycka1 = 0; // pomocna smycka - zapálení int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s int smycka2 = 0; // pomocna smycka - udržení hoření int smycka2max = 2; // max.pomocne smycky int smycka3 = 0; // pomocna smycka - počet pokusu o zapalení int smycka3max = 2; // max.pomocne smycky int porucha = 0; // proměnná pro záznam poruchy (zatím v režimu 0-1) void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(prostorovyTermostat, INPUT); pinMode(kotlovyTermostat, INPUT); pinMode(fotobunka, INPUT); pinMode(trimr1, INPUT); pinMode(tlacitkoKvitance, INPUT); // vsechno vypni vypniVse(); } void loop() { Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni dobz zapaleni trimrem na A0 if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty if(digitalRead(kotlovyTermostat) == HIGH){ // kotlový termostat je zapnutý // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapálení //---------------- zapaleni(); // test poruchy // ----------------- testPlamene(); // udržení hoření //-------------- udrzujHoreni(); // dohoření //--------- dohoreni(); } } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vše Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //vypni dávkování digitalWrite(spirala, LOW); //vypni žhavení digitalWrite(ventilator, LOW); //potom vypni ventilátor } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety delay(12000); //po dobu 12s digitalWrite(davkovaniPelet, LOW); //potom vypni dávkování digitalWrite(ventilator, HIGH); //zapni ventilátor digitalWrite(spirala, HIGH); //zapni žhavení } void zapaleni() { // funkce zapaleni pelet // 3 pokusy o zapálení Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smyčka "1-10" minut zapalování for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ Serial.print("Pokus "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.print(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 if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne digitalWrite(spirala, LOW); //vypni žhavení smycka1 = smycka1max; // ukonči smyčku1 smycka3 = smycka3max; // ukonči smyčku3 Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace } if(digitalRead(fotobunka) == HIGH){ //pokud fotobuňka vidí plamen digitalWrite(spirala, LOW); //vypni žhavení smycka1 = smycka1max; // ukonči smyčku1 smycka3 = smycka3max; // ukonči smyčku3 Serial.println(" hori ..."); // ladici seriova komunikace } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } delay(5000); //čekej 5s } } void testPlamene() { // test plamene Serial.println("Test plamene ..."); // ladici seriova komunikace if(digitalRead(fotobunka) == LOW){ //pokud fotobuňka nevidí plamen delay(1000); // pocekej jeste 1s a zkus to znovu if(digitalRead(fotobunka) == LOW){ //pokud fotobuňka nevidí plamen if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty if(digitalRead(kotlovyTermostat) == HIGH){ // kotlový termostat je zapnutý // tzn. termostaty chteji topit, ale plamen se nezapalil porucha = 1; // nastav poruchu } } } } if(porucha == 1){ Serial.println("Test plamene ... porucha"); // ladici seriova komunikace } else { Serial.println("Test plamene ... ok"); // ladici seriova komunikace } } void udrzujHoreni() { // funkce udržení hoření Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ smycka2 = 0; // vynuluj smyčku if(digitalRead(prostorovyTermostat) == HIGH && digitalRead(kotlovyTermostat) == HIGH){ // prostorovy + kotlovy termostat je zapnuty if(digitalRead(fotobunka) == HIGH){ //pokud fotobuňka vidí plamen digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety delay(1000); //počkej 1s digitalWrite(davkovaniPelet, LOW); //vypni dávkování delay(1000); //počkej 1s } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(digitalRead(fotobunka) == LOW){ //pokud fotobuňka nevidí plamen smycka2 = smycka2max; // ukonči smyčku porucha = 1; // nastav poruchu } } } else { smycka2 = smycka2max; // ukonči smyčku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //vypni dávkování pelet digitalWrite(spirala, LOW); //vypni žhavení - pro jistotu delay(84000); //počkej 84s digitalWrite(ventilator, LOW); //potom vypni ventilátor } void kvitancePoruchy() { // funkce kvitance poruchy Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace if(porucha > 0 ){ // když je porucha aktivní // vypni vse vypniVse(); while (digitalRead(tlacitkoKvitance) == HIGH) { // zapni alarm a cekej na stisk tlačítka digitalWrite(alarm, HIGH); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, LOW); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadan porucha ..."); // ladici seriova komunikace digitalWrite(alarm, LOW); // vypni alarm } }
Je tam pro odladění nastavena komunikace po seriove lince.
Po odladění jí můžeš smazat/zakomentovat. je dobře označenaduck130883
ÚčastníkDiky za tip s temi zasuvkami, neco takoveho by bylo taky reseni ale ja bych potreboval misto spinaciho tlacitka neco jako spinaci rele.
Jinak, napisu to jako blb, protoze mi to asi nejde moc dobre vysvetlit.
-idealni by byl nejaky vysilac a prijimac a vetsim dosahem
-vysilac bych zapojil misto puvodni LED diody
-prijimac bych zapojil nekde dal mezi baterii a led diodu
-kdyz by vysilac dostal signal (puvodni proud pro LEDku) na dalku by sepl prijimac ktery by slouzil jako rele a pustil by proud z baterie do LEDkyMyslim si ze neco takoveho musi prece uz existovat hotove, nebo se pletu?
A ted k veci, proc to vlastne potrebuji a na co.
– mam software v PC kde v realnem case striham video z kamer
– do pc mam zapojene Arduino UNO R3 a v nem nahrama Firmata, ktere potrebuje soft v PC aby mohl s deskou komunikovat.
– deska pak dle pokynu softu v PC pousti prou do ruznym pinu a spina ruzne pripojene LEDky, ktere jsou natazeny u jednotlivych kamer
– kdyz v softweru v PC zvolim kameru1 tak clovek u kamery1 vidi rozsvicenou LEDku a tim padem vi ze ho vysilam a ma si davat majzla.V podtate se jedna o jednoduche tzv. TALLY LIGHTS
Ted uz umim bezdratove prenaset obraz z HDMI a chtel bych i TALLY bezdratove, proto to resim.
Nevim zda je to mozne cele zprovoznit jenom s prvky od ARDUINA protoze programarine ARDUINA vubec nerozumim a netusim co vsechno to umi nebo umi.
Nebo spis zakhle, ARDUINO umi hodne, JA umim malo.Treba ani netusim kdyz budu mit jedno arduino s modulem nRF24L01+ tak zda je mozne ovladat s nim vice arduin s tim samym modulem soucasne.
predem diky za info
posjirka
Účastník1) Proces zapalování je zdá se v pořádku, včetně nastavení max. zapalovací doby trimrem (mimochodem super nápad, není to sice moc elegantní – musel jsem si s tím trochu pohrát abych tam dostal těch 10min., ale účel to splní)
Právě že to máš vcelku jednoduché, buď ten pin dáš přímo na zem (1 minuta) nebo na +5V (10 minut)
2) Zkoušel jsem simulovat během zapalování vypnutí prostoráku a tady to ještě bude chtít odladit -> po vypnutí to pořád žhaví a točí se ventilátor, ten se po 84s vypne, ale spirála žhaví dál. Hlavně to vůbec nereaguje na fotobuňku.
Opraveno …
3) Zkoušel jsem taky simulovat ztrátu plamene během hoření a tady je to celkem v pořádku – přestane to podávat pelety, počká to 84s, pak vypne ventilátor a začne proces zapalování -> tady by to možná chtělo řešit poruchou, protože plamen by pokud se nezasekne peleta v dopravníku, nebo nedojdou pelety neměl zhasnout nikdy.
opraveno + doplněna porucha při ztrátě plamene při hoření.
Zkusil jsem udělat takovou fintu: kontroluje že tam je plamen a pokud ne počká 1s a zkusí to znovu. Pak vyhlási chybu.Podívej se na to a vyzkoušej. Kod dám do dalšího příspěvku:
posjirka
Účastníkco spíš použít formu dotaz/odopvěď.
Můžeš si říct, že char(2) je dotaz na minutu, char(3) dotaz na hodinu, …
tím pádem nebudeš posílat 18 bytů (bitu?) v základu je I2C (TWI) navržena pro komunikaci po 8 bitech + adresa + start/stop bity.
Zkus si poslat jednoduché informace : … posílej si stále dokola číslo po každém přijmuti jej zvyš o 1.je to super pro monitorování stability komunikace. Při každé přijmuté odpovědi si můžeš ověřit, že jsi dostal správné data, případně si nechat rozsvítit LED diodu jako chybu .posjirka
Účastníkexistuje, třeba bezdrátově ovládané zásuvky na 433MHz:
http://www.conrad.cz/bezdratove-spinaci-systemy-433-mhz.c0806012
tím můžeš spínat spotřebiče na dálku pomocí ovladače. Ovladač se spáruje se zásuvkami, takže vlastně může 1 ovladač teoreticky ovládat na 1 tlačítko více zásuvek zároveň.
Samotné arduino nemusí využívat vždy SPI rozhraní. Navíc analogové vstupy jdou také přepnout na digitální vstupy/výstupy.
Pro komunikaci můžeš použít boduly jako Bluetooth nebo WIFI. Ty jsou připojené přes UART, takže zabírají pouze 2 piny.Jde spíš o to jaké potřebuješ finální řešení = co to vlastně bude dělat….
rakocid
Účastníkmusím použivať odpory?, keď mam na wire zbernicu pripojene ds3231? myslím že už ds3231 obsahuje odpory. Skúsil som to snimi aj bez nich ale správalo sa to rovnako. mohlo by pomocť vyradiť z ds3231 interne rezistory a pridať externe s nižsím odpor?
Alebo som rozmýšľal neposielať naraz 18 bytov ale rozdeliť to. Pýtať si napríklad po troch postupne. Nieje to veľa? Ale neviem ako sa to robí, či sa to dá. DS3231 knižnica funguje tak že si pýta stále len to čo potrebuje s funkciami (getSecond(); getMinute();…). Dalo by sa takéto slave zariadenie urobiť aj z arduino nano?
Ďakujem za radi
-
AutorPříspěvky