Včelky: nová elektronika a tenzometr

Projekt monitorování včelích úlů (a pár řádků i tady) stále pokračuje a pomalu se posunuje kupředu. V následujícím textu představím již třetí verzi elektroniky a pak popíšu moje experimenty s tenzometrem.

Tři verze elektroniky

Pro připomenutí: v srpnu 2013 jsem si začal pohrávat s myšlenkou měřit včelí úly, které máme v zahradě. Tehdy jsem navrhl elektroniku, která využívala bezdrátový modul 2,4 GHz ZigBee a pro samotné měření váhy zesilovač INA125 s integrovaným ADC v MCU ATMega328P.

Měřicí část: ATMega328, INA125, RTC a ZigBee 2,4GHz.
První verze elekrtoniky se ZigBee a INA125 a po domácku vyrobená DPS .

Na přelomu 2013/2014 jsem dokončil novou verzi elektroniky, ve které jsem vyměnil rádiovou část a kompletně přepsal firmware pro ATMegu. Analogová část zůstala stejná (stále INA125 a 10bitový AD převodník). Po prvotních experimentech se ukázalo, že rádiové spojení je dostatečně stabilní, měření teploty je přesné (DS18B20), pouze analogová část má malou přesnost. Rozlišení 10bitové AD převodníku v mikrokontroléru je malé, přesnost a stabilita referenčního napětí je nedostačující a s teplotou se výrazně měnil zisk zesilovače (v řádu desítek μV/°C).

Nová verze měřicí části pro monitorování včelích úlů.
Druhá verze elektroniky s rádiem TinyMesh 868 MHz a profi DPS.

Proto přišel čas na třetí verzi. Kromě samotné analogové části jsem ještě vyhodil obvod reálného času a místo něj používám Watchdog v režimu přerušení. Tím jsem ušetřil cca 50 Kč. Analogovou část jsem kompletně předělal a místo INA125 použil AD převodník MCP3551 a operační zesilovač MCP6V07 (podrobnosti viz dále). Cena tohoto řešení je velmi podobná ceně samotné INA125. Dále jsem se rozhodl (hlavně kvůli rádiovém modulu, který dělá asi polovinu ceny celé elektroniky), že jedna elektronika by měla obsloužit dva úly. To znamená dva AD převodníky a dva operační zesilovače.

Zatím ještě neosazená DPS třetí verze elektroniky.
Zatím ještě neosazená DPS třetí verze elektroniky.

Tato třetí verze mi dorazila v polovině února. Na obrázku výše je vidět panel, který mi dorazil z POOL servisu. DPS má rozměry 65×40 mm, ve spodní části jsou dva oddělené AD převodníky s operačním zesilovačem, výstup je přes SPI spojen s mikrokontrolérem ATMega168P. V levém horním rohu je step-up měnič na 3V (napájení je možné buď olověným akumulátorem nebo alkalickými AA bateriemi, vstupní napětí nesmí překročit 3 V), v pravé části je rádiový modul. Na desku jsem ještě přidal 3 stavové LED a jeden mikrospínač. Většina součástek je SMD a pouzdro 0603. Jediná výjimka jsou konektory.

Analogová část

Při návrhu nové analogové části jsem se rozhodl použít MCP3551 – 22 bitový ΣΔ převodník, vzorkovací rychlost 13 sps s jedním diferenčním vstupem a SPI rozhraním. Je relativně levný a jeho parametry jsou ideální pro použití s tenzometry. Výběr mi dost ulehčila aplikační poznámka AN1030, ve které se autoři zabývají právě měřením váhy s MCP3551.

Jedna ze dvou analogových částí.
Jedna ze dvou analogových částí.

Pozn: Ve schématu je chyba. Hodnoty rezistorů \(R_{14}\) a \(R_{15}\) jsou přehozeny. Dělící poměr má být \(\frac{1}{3}\).

