pocitacova mys ryba reprobedny letadlo cip
header

Jak vyrobit bezdrátové Arduino s nízkou spotřebou

27. června 2016

Lang: cs en de es

Jak vyrobit bezdrátové Arduino s extra nízkou spotřebou.

Jak vyrobit bezdrátové Arduino s nízkou spotřebou

Warduxere je programovatelné zařízení pro bezdrátovou komunikaci s malou přenosovou rychlostí, extra nízkou spotřebou a možností napájení z baterie. Je to základ navržený k použití při vývoji bezdrátových projektů.

Specifikace

  • Napájení: DC 3,4–6 V
  • Frekvence bezdrátové komunikace: 433 MHz
  • Dosah: až 900 m
  • Spotřeba: běh 5 mA; vysílání 10 mA; spánek 10 µA
  • Rozměry: 25 × 25 mm
  • Komunikační rozhraní: sériová linka, 3,3 V
  • Vývoj je možný na libovolném OS i na PC jiné architektury než x86

3D modely zařízení:
Warduxere

Motivace

Současná moderní zařízení obsahují bezdrátové periférie a bezdrátové připojení se postupně stává běžnou věcí.
Tato zařízení vždy sestávají z mikroprocesoru a bezdrátové části.
Už jsem pro tyto účely používal komerční řešení, ale nebyl jsem spokojený a ani na internetu jsem nenašel nic, co by splňovalo všechny mé požadavky. Proto jsem se rozhodl vytvořit platformu, kterou půjde znovu použít při realizaci různých bezdrátových projektů.

Kritéria na zařízení:

  • Kompilátor musí být: zdarma, multiplatformní, bez podmínek, podporovaný výrobcem procesoru.
  • Multiplatformní vývojové nástroje (IDE).
  • Standardizovaný hardware i software pro programování.
  • Snadný vývoj – vyšší programovací jazyk, dostupnost knihoven a připojitelných zařízení.
  • Otevřené řešení.
  • Malé zařízení.
  • Úsporné zařízení, které vydrží dlouho na baterii.
  • Přesné měření baterie.
  • Bezdrátová komunikace.
  • Možnost připojit různé periférie.
  • Standardní práce s pamětí = DMA.
  • Velké množství základních součástek a velká uživatelská komunita.

Bezdrátové Arduino

Volba hardwaru

Existuje velmi známý a úspěšný projekt Arduino. Arduino je založené na 8bitových procesorech firmy Atmel, která se aktivně podílí na vývoji open-source nástrojů pro vývojáře, například kompilátoru GNU GCC pro AVR. Tyto vývojové nástroje běží na všech operačních systémech různých počítačových architektur. Pro Arduino je vyvinuté Arduino IDE, které je multiplatformní. K programování není potřeba ani speciální hardware, ani speciální programátor, ani speciální ovladač. Celé zařízení se dá spustit a používat hned, bez jakékoliv instalace. Arduino používá jako hlavní programovací jazyk Wiring, který je podobný C++. Pořád je potřeba umět programovat, ale díky Wiringu se to s Arduinem dá naučit snadno. (Podrobnější informace o Arduinu najdete v PE / AR 2009/1).

Proto jsem se rozhodl použít jako základ Arduino, a tedy mikrokontroléry AVR od Atmelu. Původně jsem myslel, že použiju hotové prototypové destičky, ale ukázalo se, že si musím vyvinout vlastní zařízení. Protože například Arduino ve verzi Pro Mini obsahuje napájecí diodu a neúsporný stabilizátor, které dohromady vytvářejí velkou a zcela zbytečnou spotřebu, a proto se nehodí pro dlouhodobé napájení z baterie.
Vytvořil jsem zařízení s procesorem AVR, které je úsporné a obsahuje i několik dalších součástek. Zároveň je zařízení kompatibilní s Arduinem. A protože nejdůležitější částí je bezdrátová část, pojmenoval jsem zařízení Warduxere.
Díky kompatibilitě s Arduinem může používat už existující a osvědčené vývojové nástroje: Arduino IDE, knihovny atd. Lze připojit i spoustu dalších zařízení, která už mají své API knihovny.

