Meteostanice s hodinami a s ukazatelem měsíčních fází

Program a další dokumenty:


Verze stáhnout ZIP
1 meteostanice_ver1.zip





Před nahráním programů už musí být kompletně osazené všechny periférie
   (displej s I2C převodníkem, EEPROM, rotační ovladač, EERAM )


Celý projekt se skládá ze dvou částí.

První část je ve složce "\eeprom\" a stará se o zaplnění  EEPROM daty o časech fází měsíce, časech zatmění, různými grafickými daty a texty (data jsou v samostatných souborech a musí se nacházet ve složce s programem eeprom.ino).

Druhá část je hlavní program.


Vzhledem k velikosti hlavního programu je nutné smazat v Arduinu bootloader.
Zároveň se musí zabezpečit, aby se při nahrání hlavního programu nesmazal starý obsah vnitřní EEPROM.
To se dá udělat pomocí změny několika Fuse bitů v HighFuse.
Původní HighFuse obsahuje hodnotu 0xDA a je třeba to změnit na 0xD3.


Další postup je následující:

Nejdříve se do Arduina nahraje program "eeprom.ino" ze složky "eeprom".

Po jeho spuštění se na displeji objeví výzva ke stisku rotačního přepínače.



Pak začne několikaminutový zápis a následná kontrola dat v EEPROM.
Průběh jednotlivých operací je signalizován odpočtem v pravé dolní části displeje.










Úspěšné dokončení zápisu je na displeji potvrzeno společně s jednoduchou animací všech měsíčních fází.



Pak je možné nahrát do Arduina hlavní program pro meteostanici ze složky "hlavni_program".

Protože je hlavní program dost velký, nevešly se funkce pro odesílání dat do programu Bluetooth Electronics.
Pokud je chcete používat, musíte místo nich něktré moduly vymazat. Provádí se to zakomentováním řádek na začátku programu:




Problémy o kterých vím, ale nepovažuji je za tak zásadní, že bych je musel řešit

1)  Záznam hodinových hodnot se provádí vždycky v celou hodinu a vypočte se jako: průměr posledních dvanácti 5-minutových záznamů.
Když ale dojde k tak dlouhému výpadku napájení, že se nezaznamenají některé 5-minutové vzorky, počítá se hodinový průměr stále z posledních 12 vzorků. Takže průměrná hodnota v tom případě může být počítána i z jiného období, než je poslední hodina.
Řešením by bylo před průměrováním ještě testovat čas, kdy byly 5-minutové vzorky zaznamenány, ale myslím, že je to už zbytečnost.


2)  Když je zobrazené menu, žádné hodnoty se neměří, neukládají, ani neodesílají do sériové linky.
To bych musel řešit třeba i případnou aktualizaci právě zobrazených grafů a na to už nebyl prostor.


3)  Při nesmyslně nastavené korekci vlhkoměru může dojít k situaci, že bude zobrazována záporná hodnota vlhkosti.
V paměti Arduina už není prostor pro to, abych testoval nesmyslně nastavené parametry.
PROGRAM   NENÍ   "BLBUVZDORNÝ"


4)  Kvůli stabilizaci teploměrů se 3 minuty po resetu sice nevyhodnocují teplotní rekordy, ale když k resetu dojde třeba v celou hodinu, tak se i nestabilizované hodnoty ukládají do paměti, ze které se pak tvoří grafy, takže první záznam po zapnutí napájení může být trochu nepřesný (v teplotách o pár desetin °C).
Tady je otázka, jestli je lepší úplně oželet první 3 minuty jakéhokoliv zaznamenávání hodnot při každém resetu, a nebo se spokojit s trochu nepřesnou hodnotou v zaznamenaných datech, ke které dochází jen při zapnutí napájení (při běžném resetu zůstávají čidla pod napětím a tedy stabilní). Volil jsem druhou možnost, takže první záznam po zapnutí napájení může být o něco ujetý.


5)  Korekce naměřených hodnot jsou jen obyčejná posunutí o +/- nějakou konstantní hodnotu (y=x+b). Možná by bylo lepší zavést i nějakou linearizační funkci (y = ax+b), nebo dokonce několikabodovou korekční křivku. Ale jsou tu dva zásadní problémy:
  - Pro 4 čidla by to bylo obrovské zvětšení programu, který by se do Arduina už nevešel.
  - Bylo by nutné provést opravdovou kalibraci porovnáním s přesnými čidly při různých teplotách a na to nemám vybavení.


6)  Tlak se nepřepočítává na hladinu moře. Zajímá mě jenom trend (pokles / vzestup). Nepotřebuji, aby ta hodnota byla přesně shodná s tím, co uvádějí v televizi. Při základním zobrazení se ani žádná hodnota tlaku na displeji nezobrazuje (je tam jen minigraf "P:" bez hodnot).


7)  Program pozná utržené čidlo DS18B20. V tom případě sice na displeji ukazuje u teploty "Err" a blikají LED jako varování, ale také  se přestanou ukládat všechny hodnoty (včetně těch, které jsou v pořádku) a vyhodnocovat všechny rekordy. Tenhle způsob jsem zvolil proto, aby nesmyslné hodnoty z teploměru DS18B20 neovlivňovaly grafy a dlouhodobé rekordy. Prostě když venkovní čidlo nefunguje, znamená to výrazné omezení i ostatních funkcí.


úvodní strana webu AstroMiK.org

poslední úprava stránky 22.9.2018