Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Právě je pát zář 21, 2018 3:08 am


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

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
Další

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

Příspěvekod Rams » ned dub 03, 2016 4:36 pm

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


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

Příspěvekod 8milan8 » ned dub 03, 2016 7:44 pm

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

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

Příspěvekod Rams » ned dub 03, 2016 8:09 pm

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


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

Příspěvekod kodl69 » ned dub 03, 2016 9:53 pm

Tvůj prográmek má zásadní problém, a tan se jmenuje DELAY - mrkni sem: http://arduino8.webnode.cz/news/lekce-32-arduino-a-casovani-procesu-v-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 3000Wp neustále ve stádiu zrodu: 6x noark CHSM6610P250, 6x250Wp z I4wifi, 4x auria 120Wp, midnite classic 150 lite+whizbang jr., 16S a různě P cca 300Ah Winston, Powerjack 8kW (reálně 6kW po úpravě). 48V DC rozvody a spotřebiče.
kodl69
 
Příspěvky: 2650
Registrován: sob črc 19, 2014 7:56 pm
Reputation: 180

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

Příspěvekod Rams » ned dub 03, 2016 10:44 pm

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 12:56 pm
Reputation: 4
 
  • 0


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

Příspěvekod Rams » ned dub 03, 2016 10:56 pm

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 12:56 pm
Reputation: 4
 
  • 0


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

Příspěvekod Rams » pon dub 04, 2016 1:12 am

Interval.h jsem nerozchodil, odkazuje se na arduino.h. Stahl jsem nejaky Arduino.h ale stejne kontrola s chybama.
Rams
 
Příspěvky: 69
Registrován: pát srp 12, 2011 12:56 pm
Reputation: 4
 
  • 0


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

Příspěvekod 8milan8 » pon dub 04, 2016 7:26 am

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: 127
Registrován: čtv led 01, 2015 6:30 pm
Reputation: 3

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

Příspěvekod 8milan8 » pon dub 04, 2016 7:50 am

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

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

Příspěvekod Rams » pon dub 04, 2016 8:18 am

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


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

Příspěvekod kodl69 » pon dub 04, 2016 1:02 pm

interval.h je ke stažení zde: http://www.xpablo.cz/wp-content/uploads/2014/10/interval.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 3000Wp neustále ve stádiu zrodu: 6x noark CHSM6610P250, 6x250Wp z I4wifi, 4x auria 120Wp, midnite classic 150 lite+whizbang jr., 16S a různě P cca 300Ah Winston, Powerjack 8kW (reálně 6kW po úpravě). 48V DC rozvody a spotřebiče.
kodl69
 
Příspěvky: 2650
Registrován: sob črc 19, 2014 7:56 pm
Reputation: 180

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

Příspěvekod Rams » pon dub 04, 2016 6:36 pm

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 12:56 pm
Reputation: 4
 
  • 0


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

Příspěvekod Rams » pon dub 04, 2016 11:53 pm

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


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

Příspěvekod kodl69 » úte dub 05, 2016 11:13 am

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 3000Wp neustále ve stádiu zrodu: 6x noark CHSM6610P250, 6x250Wp z I4wifi, 4x auria 120Wp, midnite classic 150 lite+whizbang jr., 16S a různě P cca 300Ah Winston, Powerjack 8kW (reálně 6kW po úpravě). 48V DC rozvody a spotřebiče.
kodl69
 
Příspěvky: 2650
Registrován: sob črc 19, 2014 7:56 pm
Reputation: 180

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

Příspěvekod Rams » úte dub 05, 2016 4:16 pm

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 12:56 pm
Reputation: 4
 
  • 0


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

Příspěvekod Rams » úte dub 05, 2016 4:24 pm

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


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

Příspěvekod radeczek » úte dub 05, 2016 5:35 pm

Pro arduiono už jsem dlouho nepsal, ale nemělo by to být:
Kód: Vybrat vše
#include "Arduino.h"
radeczek
 
Příspěvky: 55
Registrován: stř črc 30, 2014 11:03 pm
Reputation: 3

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

Příspěvekod kodl69 » úte dub 05, 2016 5:51 pm

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 3000Wp neustále ve stádiu zrodu: 6x noark CHSM6610P250, 6x250Wp z I4wifi, 4x auria 120Wp, midnite classic 150 lite+whizbang jr., 16S a různě P cca 300Ah Winston, Powerjack 8kW (reálně 6kW po úpravě). 48V DC rozvody a spotřebiče.
kodl69
 
Příspěvky: 2650
Registrován: sob črc 19, 2014 7:56 pm
Reputation: 180

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

Příspěvekod Rams » úte dub 05, 2016 7:03 pm

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


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

Příspěvekod kodl69 » úte dub 05, 2016 8:09 pm

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 3000Wp neustále ve stádiu zrodu: 6x noark CHSM6610P250, 6x250Wp z I4wifi, 4x auria 120Wp, midnite classic 150 lite+whizbang jr., 16S a různě P cca 300Ah Winston, Powerjack 8kW (reálně 6kW po úpravě). 48V DC rozvody a spotřebiče.
kodl69
 
Příspěvky: 2650
Registrován: sob črc 19, 2014 7:56 pm
Reputation: 180

Další

Zpět na Arduino

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník

cron
Reputation System ©'