Tenzometr je napájen rovnou z výstupu step-up měniče napětím 3 V. Referenční napětí ADC je ze stejného zdroje přes RC filtr a napěťový dělič zmenšeno na 1 V. Tomuto měření se pak říká ratiometric – pokud se změní napětí na tenzometru, přímoúměrně se změní i napětí na referenčním vstupu ADC, takže výsledek zůstává pořád stejný. Rezistor R13 a kondenzátor C11 slouží jako dolní propust, která slouží k odfiltrování vysokofrekvenčního šumu. Hodnoty byly zvoleny podle již zmíněné aplikační poznámky (doporučuji pročíst celou, jsou tam zajímavé informace).

Na vstupu AD převodníku je dvojice operačních zesilovačů (MCP6V07, v jednom SMD pouzdru), které jsou zapojeny jako diferenční zesilovač. Jejich zesílení je dáno rezistory \(R_{\textrm{10}}\), \(R_{\textrm{11}}\) a \(R_{\textrm{12}}\):

\(
A = \frac{R_{\textrm{11}}\cdot R_{\textrm{12}}}{R_{\textrm{10}}} + 1
\)

Což při hodnotách \(10\;\textrm{k}\Omega\) a \(100\;\Omega\) dělá zesílení \(201\). Jelikož používám tenzometr, který má citlivost 2 mV/V bude výstupní napětí při plném zatížení 6 mV krát zesílení nám dává napětí na diferenčním vstupu AD převodníku 1206 mV.

To je sice více než referenční napětí 1 V, ale nepředpokládám plné zatížení tenzometru. Pokud by k plnému zatížení náhodou došlo, v registru AD převodníku bude nastaven bit signalizující přetečení a já tuto skutečnost mohu uživateli zobrazit a varovat ho.

Tenzometry

Tady jsem také od prvních experimentů udělal výrazný posun kupředu. K prvnímu měření jsem používal 4 malé tenzometry z osobní digitální váhy. Ty jsem dohromady zapojil do Wheatstonova můstku. Měření bylo relativně přesné v domácích podmínkách, dokud teplota neklesla pod 18 ºC. Pod touto teplotou se začala převodní charakteristika tenzometrů výrazně měnit. Stejně tak se po delší době projevilo tečení materiálu (anglicky creep) a citlivost na okolní vlhkost.

Jeden ze čtyř levných tenzometrů z osobní váhy.
Jeden ze čtyř levných tenzometrů z osobní váhy.

S druhou elektronikou jsem použil tenzometr jeden, ve tvaru hranolu o délce 80 mm. Tento tenzometr je vyroben na zatížení 20 kg. Počítám s tím, že úl bude umístěn na kovovém podstavci a váha bude přes páku převedena v poměru 1:10 na tenzometr.

Avšak ani tento kus se neosvěčil, jelikož jeho malé rozměry a levné provedení není stavěno na trvalé zatížení. Po několika hodinách se na výsledku začalo projevovat tečení materiálu.

Druhý použitý tenzometr o rozměrech 80x13x13 mm.
Druhý použitý tenzometr o rozměrech 80x13x13 mm.

Jak se říká, nejsme tak bohatí, abychom kupovali levné věci. Třetí tenzometr mně vyšel na 600 Kč, jeho rozměry jsou 130×30×20 mm, stupeň krytí IP65, výstupní citlivost 2 mV/V a kompenzovaný teplotní rozsah −10 až +40 ºC. Stejně jako tenzometr výše i tento je na 20 kg, jen jeho konstrukce je mnohem více robustnější.

Třetí tenzometr na 20 kg.
Třetí tenzometr na 20 kg.

A pro porovnání obou kusů ještě třetí fotografie. Připomínám, že papírově jsou oba tenzometry konstruovány na stejné zatížení, oba jsou v omezeném rozahu teplotně kompenzované a jsou zapojeny do Wheatstonova můstku:

Porovnání velikostí obou tenzometrů na 20 kg.
Porovnání velikostí obou tenzometrů na 20 kg.

Tento poslední kus mi dorazil teprve začátkem týdne a zatím jsem jej testoval jenom na stole při okolní teplotě asi 20 ºC. Venkovní měření při různých teplotách musím ještě provést.

Ani tento tenzometr není to nejlepší, co se dá sehnat. Pro opravdu přesné a dlouhodobě kvalitní měření se dají sehnat tenzometry v cenových kategoriích 1000 až 12000 Kč.

Měření

