Close

posjirka

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 241. až 270. (celkem z 481)
  • Autor
    Příspěvky
  • odpověď na: Řídící jednotka pro peletový kotel #9208
    posjirka
    Účastník
          // dohoreni
          //---------
          dohoreni();
        //} - #1 chyba - navic 1x slozena zavorka
        } else {
          Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace
        }
    odpověď na: Řídící jednotka pro peletový kotel #9206
    posjirka
    Účastník

    odstranil jsem 1 chybu kterou jsem našel a arduino mi jej normálně skompiluje.
    Chyba byla v prebytecne zavorce v setup().

    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 14_5_2016
    
    // changelog
    // 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>
    
    #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 = 840; // 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
      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
    
      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();
        //} - #1 chyba - navic 1x slozena zavorka
        } else {
          Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace
        }
      // kvitence pripadne poruchy
      //-------------------------------
      kvitancePoruchy();
    }
    
    void vypniVse() {
      // funkce vypni vse
      Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
      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 #9152
    posjirka
    Účastník

    super …

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

    johny, johny …. já tě chápu ale obávám se že je to pouze 1smerná komunikace. Nevím jak jinak ti to vysvětlit. Spočítal sis kolik je 8s + 1s ?

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

    a kde máš to resetování watchdogu? 🙂

    
            digitalWrite(davkovaniPelet, LOW); //davkuj pelety
            delay(4000); //pockej 4s
            wdt_reset(); // resetuj watchdog
            delay(4000); //pockej 4s
            wdt_reset(); // resetuj watchdog
            digitalWrite(davkovaniPelet, HIGH); //vypni davkovani
            delay(1000); //pockej 1s
            wdt_reset(); // resetuj watchdog
    
    odpověď na: Řídící jednotka pro peletový kotel #9115
    posjirka
    Účastník

    co to znamená, že to nejde ? Nevím co měníš … hoď sem kod …

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

    ten watchdog je ochranná funkce … jak jsem již psal …
    celá funkce watchdog se skládá z:

    – vložení knihovny: #include <avr/wdt.h>
    – aktivace watchdogu v setupu : wdt_enable(WDTO_8S);
    – průběžný reset : wdt_reset();

    a 8s je pro něj maximum:
    https://tushev.org/articles/arduino/5/arduino-and-watchdog-timer
    add.2. – ano ten kod musíš napsat všude, kde bude čas delší než 8s. Radši méně, když máš pak víc funkcí nemusel by uplně všechno včas stíhat a omylem by se procesor sám resetoval.

    když chceš pauzu 10s tak jí rozděl na 2x 5s a pokaždé resetuj watchdog….
    u 15s to rozděl na 3x 5s a opět pokaždé resetuj watchdog …

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

    problém je v tom, že je tu použit tzv. watchog. ten je nastaven na určitý čas (8s což je jeho maximum). když se nezresetuje včas watchdog a přeteče tak se resetuje celý procesor. To je ta halvní výhoda celéhe řešneí. Když se někde kousne procesor tak se sám resetuje a pokračuje dál . Je to odpově´d na otázku, proč nejde nastavit čas delší než 8s.
    1. nepoužívej čas delší než 4-5s ať máš nějákou rezervu.
    2. Pro delší čas použij více postupných pauz:

    delay(3000); 
    wdt_reset(); // resetuj watchdog
    delay(3000); 
    wdt_reset(); // resetuj watchdog
    delay(4000); 
    wdt_reset(); // resetuj watchdog

    celý kod je řešen opravdu primitivně. Tak jsem ho i bral aby s ena něm dalo dobře naučit jak co funguje. I proto jen jej rozdělil na funkce, které jsou zkoumat postupně. Mrkni na to a kdybys něco nepobíral, tak určitě napovíme ….

    odpověď na: Osvětlení akvaria Led pásky #8963
    posjirka
    Účastník

    jo sorry, já jsem si to zkusil na simulatoru a pak jsem to na hulvata prasknul do tvého kodu … jinak svetlo a svetlo1 jsou rozdílné proměnné. svetlo je doba za jak dlouho ma prejit z 0 na 255 (v minutách) a svetlo1 je pin kde je PWM výstup.
    Ještě me pak napadlo jiné řešení, jednodušší a pro nastavení v menu jednodušší ale nevím kdy se na ně dostanu. …

    odpověď na: motor shield a koncaky #8961
    posjirka
    Účastník

    souhasl s vojtěchem. dej si proměnnou „chyba=0“ a „close_time = 0“ pro záznam času při spuštění povelu k zavření. Tam si zapiš čas při zavření a změř si jak dlouho jede motor. Když to překročí čas, všechno vypni a zapiš si chybu + signalizuj chybu…

    odpověď na: Osvětlení akvaria Led pásky #8960
    posjirka
    Účastník

    to nasranek:
    onečně jsem dokopal k tomu abych někde ukazal jak jsem myslel linearni rozložení rozsvěcení/zhasnutí na základě času. Trachu jsem upravil/zjednodušil tvůj program a mírně z přeházel některé funkce. Ta uprava co jsem udělal by měla odstranit ten neduh o zpožděné reakci v důsledku dlouhého delay(). Zjednodušil jse to proto aby bylo poznat co se tam měnilo. Jestli máš chut tak to prosím vyzkoušej. krok se mění 1x za minutu a funkcí map() se přepočítává na rozsah 0-255.

    #include <Wire.h>
    #include <DS3231.h>
    #define DS3231_I2C_ADDRESS 0x68
    DS3231  rtc(SDA, SCL);
    
    int svetlo1 = 11;//pwm vystup
    int den = 9*60; // od kdy je den
    int noc = 21*60;// od kdy je noc
    int svetlo = 42; // doba rozsveceni/zhasnuti
    int cas = 0; // nasobek aktualnich hodin a minut
    byte jas = 0; // velikost jasu 0-255
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    
    void setup()
    {
      rtc.begin();
      lcd.clear();//smaže obrazovku
      lcd.setContrast(30);//nastavení kontrastu je to individuální, mám jich několik a každý chce něco jiného ale je to v rozmezí 30-60
      Wire.begin();
      pinMode(svetlo1, OUTPUT);
    }
    
    byte decToBcd(byte val){
      return ( (val / 10 * 16) + (val % 10) );
    }
    
    byte bcdToDec(byte val){
      return ( (val / 16 * 10) + (val % 16) );
    }
    
    void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)
    {
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0); // set DS3231 register pointer to 00h
      Wire.endTransmission();
      Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
      *second = bcdToDec(Wire.read() & 0x7f);
      *minute = bcdToDec(Wire.read());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    }
    
    void loop()
    {
      delay(1000);
      byte s, m, h, dvt, dvm, mesic, r;
      readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);
      analogWrite(svetlo1, brightness);
      
      cas = h*m; // nasobek minut a hodin
      if (cas < den) {
        jas = 0; // jeste neni den tak nesvit
      } else {  
        if(cas < (den+svetlo)}{
          jas = map(cas, den, (den+svetlo), 0, 255); // rozsveceni
        }
      }
      if (cas > (noc + svetlo)) {
        jas = 0; // jeste neni den tak nesvit  
      } else {
        if (cas > noc){
          jas = map(cas, noc, (noc+svetlo), 255, 0); // zhasnuti  
        }
      }
    }
    odpověď na: analogReference – pomoc #8872
    posjirka
    Účastník

    no já si myslim, že je to způsobeno použitím. měnit referenci a přitom mít zapojené na jiném analog.vstupu vyšší hodnotu je už z principu špatně. zkus zajet joystickem na s´tranu k zemi a zkus to . Případně dej Joystick na stejný potenciál jako je refernční napětí (nepoužívej interní) ….

    odpověď na: analogReference – pomoc #8868
    posjirka
    Účastník

    pánové ,proč to řešíte tak složitě ….
    vezměte si, že budete mít konstantní zdroj 0,7V (dioda).
    Když necháme refenreční napětí = napájecí napětí tak při 5V to bude třeba hodnota 200, když klesne napětí baterie na 3,5V tak to bude hodnota 400 (té konstaktny 0,7V) …

    odpověď na: analogReference – pomoc #8851
    posjirka
    Účastník

    jak jsem psal, místo odporu 100k použij nějáký pevný stabilizátor. …. pro začátek třeba tu mojí zatracovanou diodu … obyč. dioda 1b4001 katodou na zem, anodou na analogový pin.

    odpověď na: analogReference – pomoc #8844
    posjirka
    Účastník

    neuvádíš jak je to zapojený …. máš tam stabilizator pro napájení mikroprocesoru, nebo přímo z baterie ?
    Pokud ze satbilizátoru tak bych baterii dal přes odporový dělič a měřil výsledke. Doporučuju vyopočítat pro napětí tak 2/3 reference. Tady se počítá s tím, že s emění napětí baterie a refernční napětí zůstává stejné.
    Druhá varinata je , že napájíš mikroprocesor přímo z baterie a tím pádem se ti mění i refernční napětí. v tom případě na baterii použij nějáký stabilizátor pro přesné refernční napětí (jen ne diodu ta je dost teplotně závislá), v nouzovém případě i klasický stabilizátor 7803 pro 3V. Pak budeš mít obrácenou logiku : snížení hodnoty analogvého pinu indikuje snížení napětí bateri / referenční napětí …

    Posuvník jako termín nechápu, předpokládám, že je to nějáký potenciometr připojený mezi zem a refenreční napětí, pak ti neovlivńuje funkci měření …

    odpověď na: Klon? ano ne #8842
    posjirka
    Účastník

    proto říkám, víc než 9 bitu je zbytečný luxus …

    odpověď na: Klon? ano ne #8834
    posjirka
    Účastník

    ono je dobré říct i to „b“.
    750ms prodlevy je pouze u 2 drátového/parazitního zapojení.
    U 3 drátového již není. Používání 12-bitového rozlišení je opět dle mého názoru zbytečnost. v základu je 9 bitů (tedy po 0,5stC) a vše ostatní se řeší tak, že se udělá víc měření a průměruje se. To je taky jeden z důvodu té prodlevy.
    Délka 200m je usměvná, nicméně okolo 50m ve stíněném kabelu (např.stíněné FTP) už není výrazný problém a jde jen o to držet si pravidlo 1 zemnícího bodu.

    odpověď na: Rada pro začátečníka -stmívač a žaluzie #8805
    posjirka
    Účastník

    jen že jsem na to narazil, tak dávám sdílet.
    Chápu že to není nic extra, ale kdo ví …

    Arduino-powered roller blinds

    odpověď na: Sportovní bezdrátová časomíra #8729
    posjirka
    Účastník

    na dotaz zda signál poletí stejnou dobu … je vhodne si prostudovat alespon zaklady radiokomunikace. Radiove vlny se šíří téměř rychlosti světla. V základu se měni pouze frekvence nosné vlny a způsob modulace. Ber to tak, že nejnižší rychlost přenostu bude okolo 9,6kbaud tedy 9600 bytu/s. Přenos informace o 10 bytech zanamená dobu přibližne 0,001s. To beru jako nejhorší stav. při přenosu 115kbaud jsme na uplně jiných časech.
    Spíš mě zaráží těch 500m. Při použití vysílače na 2,4GHZ s přidanou anténou by to mělo mít dosah okolo 2km, ale v praxi jsem to ještě nezkoušel a je tu i otázk aterénu/příme viditelnosti:
    http://www.arduino8.cz/komunikujeme-bezdratove-s-nrf24l01-1-cast-zapojeni/
    ohledně přesnosti, funkce millis() řeší dobu běhu strojového času v 0,001s a je tu i funkce micros(), která dělá to samé v 0,000001s … takže 0,01s rozlišení bych se nebál. Jak jsi řešil odečet času z RTC? ten ti totiž v těchto případech nepomůže.
    1. jeho rozlišení je v řádech 1s
    2. přenos dat, adresování ,… nějáký čas zabere a přesnost pod 1s je mimo
    3. při použití tohoto čipu jako generátoru zbytečně zatížích přerušení a s přesnosti si stejně moc nepomůžeš.
    Navrhuji použití internícho strojového času Arduina a detekci start/stop jako body pro záznam aktuální hodnoty millis(). Výsledný čas je pak jen prostým odečtem těchto 2 hodnot.
    pár příkladů:

    Tutorial: Arduino timing methods with millis()


    http://www.c-sharpcorner.com/uploadfile/7d4524/stopwatch-using-push-button/
    http://duino4projects.com/barista-championship-brewing-stopwatch-%E2%80%A2-introduction-using-arduino/

    odpověď na: Sportovní bezdrátová časomíra #8726
    posjirka
    Účastník

    chápu to správně, že chceš mít 2 fotobuńky kažkou s vlastní RTC a posílat si čas prolnutí? To se ti nikdy nepodaří synchornizovat …
    Lepší řešení by bylo použit 1 RTC ve vlastní časomíře a od fotobuněk přijímat jen signál prolnutí. čas by se bral s interní RTC časomíry.
    O jakých intervalech/časech se vlastně bavíme ?
    Jinak RTC může generovat i určitou frekvenci, pro lepší synchornizaci než jen sledování času….

    posjirka
    Účastník

    já bych spíš navrhoval metodu přímého měření obsahu násypky. Bu´d pomocí ultrazvukového čidla (to by se ale asi rychle zaneslo prachem) nebo měření optickou závorou. Při infračerveném spaktru by to mohlo být trvalejší, případně mě napadá varianta váhy. Jestli je někde možnost dát mezi násypku a držák někde tlakové čidlo (váha, vodivá guma,…) tak by šlo zvážit kolik tam toho uhlí ještě je …
    Při měření pohybu šneku bych, jak píše Zbyšek, použil hallovu sondu a magnet.

    odpověď na: Rada pro začátečníka -stmívač a žaluzie #8723
    posjirka
    Účastník

    ty uhly natočení se dají řešit taky časem. V předchozí praci jsme řešili natočení serva taky časovou konstantou. Servo přejede z 0-180 st třeba za 90s. Když potřebuji přejet na 45 st tak nechám 30s sepnuté servo a zapíšu si do paměti na jaké je asi poloze. Většinou se jednalo o regulaci teploty, takže stačilo při poklesu/zvýšení teploty posunout servo na tu či onu stranu. na přesnost se nehrálo. Navíc serva od Belima byli vcelku stabilní co se linearity posunu v čase týká a nemusel se kupovat potenciometr na snímání polohy.
    Tady by ti stačilo jednou změřit jak dlouho trvá přejetí z min. na max. a dát to třeba po 5 st natočení. Jednou za čas znulovat na jednu z krajních poloh (když za poledních 7 dní nenajedu na koncák tak si zresetuj polohu a najeď tam te´d)
    Encoder je super řešení i včetně možnosti škálování (probarvenosti) pro přibližné měření aktuálního úhlu, nicméně šel bych asi cestou 2-4 drah které by mě ukazovalu aktuální poluhu (binární stav zabarvených značek na drahách)
    Možnosti je spousta … budeš to tedy řídit H mustekm?
    Navrhni si funkční zapojení a fyzické zapojení (schéma) a můžete tady pak bádat na reálnými možnostmi …

    odpověď na: Rada pro začátečníka -stmívač a žaluzie #8707
    posjirka
    Účastník

    já bych taky stav řešil 1 proměnnou.
    Za mě tedy spíš typu „byte“ jako 3 stavovou hodnotu:
    1 – otevřeno
    2 – mezistav
    3 – zavřeno
    Otázka je jak chceš řídit ten motor?
    Předpokládám že tam bude H mustek.
    Kdyby to bylo 2 cívkové servo tak dám koncáky do krajních poloh, nevypínám signál na otevření/zavření a nechám to na koncák ať si rozpojí cestu.
    U H-mustku to bude trochu složitější. Právě koncák ti pak může na základě své stavu říct jak to s žaluzii vypadá.
    Takže zapoj koncový spínače (1x otveřeno, 1x zavřeno) na 2xDI arduina.
    Pak je to vcelku jednoduchá podmínka:
    1, sepni motor a nekonečná smyčka dokud není sepnutý spínač
    2, vypni motor
    3, 1s počkej

    ukážu ti to na 1 funkci:

    void otevri(){
    	while(digitalRead(7) == 1){	// cekej na koncak
    		digitalWrite(8,LOW); // vypni motor 1
    		digitalWrite(9,HIGH); // sepni motor 2
    	}
    	digitalWrite(9,LOW); // vypni motor 2
    	delay(1000); // cekej 1s
    }
    odpověď na: Rada pro začátečníka -stmívač a žaluzie #8690
    posjirka
    Účastník

    pokud tam máš 25x25x70mm tak to je místa víc než dost:
    http://www.ges.cz/cz/tcst1103-GES05100332.html
    http://www.ges.cz/cz/tcst2103-GES05100333.html
    http://www.ges.cz/cz/cny70-GES05100334.html
    stačí si vybrat který ti bude vyhovovat a samozřejmě je ještě více typů.
    Dal bych to na PCB, který by ti umožnil jak lepší přidělaní, tak i připojení kabelu ….

    odpověď na: Code::block #8668
    posjirka
    Účastník

    a co klasické AVR studio ?
    Já teda používám Arduino IDE a jsem spokojený. Zatím jsem neměl důvod hledat něco jiného. Pro vyšší programovací jazky používám Visual Studio nebo Sharp Develop (VB.net nebo C#) ale v Arduino jsem pokojený s klasikou.

    odpověď na: Lawn Mower #8652
    posjirka
    Účastník

    ovládání j epomocí smyčky v zemi, kam se pouští cca 34kHz. sekačka má 2 snímací cívky, které vyhodnocují zda nejsou na kraji a pokud ano tak otočísekačku.
    co se týká desky tak tam první, která je i popsaná obsahuje v podstatě jen solární nabiječku a 2 filtry pro detekci té zemní smyčky.
    Bohužel tam není popsána ta druhá deska, která ovládá motory.
    Je to vcelku slušně navržené a i když mi některé hodnoty nevycházejí musím uznat, že je to slušná práce od původního tvůrce.
    Co mi nevychází je , že baterie má kapacitu 2,1Ah, odběr je cca 2A, panel dobijí v optimálním případě cca 0,6A a má posekat zahradu 500m2 za 3 hodiny.
    Když bude baterie plně nabitá, tak vydrží max 1 hod, při průběžném dobijení je to cca 1,5A a to bude totálně vyždímaná a bude se snižovat životnost baterie.
    Ten nabijecí ostrov … nevím. Musel bys rozšířit i vybavení nebo program o návrat na původní pozici, kde skončil. jinak hrozí, že budeš sekat neustále tu samou část.
    Fotovoltaický panel a průběžné dobijení mi přijde jako velmi dobré řešení.
    Moc by se mi něco takového líbilo jen toho času se nedostává … počkám si na nový domeček a volný čas 🙂

    odpověď na: Automatický sodobar – hotovo #8621
    posjirka
    Účastník

    díky za doplnění …

    odpověď na: Automatický sodobar – hotovo #8595
    posjirka
    Účastník

    zajímavý projekt. Jen mě zajímají 2 věci, které jsem nenašel v popisu:
    1, Na desce vpravo dole jsou napájeny pin, ale nenašel jsem nikde jejich zapojení, je to pro výběr nějákých přednast. režimů?
    2, kde je výstup na tu LED diodu u ovl. panelů? Je to pralalelně ke spínači?

    Jinak klobouk dolu ….

    odpověď na: Komunikace na 433Mhz #8558
    posjirka
    Účastník

    jak píše Zbyšek je vhodné vyzkoušet nějáký prověřený řešení a ideálně s použitím knihoven virtualwire nebo LW. chybu v tvem kodu nevidím, ale určitě bych použil i nulování proměnné , když tlačítko není stisknuté. Už jen pro test co to udělá.

    Jinak jestli chceš něco česky:

    http://arduino8.webnode.cz/news/lekce-20-arduino-a-vyuziti-433-92-mhz/

    odpověď na: Problém ve smyčce #8510
    posjirka
    Účastník

    ahoj, tak jsem to nemyslel. spíš mi v tom programu trochu vadí, že se ti na 2,5s zastaví smyčka a jen bliká. Pokud ti to ovšem nevadí je vše v pořádku a v klidu mě ignoruj.

Aktuálně je na stránce zobrazeno 30 příspěvků - 241. až 270. (celkem z 481)