Procesor

Zařízení řídí mikroprocesor ATmega 328P v pouzdře TQFP. V mikroprocesoru je nahraný bootloader, který slouží k pohodlnému nahrávání programu po sériové lince. Pro připojení k PC je nejlepší použít převodník USB-UART, který Warduxere zároveň napájí. Používám převodník s čipem FTDI 232RL nebo s čipem CP2102. Zařízení lze připojit i na paralelní port počítače, ale musíte zajistit napájení a použít převodník napěťových úrovní, například v zapojení s čipem MAX232 (už popsáno v článku v PE / AR 2010/12).
Po připojení Warduxere k USB převodníku není potřeba žádná další elektronika a Warduxere lze připojit k PC a používat spolu s Arduino IDE. Zapojení je na obrázku níže, je nutné správně propojit RX s TX.
zapojení bezdrátového Arduina
K počítačům jako Raspberry PI a Banana PI lze Warduxere připojit přímo, bez další elektroniky, protože tyto počítače mají hardwarové sériové linky s napěťovými úrovněmi 3,3 V.
Pro nahrání programu do procesoru je ve vývojovém prostředí tlačítko „upload“. IDE nejdřív resetuje procesor pomocí vývodu DTR (RTS). Po resetu se spustí bootloader a chvíli čeká na nahrání programu.

Bezdrátová část

Na trhu lze koupit různé bezdrátové čipy, obvykle i jako hotové moduly. Některé komunikují jen jedním směrem, některé umí i WiFi, ZigBee nebo jiné standardy. Liší se frekvencí a rozhraním, přes které je lze připojit k mikroprocesoru. Vybral jsem čip SI4432. Tento čip umí vysílat i přijímat. S procesorem komunikuje po sběrnici SPI a pracuje na frekvencích 240–930 MHz, má velký dosah a výstupní výkon +20 dBm. Má také nízké napájecí napětí 1,8 až 3,6 V a nízkou spotřebu. Koupil jsem už hotový malý modul DRF4432F20, který obsahuje čip SI4432 a je připravený na práci na frekvenci 433 MHz.
Pro Arduino existují knihovny pro práci s tímto čipem, konkrétně knihovna Radiohead RF22.

Parametry bezdrátového modulu DRF4432F20 s čipem SI4432:

  • Napájecí napětí: 1,8 ~ 3,6 V
  • Pracovní frekvence: 433 MHz nebo 868 MHz
  • Modulace: FSK / GFSK / OOK
  • Rozhraní SPI
  • Citlivost: −121 dBm
  • Výstupní výkon: +20 dBm
  • Přenosová rychlost: 0,123 ~ 256 kbps
  • Digitální RSSI
  • Wake-up timer
  • 64 bajtů TX / RX FIFO
  • Integrovaný napěťový regulátor
  • Frequency hopping
  • Teplotní čidlo a 8bitový ADC
  • Pracovní teplota: −20 °C ~ +60 °C
  • Spotřeba ve standby: ≤ 1 µA

Vývody bezdrátového modulu jsou připojené na vstupy procesoru 6→16, 7→15, 8→17, 9→14, 10→32. Modul je napájený stabilizovaným napětím 3,3 V. Vývody 11 a 12 bezdrátového modulu jsou připojené na zem. Vývod 5 je připojený na 3,3 V.

Rozložení vývodů modulu DRF4432F20, viz obrázek:

Bezdrátový modul je dodávaný včetně antény, která se připojuje na vývod č. 13.

Konstrukce

