Close

jemiki8453

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 1,171. až 1,200. (celkem z 2,779)
  • Autor
    Příspěvky
  • odpověď na: Řídící jednotka pro peletový kotel #9551
    johnyhol
    Účastník

    Tak tady:

    
    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 13_12_2016
    
    // changelog
    // v 13_12_2016
    //   testovani displeje
    // v 13_11_2016
    //   zrusena reakce na prostorovy termostat -> není potreba, reseno jiz v kotli
    // v 10_11_2016
    //   uprava seriove komunikace -> pridani casovacu jednotlivych funkci 
    // v 5_11_2016
    //   zmena casu - upraveno pro realny provoz
    // v 4_11_2016
    //   zmena vsech vystupu na rele
    // v 14_5_2016
    //   precislovani pinu
    //   zmena funkce fotobunky z digitalu na analog
    //   dolpneni seriove komunikace o hodnotu fotobunky 
    // v 30_3_2016
    //   oprava funkce tlacitka kvitace poruchy -> HIGH->LOW
    //   umazani parametru "long cas=13000;" -> jiz neni potreba
    //   umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba
    //   umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba
    //   umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){  // prostorovy  nebo  kotlovy termostat vypne" u funkce zapaleni
    //   drobne upravy textu/popisu jednotlivych parametru/funkci
    // v 27_3_2016
    //   uprava procesu zapalovani - nebude reagovat na prostorovy termostat
    //   uprava dlouhych delayu na smycky,  pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s
    //   nastaveni definice poruch pro pozdejsi vyuziti
    // v22_3_2016
    //   uprava ladicich textu pro termostaty
    // v21_3_2016
    //   presunuti testuPlamene pouze do smycky udrzuj horeni
    //   doplneni textu do testu horeni
    //   oprava textu zprav
    //   zruseni diakritiky
    //   zapnuti alarmu pri vyskytu poruchy
    // v20_3_2016
    //   slouceni podminenych funkci  
    //   vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy)
    //   rozdeleni funkci do vlastnich funkcnich bloku
    //   zapojeni seriove komunikace pro odladeni funkci 
    // v16_3_2016
    //   uprava podminky smycek (zruseno =)
    //   posun zpozdeni 5s z procesu zapaleni na jeho konec
    //   doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni
    //   upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle
    //   nastaveni poruchy a jeji kvitance tlacitkem na pinu 9
    
    // definice poruch
    // bit  funkce
    // 0    prehrati kotle pri zapalovani
    // 1    ztrata plamene pri horeni
    // 2    volne
    // 3    volne
    // 4    volne
    // 5    volne
    // 6    volne
    // 7    volne
    
    // knihovna watchdogu
    #include <avr/wdt.h>
    // knihovna displeje
    #include <LiquidCrystal.h>
    
    // nastaveni pinu displeje
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    #define davkovaniPelet 2 //davkovani pelet snek
    #define spirala 3 //zapalovaci spirala
    #define ventilator 5 //ventilator
    #define alarm 6 //signalizace poruchy
    #define kotlovyTermostat 8 //kotlovy termostat
    #define fotobunka 15 //fotobunka pro kontrolu plamene DI15 = A1 pro arduino UNO
    #define trimr1 14 // nastaveni doby zapaleni  DI14 = A0 pro arduino UNO
    #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy
    
    int smycka1 = 0; // pomocna smycka - zapaleni
    int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A0 60-600s
    int smycka2 = 0; // pomocna smycka - udrzeni horeni
    int smycka2max = 2; // max.pomocne smycky
    int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni
    int smycka3max = 2; // max.pomocne smycky
    int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet
    int smycka4max = 10; // max.pomocne smycky
    int smycka5 = 0; // pomocna smycka - rozhoreni
    int smycka5max = 5; // max.pomocne smycky
    int smycka6 = 0; // pomocna smycka - dohoreni
    int smycka6max = 84; // max.pomocne smycky
    byte porucha = 0; // promenna pro zaznam poruchy
    int ldr = 1; //analogovy pin kde je pripojen fotorezistor
    int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru
    
    void setup() {
      // nastav seriovou komunikaci na rychlost 9600 bd 
      Serial.begin(9600);
      Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace
      // nastaveni displeje
      lcd.begin(16, 2);
      // zobrazeni na displeji
      lcd.print("NAST.VSTUPY/VYST");
      //delay (5000);
      // smaze displej pred dalsi smyckou
      //lcd.clear();
      pinMode(davkovaniPelet, OUTPUT);
      pinMode(spirala, OUTPUT);
      pinMode(ventilator, OUTPUT);
      pinMode(alarm, OUTPUT);
      pinMode(kotlovyTermostat, INPUT);
      pinMode(fotobunka, INPUT);
      pinMode(trimr1, INPUT);
      pinMode(tlacitkoKvitance, INPUT);
      // vsechno vypni
      vypniVse();
            // nastav watchdog na 8s
            wdt_enable(WDTO_8S);
    }
    
    void loop() {
            wdt_reset(); // resetuj watchdog
            ldr_value = analogRead(ldr); //čte hodnoty LDR
      Serial.print("HODNOTA FOTOBUNKY = ");
      Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
      // smaze displej pred dalsi smyckou
      lcd.clear();
      // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0):
      lcd.setCursor(0, 1);
      // zobrazeni na displeji
      lcd.print("FOTOBUNKA");
      Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace
      smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0
      if(digitalRead(kotlovyTermostat) == HIGH){  // kotlovy termostat je zapnuty
              Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace
          // startovaci davka pelet
          //------------------------
          zapalovaciDavkaPelet();
          
          // proces zapaleni
          //----------------
          zapaleni();
          
          // test poruchy
          // -----------------
          //testPlamene(); 
          
          // udrzeni horeni
          //--------------
          udrzujHoreni();
          
          // dohoreni
          //---------
          dohoreni();
        
        } else {
          Serial.println("Kotlovy/Prostorovy termostat vypnut"); // ladici seriova komunikace
        }
      // kvitence pripadne poruchy
      //-------------------------------
      kvitancePoruchy();
    }
    
    void vypniVse() {
      // funkce vypni vse
      Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
      // smaze displej pred dalsi smyckou
      lcd.clear();
      // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0):
      lcd.setCursor(0, 1);
      // zobrazeni na displeji
      lcd.print("VYPINAM VS. RELE");
      digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
      digitalWrite(spirala, HIGH); //vypni zhaveni
      digitalWrite(ventilator, HIGH); //vypni ventilator
    }
    
    void zapalovaciDavkaPelet() {
      // prvotni davkovani pelet pro zapaleni
      Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, LOW); //davkuj pelety
            for (smycka4 = 0;  smycka4 < smycka4max; smycka4 ++){
        delay(1000); 
              wdt_reset(); // resetuj watchdog
      Serial.print("Stav: ");
      Serial.print(smycka4);
      Serial.print("s/");
      Serial.print(smycka4max);
      Serial.println("s ");
            }
      digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani
      digitalWrite(ventilator, LOW); //zapni ventilator
      digitalWrite(spirala, LOW); //zapni zhaveni
    }
    
    void zapaleni() {
      // funkce zapaleni pelet
      // 2 pokusy o zapaleni
      Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace
      for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
        // smycka "1-10" minut zapalovani
        for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
                            wdt_reset(); // resetuj watchdog
          Serial.print("Pokus o zapaleni "); // ladici seriova komunikace
          Serial.print(smycka3); // ladici seriova komunikace
          Serial.print("/"); // ladici seriova komunikace
          Serial.println(smycka3max); // ladici seriova komunikace
          Serial.print("Stav: "); // ladici seriova komunikace
          Serial.print(smycka1); // ladici seriova komunikace
          Serial.print("s/"); // ladici seriova komunikace
          Serial.print(smycka1max); // ladici seriova komunikace
          Serial.println("s "); // ladici seriova komunikace
                            
          if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne
            digitalWrite(spirala, HIGH); //vypni zhaveni
            smycka1 = smycka1max; // ukonci smycku1
            smycka3 = smycka3max; // ukonci smycku3
            Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace
                                    bitSet(porucha,0); // nastav poruchu bit c.0 na "1"
          }
          if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen
            digitalWrite(spirala, HIGH); //vypni zhaveni
            smycka1 = smycka1max; // ukonci smycku1
            smycka3 = smycka3max; // ukonci smycku3 
            Serial.println(" hori ...");   // ladici seriova komunikace
            Serial.println("Rozhoreni ... 50s ");
                  
          } else {
            Serial.println(" nehori ...");   // ladici seriova komunikace 
          }
          delay(1000);
        }
                    for (smycka5 = 0;  smycka5 < smycka5max; smycka5 ++){
                delay(1000); 
                      wdt_reset(); // resetuj watchdog
            Serial.print("Stav: ");
            Serial.print(smycka5);
            Serial.print("s/");
            Serial.print(smycka5max);
            Serial.println("s ");
                    }
        //delay(5000); //cekej 5s
      }
    }
    
    void udrzujHoreni() {
      // funkce udrzeni horeni
      ldr_value = analogRead(ldr); //čte hodnoty LDR
      Serial.print("HODNOTA FOTOBUNKY = ");
      Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
      Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace
      for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
                    wdt_reset(); // resetuj watchdog
        smycka2 = 0; // vynuluj smycku
        if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty
          if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen
                      Serial.println("Test plamene ... hori"); // ladici seriova komunikace
                      Serial.println("Davkuji pelety ... ");
            digitalWrite(davkovaniPelet, LOW); //davkuj pelety
            delay(4000); //pockej 4s
            wdt_reset(); // resetuj watchdog
            delay(4000); //pockej 4s
            wdt_reset(); // resetuj watchdog
            //Serial.print("s/");
            //Serial.print(davkovaniPelet, LOW);
            //Serial.print("s ");
            
            Serial.println("Pauza ... ");
            digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
            delay(5000); //pockej 5s
            wdt_reset(); // resetuj watchdog
            delay(5000); //pockej 5s
            wdt_reset(); // resetuj watchdog
          } else {
            delay(1000); // pocekej jeste 1s a zkus to znovu
            if(analogRead(fotobunka) >= 500){  //pokud fotobunka nevidi plamen
                                    Serial.println("Test plamene ... porucha"); // ladici seriova komunikace
                                    smycka2 = smycka2max; // ukonci smycku
                        //porucha = 1; // nastav poruchu
                                    bitSet(porucha,1); // nastav poruchu bit c.1 na "1"
                                    digitalWrite(alarm, LOW); // zapni alarm
            }
          }
        } else {
          smycka2 = smycka2max; // ukonci smycku
        }  
      }
    }
    
    void dohoreni() {
      // funkce dohoreni
      Serial.println("Dohoreni ... 840s "); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet
      digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu
      
            for (smycka6 = 0;  smycka6 < smycka6max; smycka6 ++){
      Serial.print("Stav: ");
      Serial.print(smycka6);
      Serial.print("s/");
      Serial.print(smycka6max);
      Serial.println("s ");
        delay(1000); 
              wdt_reset(); // resetuj watchdog
            }
      digitalWrite(ventilator, HIGH); //vypni ventilator
      
    }
    
    void kvitancePoruchy() {
      // funkce kvitance poruchy
      
      if(porucha > 0 ){ // kdyz je porucha aktivni
            Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace
        // vypni vse
        vypniVse();
        while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka
          digitalWrite(alarm, LOW); // zapni alarm
          Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace
                            wdt_reset(); // resetuj watchdog
        }
        Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace
        digitalWrite(alarm, HIGH); // vypni alarm
        porucha = 0; // vynuluj poruchu
      } else {  // jinak 
        Serial.println("Zadna porucha  ..."); // ladici seriova komunikace
        digitalWrite(alarm, HIGH); // vypni alarm
    }
    }
    
    odpověď na: Řídící jednotka pro peletový kotel #9541
    posjirka
    Účastník

    hod sem poslední kod včetně tech uprav lcd odemně

    odpověď na: Bluetooth #9540
    Vojtěch Vosáhlo
    Účastník

    Zkuste použít inquiry. Mělo by to snad fungovat. Zde je docu: https://www.itead.cc/wiki/BTBee_Pro#28._Inquiry_Bluetooth_Device

    odpověď na: Řídící jednotka pro peletový kotel #9538
    johnyhol
    Účastník

    Ahoj, díky za rychlou reakci. Zkoušel jsem to jak radíš, ale stejně to nic nezobrazí, pořád funguje jenom „nastavuji vstupy/vystupy“ a pak už nic. Když to zkusím v extra projektu (jenom displej bez ostatních funkcí) tak to funguje. Ještě musí bejt někde něco.

    odpověď na: Řídící jednotka pro peletový kotel #9537
    posjirka
    Účastník

    ahoj,
    chybka je jasná:
    – nejdřív musíš smazat LCD
    – pak nastavit kurzor
    – nakonec vypsat text

    teď to máš takto:

      lcd.setCursor(0, 1);
      // zobrazeni na displeji
      lcd.print("FOTOBUNKA");
      // smaze displej pred dalsi smyckou
      lcd.clear();
    

    správně to má být takto:

    
      // smaze displej
      lcd.clear();
      // nastaveni kurzoru
      lcd.setCursor(0, 1);
      // zobrazeni na displeji
      lcd.print("FOTOBUNKA");
    
    
    odpověď na: Řídící jednotka pro peletový kotel #9534
    johnyhol
    Účastník

    Ahoj, tak jsem se pustil do toho dipleje, něco jsem naštudoval, něco vyzkoušel. Teď se to snažím nacpat do mýho projektu, ale nějak se mi to nedaří. Zkusíš mi na to prosím kouknout? Zatím jsem jenom nastavil do setupu hlášku „nastavuji vstupy/vystupy“ (to funguje) a pak jsem zkoušel dát do loopu fotobuňku a do vypniVse „vypinam vsechny rele“, ale tam už se mi to nedaří.
    Tady je aktuálmí kód:

    
    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 13_12_2016
    
    // changelog
    // v 13_12_2016
    //   testovani displeje
    // v 13_11_2016
    //   zrusena reakce na prostorovy termostat -> není potreba, reseno jiz v kotli
    // v 10_11_2016
    //   uprava seriove komunikace -> pridani casovacu jednotlivych funkci 
    // v 5_11_2016
    //   zmena casu - upraveno pro realny provoz
    // v 4_11_2016
    //   zmena vsech vystupu na rele
    // v 14_5_2016
    //   precislovani pinu
    //   zmena funkce fotobunky z digitalu na analog
    //   dolpneni seriove komunikace o hodnotu fotobunky 
    // v 30_3_2016
    //   oprava funkce tlacitka kvitace poruchy -> HIGH->LOW
    //   umazani parametru "long cas=13000;" -> jiz neni potreba
    //   umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba
    //   umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba
    //   umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){  // prostorovy  nebo  kotlovy termostat vypne" u funkce zapaleni
    //   drobne upravy textu/popisu jednotlivych parametru/funkci
    // v 27_3_2016
    //   uprava procesu zapalovani - nebude reagovat na prostorovy termostat
    //   uprava dlouhych delayu na smycky,  pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s
    //   nastaveni definice poruch pro pozdejsi vyuziti
    // v22_3_2016
    //   uprava ladicich textu pro termostaty
    // v21_3_2016
    //   presunuti testuPlamene pouze do smycky udrzuj horeni
    //   doplneni textu do testu horeni
    //   oprava textu zprav
    //   zruseni diakritiky
    //   zapnuti alarmu pri vyskytu poruchy
    // v20_3_2016
    //   slouceni podminenych funkci  
    //   vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy)
    //   rozdeleni funkci do vlastnich funkcnich bloku
    //   zapojeni seriove komunikace pro odladeni funkci 
    // v16_3_2016
    //   uprava podminky smycek (zruseno =)
    //   posun zpozdeni 5s z procesu zapaleni na jeho konec
    //   doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni
    //   upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle
    //   nastaveni poruchy a jeji kvitance tlacitkem na pinu 9
    
    // definice poruch
    // bit  funkce
    // 0    prehrati kotle pri zapalovani
    // 1    ztrata plamene pri horeni
    // 2    volne
    // 3    volne
    // 4    volne
    // 5    volne
    // 6    volne
    // 7    volne
    
    // knihovna watchdogu
    #include <avr/wdt.h>
    // knihovna displeje
    #include <LiquidCrystal.h>
    
    // nastaveni pinu displeje
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    #define davkovaniPelet 2 //davkovani pelet snek
    #define spirala 3 //zapalovaci spirala
    #define ventilator 5 //ventilator
    #define alarm 6 //signalizace poruchy
    #define kotlovyTermostat 8 //kotlovy termostat
    #define fotobunka 15 //fotobunka pro kontrolu plamene DI15 = A1 pro arduino UNO
    #define trimr1 14 // nastaveni doby zapaleni  DI14 = A0 pro arduino UNO
    #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy
    
    int smycka1 = 0; // pomocna smycka - zapaleni
    int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A0 60-600s
    int smycka2 = 0; // pomocna smycka - udrzeni horeni
    int smycka2max = 2; // max.pomocne smycky
    int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni
    int smycka3max = 2; // max.pomocne smycky
    int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet
    int smycka4max = 10; // max.pomocne smycky
    int smycka5 = 0; // pomocna smycka - rozhoreni
    int smycka5max = 5; // max.pomocne smycky
    int smycka6 = 0; // pomocna smycka - dohoreni
    int smycka6max = 84; // max.pomocne smycky
    byte porucha = 0; // promenna pro zaznam poruchy
    int ldr = 1; //analogovy pin kde je pripojen fotorezistor
    int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru
    
    void setup() {
      // nastav seriovou komunikaci na rychlost 9600 bd 
      Serial.begin(9600);
      Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace
      // nastaveni displeje
      lcd.begin(16, 2);
      // zobrazeni na displeji
      lcd.print("NAST.VSTUPY/VYST");
      delay (5000);
      // smaze displej pred dalsi smyckou
      lcd.clear();
      pinMode(davkovaniPelet, OUTPUT);
      pinMode(spirala, OUTPUT);
      pinMode(ventilator, OUTPUT);
      pinMode(alarm, OUTPUT);
      pinMode(kotlovyTermostat, INPUT);
      pinMode(fotobunka, INPUT);
      pinMode(trimr1, INPUT);
      pinMode(tlacitkoKvitance, INPUT);
      // vsechno vypni
      vypniVse();
            // nastav watchdog na 8s
            wdt_enable(WDTO_8S);
    }
    
    void loop() {
            wdt_reset(); // resetuj watchdog
            ldr_value = analogRead(ldr); //čte hodnoty LDR
      Serial.print("HODNOTA FOTOBUNKY = ");
      Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
      // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0):
      lcd.setCursor(0, 1);
      // zobrazeni na displeji
      lcd.print("FOTOBUNKA");
      // smaze displej pred dalsi smyckou
      lcd.clear();
      Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace
      smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0
      if(digitalRead(kotlovyTermostat) == HIGH){  // kotlovy termostat je zapnuty
              Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace
          // startovaci davka pelet
          //------------------------
          zapalovaciDavkaPelet();
          
          // proces zapaleni
          //----------------
          zapaleni();
          
          // test poruchy
          // -----------------
          //testPlamene(); 
          
          // udrzeni horeni
          //--------------
          udrzujHoreni();
          
          // dohoreni
          //---------
          dohoreni();
        
        } else {
          Serial.println("Kotlovy/Prostorovy termostat vypnut"); // ladici seriova komunikace
        }
      // kvitence pripadne poruchy
      //-------------------------------
      kvitancePoruchy();
    }
    
    void vypniVse() {
      // funkce vypni vse
      Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
      // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0):
      lcd.setCursor(0, 1);
      // zobrazeni na displeji
      lcd.print("VYPINAM VS. RELE");
      // smaze displej pred dalsi smyckou
      lcd.clear();
      digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
      digitalWrite(spirala, HIGH); //vypni zhaveni
      digitalWrite(ventilator, HIGH); //vypni ventilator
    }
    
    void zapalovaciDavkaPelet() {
      // prvotni davkovani pelet pro zapaleni
      Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, LOW); //davkuj pelety
            for (smycka4 = 0;  smycka4 < smycka4max; smycka4 ++){
        delay(1000); 
              wdt_reset(); // resetuj watchdog
      Serial.print("Stav: ");
      Serial.print(smycka4);
      Serial.print("s/");
      Serial.print(smycka4max);
      Serial.println("s ");
            }
      digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani
      digitalWrite(ventilator, LOW); //zapni ventilator
      digitalWrite(spirala, LOW); //zapni zhaveni
    }
    
    void zapaleni() {
      // funkce zapaleni pelet
      // 2 pokusy o zapaleni
      Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace
      for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
        // smycka "1-10" minut zapalovani
        for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
                            wdt_reset(); // resetuj watchdog
          Serial.print("Pokus o zapaleni "); // ladici seriova komunikace
          Serial.print(smycka3); // ladici seriova komunikace
          Serial.print("/"); // ladici seriova komunikace
          Serial.println(smycka3max); // ladici seriova komunikace
          Serial.print("Stav: "); // ladici seriova komunikace
          Serial.print(smycka1); // ladici seriova komunikace
          Serial.print("s/"); // ladici seriova komunikace
          Serial.print(smycka1max); // ladici seriova komunikace
          Serial.println("s "); // ladici seriova komunikace
                            
          if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne
            digitalWrite(spirala, HIGH); //vypni zhaveni
            smycka1 = smycka1max; // ukonci smycku1
            smycka3 = smycka3max; // ukonci smycku3
            Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace
                                    bitSet(porucha,0); // nastav poruchu bit c.0 na "1"
          }
          if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen
            digitalWrite(spirala, HIGH); //vypni zhaveni
            smycka1 = smycka1max; // ukonci smycku1
            smycka3 = smycka3max; // ukonci smycku3 
            Serial.println(" hori ...");   // ladici seriova komunikace
            Serial.println("Rozhoreni ... 50s ");
                  
          } else {
            Serial.println(" nehori ...");   // ladici seriova komunikace 
          }
          delay(1000);
        }
                    for (smycka5 = 0;  smycka5 < smycka5max; smycka5 ++){
                delay(1000); 
                      wdt_reset(); // resetuj watchdog
            Serial.print("Stav: ");
            Serial.print(smycka5);
            Serial.print("s/");
            Serial.print(smycka5max);
            Serial.println("s ");
                    }
        //delay(5000); //cekej 5s
      }
    }
    
    void udrzujHoreni() {
      // funkce udrzeni horeni
      ldr_value = analogRead(ldr); //čte hodnoty LDR
      Serial.print("HODNOTA FOTOBUNKY = ");
      Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
      Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace
      for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
                    wdt_reset(); // resetuj watchdog
        smycka2 = 0; // vynuluj smycku
        if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty
          if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen
                      Serial.println("Test plamene ... hori"); // ladici seriova komunikace
                      Serial.println("Davkuji pelety ... ");
            digitalWrite(davkovaniPelet, LOW); //davkuj pelety
            delay(4000); //pockej 4s
            wdt_reset(); // resetuj watchdog
            delay(4000); //pockej 4s
            wdt_reset(); // resetuj watchdog
            //Serial.print("s/");
            //Serial.print(davkovaniPelet, LOW);
            //Serial.print("s ");
            
            Serial.println("Pauza ... ");
            digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
            delay(5000); //pockej 5s
            wdt_reset(); // resetuj watchdog
            delay(5000); //pockej 5s
            wdt_reset(); // resetuj watchdog
          } else {
            delay(1000); // pocekej jeste 1s a zkus to znovu
            if(analogRead(fotobunka) >= 500){  //pokud fotobunka nevidi plamen
                                    Serial.println("Test plamene ... porucha"); // ladici seriova komunikace
                                    smycka2 = smycka2max; // ukonci smycku
                        //porucha = 1; // nastav poruchu
                                    bitSet(porucha,1); // nastav poruchu bit c.1 na "1"
                                    digitalWrite(alarm, LOW); // zapni alarm
            }
          }
        } else {
          smycka2 = smycka2max; // ukonci smycku
        }  
      }
    }
    
    void dohoreni() {
      // funkce dohoreni
      Serial.println("Dohoreni ... 840s "); // ladici seriova komunikace
      digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet
      digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu
      
            for (smycka6 = 0;  smycka6 < smycka6max; smycka6 ++){
      Serial.print("Stav: ");
      Serial.print(smycka6);
      Serial.print("s/");
      Serial.print(smycka6max);
      Serial.println("s ");
        delay(1000); 
              wdt_reset(); // resetuj watchdog
            }
      digitalWrite(ventilator, HIGH); //vypni ventilator
      
    }
    
    void kvitancePoruchy() {
      // funkce kvitance poruchy
      
      if(porucha > 0 ){ // kdyz je porucha aktivni
            Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace
        // vypni vse
        vypniVse();
        while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka
          digitalWrite(alarm, LOW); // zapni alarm
          Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace
                            wdt_reset(); // resetuj watchdog
        }
        Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace
        digitalWrite(alarm, HIGH); // vypni alarm
        porucha = 0; // vynuluj poruchu
      } else {  // jinak 
        Serial.println("Zadna porucha  ..."); // ladici seriova komunikace
        digitalWrite(alarm, HIGH); // vypni alarm
    }
    }
    

    Díky moc!

    odpověď na: Track and trace ČP #9533
    ArduXPP
    Účastník

    Ukazuje to, že je to třeba uložené na poště atd. A pak asi po 8 hodině ranní to ukáže, že zásilka bude ten den doručována. Když balík dorazí do ČR dostane jiné číslo balíku, které je ukázané na stránkách pošty a podle toho čísla jde dál sledovat zásilku v ČR.

    Vojtěch Vosáhlo
    Účastník

    Pokud vím tak žádný levnější arduino to neumí, pokud potřebujete zvuk jiný než jen nějakou frekvenci, např hlas, zkuste použít jeden z těch „levných“ audio modulů pro arduino. Kdyby šlo o malý kód, použil bych třeba nějaké levné attiny místo arduina. Šetřit kde se dá… ?

    odpověď na: Track and trace ČP #9529
    Vojtěch Vosáhlo
    Účastník

    To ano, a sledovat je můžu např pře 17track. Spíš mi šlo o to jestli jde nějak zjistit poloha v ČR. Např celnice/lokální pošta… Pokud vím tak by tohle mělo fungovat u EMS ale ani to mi nejde 🙁 Asi si holt počkám

    odpověď na: Track and trace ČP #9528
    ArduXPP
    Účastník

    U zboží je možné si vybrat způsob dopravy a je tam i informace, že jestli jde sledovat v cílené zemi balíček „Tracking Information – Not available NE – Available ANO“ , pak ještě záleží jak to doopravdy obchodník pošle, už jse mi stalo, že to poslal jinak než píše u objednávky „Logistics Information:“ . Tedy, že napsal číslo ale poslal to pod jiným číslem 🙂

    odpověď na: Track and trace ČP #9527
    Vojtěch Vosáhlo
    Účastník

    Mimochodem T&T české pošty.

    posjirka
    Účastník

    to ARDUXPP: co třeba toto: https://cs.wikibooks.org/wiki/Praktick%C3%A1_elektronika
    to Aleš: fakt nevím. Doma je ještě nemám a plánoval jsem takovou zhýralost, že bych je použil jako záložní zdroj pro RTC. takový ty hračky jako vozítko s vibračním motorem, nemá v realitě žádné praktické použití. jinak jsem viděl v A-radiu použití místo baterie v multimetru, na internetu bylo použití jako zdroj pro mobily. No nevím powerbanka mě přijde lepší

    Když nevím co se starším chlebem tak dám do googlu „starší chleba recepty“ … možná zkusit něco podobného 🙂

    dělám si legraci,ale opravdu nevím. Když jsem přemýšlel nad náhradou baterie tak buď by to vyžadovalo trvalé nabijení (připojení ke zdroji až do chvíle potřeby) kde jsou jakékoliv úspory = 0, nebo mi nevyhovovala vybíjecí charakteristika. Navíc 2,7V , ve výjmečných případech 5V nebo 12V není žádná výhra vzhledem k ceně a nutnosti chránit tto kondenzátory před přepětím. Ceny rostou a samovybijení taky nepředurčuje toto řešení jako nějáký záložní zdroj. Tak mě napadá UPS … . Vnuknul jsi mi nápad, ale vzhledem k mému pracovnímu vytížení mě to za chvilku přejde 🙂

    Aleš
    Účastník

    to posjirka: Superkondenzátorů 50F/2,7V tady mám plnou krabici, a nějak mě nenapadá, co s nima.. Nemáš nějaký nápad na jejich využití?

    ArduXPP
    Účastník

    A základy elektroniky je nějaký web, nebo dobrá učebnice?

    posjirka
    Účastník

    chce to prostudovat zákady nejen nabijení akumulátoru, ale i elektroniky obecně.
    c/10 znamená , že se baterie nabijí proudem = 0,1x nominální kapacita baterie.
    USB je schopné dodat 2A když na to přijde a rozuměn mu to vysvětlíš (komunikace přes USB zařízení, kde jeden z parametrů identifikace je i předpokádáný max. proud.)
    úbytek napětí se dán Ohmovým zákonem, resp. fyzikálními zákony. R = U / I.
    .. je třeba neplést si dobrou vůli přispívatelů do fór s technickým vzděláním. Já nejsem učitel. Rád pomohu, ale základy vysvětlovat odmítám …

    ArduXPP
    Účastník

    To c/10 je c je kondenzátor kapacita a těch 10 je odpor ?
    USB dává 500mA ne jen 250mA . Úbytek napětí 2,5V , to dosáhl jak ?

    posjirka
    Účastník

    to ARDUXPP: myslím,že to co potřebuješ najdeš tady:
    http://www.instructables.com/id/ARDUINO-SOLAR-CHARGE-CONTROLLER-Version-20/
    na otázku jak vypočítal 10 Ohm: Vzal to jaok nejjednodušší hodnotu, se kterou jde počítat. Při proudu 250mA (C/10) je na něm úbytek napětí 2,5V (0,25A*10Ohm). to je pro 5V vstupy ideální stav a do 0,5A dostačující řešení. Naštěstí mu to ošetřuje max. napájecí napětí 5V.

    To Aleš: o tom právě mluvím/píšu/chtel jsem říct/ … není baterka jako baterka (akumulátor). Každá má své vlastnosti a potřeby. To že něco navrhne neznamená, že to té baterce dělá dobře všem typům na světě. Spíš si zkrátí počet nabijecích cyklů. Pak po nějáké době čteš příspěvky jak stojí nabijecé baterie za prd, po roce odešli do věčných lovišť 🙂 . Stejně tak se dnes propaguje použití superkondenzátorů jako skvělá náhrada akumulátoru. Nabito během několik sekund, snese velké proudy, velkémnožstvý nabijecích cyklů, … . Realita je taková, že ať je nabito za 5s nebo za 5 hodin potřebuješ stejné množstvý energie. Když se nabijí 250mA 5 hodin tak na nabití během 5s potřebuje 60x12x0,25 = 180A 🙂 Velmi zjednodušeně. Přitom náběhový proud bude vlastně zkratový = kondenzátor je vybitý. Rád bych viděl ten zdroj, jištení a hlavně kabely. zapomeňte na drátky průřezu 0,25mm2. To ještě nezmiňuju vybijecí křivku, která narozdíl od baterii je lineární = nulová energie = 0V (kondenzátor), nebo např.10V (baterie), jinak se zhroutí články … To jsme asi trochu off topic…

    ArduXPP
    Účastník

    Vím limity arduina, koukal jsem na webu a hned první obrázek to znázorňuje, že to je použitý dle tohodle http://imgur.com/pGwDjhN , ale je použito pro výpočet mA piny 2 místo jednoho. Když se podívám do kodu, tak to tam píše, že A0 a A1 je pro použití uložení hodnot. To řešení z té stránky je nabíjení z USB .Kde asi nabíjí baterie 1.5V, ale jak vypočítal 10 Ohm aby mu to správně ukazovalo hodnoty.

    Předtím jsem se ptal jak to udělat, aby šlo z panelu 12V použít pro výpočet mA arduino, tedy jestli jde použít dělič atd. Nabíjení baterie mě nezajímalo.

    Aleš
    Účastník

    Šly by s tím nabíjet LiXX baterky. Na ně by tento způsob nabíjení seděl.

    posjirka
    Účastník

    to ARDUXPP: ta nabiječka není navržena úplně správně ale hlavní věc je že využívá 5V napájení proto pro vyššěi napětí není vhodná. Využívá se toho, že na když je napájení 5V tak na vstupuarduina nebu nikdy víc. Když tam dáš 9V, tak odpáliš arduino (procesor) protože má katalogově max.5,5V, Dále odpálíš jeho vstupy, protože ty mají max. 0,6V+napájecí napětí atd.
    jinak jestli sis všiml, tak na schématu není kreslená baterka 🙂 . Nejspíš to bylo myšleno trochu jinak , kdy 10Ohm odpor měl být ochranný / srážecí pro nabijení … . Bohužel takových „skvělích nápadů“ je plný internet.

    to Aleš: to víš, jednou to nabilo, tak to pustím do světa ať se ti nenažraní výrobci nabiječek zamyslí. vždyť to jde udělat mnohem jednodušejí … Navíc ta baterka postupně zvětšuje kapacitu – nafukuje se 🙂

    odpověď na: Jednoduchá komunikace nRF24L01 #9515
    Jerry
    Účastník
    odpověď na: Jednoduchá komunikace nRF24L01 #9514
    Jerry
    Účastník

    Už to funguje

    odpověď na: Jednoduchá komunikace nRF24L01 #9513
    Jerry
    Účastník

    Myslím, že původní kód pro vysílač není úplný. Trochu jsem tápal (jako začátečník) a po úpravě to začalo fungovat. Před tím jsem musel měnit proměnnou msg 0 a 1
    Takhle už to funguje

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    int msg[1];
    RF24 radio(9,10);
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int SW1 = 7;

    void setup(void){
    Serial.begin(9600);
    radio.begin();
    radio.openWritingPipe(pipe);}

    void loop(void){
    if (digitalRead(SW1) == HIGH){
    msg[0] = 111;
    radio.write(msg, 1);}
    else
    radio.write(msg, 0);}

    Aleš
    Účastník

    Měří se to na bočníku 0,1ohm, takže při 2A na něm bude úbytek 0,2V. To by snad mobilu vadit nemuselo, i když jsem se setkal s tabletem, který pod 5V nenabíjel 🙁
    Mimochodem, díval jsem se na ten program nabíječky z odkazu výš (http://www.allaboutcircuits.com/projects/create-an-arduino-controlled-battery-charger/). Na ničení NiMh akumulátorů dobré. Nabíjení ukončuje při napětí 1,6V a ne podle ΔV, jak se má nabíjení u těchto článků ukončovat. Ještě že tam má alespoň kontrolu teploty, protože jinak by mu při tom proudu, který tam má nastavený, polovina nabíjených článků vybouchala. To už rovnou může vzít zdroj 1,6V a k němu připojit akumulátor ;-( Jediné „přínosné“ je to měření rozdílu napětí pomocí 2 analogových vstupů.

    rerege
    Účastník

    Tak s tou INou219 tady přišel Aleš … takže díky za info.

    Ještě poslední dotaz než začnu nakupovat. Nebude nějaký úbytek napětí díky té vložce?
    Já jen, že když se u rychlonabíječek u moderních telefonů použije jiný kábl (tenčí/neorigo) nabíjení spadne… Mám se toho nějak bát?
    Nerad bych sestrojil sice skvělou vychytávku, ale pak balamutil čtenáře nepravdivými údaji, když mezi nabíječku a telefon vložím cizopasníka.
    Váňa
    PS: týjó já se t+ěím jak malej Jarda, jestli se to povede tak Vás zvu na kafe nebo Bernarda(ten nám teď zapojili na potrubí) :o)

    odpověď na: Chyba PORT #9510
    RadeCZEK
    Účastník

    Jo, pomohlo to, moc děkuji!

    ArduXPP
    Účastník

    Tady na tý stránce to měří na A0 a A1 http://www.allaboutcircuits.com/projects/create-an-arduino-controlled-battery-charger/ , má tam 10 Ohm + využívá jen 5V + Kontroluje stav i baterky .

    posjirka
    Účastník

    dělič napští samozřejmě jde, U proudu je to horší.VEm základní teorii, kdy zdroj má 12 a max. proud 2A. Dáš mu zátěž 10 Ohm (motor)
    Ten má při 12V odběr 12/10 = 1,2A.
    Když použiješ měřící odpor 1Ohm tak celkový odpor spotřebičů (motor + měřící odpor má 11 Ohm). Tento komplet má ale odběr 12/11 = 1,09A takže sisi zavedl chybu měření o 0,11A z 1,2A. Navíc motor nedostává 12V. ztráto na odporu je 1,09 A * 1 Ohm = 1,09V.
    Zdroj měl 12V na motor se dostane 12-1,09 = 10.9V … Ten asi nejde na 100 % 🙂

    posjirka
    Účastník

    to rozhodně nepůjde. 10 Ohm je extrémně moc. takový úbytek napětí by ovlivnil celkový průběh, nebo ho spíš totálně zabil.
    Při 5V je úbytek 0,5V 10 procent. To se ještě dá přežít, takže pro 2A použít 0,22Ohm je v pořádku, ik dyž na hraně….
    Vem si že napájích 5V mobil a na mobilu je 4,5V … to asi není ideální stav 🙂

    ArduXPP
    Účastník

    V jednom odkazu je použit rezistor 10 Ohm. Já mám k mání 65 Ohm.
    Když ale počítám podle toho vzoru, tak to vychází 65*3=195V .

    Chtěl jsem testovat solární panel 12V, bez stabilizátoru, třeba, že by šel udělat dělič na A0 a A1 🙂 ? To asi nepujde.

Aktuálně je na stránce zobrazeno 30 příspěvků - 1,171. až 1,200. (celkem z 2,779)