Blog převážně jednočipový

Arduino běžící na baterky

Někdy chceme postavit nějaké zařízení které má být napájené na baterie. Například meteostanici, nebo obecně zařízení které má v nějakých intervalech sbírat data z nějakých čidel a ukládat je. Dneska bych chtěl ukázat jak se dá arduino použít k těmto účelům a co je potřeba udělat aby na napájení stačily třeba 3 tužkové baterky a nemuseli jsme je každý den měnit.

Například takové arduino UNO při běhu odebírá 50mA a ještě k tomu potřebuje napájení minimálně 5V. Zrovna těch 5V se v nějaké kompaktní formě moc nevyskytuje. Buď budeme muset spojit 4 tužkové baterie a nebo použít 9V baterii a tento zdroj připojit na RAW pin. U té 9V baterie to ale znaméná, že 4V se propálí na pro nás neužitečné teplo v regulátoru. 9V baterie má kapacitu okolo 500mAh, takže arduino UNO by na ni běželo 10 hodin. Můžeme sice procesor programem uspat ale tím si moc nepomůžeme, jelikož na desce je třeba převoník USB-TTL a ten si bude vesele odebírat proud dále. Někoho by napadlo použít DC-DC měnič a tím těch 9V převést na 5V úsporněji, ale ani v ideálním případě se nedostaneme na více jak 18 hodin. Respektive spíš daleko méně, jelikož prodávané měniče mají vysokou účinnost jen když běží na plný výkon a při menších odběrech účinnost brutálně klesá. Tyto měniče také odebírají né zrovna zanedbatelný proud i ve chvíli kdy na jejich výstupu není nic připojeno.

Můžeme použít samotný čip ATMEL a tím se dostat na co nejmenší spotřebu, ale je potřeba připojit nějaké součástky a nahrát do čipu bootloader. Já jsem se nakonec rozhodl použít Arduino PRO mini psal jsem o něm v článku zde. Použil jsem verzi 3.3V na 8MHz pro napájení lze použít napřílad 3.7V Li-ion nabíjecí baterii nebo 3 tužkové nabíjecí baterie nebo i knoflíkovou baterii.

Pokud použijeme arduino PRO mini 3.3V (tak jak je) tak za běhu odebírá okolo 6mA. Tím jsme prodloužili běh u baterie o kapacitě 500mAh na 3.5 dne. No to je rozhodně lepší než 50mA a 10hodin ale půjdeme ještě dále (o mnoho dále).

Pokud nám jde například o sběr dat tak většinou chceme změřit nějakou hodnotu, uložit ji a další změřit až za nějaký čas. V tomto mezičase může arduino čekat v nějakém delay(?), bohužel odebírá stejně jako by zpracovávalo nějaký kód. Naštestí lze čip uspat a tím dosáhnout snížení spotřeby. Pro uspání jsem použil knihovnu https://github.com/rocketscrea.../Low-Power nebo ke stažení LowPower.zip.

Jednoduchý příklad použití:

#include "LowPower.h"

void setup()
{
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(200);
  digitalWrite(13, LOW);
  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
Program blikne diodou která je na desce a usne na 8 sekund a tak pořád dokola. Ve fázi kdy program usne arduino odebírá 1.6mA, tím jsme prodloužili běh na asi 13 dnů. 8 sekund je nejdelší doba na kterou lze arduino uspat, ovšem není problém použít cyklus a dobu protáhnout na libovolnou délku. Procesor se sice při tom probudí ale jen na krátkou chvíli a zase hned usne.

Tím jsme po softwarové stránce udělali co jsme mohli, ale zajisté jste si všimli, že na desce je ještě jedna dioda která svítí pořád. Tato dioda signalizuje připojené napájení a nejde softwarově vypnout. Další žrout energie je i napěťový regulátor. Ten jsme sice obešli tím, že arduino napájíme přes PIN VCC napětím okolo 3.3 Voltů, jenomže on i tak spotřebovává energii. Na obrázku je vidět vlevo dioda a v pravo regulátor.

Diodu vlastně nepotřebujeme (zvláště když nám jde o co nejmenší spotřebu), takže ji můžeme odstranit. Nejjednodužší je pomocí ostrého nože (já jsem použil odlamovací nůž na koberce) přerušit vodivou stopu která k ní vede. Na fotce to sice vypadá jednoduše ale ta je zvětšená, takže doporučuji použít lupu. Přerušil jsem tedy vodivou stopu vlevo pod diodou.

Tím už na desce za běhu nic nesvítí a spotřeba klesla na 0.06mA, doba běhu na baterii vzrostla na 347dní.

Další je na řadě regulátor. Buď můžeme zase přerušit vodivou stopu (vlevo nahoře) nebo ho prostě vzít do kleštiček a vyndat, jde to docela snadno. Vyndání kleštičkami mi přišlo jednodužší.

Tímto jsme se dostali na spotřebu 0.023mA tedy 23μA, doba běhu vzrostla na 900dní. Jelikož ale arduino teď nemá regulátor musíme si dávat pozor čím ho napájíme. Už nemůžeme na něj připojit napájení na RAW PIN , jelikož tento PIN teď nefunguje. Napájení musíme připojit na PIN VCC a musíme si dát pozor na velikost napájení. Arduino PRO mini (3.3V, 8MHz) může běžet na napájení v rozsahu od 2.7V do 5.5V. Také je potřeba si uvědomit, že nepřítomnost regulátoru znamená, kolísání napětí přivedeného na arduino z baterie. Pokud například chceme měřit napětí na pinu pomocí funkce analogRead, tak je potřeba počítat s tím, že výsledky se budou měnit společne se změnou napětí na baterii. Jelikož vstupní napětí, je referenčním napětí při měření analogového vstupu. Naštěstí se da v arduinu přepnout refenční napětí na hodnotu 1.1V pomocí funkce analogReference(INTERNAL). Pokud chceme měřit napětí větší, než je 1.1V stačí použít dělič napětí ze dvou rezistorů (pozor na velikost rezistorů aby spotřeba moc nevzrostla).

Shrnutí spotřeby arduina PRO mini 3.3V 8MHz

běh bez úprav5.6 mA
uspané bez úprav1.6 mA
uspané bez diody0.06 mA
uspané bez diody a bez regulátoru0.023 mA
Vytvořeno: 2016-02-19 20:02:52
Změněno: 2016-03-02 22:16:39
Autor
2017-07-27 22:47:33
No toto jsem nemeril. Ale jelikoz arduino bez uprav bere 5.6mA a dioda s regulatorem bere asi 1.6mA tak hadam ze pri behu bude brat arduino asi 4mA.
Mirek
2017-07-16 10:09:42
Mám pro mě docela důležitý dotaz. Jaká je tedy spotřeba po úpravách při zapnutém arduinu?

Napsat komentář