Všechno je volené s ohledem na velikost a především na spotřebu. Proto procesor i celé zařízení pracuje na 3,3 V a hodinový kmitočet procesoru je nastavený na 8 MHz. Používá se interní oscilátor, což šetří místo na DPS a konstrukce je jednodušší. Počítá se s napájením z jednoho článku LiPo. Tyto akumulátory mají vhodné napětí, velkou kapacitu a malé rozměry. Na rozdíl od NiMH článků také netrpí samovybíjením, což je při dlouhodobém použití důležité. Po nabití dosahuje napětí na LiPo článku 4,2 V (podle typu článku a nastavení nabíjecího programu). Při vybíjení tyto články stále drží dostatečné provozní napětí, které by nemělo klesnout pod 3,3 V. Když klesne na 3,6 V, je vhodné článek znovu nabít. Proto jsou tyto parametry důvodem, proč jsou LiPo články vhodným zdrojem energie.
Kvůli snížení spotřeby nemá Warduxere napájecí diodu.

Zařízení obsahuje napěťový stabilizátor MCP1700, který má malou vlastní spotřebu. Volba stabilizátoru určuje vstupní napětí, které může být maximálně 6 V. Konkrétně jde o stabilizátor MCP1700T-3302/TT.
Podle dokumentace má tyto hodnoty:

  1. typický klidový proud 1,6 µA
  2. maximální výstupní proud 250 mA
  3. úbytek 178 mV při 250 mA
I když je úbytek napětí na stabilizátoru malý, je potřeba s ním počítat. Při maximálním úbytku je nutné vyměnit baterii nejpozději při 3,47 V, jinak by procesor a bezdrátový modul měly méně než požadovaných 3,3 V. Spotřeba zařízení ale závisí i na dalších součástkách a obvykle je mnohem menší než maximální možná, takže úbytek na stabilizátoru bude pravděpodobně menší.

Zařízení obsahuje operační zesilovač MCP6042, který má podle dokumentace klidový proud 600 nA. Pokud úspora energie není zásadní, lze operační zesilovač nahradit levnějším a dostupnějším typem, například MCP6002 nebo MCP6L02.

Pro nízkou spotřebu je potřeba zvolit velké odpory (R5, R6) v děliči pro měření baterie, například o hodnotě 1 MΩ.

Deska plošných spojů

DPS je navržená tak, aby šla bez problémů osazovat i v domácích podmínkách. Proto jsou použité součástky ve velkých pouzdrech SMD 1206, které jsou rozmístěné tak, aby se daly snadno pájet. Jde o dvoustrannou desku s prokovenými otvory. Na dobře vyrobené desce bez nepájivé masky lze snadno zapájet i procesor v pouzdře TQFP. Bezdrátový modul je potřeba pájet jako poslední, pořadí pájení ostatních součástek nevadí.

Sestavení a oživení

Oživení zařízení se skládá z těchto kroků:

  1. Zapájení CPU a ostatních součástek kromě bezdrátového modulu
  2. Nahrání zavaděče (bootloaderu)
  3. Test blikacím programem
  4. Zapájení bezdrátového modulu
  5. Otestování bezdrátového modulu

Při osazování začněte pájením procesoru (IC2), který pinzetou přesně a se správnou orientací položte na místo a nejdřív zapájejte dva vývody v protilehlých rozích. Po kontrole, že je poloha přesná, zapájejte zbývající vývody procesoru. Pak zapájejte stabilizátor U1. Pak snadno zapájíte všechny zbývající součástky na této straně DPS. Jen dejte pozor na správnou orientaci LED. Na druhé straně začněte pájením operačního zesilovače (OP1). Dbejte na správnou orientaci a postupujte jako u procesoru. Pak zapájejte zbývající součástky na této straně desky.

Bootloader

Nejsnazší je zapájet procesor už s přednahraným bootloaderem, ale procesor lze naprogramovat i po zapájení na desku, protože jsou na desce pro to připravené plošky.

K nahrání bootloaderu potřebujete hardwarový a softwarový programátor. Lze použít například paralelní port počítače a software pony-STK200 a Avrdude. Každý pravděpodobně použije programovací prostředky, na které je zvyklý. Jako programátor lze použít i samotné Arduino. Do Arduina nahrajete software ArduinoISP a po propojení obou zařízení spustíte nahrání bootloaderu přímo z Arduino IDE.
Vývody programátoru se musí připojit na plošky u K1. Vývody CPU jsou zleva v pořadí: 15 MOSI, 16 MISO, 17 SCK. Tyto vývody se musí připojit k programátoru. U Arduino ISP to jsou D11 (MOSI), D12 (MISO), D13 (SCK). Pak je potřeba připojit napájení (dokud není zapájený stabilizátor, lze použít plošku u odporu R4) a GND. Poslední je reset procesoru, který lze připojit například na plošku kondenzátoru C3. Jako reset u Arduino ISP slouží vývod D10.
Teď lze nahrát bootloader.

