Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino - Jako sterownik palnika olejowego.

sztapl 08 Mar 2016 08:57 15258 141
  • #121
    jero11
    Poziom 13  
    Wygląda na to że jest ok, może ma ktoś pomysł jak zamontować czujnik w nagrzewnicy? fabrycznie w wersji z fotodiodą jest taka tulejka Arduino - Jako sterownik palnika olejowego.
  • Relpol przekaźniki
  • Relpol przekaźniki
  • #124
    jero11
    Poziom 13  
    Że wylutować diodę i dać na przewodzie to wiedziałem, starego czujnika nie wykorzystam bo jest to taki czujnik starego typu:
    Arduino - Jako sterownik palnika olejowego.
    chyba że ma ktoś pomysł jak podłączyć taki czujnik?
    Nowy typ jest na diodzie, na zdjęciu które wkleiłem wcześniej jest adapter czujnika z prętem szklanym.

    Dodałem jeszcze pin D6 jako INPUT_PULLUP, który działał by zarazem jako przełącznik on/off i termostat awaryjny, po zwarciu z GND powinien wykonać:
    digitalWrite(3, HIGH); //Wyłączenie SPRZĘGŁA
    digitalWrite(2, HIGH); //Wyłączenie świecy
    delay(60000); //Odczekanie 60 sekundy
    digitalWrite(4, HIGH); //Wyłączenie SILNIKA

    Działa to, ale gdy przez cały czas D6 był złączony z GND po jakimś czasie uruchamiana była procedura startu...
  • #128
    sztapl
    Poziom 13  
    Są różne wyjścia z tej sytuacji. Mi się wydaje że jeżeli jest to termostat awaryjny to po załączeniu się twojego ifa powinna nastąpić awaria i "zmusić" cię do sprawdzenia czego wystąpiła sytuacja z AWARYJNYM wyłączeniem palnika. Więc wystarczy w twoim if dopisać

    i=3;

    W przeciwnym razie trzeba cały skecz praktycznie pisać od nowa żeby palnik pracował prawidłowo.
  • #129
    GAAD
    Poziom 16  
    Witam
    Czy program ma jakąś nową wersję? Zbieram części i będę próbował to poskładać stąd kilka pytań:
    Czy ktoś to używa i jak się sprawuje?
    Co z kwestią bezpieczeństwa - awaria palnika?
    Co w kwestii watchdoga?
    Czy można prosić o opis podłączeń? Czyli gdzie jaki czujnik i przekaźnik?
    Jakie są opcje na modyfikację pod typowy LOA ale z możliwością regulacji np. czasu przedmuchu, temperatury grzałki czasu oczekiwania na płomień?
    Chodzi o to aby klawiszem funkcyjnym wejść np. w parametry i zmieniać je w określonym zakresie?
    Pozdrawiam
    Wojtek
  • #130
    sztapl
    Poziom 13  
    Ja to używam ale sporadycznie, nadal traktuję to jako projekt. Kwestia bezpieczeństwa, to trzeba dopisać watchdoga a palnik wydaje się być bardzo wrażliwy na awarię. Jest bardzo czuły na zaniki (błyski) palnika. Opis połączeń jest w moim wsadzie raczej chyba jest to przejrzyste, zobacz jeszcze raz . A kwestie regulacji przedmuchu i oczekiwania na płomień bym zostawił w spokoju.
  • #131
    GAAD
    Poziom 16  
    Samego programu jeszcze nie analizowałem. Co do regulacji - różne LOA mają różne czasy. Nie sądzę,aby wydłużenie przedmuchu przed odpaleniem palnika wiązało się z jakimkolwiek ryzykiem. Czas oczekiwania na płomień też różny w zależności od LOA skrócenie jest raczej bardziej restrykcyjne i bezpieczniejsze stąd potrzeba regulacji - palnik ma odpalić a nie pluć paliwem do pieca. Wyłączenie zapłonu - w niektórych LOA iskra jest jeszcze długo po pojawieniu się płomienia - wtedy palnik może powtórnie wystartować dla mnie ma zgłosić awarię. Stąd potrzeba regulacji parametrów.
    Palnik ma działać stabilnie i każda anomalia ma być awarią. Potrzebuję tego sterownika do testów palnika a nie do pieca - zbyt duże ryzyko, że zostanę bez kotłowni.
    Pozdrawiam
    Wojtek
  • Pomocny post
    #132
    quarrx
    Poziom 10  
    Zainteresował mnie temat arduino jako sterownika.
    Używam zwykłego palnika z przerobionym nagrzewanie drążka ze zwykłym LOA. Wykozystana zwykla pompa do oleju. Wyniki są bardzo zadowalajace szczególnie ze można regulować czasem zapłonu.
    Myślę że rozwinięcie tematu ma sens szczególnie przy użyciu viessmann ktory ma połączenie z siecią.
  • #134
    mozart1500
    Poziom 11  
    Mnie również zainteresował temat... nawet w celach edukacyjnych..:)
  • #135
    quarrx
    Poziom 10  
    LOA to bardzo dobry sterownik. Problem pojawia się wraz z budową palnika. Ja zdecydowałem się na arduino ze wzgledu na brak regulacji czasu odpalania. LOA po prostu zbyt często się wyłączał. Rozumiem wszytkich tych którzy martwią się bezpieczeństwem. Trzeba podejść do dzialania programu w ten sam sposób jak działa LOA. Ja mam palnik bardzo prosty bo nie mam żadnych grzałek prócz przerobionego podgrzewacza drążka wiec loa sobie radzi jeśli olej nie jest zbyt gesty.
    Im gęstszy tym czas odpalania dłuższy . A nawet jak odpali to bimetal może rozłączyć bo juz jest zbyt gorący a drugiej próby juz nie będzie.
    Dlatego postawiłem na kontrolę płomienia z możliwością regulacji czasu odpalania. Działa świetnie ale, jak napisalem - w moim palniku.
    Jeśli kogoś interesuje dodam komentarze w kodzie i go wrzucę
  • #136
    mozart1500
    Poziom 11  
    W tym właśnie jest przewaga nad LOA -elastyczność - to jest to czego mi trzeba. Wrzuć Kolego swój kod jak możesz, z pewnością ktoś skorzysta... A i ja nie omieszkam obadać.
  • #137
    quarrx
    Poziom 10  
    to jest moj kod. wszelkie poprawki i nowe idee mile widziane
    pracuje teraz nad dorzuceniem sondy lambda

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    /* i2c led on adress 0x3F */
    LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    /* termistor */
    int Thermistor = A0;
    int Vo;
    float R1 = 10000; /* sonda ntc 10k */
    float logR2, R2, T, Tc, Tf;
    float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

    int Photoresistor = A1;
    int Po= 0;
    int Consigne = 20; // wartosc temperatury drazka
    int i = 0; // zmienna kontrolna
    int j = 0; // zmienna kontrolna
    int f = 0; // plomien
    char Str[8] = "";
    int val;
    int col = 0;
    int row = 0;


    int start() {
    if(i<4 ){ // ilosc prob odpalania

    while(Consigne>temperatura()){
    termostat();
    setprint("temperatura", temperatura() , 0); // inicjacja termostatu
    delay(50);
    }
    setprint("odpalanie", i , 1); // start
    digitalWrite(6,HIGH); //iskra
    digitalWrite(9,HIGH); //elektrozawor off
    digitalWrite(7,HIGH); //WENTYLATOR off
    digitalWrite(7,LOW); // wentylator off
    delay (5000) ; // wartosci maga byc przedstawione jako zmienne
    digitalWrite(9,LOW); //elektrozawor on
    delay(3000);
    digitalWrite(6,LOW); //iskra on
    delay (5000);
    i++ ;
    }
    else{
    lcd.clear();
    lcd.home();
    lcd.setCursor(5,0);
    lcd.print("AWARIA");
    digitalWrite(6,HIGH); //iskra
    digitalWrite(7,HIGH); //wentylator
    digitalWrite(8,HIGH); //grzalka
    digitalWrite(9,HIGH); //elektrozawor

    }
    }

    /*sonda temperatury ntc */
    float temperatura() {
    Vo = analogRead(Thermistor);
    R2 = R1 * (1023.0 / (float)Vo - 1.0);
    logR2 = log(R2);
    T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
    Tc = -T + 273.15;
    Tf = (Tc * 9.0)/ 5.0 + 32.0;
    return Tc;
    }

    void termostat(){
    if( temperatura() < Consigne) { digitalWrite(8,LOW);}
    else{ digitalWrite(8,HIGH);}
    }



    int flame(){
    Po = analogRead(Photoresistor);
    if(Po<300 ){ // wartosc dobrana eksperymentalnie
    f=1;
    return f;
    }
    else{
    f=0;
    return f;
    }
    }


    int setprint( char Str[8],int val , int row){ // opcjonalna funkcja do szybkiego wyswietlania danych
    lcd.clear();
    lcd.home();
    lcd.setCursor( 0 , row);
    lcd.print(Str);
    lcd.setCursor( 12 , row);
    lcd.print(val);
    }

    void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);
    lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines and turn on backlight

    pinMode(A0,INPUT); // temperatura oleju
    pinMode(A1,INPUT); // czujnik plomienia
    //pinMode(5, INPUT_PULLUP); //plywak ewenualny
    pinMode(6,OUTPUT); //iskra
    pinMode(7,OUTPUT); //wentylator i pompa paliwa
    pinMode(8,OUTPUT); //grzalka
    pinMode(9,OUTPUT); //elektrozawor
    //pinMode(10,OUTPUT); //pompa ewentualna
    digitalWrite(6,HIGH); //iskra
    digitalWrite(7,HIGH); //wentylator
    digitalWrite(8,HIGH); //grzalka
    digitalWrite(9,HIGH); //elektrozawor
    start();
    }


    void loop() {
    /*lcd.setCursor(9,0); // wyswietlanie iteracji
    lcd.print(j);
    lcd.setCursor(9,1);
    lcd.print(i);*/
    if(j > 50){
    digitalWrite(6,HIGH); } // iskra wylaczona
    termostat();
    delay(250);
    if(!flame()){ //kontrola plomienia
    start();
    }
    else{

    setprint("olej", Po , 1);
    setprint("flame", Po , 0 );}

    j++;
    }
  • #138
    GAAD
    Poziom 16  
    Bardzo fajny i działający kod.
    Wydaje mi się jednak, że iskra powinna pojawić się przed otwarciem elektrozaworu względnie razem z elektrozaworem. Ale to każdy może sobie już poprawić. Wydaje mi się też, że palnik wystartuje na zimnym drążku a powinien zacząć grzać i po osiągnięciu temperatury przedmuchać komorę, podać iskrę i paliwo.
    Jeszcze jedno po zaniku płomienia silnik (wiatrak i pompa) powinien działać,
    Czyli zanika płomień zamyka się wyłącznie elektrozawór, przedmuch komory i ponowna próba zapłonu. Gdy skończy się niepowodzeniem silnik stop (ewentualnie po ostatniej próbie bo chyba są 4ry).
    Pozdrawiam
    Wojtek
  • #139
    quarrx
    Poziom 10  
    Zgadza się , iskrę można podać przed, jednocześnie lub po elektrozaworze. Ja wybrałem po ze względu na relatywnie dość długi czas oczekiwania na dopompowanie oleju.
  • #140
    GAAD
    Poziom 16  
    Zimowe wieczory i odrobina wolnego czasu spowodowały, że i ja w końcu złożyłem swój zestaw.
    Kod nie jest mój - bazowałem na pracy kolegi sztapl.
    Też moja pierwsza zabawa z Arduino zatem wszystko robione metodą prób i błędów z pomocą sieci.
    Zatem:
    1. Sterowanie przekaźnikami stanem LOW
    2. Ponieważ nie mam wyświetlacza z I2C (jeszcze) zadana temp. oleju, zmierzona temp. oleju i wartość fotokomórki zrzucana na RSa.
    Jest to przydatne bo fotorezystor mam ze starej czujki ruchu o odwrotnych parametrach czyli jak jest jasno ok. 200 Ohm bez płomienia powyżej 1MOhm. Poza tym można sobie na bieżąco skalibrować posiadany czujnik płomienia i wykorzystać oryginalny od palnika wystarczy odczytać wartości bez płomienia i z płomieniem i odpowiednio zmodyfikować znak oraz wartość w kodzie.

    Zmieniałem też parametry w LiquidCrystal bo wywalało mi błędy chyba opcje backlight i init a że nie mam na razie wyświetlacza (płynie z Chin zapewne) to nie wiem czy zadziała.

    Generalnie należy koledze sztappl pogratulować bo naprawdę wszystkie parametry LOA zachowane nawet wykrywanie płomienia przed startem (względnie wyjętego palnika na zewnątrz) jak w LOA.
    Pełen szacunek z mojej strony jak na pierwsze programowanie o ile dobrze pamiętam.


    Kod: c
    Zaloguj się, aby zobaczyć kod



    Oczywiście wszelkie uwagi i poprawki mile widziane.

    Pozdrawiam
    Wojtek
  • #141
    mozart1500
    Poziom 11  
    Pięknie, aż nie mogę się doczekać kiedy przyjdą zabawki ;)
  • #142
    GAAD
    Poziom 16  
    Ponieważ wyświetlacz z Chin dotarł drobna korekta aby mój LCD świecił jak należy a odczyt po RSie wyłączony.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Być może komuś się przyda.

    edit:
    Czy koś może podpowiedzieć jak zmienić ten program aby na wyświetlaczu był odliczany czas przedmuchu?

    konkretnie ten fargment:

    digitalWrite(7,LOW); // wlczam wentylator
    delay(10000); // czekaj 10 s wentyluje piec
    digitalWrite(6,LOW); // podaje iskre

    delay nie da się wyświetlić z tego co czytałem
    Wartość czasu ma być stała i odliczna na LCD.
    Kombinować z Timers ?