Kurník, akvária, terária

Odpovědět
Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Kurník, akvária, terária

Příspěvek od pavel1tu » 14 led 2020, 17:16

Tak už 14 dní obíhám známé a do otvírání dveří, svícení, ovládání/svícení akvárií přidávám databázi astronomických východů a zapadání slunce ...
teda to mi dalo ...

Kód: Vybrat vše

    if (hodin*100+minut >= (svitimeODh*100)+svitimeODm && hodin*100+minut < (svitimeDOh*100)+svitimeDOm && svitime == 0 ) 
       {
       svitime = 1;
       Serial.println("Svitime ...");
       }
   if ((hodin*100+minut < (svitimeODh*100)+svitimeODm || hodin*100+minut > (svitimeDOh*100)+svitimeDOm ) && svitime == 1)  
      {
      svitime = 0;
      Serial.println("NEsvitime ...");
      }
   if (hodin*100+minut >= pgm_read_word_near(slunceVychod + (mesic - 1)) && hodin*100+minut < pgm_read_word_near(slunceZapad + (mesic - 1)) && slunce == 0)
       {
       slunce = 1;
       Serial.println("Je den ...");
       }
   if ((hodin*100+minut < pgm_read_word_near(slunceVychod + (mesic - 1)) || hodin*100+minut > pgm_read_word_near(slunceZapad + (mesic - 1))) && slunce == 1)  
      {
      slunce = 0;
      Serial.println("Je noc ...");
      }
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Kurník, akvária, terária

Příspěvek od AstroMiK » 14 led 2020, 18:57

Uvádíš tu jen kousek kódu, takže to možná chápu špatně, ale ty máš v té databázi jen 12 časů východů a západů (jeden čas pro každý měsíc)?

Tím narážím na výrazy jako:

Kód: Vybrat vše

pgm_read_word_near(slunceVychod + (mesic - 1))
To se mi moc nezdá, protože pokud by se ten čas určoval jen 1x měsíčně, tak je to obrovský skok (třeba rozdíl mezi východy Slunce 15.2. a 15.3. je skoro hodina).

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Kurník, akvária, terária

Příspěvek od kiRRow » 14 led 2020, 19:06

Já bych taky rád viděl celý kód prosím :-) ...

pettr
Příspěvky: 5
Registrován: 07 led 2020, 09:35
Reputation: 0

Re: Kurník, akvária, terária

Příspěvek od pettr » 14 led 2020, 20:40

můžu poskytnout jednotlivé dny pro Liberec z této stránky: https://www.timeanddate.com/sun/czech-r ... &year=2020
Liberec.txt
(4.35 KiB) Staženo 151 x

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Kurník, akvária, terária

Příspěvek od pavel1tu » 14 led 2020, 20:48

Ano, doma to mám jen po měsíci - zatím, plánuji po týdnech.
Ale mám i verze po dnech, ale mne to přijde zbytečné ...
Já to dělám jiným systémem - sčítám hodiny*100 + minuty

Odkaz na schema, PCB i kod je tady, je to upravované po nějakém školákovi, bohužel EAGLE - na stole mám verzi 2 - kompletní řízení včetně CO2, hnojení atd., ale nějak není čas. Fotky jsou ze zakládání akva, asi před 2 lety.

https://drive.google.com/drive/folders/ ... sp=sharing
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Kurník, akvária, terária

Příspěvek od AstroMiK » 14 led 2020, 21:54

Pokud až tak moc nejde o přesnost, zkuste si následující jednoduchý program.
Pro souřadnice [N50.000, E15.000] dosahuje celoročně maximální odchylky méně, než 30 minut od skutečného východu, nebo západu Slunce.
Jak je vidět na spodním grafu po většinu roku je odchylka dokonce pod 20 minut.

Jde o zjednodušení pohybu Zeměkoule kolem Slunce z elipsy na kružnici.
Funkce východů a západů jsou tam proto nahrazeny jednoduchou funkcí sinus, která prochází nulou při jarní rovnodennosti a maxim dosahuje při slunovratech.

Pro zeměpisné souřadnice více na východ stačí od vypočtených časů odečítat několik minut (pro Košice to bylo asi 35 minut)
Víc na západ se naopak nějaké minuty přičtou (Pro Frankfurt asi 25 minut).
Změna souřadnic v severojižním směru je pro podlouhlé Československo v rámci té půlhodinové přesnosti nevýznamná.


Výhoda je, že je to spojitá funkce. Sice není přesná, ale nejsou tam žádné velké skoky mezi dny - chyba narůstá postupně během několika měsíců.
V příloze je excelovský soubor s porovnáním skutečných časů východů a západů a zjednodušených funkcí sinus.

Kód: Vybrat vše