Zavaděč je standardní bootloader pro Arduino. Procesor je nastavený na 8 MHz s interní oscilací.
Před nahráním bootloaderu je potřeba v Arduino IDE vybrat správný typ zařízení, který definuje jeho parametry. Do souboru arduino/hardware/arduino/boards.txt jednoduše přidejte následující text:

atmega328Wb.name=Warduxere by www.xeres.cz
atmega328Wb.upload.protocol=stk500
atmega328Wb.upload.maximum_size=30720
atmega328Wb.upload.speed=57600
atmega328Wb.bootloader.low_fuses=0xE2
atmega328Wb.bootloader.high_fuses=0xDA
atmega328Wb.bootloader.extended_fuses=0x05
atmega328Wb.bootloader.path=atmega
atmega328Wb.bootloader.file=warduxere.hex
atmega328Wb.bootloader.unlock_bits=0x3F
atmega328Wb.bootloader.lock_bits=0x0F
atmega328Wb.build.mcu=atmega328p
atmega328Wb.build.f_cpu=8000000L
atmega328Wb.build.core=arduino
atmega328Wb.build.variant=standard

Tyto hodnoty definují celou konfiguraci zařízení pro nahrání bootloaderu, nastavení procesoru (lock bity), kompilaci programu a rychlost nahrávání. Soubor warduxere.hex s bootloaderem včetně programu blikající LED je ke stažení na webu časopisu PE / AR.

Po připojení převodníku USB-UART na vývody konektoru P1 lze do procesoru nahrávat programy a základní funkčnost otestovat blikáním LED. Vývody jsou v pořadí: GND, NONE, VCC, TX, RX, DTR. Pamatujte, že je nutné propojit RX procesoru s TX převodníku a naopak.

Nakonec zapájejte bezdrátový modul. Pro jistotu nalepte na spodní stranu bezdrátového modulu proužek izolační pásky. Zapájejte ho tak, aby se dotýkal procesoru, tím se výrazně sníží případné mechanické namáhání spojů. Pak ověřte funkčnost nahráním ukázkového programu. Pokud je modul například špatně zapájený, ukázkový program pošle po sériové lince zprávu o problému s jeho inicializací.

Teď je zařízení připravené a můžete začít vytvářet jednoduché i rozsáhlé bezdrátové senzorové sítě…

Spotřeba

Zhruba jsem změřil spotřebu bezdrátového modulu při napětí 3,3 V, hodnoty byly následující: 9 mA při vysílání; 1,4 mA v klidu, podle dokumentace 1 µA ve spánku. Procesor při 5 V ve spánku odebírá 0,16 mA, po vypnutí ADC odebírá přibližně 1–2 µA. Po optimalizaci na minimální spotřebu a při zapojení jen procesoru a bezdrátového modulu jsem naměřil spotřebu 3,4 mA v klidu a ve spánku procesoru i bezdrátového modulu jsem naměřil 5 µA. Přibližně, když zanedbáme další vlivy, by Warduxere mohl pracovat několik let z jednoho článku LiPo, například takového, jaké jsou v telefonech. V reálném použití ale záleží hlavně na konkrétní aplikaci, a ta určuje skutečnou výdrž na baterii. Další věcí jsou připojené periférie, které musí spát nebo být úsporné.

U plně osazeného Warduxere ve spánku jsem naměřil spotřebu menší než 10 µA.

Použití

