Řízení kogenerační jednotky na dřevoplyn

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

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.

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();
}
}
}
}
8milan8
Příspěvky: 128
Registrován: čtv led 01, 2015 6:30 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od 8milan8 »

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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

8milan8 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.
Tusim ze tohle neni idealni kod, ale jak jsem psal, s arduinem se teprve seznamuji a volam o pomoc :-)
kodl69
Příspěvky: 7659
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

Příspěvek od kodl69 »

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.
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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

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;
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

Interval.h jsem nerozchodil, odkazuje se na arduino.h. Stahl jsem nejaky Arduino.h ale stejne kontrola s chybama.
8milan8
Příspěvky: 128
Registrován: čtv led 01, 2015 6:30 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od 8milan8 »

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íš.
8milan8
Příspěvky: 128
Registrován: čtv led 01, 2015 6:30 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od 8milan8 »

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?
Je tam ještě něco?
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

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)
kodl69
Příspěvky: 7659
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

Příspěvek od kodl69 »

interval.h je ke stažení zde: http://www.xpablo.cz/wp-content/uploads ... terval.zip
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
}
interval má výhodu v ošetření přetečení millis, oproti

Kód: Vybrat vše

 if( millis >(lastmillis+interval))  
ž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...
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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

Takhle jsem to včera zkoušel podle příkladu použití z oné stránky:

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);
  }
}
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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

Snažil jsem se o millis, sice pěkně vypisuje na serial po 8mi vteřinách, ale nefunguje :/

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);

    }  
     
    
  
                
           
    
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
------------------------------
kodl69
Příspěvky: 7659
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

Příspěvek od kodl69 »

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, :lol: tj. přidat před vyhodnocení času ještě podmínku :

Kód: Vybrat vše

if(millis< merenipaliva) {merenipaliva=millis; }
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

Kód: Vybrat vše

#include<arduino.h>
- 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
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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

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
-------------------------

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);
}
    
       
        
        
                
           
    
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
-------------------------
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

kodl69 píše:
ještě se dívám na tu chybu

Kód: Vybrat vše

#include<arduino.h>
- 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
Arduino: 1.6.8 (Linux), Vývojová deska: "Arduino/Genuino Uno"

/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.
radeczek
Příspěvky: 59
Registrován: čtv črc 31, 2014 12:03 am

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od radeczek »

Pro arduiono už jsem dlouho nepsal, ale nemělo by to být:

Kód: Vybrat vše

#include "Arduino.h"
kodl69
Příspěvky: 7659
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

Příspěvek od kodl69 »

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í....
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.
Rams
Příspěvky: 69
Registrován: pát srp 12, 2011 1:56 pm

Re: Řízení kogenerační jednotky na dřevoplyn

Příspěvek od Rams »

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
kodl69
Příspěvky: 7659
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

Příspěvek od kodl69 »

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í.
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