> Bylo by nejlepší ho znovu na tu chvilku uspat – ale to by nám asi přestal napájet to čidlo, když je „chytře“ zapojeno přímo na jeho datový pin.
Stav výstupních pinů se zachovává, minimálně při těch méně hlubokých úrovních spánku (vyzkoušeno, používám to tak).
Jinak opravdu chcete Arduino Pro, nebo prostě něco bez integrovaného USB převodníku. Ten totiž taky žere.
To je dobrá zpráva o zachování stavu pinů ve spánku. Myslel jsem si, že by to bylo skvělé, ale nestihl jsem to ověřit, tak jsem tu domněnku do článku nedával.
A samozřejmě nemá moc smysl uspávat Uno, které má vedle sebe další mikrokontrolér s 16U2, ale to jsem v článku ani nezmiňoval - spoléhal jsem na opakované fotky použitého Pro Mini.
Tiez sa pripajam k volaniu po vyssej uspore. Ja som si postavil bareduino s minimom sucastiek (3 kondenzatory a kremikovy "oscilator", atmega328; tento vikend som omylom znizil pocet kondenzatorov na 1 a furt funguje) a takmer rok som ho nechal v skrini raz za cas vyblikat stav baterie. Pokazde sice trochu odlisne cislo, ale moc sa nezmenilo za cely cas.
Povodne tam mal byt napojeny aj gsm modul, ale ten, ktory mi prisiel, nefungoval, a tak som sa na to vykaslal na nejaky cas. Je tu ale rozdiel, ze ta moja vecicka nemala solarnu nabijacku, to veci asi dost meni...
Dalsia vec je, ze som pouzil nejaku libku na usporu energie. Neviem, ci nepouziva tie iste triky, ale ocividne funguje.
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.
Teda "budit" kontroler s pomoci WDT je teda bastlirina nejhorsiho druhu. Jak uz tu nekdo napsal, tohle se resi 32768Hz krystalem na Timer2, kdy to ma nekolikrat mensi spotrebu.
Navic je to reseni presnejsi. To umoznuje synchronizovat zapnuti prijmace tesne pred datovym paketem.
Nakonec pro nevyuzit, ze RC oscilator pohanejici WDT ma teplotni zavislost. Takze by se dalo usetrit teplotni cidlo a teplotu odvozivat od periody paketu. To by teprve bylo drsne nesmyslne vyuziti WDT.
Asi by bylo dobré doplnit, že Arduino normálně nemá 32 kHz krystal připojený na Timer2. Ten článek vysvětluje, jak uspat Arduino tak, jak ho člověk koupí v obchodě - ne jak kolem něj nabastlit přídavný HW pro lepší spánek. Ale díky za doplnění.
Přidám k tomu informaci, že ten Li-Ion nabíječ bere podle mého aktuálního měření 350 mikroampér, takže řešit 2 mikroampéry navíc u WDT je zcela zbytečné.
Prave ze to smysl ma. Vyhodit Lipol baterku i s nabijecem a dat misto toho 2 "tuzky". Zivotnost baterii pokud je spravne udelana kontrola spotreby bude minimalne 5 sezon, porovnatelna s zivotnsti te lipolky. Pro porovnani, mam cidlo teploty takto napajene, a zivotnost baterii je 3 roky non-stop provozu.
Krome toho, pripajet 32.668kHz krystal neni problem, respektive je to radove jednodusii nez resit pripojeni toho zbytku, ktery zakladni adruino take neobsahuje.
Určitě je to cenná poznámka například pro stavitele chytrých hodinek (které mám taky v seznamu a to už docela nahoře!). Tam je 32kHz krystal samozřejmostí a boj o každou mikroampéru mnohem tužší, protože akumulátor v hodinkách určitě nebude velikosti AA, a solární záloha/dobíjení taky nebude po ruce.
Budu si to pamatovat a autorům Timer2 připomínky ještě jednou děkuji.
Přísahal bych že ten odkaz mám někde v záložkách, ale nemůžu to najít a Google je taky proti mě :( Vím že někdo vytvořil křivku, kde porovnával změnu frekvence interního a krystalového oscilátoru, změřil to, prohnal vzorcem a dokázal poměrně přesně měřit teplotu samotným AVRkem :)
A ke snižování spotřeby jsem si vzpomněl na:
https://www.sparkfun.com/tutorials/309
Rozbilo se nám venkovní čidlo teploměru (ukazuje nesmysly), tak jsem posbíral součástky a pustil se do bastlení.
Doplním pár věcí, které se mohou hodit (možná i autorovi článku, který jsem ještě pořádně nečetl).
1. Používám ATTiny85, je totiž energeticky ještě mnohem méně náročné (víc k tomu píšu níže)
2. Používám step-up converter za dolar z ebay, abych jel na 5V (vysílač prý má s vyšším napětím lepší dosah)
3. Používám nejhlubší spánek a k tomu vypínám AD převodník, což taky ušetří (google: ADCSRA)
4. Na step-up convertoru jsem přeškrábl cestu k diodě (aby to nežralo, přece jen je to neceých 10mA)
5. Kdy to nevysílá, spotřeba bude maximálně v řádech stovek mikroampérů, já osobně si myslím, že bude kolem 100, blbě se to měří ...
6. ... protože když to jednou za 32 sekund sepne a vysílá, spotřeba vyletí na cca 25mA a já nemám měřidlo, které ukazuje s takovou přesností 25mA a zároveň i 100uA. Spotřeba měřená přímo na baterii.
Osobně si myslím, že na 14500 LI-ion baterii (velká jako AA, má cca 900mAh) by to mělo vydržet běžet tak dlouho, že ani nechci domýšlet (řádově v měsících určitě, možná v letech, to by se ta baterie spíš vybila samovolně). K tomu mám připojený malý solár (6V, 80mA) a ten to udrží dokud bude slunce svítit.
Součástí vyslaných dat není jen teplota, ale taky napětí baterie a soláru, to abych věděl, jestli vše funguje správně.
Jen mám problém s dosahem toho bezdrátu, musím to ještě nějak vyzkoušet...
Ta alespoň to ATTiny bylo možná přínosem :-)
Měl jsem dlouhodobý problémy s příjmem signálu, nakonec jsem přišel na příčinu (pravděpodobně). Tou je Arduino Nano z Číny. Napájím ho z USB (cca 5,1-5,2V) a ono na pinu "5V" dává jen 4,6V. Přijímač ale vyžaduje 5V. Proč? Protože na výstupu dává při HIGH polovinu napájecího napětí (2,5V), což by Arduinu nemuselo (nemělo?) stačit a pohybujeme se tak v zakázanym prostoru (kde nic neni jistý). Při 4,6V ale dává dokonce jen 2,3, což je ještě víc naprd a proto jsem často nezískal data ani když byl vysílač vedle přijímače.
Samozřejmě ničemu nepomáha to, že přijímač existuje jen v breadboardu, kde vznikají větší odpory ve vedení...
Vyřešil jsem to (zatím) tak, že Nano napájím z 9V přes "Vin" a pak na "5V" dává skutečně 5V a vše jede jak má a na větší vzdálenost (zvenku skrz zdi a různý vybavení bytu včetně elektroniky nebo plechových věcí cca 10 metrů, pořád málo).
Mám doma 1F/5,5V, teoreticky by šel použít. Otázka ale je, jestli solár dodá dost na to, aby se nabil i za špatnýho počasí. A taky jak dlouho vydrží nabitej (jestli přečká noc nebo se samovolně vybije).
Snížení kapacity tý Li-ion baterie mi nevadí. I kdyby klesla na 1/10, tak pořád bude v pohodě. To mi spíš vadí nízký zimní teploty, než neustále nabítá baterie. Teď teda má 4V, protože slunce nesvítí... spíš se jen tak udržuje a pozvolna nabíjí (řádově 5-10mA), než aby se nabila naplno.
Jen z čisté technické zvědavosti mě zajímá z jakých informací čerpáte? Obecně všechny svoje přístroje vybavené li-ion články používám co nejvíce připojené do sítě a například ntb až po šesti letech začal ztrácet kapacitu akumulátoru. Proto se ne příliš ztotožňuji s vaším závěrem. Pokud máte pro svoji teorii nějakou literaturu či zdokumentované případy, tak si je velice rád prostuduji.
Ten efekt, který popisujete mi sedí spíš na superkapacitory, kde je tenhle jev dobře zdokumentovaný a je třeba se vyhýbat stavům plného nabití co možná nejvíce.
Děkuji
Tak si asi nerozumime. Slo mi o to nekupovat nove nepouzite baterie ktere byly dlouho skladem. Li-ion trpi pomalou skladovaci sebedestrukci kvuli chemickym reakcim. U novych baterii je to lepsi ale treba 5 let stara baterie ze skladu by se mela hned vyhodit nebo prodat za nejake zbytkove procento z ceny. Nehlede na to ze v mrazaku ji asi neskladovali.
Vychazim z:
- vlastni zkusenosti kdy jsem zazil jedny z prvnich notasu a mobilu na Li-ion. Baterie co byly skladem 2 roky byly podstatne kapacitne horsi nez zcela nove z vyroby aktivne pouzivana. Dnes bych uz dele jak 1 rok starou nekoupil.
- ze zkusenosti modelaru
- ze studii
- z battery university viz.
http://batteryuniversity.com/learn/article/how_to_store_batteries
http://batteryuniversity.com/learn/article/bu_808b_what_causes_li_ion_to_die
http://batteryuniversity.com/learn/article/do_and_dont_battery_table
http://batteryuniversity.com/learn/article/how_to_increase_the_runtime_of_your_wireless_device
- ignoruji promovane ceske inzenyry. Dam na doporuceni kolegu z nasi aerospace divize a na jednu ceskou firmu delajici baterie pro specialni aplikace
- ignoruji navody od vyrobcu spotrebicu. Jsou schopni smotat dohromady udrzbu nimh a lion. Napriklad nepravdive uvadet ze li-ion se musi zcela vybit a nabit.
- resim specificky podtyp Li-ion baterii. Vracim se k tomu ze je treba cist datashit.
2. Dobre rizeni baterii li-ion vybiji. Docela znacne je to treba u notebooku lenovo kde je to 10-20% vybijeni aku elektronikou kvuli prodlouzeni zivotnosti. Proto stale zapojene pristroje vydrzi nejdele protoze se dela refresh a vybijeni ridi elektronika.
3. Jak poznas jestli neodesel jen clanek? Casto se stava ze odejde jenom par clanku. Li-ion jsou hodne nachylne na vyrobni chyby narozdil od predchudcu. Stalo se mi ze u lenovacke T20 hlasila elektronika bezvadny stav a pritom polovina baterie mela mrtve clanky. Never dokud nepremeris:)
Litiove baterie su lahucke, kto to neskusil netusi ake lahke su. Len sa mi stalo pri aaa raver ktora napajala sluchatka ze pri pololvici zivota zacali sluchatka zrazu pukat, napajanie bolo ok, ale to pukanie ( asi raz za 10 minut a dost hlasite) si neviem vysvetlit, vyzeralo to ako nejake vyboje. Arduino by to nemuselo znasat.
Osobne mam dobre skusenosti s bateriami Vatra Industrial, slabsi mraz znasa bez problemov.
Kupuji to přímo na Texas Instruments webu. Development kity se cenově dají, a chipy mám mnohdy zadarmo posílají samples bez problémů. ( Také se objednávají na TI webu. Dodání je do týdne obvykle FEDEXem. ( Samples včetně poštovného free of charge) Aktuálně je docela hit bluetooth chip CC2541, a nebo super je CC1120, který funguje ve všech ISM pásmech 169, 433, 470, 868, 915, 920 MHz. Tedy programově můžu volit. Technicky omezím výstupním přizpůsobením k anténě na konkrétní pásmo.
Zajímavý projekt a hezky popsaný, díky.
Není cli() a sei() v obsluze přerušení zbytečné? Podle datasheetu Atmegy 328 se to děje automaticky:
"When an interrupt occurs, the Global Interrupt Enable I-bit is cleared and all interrupts are disabled. The user software can write logic one to the I-bit to enable nested interrupts. All enabled interrupts can then interrupt the current interrupt routine. The I-bit is automatically set when a Return from Interrupt instruction – RETI – is executed."
Ked uz vysielate z tymto modulom pozritesi ako casto mozete vlastne vysielat. Aby nejaky iny vlastnik cidielok na vas nepostval telekomunikacny urad.
okrem vykomu je nutne aj dodrzat maximalny cas vysielania. Ktory musi byt , ak sa dobre pamatam, <10% u 433Mhz zariadeni ale niektore freq maju este mensie percenta (<1% a <0.1%)
Ano. To neni moje, to je sousedovo, koupil jsem to v lidlu a nevedel jsem co to dela. Nazdar. Pokud mam kratkou antenku a nesviti mi to tak daleko aby to zachytil automaticky radiovy monitorovaci system. Nikdo tyhle pisklata resit nebude. Neresi se vetsi vetsi problemy jako jsou ruzne powerline blbosti ktere rusi na kilometry daleko.
Moc se bojis. Jeste jsi mladej. CTU u nas chtel poplatek za zasuvku STA nebo radioa, za amplinon obecniho rozhlasu za kdejaky nefunkcni spoj.
Samozrejme ze jim nikdo neplati. Nema to vyznam. Nemaji tolik lidi a nastroje aby to mohli kontrolovat a vymahat.
Jen pro informaci, kdyby někdo náhodou neznal. Jean-Clause Wippler se tímto zabýval (dneska už to zkouší na ARMech) do hloubky na http://jeelabs.org/
Když si projdete archiv, tak najdete hodně zajímavých informací včetně různých vychytávek na omezení spotřeby rfm12b a podobných vysílačů. Má taky vlastní "Arduino" řadu - JeeNode - včetně modulů na napájení jedním AA(A) a podobně.
Ale tento článek je přece pokračování článku z předminulého týdne o tom, jak Arduino využít k propojení s existující domácí elektronikou, například se základnou meteostanice nebo v mém případě bazénového teploměru. Jak vysílat protokolem, kterému domácí elektronika rozumí, a tedy i na stejném pásmu. A tím není WiFi.
Teploměr přes ESP8266 je nuda, nuda, šeď, šeď.
Nejsem si ze schématu ani článku jistý, jede Vám to čidlo v parazitním módu nebo ho napájíte pinem ? Pokud není napájeno parazitně, dle datasheetu je linka během převodu držena v logické 0 a pod dokončení převodu je nahozena úroveň log.1. Toho se dá hezky využít k dalšímu šetření energie. Po započetí převodu dáte procesor do sleepu a probudí se přerušením z pinu na datové lince. Toto funguje pouze pokud čidlo NENÍ napájeno parazitně. V parazitním módu se linka drží v log.1 kvůli napájení.
Ahoj, díky za kvalitní článek, měl bych jen jeden dotaz který mi vrtá hlavou: pokud arduino napájím nižší voltáží než 5V, tedy třeba 4V, bude voltáž na digitálních pinech taktéž stejná (těch 4V), nebo to jde přes nějaký konverter a bude tam 5V? Chtěl bych si takto připojit sensor prašnosti, kde je pak nutné použít pro výpočet voltáž která je tomu dodávaná.