Tento týden jsem se chvilkama věnoval měření. Použil jsem analogovou část z třetí verze elektroniky a třetí tenzometr. Ten jsem přes samořezné vruty připevnil k bukovému hranolu, který byl vodorovně umístěn na pevný stůl. Na druhý konec tenzometru jsem pokládal menší objekty a později také na strunu zavěsil 1,5 kg závaží. Vzorkovací frekvence byla asi 1,7 sps a měření s různým závažím jsem nechával běžet od několika minut do několika hodin.

První předkládám výsledek tří hodinového měření 1,5 kg závaží. Tenzometr byl celou dobu v klidu, se závažím jsem nijak nehýbal. Naměřené výsledky jsou výstupy z AD převodníku, hodnoty jsem nepřeváděl na žádnou veličinu, pro představu si ale ještě uveďme, že:

\(
\textrm{ADC}_{\textrm{LSB}} = \frac{1}{2^{21}} = 476{,}837\cdot 10^{-9}\;\textrm{V}
\)

Což znamená, že nejméně významný bit z výstupu AD převodníku představuje asi 476 nV. Jeden gram je při použitém tenzometru 69 μV neboli 145 bitů (zatím jsem ještě neměřil linearitu v celém rozsahu).

Výstup tenzometru při zatížení 1,5 kg.
Výstup tenzometru při zatížení 1,5 kg.

První graf zobrazuje histogram všech cca 7000 naměřených vzorků. Na ose x jsou jednotlivé hodnoty a na ose y pak jejich četnost. Jak je vidět, histogram má normální rozložení a má tedy smysl u něj počítat průměr (223455, což odpovídá 106,551 mV a 1544 g) a standardní odchylku (σ=85).

Druhý, červený graf, zobrazuje naměřená data v čase. Na ose x jsou jednotlivé vzorky (jelikož byla vzorkovací frekvence 1,7 sps, pak měření probíhalo 3,3 hodiny) a na ose y je výstup AD převodníku.

Z obou grafů lze vyčíst, že se data od průměru liší o ±250 hodnot (±119 μV, ±1,72 g). To je pravděpodobně způsobeno teplotním a/nebo elektromagnetickým šumem, tomuto předpokladu odpovídá i tvar histogramu. Výsledek je tedy dostatečně přesný, nejistota měření je způsobena šumem, u tenzometru se za 3 hodiny neprojevilo tečení materiálu.

Přesnost měření je tedy v ideálním případě ±1,72 g. Jelikož má ale šum normální rozložení, můžeme zvýšit přesnost výsledku filtrováním. Průměrná hodnota by měla zůstat stejná, pouze se změnší standardní odchylka. Jako ideální se jeví použít na data klouzavý průměr. Ten zmenší rozptyl hodnot a tím vlastně odfiltruje část šumu.

Pro výpočet a následné zobrazení dat jsem používal Pythoní knihovny numpy, scipy a matplotlib. Ani jedna z jmenovaných ale nemá funkci pro výpočet klouzavého průměru. To ale nevadí, jelikož se dá klouzavý průměr realizovat pomocí konvoluce s délkou okna N (v mém případě jsem zvolil hodnotu 11).

Aplikace klouzavého průměru (konvoluce) na naměřená data.
Aplikace klouzavého průměru (konvoluce) na naměřená data.

První dvojice grafů obsahuje nezměněná data, která jsme již viděli na obrázku dříve. Druhý řádek obsahuje výsledek po konvoluci s oknem typu flat (vektor pro výpočet konvoluce obsahoval N prvků s hodnotou \(\frac{1}{N}\)) a na třetím řádku je výsledek po konvoluci s oknem typu hanning.

V obou případech se průměr téměř nezměnil, pouze standardní odchylka je o více jak polovinu menší. Pro lepší názornost jsem pro osy y na grafech vpravo zvolil stejné měřítko. Hodnota šumu se tedy v obou případech zmenšila na ±100 hodnot (±47,7 μV, ±0,69 g). Okno typu flat se pro naše data hodí více a dává také lepší výsledky. I tak je ale v obou případech potlačení sumu velmi výrazné.

Zatím jsme ale měřili jen šum. Pojďme se podívat jak budou vypadat data, pokud na volný konec tenzometru položíme 24 g (to je váha jedné tužkové baterie typu AA). Nejdříve jsem na tenzometr zavěsil 1,5 kg závaží a střídavě pokládal a zase odebíral tužkovou baterii a malé 3 g závaží. V druhém měření jsem pouze z tenzometru odebral 1,5 kg a postup opakoval.

Změny výstupu tenzometru na 3 g a 24 g.
Změny výstupu tenzometru na 3 g a 24 g.

První graf obsahuje data za necelých 40 minut a druhý graf za 10 minut. Data jsem nijak nefiltroval, v grafech jsou opravdové naměřené hodnoty a šum, který vidíte má stejné parametry jako na prvním obrázku výše.

Teď nad prvním grafem (to znamená nad daty z nezatíženého tenzometru, na který jsem pokládal závaží 24 g a 3 g) pustíme již zmiňovanou konvoluci s oknem flat.

Změny výstupu tenzometru na 3 g a 24 g, data jsou filtrována konvolucí.
Změny výstupu tenzometru na 3 g a 24 g, data jsou filtrována konvolucí.

U těchto grafů stojí za povšimnutí, že dříve rychlá změna z 0 na 24 g, která na horním grafu proběhně během jediného vzorku se na grafu spodním roztáhla na 11 vzorků. Lidově řečeno, konvoluce způsobila, že rychlé změny váhy se ve výsledku projeví pomaleji. To nám u měření včel vůbec nevadí, jelikož předpokládáme pomalé a postupné změny, které trvají i několik desítek minut. Pokud bychom ale chtěli měřit rychlejší změni, konvoluce by mohla výsledky zkreslit nebo úplně znehodnotit.

No a na závěr (nebojte se, už vás dlouho nudit nebudu) ještě poslední měření: zatížení tenzometru po dobu 14 hodin s 1,5 kg závažím. Tohle měření se ale nepovedlo podle představ.

Nepovedené, 14 hodin dlouhé měření.
Nepovedené, 14 hodin dlouhé měření.

Z grafů je vidět, že se za 14 hodin výstup měnil o 13 g. Rozložení dat ale není Gaussovské, v histogramu se objevují 3 špičky. Zatím ještě nevím co mohlo způsobit takový výsledek, ale tipuji to na teplotu. Měření jsem nechal běžet přes noc, kdy vypínám topení. Teplota se tedy v místnosti mohla změnit až o 4 ºC.

Teplotní drift použitého operačního zesilovače je ±50 nV (což je také hlavní důvod proč jsem zvolil tak drahý typ), což při 10 ºC dělá změnu o nejméně významný bit. Takže operační zesilovač můžeme předem vyloučit.

Jako zdroj chyb tedy zbývá samotný tenzometr a AD převodník. Ovšem pouze za předpokladu, že za chybu měření opravdu může teplota. Tuhle část chci ještě prozkoumat (provedu měření znovu, tentokrát si ale budu zaznamenávat i teplotu okolí).

Závěr

Nerad bych cokoliv zakřikl, ale zdá se že se konečně s projektem někam posouvám. Rádiové spojení je již dostatečně spolehlivé a firmware v mikrokontroléru jsem už dostatečně odladil. Analogová část se zdá vyhovující potřebám měření a výdrž elektroniky na 2 tužkové baterie je momentálně zhruba 10 dnů (pro frekvenci odesílání naměřených výsledku 5 minut). Navíc jsem výdrž baterií zkoušel v době, kdy se venkovní teploty pohybovaly kolem nuly. Nízké teploty snižují kapacitu alkalických baterií, vhodnější by bylo použít olověný akumulátor.

Velká neznámá je zatím tenzometr. Z prvních experimentů se zdá, že třetí tenzometr bude vyhovující, ale pro definitivní výsledek to bude chtít další experimenty (hlavně výstup tenzometru v závislosti na teplotě).

No a nakonec, pokud konečně vyřeším i tenzometr a elektroniku úspěšně nainstaluji k úlu, čeká mě ještě další kus práce – naměřené výsledky uložit, zpracovat a prezentovat.