Měření stavu baterie v bateriově napájeném Arduinu
Napsal: 25 črc 2021, 20:39
Zkouším trochu vylepšit jeden svůj starý program pro bateriově napájený GSM Alarm ( http://astromik.org/raspi/gsmalarm/index.htm ).
Zajímal by mě váš názor na následující úvahu:
Napadlo mě, že by možná bylo dobré do alarmu přidat i hlídání stavu baterie (3x tužkovka AA).
Jako že by se Arduino třeba 1x týdně vzbudilo, změřilo napětí a kdyby kleslo pod nějakou hodnotu, tak by se odeslala varovná SMS.
Problém je v tom, že měření baterie na prázdno nemá v podstatě smysl. Baterii je nutné zatížit, aby se projevil její vnitřní odpor.
Jenže při zapnutí GSM modulu je odběr strašně rozkolísaný a zároveň trvá docela dlouhou dobu než se naváže spojení s GSM sítí a tím se baterie zbytečně vybíjí.
Takže takovéhle měření je podle mě taky nepoužitelné.
Tak jsem si myslel, že by se při testování připnul (přes FET) na pár desetin sekundy k baterii obyčejný zatěžovací odpor.
Hodnota odporu by byla taková, aby proud odpovídal maximálnímu odebíranému proudu GSM modulu.
Jestli si modul bere maximálně 0.5A na 4V, tak by tomu odpovídal odpor nějakých 8R (od toho by se ještě muselo odečíst saturační R_DS na FETu).
Výkonově to sice vychází na 2W, ale vzhledem k tomu, že to bude jen na strašně krátkou dobu, tak si myslím, že nemá cenu se s výkonem vůbec zabývat.
Během těch pár desetin sekundy by se měřilo napětí na zatížené baterii analogovým vstupem a když by se blížilo ke spodní hranici při které
by měl ještě GSM modul fungovat, tak by se zatěžovací odpor odpojil, zapnul by se GSM modul a odeslala varovná SMS.
Velký problém je ale v tom, že teď uspávám Arduino do nejhlubšího možného spánku s minimálním odběrem (asi 10uA), ze kterého se probouzí až interruptem na pinu D2.
Pokud bych chtěl 1x týdně testovat baterii, musel bych mít v Arduinu zapnutý watchdog (už to je samo o sobě výrazné zvětšení odběru).
Každých 8 sekund (maximální čas watchdogu) by se Arduino muselo probudit, přičíst někam jedničku a zase usnout.
Tohle přičítání by trvalo do čísla 75600 (1 týden rozdělený na 8-sekundové intervaly).
To je další zbytečný odběr. K tomu ještě ten maximální odběr při měření zatížené baterie a případně při odesílání SMS.
Prostě, když o tom tak uvažuju, tak je celý tenhle princip asi taky nepoužitelný - baterie by se tímhle způsobem za pár týdnů vybily tak, že už by GSM modul neutáhly.
Napadá mě ještě, že probouzení 1x týdně by mohlo být řešené pomocí nějakého RTC obvodu.
(něco na principu mého krmítka pro psa: http://astromik.org/raspi/krmitko/v2/index.htm )
Pak by Arduino mohlo klidně zůstat v nejhlubším spánku (bez watchdogu) a probouzelo by se pomocí /INT výstupu RTC.
Hned po probuzení by otestovalo, jestli bylo probuzení způsobeno plánovaně pomocí RTC, nebo jestli to bylo způsobeno sepnutím kontaktu (otevření hlídaných dveří).
Ale to už se mi zdá trochu přehnaný.
A teď teda nevím, jestli se na to nevykašlat.
Do teď jsem prostě jen jednou za čas "ručně" otestoval funkci a po půl roce jsem preventivně vyměnil baterky.
Tak co na to říkáte?
Máte nějaký jiný nápad jak testovat baterii?
Nebo dokonce už něco podobného máte prakticky vyzkoušené?
Nebo to mám fakt zabalit?
Zajímal by mě váš názor na následující úvahu:
Napadlo mě, že by možná bylo dobré do alarmu přidat i hlídání stavu baterie (3x tužkovka AA).
Jako že by se Arduino třeba 1x týdně vzbudilo, změřilo napětí a kdyby kleslo pod nějakou hodnotu, tak by se odeslala varovná SMS.
Problém je v tom, že měření baterie na prázdno nemá v podstatě smysl. Baterii je nutné zatížit, aby se projevil její vnitřní odpor.
Jenže při zapnutí GSM modulu je odběr strašně rozkolísaný a zároveň trvá docela dlouhou dobu než se naváže spojení s GSM sítí a tím se baterie zbytečně vybíjí.
Takže takovéhle měření je podle mě taky nepoužitelné.
Tak jsem si myslel, že by se při testování připnul (přes FET) na pár desetin sekundy k baterii obyčejný zatěžovací odpor.
Hodnota odporu by byla taková, aby proud odpovídal maximálnímu odebíranému proudu GSM modulu.
Jestli si modul bere maximálně 0.5A na 4V, tak by tomu odpovídal odpor nějakých 8R (od toho by se ještě muselo odečíst saturační R_DS na FETu).
Výkonově to sice vychází na 2W, ale vzhledem k tomu, že to bude jen na strašně krátkou dobu, tak si myslím, že nemá cenu se s výkonem vůbec zabývat.
Během těch pár desetin sekundy by se měřilo napětí na zatížené baterii analogovým vstupem a když by se blížilo ke spodní hranici při které
by měl ještě GSM modul fungovat, tak by se zatěžovací odpor odpojil, zapnul by se GSM modul a odeslala varovná SMS.
Velký problém je ale v tom, že teď uspávám Arduino do nejhlubšího možného spánku s minimálním odběrem (asi 10uA), ze kterého se probouzí až interruptem na pinu D2.
Pokud bych chtěl 1x týdně testovat baterii, musel bych mít v Arduinu zapnutý watchdog (už to je samo o sobě výrazné zvětšení odběru).
Každých 8 sekund (maximální čas watchdogu) by se Arduino muselo probudit, přičíst někam jedničku a zase usnout.
Tohle přičítání by trvalo do čísla 75600 (1 týden rozdělený na 8-sekundové intervaly).
To je další zbytečný odběr. K tomu ještě ten maximální odběr při měření zatížené baterie a případně při odesílání SMS.
Prostě, když o tom tak uvažuju, tak je celý tenhle princip asi taky nepoužitelný - baterie by se tímhle způsobem za pár týdnů vybily tak, že už by GSM modul neutáhly.
Napadá mě ještě, že probouzení 1x týdně by mohlo být řešené pomocí nějakého RTC obvodu.
(něco na principu mého krmítka pro psa: http://astromik.org/raspi/krmitko/v2/index.htm )
Pak by Arduino mohlo klidně zůstat v nejhlubším spánku (bez watchdogu) a probouzelo by se pomocí /INT výstupu RTC.
Hned po probuzení by otestovalo, jestli bylo probuzení způsobeno plánovaně pomocí RTC, nebo jestli to bylo způsobeno sepnutím kontaktu (otevření hlídaných dveří).
Ale to už se mi zdá trochu přehnaný.
A teď teda nevím, jestli se na to nevykašlat.
Do teď jsem prostě jen jednou za čas "ručně" otestoval funkci a po půl roce jsem preventivně vyměnil baterky.
Tak co na to říkáte?
Máte nějaký jiný nápad jak testovat baterii?
Nebo dokonce už něco podobného máte prakticky vyzkoušené?
Nebo to mám fakt zabalit?