Pro práci se zařízením stačí z internetu stáhnout Arduino IDE, které obsahuje všechno potřebné. Stačí rozbalit stažený archiv, nic se nemusí instalovat. Kromě všech nutných součástí obsahuje Arduino IDE i řadu příkladů pro samotné Arduino i pro běžné rozšiřující desky (shieldy).
Warduxere má osazený odpor a pájecí plošky pro sběrnici one-wire, odporový dělič pro měření baterie, odpor a pájecí plošky pro analogový senzor (např. fotorezistor).
Další vývody procesoru jsem vyvedl na pájecí plošky, aby šlo k procesoru připojit další zařízení a periférie, například různé typy LCD displejů, Ethernet, GSM moduly.

Konkrétní použití bude záležet hlavně na nápadech každého konstruktéra. Dál popíšu vlastnosti, kterými se Warduxere liší od Arduina. Před použitím knihoven zmíněných v následujících odstavcích je musíte rozbalit do složky arduino/libraries/.


LED

Funkčnost zařízení lze jednoduše otestovat blikáním LED. Obvykle je dioda na vývodu CPU 17 (u Arduina se zvykem označuje D13), ale tam je připojený bezdrátový modul. Proto je u Warduxere LED připojená na vývod 32 (Arduino D2). Viz ukázkový program Blink.

Bezdrátová komunikace

Možnosti nastavení bezdrátové komunikace jsou rozsáhlé. Nejdůležitější je, že komunikace je paketová s vyrovnávací pamětí 64 bajtů. Rychlost komunikace může být 0,123 až 256 kbps, modulace: FSK, GFSK a OOK. Lze provozovat i rozsáhlé sítě MESH.
Jako příklad uvedu jen nejzákladnější typ komunikace, kterým lze ověřit funkčnost zařízení. Viz ukázkové programy Wireless-client a Wireless-server. Další praktické příklady použití čipu SI4432 s knihovnou Radiohead RF22 najde čtenář v dokumentaci na internetu.

Režimy nízké spotřeby

Procesor umí několik úsporných režimů. Nejúspornější režim CPU je spánek, a aby se ušetřilo ještě víc, je potřeba uspat i jednotlivé části procesoru, například A/D převodník a Brown-out Detector (BOD). Často stačí nechat běžet jen watchdog, který vygeneruje přerušení k probuzení. Je potřeba uspat i periférie, v tomto případě jen bezdrátový modul, který umí spát na vyžádání. Při uspání systému je tedy potřeba uspat samotný procesor i bezdrátovou část. Jednoduchý program pro uspání viz program Sleep.
Kdo se nechce nastavením uspání zabývat sám, může použít knihovnu Low-Power.

Baterie

Stav baterie se zjišťuje měřením napětí 1:1 na děliči analogovým převodníkem CPU. Tímto zapojením se měří skutečné napětí na baterii. Lze tak připojit například tři články NiMH nebo jeden článek LiPo, případně i jiné typy baterií, a úpravou softwaru snadno dosáhnout konkrétních potřeb sledování stavu baterie. U jiných řešení, kde se napětí baterie měří až za 3V stabilizátorem, byl problém zejména při použití LiPo článků.
Pro přesné měření baterie je také potřeba mít přesný dělič. Základní řady odporů mají toleranci ±5 %, ale tyto méně přesné odpory mohou způsobit značnou chybu měření. V nejhorším případě až ±10 %, což u 4V baterie znamená 0,4 V, a to je opravdu hodně. Při měření stavu LiPo článků je to nepřijatelné. Proto je nutné použít přesné odpory s tolerancí ±0,1 %, případně ±0,5 %. Ale není potřeba hned kupovat drahé přesné odpory. Pro výrobu několika zařízení stačí odpory změřit a vytvořit páry se stejnou hodnotou.
Měření napětí baterie je v ukázkovém programu Battery.

Všechny příklady snadno vyzkoušíte, pokud máte Arduino Pro Mini 3,3 V 8 MHz nebo mikroprocesor ATmega 328P a připojíte je k bezdrátovému modulu DRF4432F20 nebo jinému s čipem SI4432. Všechno lze vyzkoušet jen s několika součástkami po zapojení podle schématu.

Poznámky

Informace o používání Arduino IDE platí pro verzi 1.0.6.
DPS je navržená v softwaru KiCad.

