AVR se uspává přes asynchronní RTC Timer 2, ne přes Watchdog. Výhodou je menší spotřeba (pro watchdog musí běžet hlavní oscilátor) a po probuzení program pokračuje tam kde přestal.
Pochopitelně se před spánkem musí povypínat periferie a porty přepnout na vstupní, to je samosebou.
Ten pin INT by mohl být velmi zajímavou možností! Nechat u toho zaplý RTC (třeba s vlastní záložní baterkou), ten bude mít asi minimální spotřebu, a pak se dá budit "budíkem" na INT i po delší době, než je těch 8 s, takže se sníží spotřeba daná několikerým zbytečným probudzením.
:-D tak si to ujasníme. Ze článku jak snížit spotřebu se v tomhle vlákně stal flame o tom jak postavit oscilátor s periodou v řádu desítek sekund a co nejmenší spotřebou. Takže abych taky přispěl do diskuse.
Vezmete arduino (jakýkoliv jiný procesor) nastavíte ho tak aby se uspalo jak nejvíce to jde a aby čekalo na změnu logického stavu na nějakém pinu. U starších procesorů tuhle službu dělal externí RESET pin. U AVR procesorů (potažmo arduina) se dá i ten odpojit, aby zbytečně nežral komparátor napojený na pin resetu. Pochopitelně použijeme power-down mód, zároveň vypneme všechny pull-upy na pinech, ADC, zdroj referenčního napětí, watchdog, detektor nízkého napájecího napětí (BOD) a jako bonus nadrátujeme všechny nepoužité vývody na zem!
Tohle je absolutně minimální konfigurace, která u ATmega328P snižuje spotřebu pod dva mikroampéry a při 25°C a 3 V napájení to je 100 nA!
K tomu stačí připojit externí resetovací obvod třeba zmíněný TPL5111 a jste na 140 nA spotřeby.
Pokud se rovnou vykašlete na toho dinosaura DS18B20 a použijete jeho alternativu TMP275 (I2C sběrnice), tak nebude potřeba čekat 750 ms na změření dat, ale jen 220 ms, které procesor prospí a navíc samotné čtení teploty kdy musí procesor něco dělat může proběhnout za 0.125 ms a arduino je bude dělat pomocí vestavěného TWI takže bude moci zase po dobu vysílání a příjmu značnou část doby spát zatímco periferie bude odesílat data. TMP275 má ve standby režimu spotřebu 100 nA, DS18B20 750 nA. A cenově jsou na tom stejně.
No a to nabíjení ze soláru s čínským TP4056 je prasárna. Základní problém je v tom, že ten obvod nenabíjí dokud není na vstupu dost vysoké napětí (4 V) a to nastane pouze v případě, že je solár plně osvětlen. Mnohem lepší je použít LTC3105, který pracuje od 0.225 V a umí regulovat napětí na soláru tak, aby získal co největší výkon při daném osvětlení. Má to zkratku MPPT (Maximum power point tracking). Nevýhoda je jen v tom, že TP4056 celou po dobu, kdy nenabíjí, žere z akumulátoru 2 uA a LTC3105 10 uA, za to to více než dostatečně vynahrazuje energií, kterou je schopen do akumulátoru dodat i při velmi špatném osvětlení.
A jen mezi námi obnovovací frekvence měření teploty v bazénu co má třeba 5 metrů krychlových vody je relevantní v řádu desítek minut. Za 24~32 vteřin se teplota takhle obrovského akumulačního prvku změní sotva jen o setinu stupně a takhle malá odchylka se ztratí v přesnosti měření daného čidla. Počítáno pro bazén s válcovým tvarem, průměrem 3 m, hloubkou 0.75 m osvícený 1kw/m^2 slunečního záření a předpokládaným stoprocentním pohlcením sluneční energie fólií na povrchu bazénu. Ohlazování vody okolní zeminou ohřev jenom zpomaluje.
Takže přestaňme bastlit a pojďme stavět zařízení pořádně, tak jak se to má dělat. A nebojte se napsat si výrobci o vzorky těch obvodů. Jsou zdarma a aspoň se něco nového naučíte :-)
To je opravdu zajímavá informace, že změna teploty mnohem většího objemu vody probíhá mnohem rychleji, ale držme se raději fyziky 7. třídy. Měrná tepelná kapacita vody je 4,18 kJ/(kW.K), tedy k ohřátí 1 litru vody o 1 stupeň za 1 sekundu potřebujeme dodávat výkon 4.18 kW. V bazénu je 5250 litrů, dodávaný výkon je 7kW. Za 24 sekund se teplota vody v bazénu změní o 24*7/(5250*4.18) = 0.007 stupně celsia a to ještě za předpokladu, že tu vodu budete řádně míchat a ztráty do země budou nulové.
Takto to opravdu nefunguje. Teplota vody v bazénu je v různých místech velmi různá, a pak stačí vítr, čerpadlo nebo plavec a teplota okolo čidla se rychle mění i o půl stupně Celsia.
Nicméně to není ten pravý důvod pro časté vysílání teploty. Vysílám co 24 sekund proto, abych neznervózněl základnovou stanici. Ta totiž může mít v sobě nějaký "timeout", po kterém považuje poslední naměřenou teplotu za už neplatnou, a já nechtěl riskovat, že do toho timeoutu spadnu.
Mimochodem, pro klid duše všech komentujících jsem právě zvětšil mezeru (=délku spaní) z 24 na 40 sekund.
Takto to opravdu funguje. Reagoval jsem na vaše nepravdivé tvrzení, že změna teploty mnohem většího objemu vody probíhá mnohem rychleji. Ohledně měření vody v bazénu - že měříte s přesností +- 5 stupňů, v závislosti na tom, jak fouká vítr, svítí slunce a kde je čidlo v bazénu, to je mi jasné od začátku, o tom se bavit nechci.
Tak on Linear má celou řadu hezkých obvodů na získávání malých množství energie z netradičních zdrojů. Jmenuje se to energy harvesting a linear má na to připravené vyhledávání na svém webu http://www.linear.com/parametric/energy_harvesting
Tam třeba najdete i obvod LT8490, který je zrovna přímo dělaný na tu olověnou baterii.