void setup(void)
  {
    Serial.begin(9600);


    Serial.print("Priblizny vychod Slunce pro 25.1. [minuty od půlnoci]: ");
    Serial.println(360 - plus_minus_minuty(25,1));                    // 360 je počet minut od půlnoci při východu Slunce pri rovnodennosti

    Serial.print("Priblizny zapad Slunce pro 16.8. [minuty od půlnoci]: ");
    Serial.println(1080 + plus_minus_minuty(16,8));                   // 1080 je počet minut od půlnoci při západu Slunce pri rovnodennosti




// ukázkový výpis pro všechny dny v roce 
/*
    for (byte m = 1; m < 13 ; m++)
      {
        for (byte d = 1 ; d < 32 ; d++)    // pro zjednodušení smyček mají všechny měsíce 31 dní (nesmyslné datumy se pak budou muset ručně smazat (např: 31.9.))
          {
            unsigned int vychod_minut =  360 - plus_minus_minuty(d,m) ;  //  360 =  6:00 rano  v minutach
            unsigned int zapad_minut =  1080 + plus_minus_minuty(d,m) ;  // 1080 = 18:00 vecer v minutach

            Serial.print(d);
            Serial.print('.');
            Serial.print(m);
            Serial.print(".;");
            Serial.print(vychod_minut);
            Serial.print(';');
            Serial.println(zapad_minut);          
          }
      }

*/


    
  }



void loop(void)
  {
  }



int plus_minus_minuty (byte den, byte mesic)
  {                                     // X , Led, Úno, Bře, Dub, Kvě, Čer, Čec, Srp, Zář, Říj, Lis, Pro
    int pocet_dni_pro_zacatek_mesice [] = {0 ,   0,  31,  59,  90, 120, 151, 181, 212, 242, 272, 303, 333};
    int pocet_dni_od_1_1 = pocet_dni_pro_zacatek_mesice[mesic] + den; 
    int pocet_dni_od_jara = pocet_dni_od_1_1 - 79;               // (aktuální datum minus 20. března) může jít i do mínusu
    float prevod_na_2_PI = pocet_dni_od_jara * 6.28 / 365;
    int vychod =  sin(prevod_na_2_PI)  * 110 ;                   // maximální "rozkmit" času je pro ČR a SR zhruba +/- = 110 minut
    return vychod;
  }  
porovnani.gif
nepresnost.gif
slunce-VZ-50-15.xls
(242.5 KiB) Staženo 157 x

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Kurník, akvária, terária

Příspěvek od kiRRow » 15 led 2020, 15:40

Mazec :-) fakt, že jo ... jenom takový dotaz : " Když znáš velikost chyby, proč nepřičteš její zápornou hodnotu k výsledku ? " ... tím tu chybu přece odstraníš

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Kurník, akvária, terária

Příspěvek od AstroMiK » 15 led 2020, 17:20

Velikost chyby se v průběhu roku mění do plusu i do mínusu.
Pro zpřesnění by teda musela existovat databáze korekcí pro každý den. A to už je zase náročné na paměť.

Jak je vidět na těch spodních grafech, tak o pár minut je možné tu přesnost ještě zlepšit jednoduchým posunutím.
Přičtení nebo odečtení nějaké větší konstanty by ale tu chybu za pár měsíců mohlo zase zvětšit.

Je to třeba brát jako jednoduchý kód na nějakých 10 řádek, který ZHRUBA počítá východy a západy Slunce pro naše zeměpisné šířky - a nepotřebuje k tomu rozsáhlé databáze. Nepočítá se ani s žádnými přestupnými roky. Prostě se 3 roky chyby o trošku zvětšují a 4. rok se všechno zase srovná.

Ale myslím, že pro otvírání kurníků je to dostačující.

Taky je třeba si uvědomit, že všechny ty superpřesné astromomické algoritmy počítají východ a západ Slunce pro IDEÁLNÍ horizont. Takže jakýkoliv kopec, strom, nebo dům ten okamžik skutečného východu Slunce může posunout třeba i o hodinu.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Kurník, akvária, terária

Příspěvek od pavel1tu » 16 led 2020, 19:34

@AstroMIK - SUPER, díky .... už to testuji, asi to bude lepší než ta hromada čísel
Mám ještě dotaz na všechny,
kamarád se pustil přes nějakou knihovnu na posun letní/zimní čas,
dost se mu nedařilo, trápil se s tím asi měsíc (pořád posouval v RTC obvodu datum), až ho asi zničil.
Ta paměť pravděpodobně nemá tolik přepisů, můj nový mu chodí.

Tak jsem zapracoval tak nějak mým "selským" rozumem a chci od Vás zkouknout, zda by to mohlo chodit.
Asi bude nutné i při nastavování datumu přes display nebo komunikaci - udělat podmínku zda je letní/zimní čas a nastavit to.
děkuji za zhlédnutí a případnou korekci chyb ... nejsem si jistý hlavně tím dayOfTheWeek že 7=neděle

Kód: Vybrat vše

    DateTime datumCas = DS1307.now();      // vycteni casu z RTC modulu
    rok = datumCas.year();                 // rok
    mesic = datumCas.month();              // mesic
    den = datumCas.day();                  // den
    hodin = datumCas.hour();               // hodina
    minut = datumCas.minute();             // minuta
    vterin = datumCas.second();
    denvtydnu = datumCas.dayOfTheWeek();   // den v tydnu - 7 je nedele ?

    // posun letni - zimni cas
    if (letnicas == 0 && mesic == 3 && den >= 25 && denvtydnu ==7 && hodin == 2) {
       letnicas = 1; 
       EEPROM.update(6, letnicas); 
       DS1307.adjust(DateTime(rok, mesic, den, hodin + 1, minut, vterin)); 
       }    
    if (letnicas == 1 && mesic == 10 && den >= 25 && denvtydnu ==7 && hodin == 3) {
       letnicas = 0; 
       EEPROM.update(6, letnicas); 
       DS1307.adjust(DateTime(rok, mesic, den, hodin - 1, minut, vterin)); 
       }
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů