posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
nrf24l01 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()posjirkaÚč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í?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 …posjirkaÚč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:
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čenaposjirkaÚč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….
posjirkaÚčastníkKoukám, že jsi použil tutorial odtud :
Tutoriál – užívání hodin reálného času DS1307 a DS3231 s Arduinem
Je to v pořádku, člověk se musí učit na něčem vyzkoušeném. Na mě je to zbytečně komplikované. Doporučoval bych použít tuto knihovnu + exampl:
https://github.com/JChristensen/DS3232RTC/blob/master/examples/TimeRTC/TimeRTC.ino
Ten kod se ti zpřehlední a bude pro tebe možná srozumitelnější. k jednotlivým informacím se dostáváš pomocí předdefinovaných funkcím. Např pro aktuální minutu použiješ :
int AktualniMinuta = minute();
Knihovna používá kombinaci sznchronizovaného času z RTC +knihovnu arduina Time pro přístup k aktuálnímu času.To s odopjením modulu od arduina: možná bych zkusil odpojit baterii a dát tam jinou.
Pro nastavení zapnutí/vypnutí bych tě odkázal na forum, kde jsem něco podobného už řešil:
http://duinozone.cz/index.php?topic=611.0posjirkaÚčastníkještě jak to máš od sebe vzdálené, Někdy to blbne když je to daleko. Pak se snižuje odpor PULL UP třeba na 2k2 nebo 1k0 … Kdyžtak to zkus a jak budu mít chvilku tak se na to já nebo někdo jiný podívá …
posjirkaÚčastníkJe taková obecná poučka pro logické obvody.
Rozděl si napětí zdroje na třetiny = 0 – 8 – 16 – 24V
Takže 0-8V je logická nula
16-24V je logická jednička
8-16V je zakázáné/necitlivé pásmo = hazardní stavposjirkaÚčastníkhod se kod a zapojení … ale to jak to máš opravduzapojené, né stažené z netu 🙂
-
AutorPříspěvky