Řízení kogenerační jednotky na dřevoplyn
Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Řízení kogenerační jednotky na dřevoplyn
Dobrý den,
Prosím místní komunitu o pomoc s odladěním programu. Arduino mám necelý týden a jsem s programem v pasti. Kód který přikládám sice funguje jak bych potřeboval, ale je nekompletní a v jednom loopu. V podstatě jde o jeden blok, který hlídá množství paliva v hořáku, při poklesu paliva sepne šnekový podavač za předpokladu, že je v násypce >= jak 5% paliva.
Potřebuji k tomu přidat další samostatný blok, který se skládá z modulu hallového senzoru a serva. Servo by mělo měnit polohu v rozmezí 90° v závislosti na naměřených otáčkách agregátu. Respektive má řídit klapku sání plynu do spalovacího motoru. Pokud RPM < 2000 otvírej klapku. a obráceně.
Třetí blok je pouze modul L298N s DC ventilátorem, kde potřebuji potenciometrem měnit otáčky a spínat jej nezávisle na ostatních blocích tlačítkem nebo vypínačem.
Nakonec jeden hlídací modul, detektor kouře, který je samozřejmě také samostatný blok a ten má při detekci kouře vypnout podavač paliva.
Podavač paliva musí vypnout i pokur RPM = 0 (v případě že chcípne motor)
Moc vás prosím o pomoc s poskládáním programu.
Prosím místní komunitu o pomoc s odladěním programu. Arduino mám necelý týden a jsem s programem v pasti. Kód který přikládám sice funguje jak bych potřeboval, ale je nekompletní a v jednom loopu. V podstatě jde o jeden blok, který hlídá množství paliva v hořáku, při poklesu paliva sepne šnekový podavač za předpokladu, že je v násypce >= jak 5% paliva.
Potřebuji k tomu přidat další samostatný blok, který se skládá z modulu hallového senzoru a serva. Servo by mělo měnit polohu v rozmezí 90° v závislosti na naměřených otáčkách agregátu. Respektive má řídit klapku sání plynu do spalovacího motoru. Pokud RPM < 2000 otvírej klapku. a obráceně.
Třetí blok je pouze modul L298N s DC ventilátorem, kde potřebuji potenciometrem měnit otáčky a spínat jej nezávisle na ostatních blocích tlačítkem nebo vypínačem.
Nakonec jeden hlídací modul, detektor kouře, který je samozřejmě také samostatný blok a ten má při detekci kouře vypnout podavač paliva.
Podavač paliva musí vypnout i pokur RPM = 0 (v případě že chcípne motor)
Moc vás prosím o pomoc s poskládáním programu.
Kód: Vybrat vše
#define trigPin01 8
#define echoPin01 9
#define echoPin02 4
#define trigPin02 3
#define Switch 5
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x7D };
IPAddress ip(192,168,1,150);
EthernetServer server(80);
void setup(){
int duration01,distance01,duration02,distance02,percentage,heightTank;
Serial.begin (9600);
Ethernet.begin(mac, ip);
server.begin();
pinMode(trigPin01,OUTPUT);
pinMode(echoPin01,INPUT);
pinMode(trigPin02,OUTPUT);
pinMode(echoPin02,INPUT);
pinMode(Switch,OUTPUT);
}
void loop(){
int duration01,distance01,duration02,distance02,percentage,heightTank,deviation;
//You’ll probably want to change the next 2 lines.
// The first one is the max. level of the water.
// The next one is how high the sensor is above that max. level.
heightTank=40;
deviation=5;
digitalWrite(trigPin01,LOW);
delayMicroseconds(2);
digitalWrite(trigPin01,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin01,LOW);
duration01=pulseIn(echoPin01,HIGH);
distance01=(duration01/2)/29.1;
percentage=100-(((distance01-deviation)*100)/heightTank);
Serial.println(„Stav nasypky:“);
Serial.print(percentage);
Serial.println(„% naplneni“);
Serial.print(distance01);
Serial.println(„cm od okraje“);
Serial.println();
delay(100);
digitalWrite(trigPin02,LOW);
delayMicroseconds(2);
digitalWrite(trigPin02,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin02,LOW);
duration02=pulseIn(echoPin02,HIGH);
distance02=(duration02/2) / 29.1;
delay(100);
Serial.println(„Stav spalovaci komory:“);
Serial.print(„palivo je „);
Serial.print(distance02);
Serial.println(„cm od okraje“);
Serial.println();
if ((distance02 >=20)&&(percentage>=5)) {
digitalWrite(Switch, HIGH);
Serial.print(„Rele podavace ve stavu: „);
Serial.println(digitalRead(5));
Serial.print(„——————————„);
Serial.println();
delay(8000);
}
else {
digitalWrite(Switch,LOW);
Serial.print(„Rele podavace ve stavu: „);
Serial.println(digitalRead(5));
Serial.print(„——————————„);
Serial.println();
delay(8000);
}
// když je připojen klient, zjistíme, zda jsou odeslána data
// od klienta směrem k nám
EthernetClient client = server.available();
// dokud je klient připojen
while (client.connected()) {
// čti data od něj dokud nenarazíš na znak nového řádku
if (client.available()) {
char c = client.read();
if (c == ‚\n‘) {
// odešle klasickou hlavičku HTML stránky
client.println(„HTTP/1.1 200 OK“);
client.println(„Content-Type: text/html“);
client.println(„Connection: close“);
client.println();
client.println(„<!DOCTYPE HTML>“);
// zde již klasická html data
client.println(„<html>“);
client.println(„<head>“);
// Název stránky
client.println(„<title>Kogeneracni jednotka</title>“);
// po odkomentování tohoto řádku nastavíte automatický refresh
// hodnotu v sekundách můžete změnit ve vlasnosti content
client.println(„<meta http-equiv=’refresh‘ content=’20‘ >“);
client.println(„</head>“);
client.println(„<body>“);
client.print(„<b>Stav nasypky:</b>“);
client.println(„</br>“);
client.print(percentage);
client.print(„% naplneni“);
client.println(„</br>“);
client.print(distance01);
client.print(„cm od okraje“);
client.println(„</br>“);
client.println(„</br>“);
client.print(„<b>Stav spalovaci komory:</b>“);
client.println(„</br>“);
client.print(„palivo je „);
client.print(distance02);
client.print(„cm od okraje“);
client.println(„</br>“);
client.println(„</br>“);
client.print(„<b>Rele podavace ve stavu: </b>“);
client.println(digitalRead(5));
client.println(„</body>“);
client.println(„</html>“);
//ukončí přenos
client.stop();
}
}
}
}
-
- Příspěvky: 128
- Registrován: čtv led 01, 2015 6:30 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Hmm, kdybych to dělal já, tak na tohle použiji nějaké arduino pro mini nebo tak za 30 Kč a druhému arduinu nechám klidně na starost generování WWW stránek. Ale rvát to do jednoho arduina a chtít po tom, aby to bylo trochu spolehlivé se mi nelíbí. Ale samozřejmě to asi půjde.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Tusim ze tohle neni idealni kod, ale jak jsem psal, s arduinem se teprve seznamuji a volam o pomoc8milan8 píše:Hmm, kdybych to dělal já, tak na tohle použiji nějaké arduino pro mini nebo tak za 30 Kč a druhému arduinu nechám klidně na starost generování WWW stránek. Ale rvát to do jednoho arduina a chtít po tom, aby to bylo trochu spolehlivé se mi nelíbí. Ale samozřejmě to asi půjde.
-
- Příspěvky: 7688
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Řízení kogenerační jednotky na dřevoplyn
Tvůj prográmek má zásadní problém, a tan se jmenuje DELAY - mrkni sem: http://arduino8.webnode.cz/news/lekce-3 ... -programu/ - tohle používat jenom v případech, že už to nejde jinak, a nebo třeba jeno po 1ms, aby průběh smyčky byl dostatečně rychlý pro všechny požedované funkce, a časování dělat časovačem, já třeba používám tohle: http://www.xpablo.cz/?p=421. Ten ethernet shield ti to klidně na 2s ""zasekne" než dostane http request, takže tudy asi ne.
Já bych dokonce na web použil ESP8266, je to wifi, mám k tomu prográmek, kde: web stránka se nasype přímo v html souborech do adresářové struktury, do html se zadají pozice zobrazovaných proměnných a názvy proměnných co jdou zpátky do arduina - a světe div se, s arduinem to komumikuje úplně jednoduše po sériové lince nějak takto: ;U1"50";U2"145.26"; a tak dál, a stejný data chodí z esp do arduina... mrkni na http://www.xpablo.cz/?p=881
Když poznáš tohle, tak už nebudeš utrácet prachy za ethernetshieldy, co topí jak kamna a udělat rozumný web rozhraní sežere celou paměť arduina, v tom ESP máš 0,5MBit na web a program, to by mohlo stačit i s obrázkama, ne? (obrázek 10kB se načítá cca 5-6s, 100kB cca 30s) A hlavně, je to za $2... Dokonce v některejch případech to arduino úplně nahradí š pomocí ESP, jenom má míň portů a jenom jeden analog vstup. Já z toho udělal řízení pro rgbw pásek, kde je přes i2c připojenej dotykovej ovladač, přes web to zobrazuje stav a zároveň se to dá ovládat, a to celý je jenom v tomESP.
Já bych dokonce na web použil ESP8266, je to wifi, mám k tomu prográmek, kde: web stránka se nasype přímo v html souborech do adresářové struktury, do html se zadají pozice zobrazovaných proměnných a názvy proměnných co jdou zpátky do arduina - a světe div se, s arduinem to komumikuje úplně jednoduše po sériové lince nějak takto: ;U1"50";U2"145.26"; a tak dál, a stejný data chodí z esp do arduina... mrkni na http://www.xpablo.cz/?p=881
Když poznáš tohle, tak už nebudeš utrácet prachy za ethernetshieldy, co topí jak kamna a udělat rozumný web rozhraní sežere celou paměť arduina, v tom ESP máš 0,5MBit na web a program, to by mohlo stačit i s obrázkama, ne? (obrázek 10kB se načítá cca 5-6s, 100kB cca 30s) A hlavně, je to za $2... Dokonce v některejch případech to arduino úplně nahradí š pomocí ESP, jenom má míň portů a jenom jeden analog vstup. Já z toho udělal řízení pro rgbw pásek, kde je přes i2c připojenej dotykovej ovladač, přes web to zobrazuje stav a zároveň se to dá ovládat, a to celý je jenom v tomESP.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Ano, delay je problem. Zastavi system, ikdyz musi probihat dalsi procesy nepretrzite (mereni RPM a servo). Programek jsem slepil z nekolika ruznych prikladu na webu a lehce poupravil. Web server klidne smazu.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Muze vypadat zapis pro interval.h treba takto?
Kód: Vybrat vše
const long blinkinterval01 = 1000;
const long blinkinterval02 = 10000;
const long blinkinterval03 = 8000;
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Interval.h jsem nerozchodil, odkazuje se na arduino.h. Stahl jsem nejaky Arduino.h ale stejne kontrola s chybama.
-
- Příspěvky: 128
- Registrován: čtv led 01, 2015 6:30 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Radí ti tu dobře. Také bych to tak asi udělal, pokud by mi nevadila WiFi, tak bych použil ESP2866. A z/do Arduina si jen posálat hodnoty.
Jinak doporučuji přednásku zde - https://www.youtube.com/watch?v=6V9x9bhFeSU, tam je dobře vysvětlené jak se vyhnout co nejvíce delay. A není třeba includovat nějaký interval.h a už vůbec ne arduino.h, pokud píšeš program v arduino IDE, tak arduino.h se includue automaticky. A interval.h ani nevim jestli existuje.
A ESP2866 bych zase na ovládání regulace nepoužil, protože je schopné se kvůli obsloužení wifi klidně na nějaký ten čas vykašlat na konání programu (u NODEMCU). A nebo by jsi si musel napsat vlastní ovládání, a to mi přijde trochu hardcore a vůbec pokud o tom moc nevíš.
Jinak doporučuji přednásku zde - https://www.youtube.com/watch?v=6V9x9bhFeSU, tam je dobře vysvětlené jak se vyhnout co nejvíce delay. A není třeba includovat nějaký interval.h a už vůbec ne arduino.h, pokud píšeš program v arduino IDE, tak arduino.h se includue automaticky. A interval.h ani nevim jestli existuje.
A ESP2866 bych zase na ovládání regulace nepoužil, protože je schopné se kvůli obsloužení wifi klidně na nějaký ten čas vykašlat na konání programu (u NODEMCU). A nebo by jsi si musel napsat vlastní ovládání, a to mi přijde trochu hardcore a vůbec pokud o tom moc nevíš.
-
- Příspěvky: 128
- Registrován: čtv led 01, 2015 6:30 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Tak jen abychom si to srovnali. Takovéhle bloky tam jsou, co jsem vyčetl:
- Hlídání hladiny paliva v násypce - pomocí piezo senzoru?
smínámí otáček (RPM) - pomocí hallova snímače (držení 2000 otáček a při 0 vypnout podavač paliva)
řízení škrtící klapky - pomocí serva
řízení ventilároru - pomocí modulu s L298N, k tomu jako vstup potenciometr a tlačítka/vypínač
detekce kouře - pomocí ??? stačí jen hlídat GPIO pin, nebo je třeba nějak vyhodnocovat?
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Hlidani hladiny paliva ve spalovaci komore (HC-sr04) v centimetrech
Hlidani hladiny paliva v nasypce (HC-sr04) v procentech
Pokud spalovaci komora <=20 && nasypka >=5% zapni rele na 3 vteriny
Opakuj mereni za 15 vterin
Snimani otacek (RPM) hallovym snimacem
Pokud rpm < 2000 toc servem na jednu stranu
Pokud rpm > 2000 toc servem na druhou stranu
Pokud rpm = 0 nedovol sepnuti rele nasypky
(akcni radius serva min.-max. 90stupnu)
Cidlo koure ( LM393, ZYMQ-2 gas sensor) -detekuj kour - pokud kour - nedovol sepnuti rele nasypky
řízení ventilároru - pomocí modulu s L298N, k tomu jako vstup potenciometr a tlačítka/vypínač
Bypass - Tlacitko pro rucni sepnuti rele nasypky (plneni spalovaci komory pred startem agregatu)
Hlidani hladiny paliva v nasypce (HC-sr04) v procentech
Pokud spalovaci komora <=20 && nasypka >=5% zapni rele na 3 vteriny
Opakuj mereni za 15 vterin
Snimani otacek (RPM) hallovym snimacem
Pokud rpm < 2000 toc servem na jednu stranu
Pokud rpm > 2000 toc servem na druhou stranu
Pokud rpm = 0 nedovol sepnuti rele nasypky
(akcni radius serva min.-max. 90stupnu)
Cidlo koure ( LM393, ZYMQ-2 gas sensor) -detekuj kour - pokud kour - nedovol sepnuti rele nasypky
řízení ventilároru - pomocí modulu s L298N, k tomu jako vstup potenciometr a tlačítka/vypínač
Bypass - Tlacitko pro rucni sepnuti rele nasypky (plneni spalovaci komory pred startem agregatu)
-
- Příspěvky: 7688
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Řízení kogenerační jednotky na dřevoplyn
interval.h je ke stažení zde: http://www.xpablo.cz/wp-content/uploads ... terval.zip
a ukázka kódu:
interval má výhodu v ošetření přetečení millis, oproti že se to nepomate při přetečení časovače, coz je snad 72 hodin, a to není moc takže vypisovat tohle v progarmu včetně ošetření přetečení je barbarství i pro mě, takže stejně bys na to dělal nějakou funkci. A tu funkci už někdo udělal....
K tomu ESP - mám na něm SW PWM (jiný neumí) a nepozoruju nějaký změny jasu ledek v souvislosti s web. službami z esp...
a ukázka kódu:
Kód: Vybrat vše
#include ........
#include <interval.h>
#include .......
Interval analogc, displejc; //definice objektů pro funkce časování
//tady co je potřeba k programu
void setup()
{
//tvůj setup
}
void loop()
{
if (analogc.expired()) { //časování načtení z analog začátek
analogc.set(800); //nastaví tento interval na 800ms
//načtení hodnot z analogů
} //časování načtení z analog konec
if (displejc.expired()) { //časování změna displeje začátek
displejc.set(3000); //nastaví čas obnovení displeje na 3s
//zde je ovládání displeje
}; //změna displeje konec
}
Kód: Vybrat vše
if( millis >(lastmillis+interval))
K tomu ESP - mám na něm SW PWM (jiný neumí) a nepozoruju nějaký změny jasu ledek v souvislosti s web. službami z esp...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Takhle jsem to včera zkoušel podle příkladu použití z oné stránky:
A dopadlo to takhle:
Arduino: 1.6.8 (Linux), Vývojová deska: "Arduino/Genuino Uno"
/home/radek/Arduino/libraries/interval/interval.cpp:21:21: fatal error: arduino.h: No such file or directory
#include <arduino.h>
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Kód: Vybrat vše
#define trigPin01 8
#define echoPin01 9
#define echoPin02 4
#define trigPin02 3
#define Rele01 5
#include <SPI.h>
#include "interval.h"
Interval blink;
const long blinkinterval = 1000;
void setup(){
Serial.begin (9600);
pinMode(trigPin01,OUTPUT);
pinMode(echoPin01,INPUT);
pinMode(trigPin02,OUTPUT);
pinMode(echoPin02,INPUT);
pinMode(Rele01,OUTPUT);
}
void loop(){
int duration01,distance01,duration02,distance02,percentage,heightTank,deviation;
heightTank=40;
deviation=5;
digitalWrite(trigPin01,LOW);
delayMicroseconds(2);
digitalWrite(trigPin01,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin01,LOW);
duration01=pulseIn(echoPin01,HIGH);
distance01=(duration01/2)/29.1;
percentage=100-(((distance01-deviation)*100)/heightTank);
Serial.println("Stav nasypky:");
Serial.print(percentage);
Serial.println("% naplneni");
Serial.print(distance01);
Serial.println("cm od okraje");
Serial.println();
delay(100);
digitalWrite(trigPin02,LOW);
delayMicroseconds(2);
digitalWrite(trigPin02,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin02,LOW);
duration02=pulseIn(echoPin02,HIGH);
distance02=(duration02/2) / 29.1;
delay(100);
Serial.println("Stav spalovaci komory:");
Serial.print("palivo je ");
Serial.print(distance02);
Serial.println("cm od okraje");
Serial.println();
if (blink.expired()) {
blink.set(blinkinterval);
if ((distance02 >=20)&&(percentage>=5))
digitalWrite(Rele01, HIGH);
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(5));
Serial.print("------------------------------");
Serial.println();
//delay(8000);
}
else {
digitalWrite(Rele01,LOW);
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(5));
Serial.print("------------------------------");
Serial.println();
//delay(8000);
}
}
Arduino: 1.6.8 (Linux), Vývojová deska: "Arduino/Genuino Uno"
/home/radek/Arduino/libraries/interval/interval.cpp:21:21: fatal error: arduino.h: No such file or directory
#include <arduino.h>
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Snažil jsem se o millis, sice pěkně vypisuje na serial po 8mi vteřinách, ale nefunguje :/
Stav nasypky:
88% naplneni
10cm od okraje
Stav spalovaci komory:
palivo je 179cm od okraje
Rele podavace ve stavu: 0
------------------------------
Stav nasypky:
88% naplneni
10cm od okraje
Stav spalovaci komory:
palivo je 178cm od okraje
Rele podavace ve stavu: 0
------------------------------
Kód: Vybrat vše
#define trigPin01 8
#define echoPin01 9
#define echoPin02 4
#define trigPin02 3
#define Rele01 5
#include <SPI.h>
long mereniPaliva;
void setup(){
Serial.begin (9600);
pinMode(trigPin01,OUTPUT);
pinMode(echoPin01,INPUT);
pinMode(trigPin02,OUTPUT);
pinMode(echoPin02,INPUT);
pinMode(Rele01,OUTPUT);
}
void loop(){
if (millis() > (8000 + mereniPaliva))
{
int duration01,distance01,duration02,distance02,percentage,heightTank,deviation;
heightTank=40;
deviation=5;
digitalWrite(trigPin01,LOW);
delayMicroseconds(2);
digitalWrite(trigPin01,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin01,LOW);
duration01=pulseIn(echoPin01,HIGH);
distance01=(duration01/2)/29.1;
percentage=100-(((distance01-deviation)*100)/heightTank);
Serial.println("Stav nasypky:");
Serial.print(percentage);
Serial.println("% naplneni");
Serial.print(distance01);
Serial.println("cm od okraje");
Serial.println();
digitalWrite(trigPin02,LOW);
delayMicroseconds(2);
digitalWrite(trigPin02,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin02,LOW);
duration02=pulseIn(echoPin02,HIGH);
distance02=(duration02/2) / 29.1;
Serial.println("Stav spalovaci komory:");
Serial.print("palivo je ");
Serial.print(distance02);
Serial.println("cm od okraje");
Serial.println();
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(5));
Serial.print("------------------------------");
Serial.println();
mereniPaliva = millis();
if ((distance02 >= 20)&&(percentage >= 5)) digitalWrite(Rele01, HIGH);
}
else digitalWrite(Rele01,LOW);
}
88% naplneni
10cm od okraje
Stav spalovaci komory:
palivo je 179cm od okraje
Rele podavace ve stavu: 0
------------------------------
Stav nasypky:
88% naplneni
10cm od okraje
Stav spalovaci komory:
palivo je 178cm od okraje
Rele podavace ve stavu: 0
------------------------------
-
- Příspěvky: 7688
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Řízení kogenerační jednotky na dřevoplyn
no nevím, to co je za if ti končí až před posledním příkazem, takže tohle všechno se vykoná jenom jednou za 8s, zkontorluj si složený závorky, u toho posledního if je vlastně nemáš, pozor na to - proto si k jednotlivejm závorkám píšu, co končí, a když na ni v ide najedeš kurzorem a pak přelistuješ posuvnítkem, tak máš označenou závorku co je s ní do páru, tohle mě taky párkrát vypeklo...
Navíc tvoje řešení se za 72 hodin pomátne když přeteče registr millis, a bez resetu se dál nedostane, protože millis bude blízko nuly 0 a předchozí hodnota bude to co vleze do čílsla long, takže bys ještě měl kontrolovat, jestli se neobrátil tok času, tj. přidat před vyhodnocení času ještě podmínku :
no a pokud budeš mít tohle v programu čtyřikrát, pokaždý s jiným časem, tak už je jednodušší použít tu knihovnu interval.h, a nebo si to napsat aspoň jako funkci.
Po různých pokusech doporučuju používat nesoudělný hodnoty časů pro periody, tj ne 1000, 2000, 3000, ale raděj
900, 2100, 3400, protože když se to sejde, tak potom se program zpomalí, než vykoná všechno zaráz a pak zase delší dobu jenom prochází základní smyčka.
ještě se dívám na tu chybu - neuvěřitelné, když do novýho prográmku v ide napíšeš jenom tohle a zkusíš zkompilovat, tak to taky hodí chybu? jestli jo, tak zlatý ide 1.6.5
Navíc tvoje řešení se za 72 hodin pomátne když přeteče registr millis, a bez resetu se dál nedostane, protože millis bude blízko nuly 0 a předchozí hodnota bude to co vleze do čílsla long, takže bys ještě měl kontrolovat, jestli se neobrátil tok času, tj. přidat před vyhodnocení času ještě podmínku :
Kód: Vybrat vše
if(millis< merenipaliva) {merenipaliva=millis; }
Po různých pokusech doporučuju používat nesoudělný hodnoty časů pro periody, tj ne 1000, 2000, 3000, ale raděj
900, 2100, 3400, protože když se to sejde, tak potom se program zpomalí, než vykoná všechno zaráz a pak zase delší dobu jenom prochází základní smyčka.
ještě se dívám na tu chybu
Kód: Vybrat vše
#include<arduino.h>
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Myslím, že tato část už funguje. Nicméně nechápu jeden jev, kdy při nesplněné podmínce if se vypisuje na serial že :
_________________________
Stav nasypky:
90% naplneni
9cm od okraje
Stav spalovaci komory:
palivo je 7cm od okraje
Zapinam podavac paliva...
Rele podavace ve stavu: 0
-------------------------
toto je výpis obou stavů:
_________________________
Stav nasypky:
90% naplneni
9cm od okraje
Stav spalovaci komory:
palivo je 161cm od okraje
Zapinam podavac paliva...
Rele podavace ve stavu: 1
-------------------------
Vypinam podavac paliva...
Rele podavace ve stavu: 0
-------------------------
_________________________
Stav nasypky:
90% naplneni
9cm od okraje
Stav spalovaci komory:
palivo je 7cm od okraje
Zapinam podavac paliva...
Rele podavace ve stavu: 0
-------------------------
_________________________
Stav nasypky:
90% naplneni
9cm od okraje
Stav spalovaci komory:
palivo je 7cm od okraje
Zapinam podavac paliva...
Rele podavace ve stavu: 0
-------------------------
Kód: Vybrat vše
int trigPin01 = 8;
int echoPin01 = 9;
int echoPin02 = 4;
int trigPin02 = 3;
int Rele01 = 5;
int Rele01State = LOW;
#include <SPI.h>
int duration01,distance01,duration02,distance02,percentage,heightTank,deviation;
unsigned long previousMillis = 0;
long interval01 = 15000;
long interval02 = 3100;
long OnTime = 3200;
long OffTime = 2200;
void setup(){
Serial.begin (9600);
pinMode(trigPin01,OUTPUT);
pinMode(echoPin01,INPUT);
pinMode(trigPin02,OUTPUT);
pinMode(echoPin02,INPUT);
pinMode(Rele01,OUTPUT);
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval01){
int duration01,distance01,duration02,distance02,percentage,heightTank,deviation;
heightTank=40;
deviation=5;
digitalWrite(trigPin01,LOW);
delayMicroseconds(2);
digitalWrite(trigPin01,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin01,LOW);
duration01=pulseIn(echoPin01,HIGH);
distance01=(duration01/2)/29.1;
percentage=100-(((distance01-deviation)*100)/heightTank);
Serial.println("_________________________");
Serial.println();
Serial.println("Stav nasypky:");
Serial.print(percentage);
Serial.println("% naplneni");
Serial.print(distance01);
Serial.println("cm od okraje");
Serial.println();
digitalWrite(trigPin02,LOW);
delayMicroseconds(2);
digitalWrite(trigPin02,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin02,LOW);
duration02=pulseIn(echoPin02,HIGH);
distance02=(duration02/2) / 29.1;
Serial.println("Stav spalovaci komory:");
Serial.print("palivo je ");
Serial.print(distance02);
Serial.println("cm od okraje");
Serial.println();
previousMillis = currentMillis;
if ((distance02 >= 20)&&(percentage >= 5))
Rele01State = HIGH;
digitalWrite(Rele01, Rele01State);
Serial.println("Zapinam podavac paliva... ");
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(Rele01));
Serial.println("-------------------------");
Serial.println();
}
if ((digitalRead(Rele01) == HIGH)&&(currentMillis - previousMillis >= OnTime)){
Rele01State = LOW;
previousMillis = currentMillis;
digitalWrite(Rele01, Rele01State);
Serial.println("Vypinam podavac paliva... ");
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(Rele01));
Serial.println("-------------------------");
Serial.println();
//
}
// else {
// digitalWrite(Rele01, LOW);
}
_________________________
Stav nasypky:
90% naplneni
9cm od okraje
Stav spalovaci komory:
palivo je 161cm od okraje
Zapinam podavac paliva...
Rele podavace ve stavu: 1
-------------------------
Vypinam podavac paliva...
Rele podavace ve stavu: 0
-------------------------
_________________________
Stav nasypky:
90% naplneni
9cm od okraje
Stav spalovaci komory:
palivo je 7cm od okraje
Zapinam podavac paliva...
Rele podavace ve stavu: 0
-------------------------
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
Arduino: 1.6.8 (Linux), Vývojová deska: "Arduino/Genuino Uno"kodl69 píše:ještě se dívám na tu chybu- neuvěřitelné, když do novýho prográmku v ide napíšeš jenom tohle a zkusíš zkompilovat, tak to taky hodí chybu? jestli jo, tak zlatý ide 1.6.5Kód: Vybrat vše
#include<arduino.h>
/tmp/arduino_modified_sketch_914454/sketch_apr05b.ino:1:20: fatal error: arduino.h: No such file or directory
#include<arduino.h>
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
-
- Příspěvky: 59
- Registrován: čtv črc 31, 2014 12:03 am
Re: Řízení kogenerační jednotky na dřevoplyn
Pro arduiono už jsem dlouho nepsal, ale nemělo by to být:
Kód: Vybrat vše
#include "Arduino.h"
-
- Příspěvky: 7688
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Řízení kogenerační jednotky na dřevoplyn
zase ti tam chybí složený závorky, tobě se za tím if na ř.66 provede jenom ř.66, ř. 67- 73 proběhne jestli je podmínka true nebo false... - znovu: pozor na ty složený závorky
mě teda include jede i s těma <> závorkama, to je něco o adrese, kde to má ten překladač hledat, víc nevím. Ale hlavně v 1.6.5 to je funkční a bylo ve všech předtím, takže možná trochu downgrade neuškodí....
mě teda include jede i s těma <> závorkama, to je něco o adrese, kde to má ten překladač hledat, víc nevím. Ale hlavně v 1.6.5 to je funkční a bylo ve všech předtím, takže možná trochu downgrade neuškodí....
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Příspěvky: 69
- Registrován: pát srp 12, 2011 1:56 pm
Re: Řízení kogenerační jednotky na dřevoplyn
už jsem z toho na prasky, kdyz vlozim zavorky tam, kde bych je v bloku ocekaval, tak kod nefunguje nebo nejde ani zkompilovat. bud jsem uplne mimo, nebo bude nejaka zasadni chyba ve skladbe kodu
-
- Příspěvky: 7688
- Registrován: sob črc 19, 2014 8:56 pm
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Řízení kogenerační jednotky na dřevoplyn
nech to vydechnout a jak jsem psal výše, když najedeš kurzorem za složenou závorku začátku bloku, tak se ti označí kroužkem ta, co aktuální blok končí a naopak. Párkrát mi pomohlo si fakt namalovat vývojovej diagram, co se kdy má stát, a co na čem závisí, asi to v té škole mysleli vážně, že se to při programování má používat.
Další dobrá věc jsou podprogramy a funkce, to ten program může dost zpřehlednit.
A někdy fakt začít znovu a ten pokus vzít jako sbírání zkušeností.
Další dobrá věc jsou podprogramy a funkce, to ten program může dost zpřehlednit.
A někdy fakt začít znovu a ten pokus vzít jako sbírání zkušeností.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Podobná témata
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 103 Odpovědi
- 9473 Zobrazení
-
Poslední příspěvek od abrams
-
- 5 Odpovědi
- 1706 Zobrazení
-
Poslední příspěvek od vlkazajac
-
- 0 Odpovědi
- 575 Zobrazení
-
Poslední příspěvek od SajrajtX
-
-
Dřevoplyn, Peltierův článek, Stirlingův motor, Parní stroj?
od 8milan8 » » v Soběstačnost
Dřevoplyn, Peltierův článek, Stirlingův motor, Parní stroj?
- 217 Odpovědi
- 26930 Zobrazení
-
Poslední příspěvek od unicast
-
-
-
Prosím o pomoc s výběrem vnitřní jednotky split klimy
od pezizka » » v Ostatní
Prosím o pomoc s výběrem vnitřní jednotky split klimy
- 24 Odpovědi
- 1245 Zobrazení
-
Poslední příspěvek od pezizka
-