Seznam součástek:

C1, C2, C3 100n
C4 10u
D1 LED
IC2 ATmega328P-AU
OP1 MCP6042 (MCP6002, MCP6L02)
R1 330R
R3 4k7
R2, R4 10k
R5, R6 1M − ±0,5 %
U1 MCP1700T-3302/TT
WIRELESS1 DRF4432F20 - SI4432

Závěr

Dosáhl jsem všech stanovených bodů, včetně malých rozměrů a dlouhé doby provozu na baterii. Díky stavbě na open-source řešeních šel vývoj ještě hladčeji a rychleji, než jsem si optimisticky představoval. I po dosažení stanoveného cíle zbývají další možnosti, jak zařízení vylepšit. Dalo by se optimalizovat různými způsoby. Například ještě víc zmenšit rozměry a ideálně ho vyrábět v jednom kuse s procesorem a bezdrátovým čipem osazenými na jedné DPS. Nebo vyvést vývody CPU na lištu.
Schéma zapojení vytvořené v KiCadu a ukázkové programy uvolňuji pod licencí Creative Commons Attribution ShareAlike 3.0.

Mám k dispozici několik zbývajících DPS, pokud byste měli zájem, a mohu nabídnout i další služby.

Seznam příloh

  • warduxere.hex – bootloader
  • boards.txt – konfigurace pro Arduino IDE
  • Low-Power.zip
  • RadioHead-1.37.zip
  • Program Blink
  • Programy Wireless-client a Wireless-server
  • Program Sleep
  • Program Battery
  • PNG obrázky DPS a nastavení
Všechny tyto soubory jsou ke stažení na https://github.com/josefjebavy/warduxere

Autor

Autor článku a zařízení: SW&HW vývojář Bc. Josef Jebavý
Můžete kontaktovat autora

První realizace zařízení.
Strana s operačním zesilovačem:
warduxere-bottom.jpg
Strana s procesorem:
warduxere-cpu.jpg
Hotové zařízení po zapájení bezdrátového modulu:
warduxere-wireless.jpg

Články na podobné téma

Vibecoding: Jak pomocí AI naprogramovat dobrou aplikaci
Jak zrychlit web
Rector: upgrade PHP aplikace
Programovací jazyk Go
Analýza zadání a nacenění vývoje softwarového projektu
Python program na ovládání Dockeru pomocí API
Jak použít aplikaci MailCatcher pro testování emailů
Návod: Python OpenAI API
Vytvoření WebSocket webové aplikace a nastavení proxy
Řízení projektů: Agilní vývoj softwaru
Jak provozovat staré PHP aplikace
Co by měl umět dobrý programátor
Programovací jazyk Rust
NodeJS: vývoj, konfigurace serveru
Nette security bug CVE-2020-15227
Jak porovnat dvě stejné databáze?
REST API: API platform
Vlastní web a mail hosting se softwarem ISP Config
Programovní v SQL: PostgreSQL, MySQL/MariaDB
HTTPS: zabezpečený web
NoSQL databáze Mongo DB
Připojení k Microsoft SQL Serveru z Linuxu
Co je pracovní náplň programátora
Lokalizace aplikací v jazyce Python
Jaký mail a web hosting vybrat
Digispark - Programujte mikrokontrolér Atmel ATtiny pomocí Arduino IDE
Program Ruleta
Vývoj pro procesory ARM s Arduino IDE
Bezdrátové Arduino s nízkou spotřebou
Pyradio - Python program for receive Internet radio with text user inteface
UPS monitor pro Android
Bezdrátový bateriově napájený WiFi teploměr
Jak programovat WiFi procesor ESP8266
Porovnání IQRF vs bezdrátové Arduino
Jakou platformu zvolit pro eshop? Například Prestashop
Development kits and gateways for wireless platform IQRF
Development kits and gateways for wireless platform IQRF

OpenStreetMap a GPS trasy v mapě na webu
Quickplay
Java program pro přehledné monitorování záložních zdrojů
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
O programování a ruzné programy v jazyce Java, Python a dalších
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+