Programování | Pojďme programovat elektroniku | Arduino

Pojďme programovat elektroniku: Jak oživit starou osobní váhu a třeba ji připojit k Wi-Fi

  • Máte starou digitální váhu?
  • Ještě ji nevyhazujte
  • S drobným zesilovačem ji budete moci třeba připojit k Wi-Fi

Mám doma starou digitální osobní váhu. Je naprosto hloupá, nemá Bluetooth, Wi-Fi a ráno v koupelně mě nepozdraví. Pro každého bastlíře a čtenáře našeho seriálu Pojďme programovat elektroniku nicméně nemůže být nic snazšího než ji všemi těmito schopnostmi dodatečně vyzbrojit.

Jako řídící jednotka by mohla posloužit malá prototypovací destička Wemos D1 Mini s Wi-Fi čipem ESP8266, jako displej levný 0,96“ OLED, e-ink nebo třeba klasický barevný LCD TFT displej a jako zdroj napájení malý Li-ion článek. Čelní stranu pak může překrýt samolepící fólie jen s otvorem pro nový displej odlišných rozměrů než ten původní.

36a26e29-fd7e-4a12-b9db-1013beba1dde419712d2-e017-4aa5-b6ad-2dfc11429d69a4001da2-fea1-40a8-aa32-d85952ac9c6b
b5fdb670-02a9-4aa7-adaf-fb7c7d6ede3dba857427-719b-48b9-8fdf-2e6148b2909a79340391-f097-4fd9-95af-3b8fa90a324e
Stará váha nemusí skončit v koši. Stačí ji rozmontovat a vyměnit displej a mikrokontroler.

Se všemi těmito součástkami jsme si už během posledního roku pohráli, takže stačí starou váhu vykuchat, zbavit původní elektroniky, ke které začátečník asi jen těžko najde prototypovací dokumentaci, a volné místo vybavit vlastní.

Váhové čídlo

Jenže abychom mohli něco změřit, potřebujeme to nejdůležitější: tenzometrické odporové snímače, tedy to, co skutečně změří vaši nadváhu. Takové čidlo se od těch, se kterými jsme zatím přišli do styku, docela liší. Na první pohled je to vlastně jen kus kovu, ze kterého trčí několik drátků, a uvnitř se opravdu žádná elektronika nenachází.

a50e48b5-012c-4fd4-9553-e302278c3529fcdba8fe-354b-4e0a-8a7e-73c87b31f06cdf71bef8-8ce6-451a-8fdf-de79285794df674ca148-2206-4b48-be93-1598623eab65
Dva typy váhových čidel. To první pracuje samostatně, to druhé s dalšími třemi pak ve speciálním zapojení uvnitř vaší osobní váhy

Princip odporového tenzometrického snímače je totiž poměrně jednoduchý. Když se začne silou deformovat, v jeho obvodu se slabě změní elektrický odpor. Poté stačí tuto změnu přečíst a analogicky přepočítat sílu deformace na hmotnost tělesa, které svou vahou působí na snímač.

Samozřejmě by bylo skvělé, kdybychom mohli tuto změnu přečíst rovnou z analogového vstupu prototypovací desky, do které bychom připojili váhové čidlo, to je však zpravidla nemožné. Jedná se totiž o tak drobnou změnu napětí, že by ji obvyklý 10-12bitový A/D převodník neměl šanci rozlišit od běžného šumu.

Zesilovač HX711

A proto budeme potřebovat ještě jednu klíčovou součástku. Velmi citlivý zesilovač, přičemž v komunitě bastlířů se velké popularitě těší specializovaný 24bitový HX711, který je přímo určený ke čtení dat z váhových čidel. Na čínských e-shopech a eBayi se cena jeho prototypovacích destiček pohybuje v řádu desetikorun.

45a4d900-24ff-4e86-8747-62db2dc51113d50b1447-8083-4cab-af6a-2766f7367ebc50ab9a0c-e0ff-4165-98a7-effaacabe72e
Na e-shopech seženete HX711 v prototypovacím provedení zpravidla v těchto dvou podobách. Fialová deska má piny pro váhová čídla označená přímo barvami, které do těchto pinů patří (RED, BLACK, WHITE, GREEN). Piny na pravé straně pak slouží ke spojení s mikrokontrolerem.

Běžná digitální osobní váha se od té kuchyňské liší v jednom podstatném detailu. Zpravidla není vybavená jedním váhovým senzorem ale hned čtyřmi, které jsou schované pod jednotlivými nožkami. Každé z těchto čidel má zpravidla červený, bílý a černý vodič. Zatímco pomocí bílého (WHT) a černého (BLK) vodiče jsou čidla propojená navzájem podle schématu níže, červené (RED) vodiče lze už přímo napojit do zesilovače HX711.

abfa4c54-55ee-4a08-9f9b-a42c4a7cb9c5ba084316-5561-45a3-bfd5-2665eae04cc427508c73-79fd-42a1-9175-9214a4147b04
Schéma a zapojení čtyř trojvodičových váhových čidel k zesilovači HX711. SparkFun prodává speciální propojovací destičku Load Sensor Combinator, která to může leckomu usnadnit

Díky zapojení čtyř čidel naráz je obvod mnohem chytřejší. Například pomocí něj můžeme měřit rozložení tělesné hmoty. Většina knihoven pro práci s čipem HX711 zpravidla interpretuje zatížení horní dvojice čidel kladnou hodnotou a zatížení spodní dvojice negativní.

Když bychom se tedy na takové váze postavili na paty a zatížili jen spodní čidla, v Arduinu přečteme záporné hodnoty. No, a kdybychom se převážili na špičky a zatížili horní dvojici čidel, budou to kladné hodnoty.

f2021492-1670-4bbb-b011-71b7372a5e5f
Upravil jsem si kód tak, aby do grafu vykresloval zatížení horního páru čidel (kladné hodnoty), anebo naopak spodního páru (záporné hodnoty). V tomto případě ve skutečnosti přesouvám kbelík s vodou na desce s čidly k přednímu a spodnímu okraji.

Přeloženo: S trochou matematických hrátek rozlišíme, kdo má příliš velké pozadí (větší zatížení spodních čidel) a kdo naopak pivní pupek (větší zatížení horních čidel).

Měříme hmotnost kbelíku s vodou

Jak už jsem napsal výše, váhová čidla by měla mít kabeláž označenou správnou barvou, ať víme, který vodič má jakou roli. V ideálním případě bychom tedy mohli použít čidla, které už ve váze jsou. Ty však ne vždy mají korektně označené vodiče, takže pokud nebudete mít dostatek trpělivosti na zkoušení, stejné snímače koupíte i na internetu. Bohužel však ani čínským obchodníkům nelze vždy věřit, pokud tedy bude knihovna vracet nesmyslné údaje, bude to nejspíše buď chybným zapojením čidel, anebo…

136cf7df-90e4-4158-8106-ef9498a64611a1751f11-6bdc-4d2f-b9fb-795d85f52606
Pomocí kalibračního kódu v závěru článku nastavuji hodnotu, dokud nezískám správnou hmotnost referenčního tělesa

Anebo ohromnou citlivostí na jakékoliv změny. Je třeba si uvědomit, že když do středu takové váhy položíte šestilitrový kbelík s vodou, elektrické parametry v obvodu se změní jen velmi slabě, takže i když je zesilovač znásobí a převede na digitální signál, data budou citlivá na jakoukoliv změnu.

Knihovna výše má proto metodu vaha.set_scale(číslo), kterou je třeba zavolat vždy na začátku programu. To číslo uvnitř je kalibrační parametr, který musíte nastavit s nějakou referenční zátěží, třeba 5kg činkou nebo třeba zrovna tím kbelíkem plným vody.

a52cffd7-1eef-4771-860d-01a835a1f74671bdfe39-8c1c-41d5-8af6-7a836757a894154cbffc-c9a2-4614-b0b8-13bb5124aee5
Určování hmotnosti má svoji dynamiku. Když jsem čidla zatížil, chvíli trvá, než se měření ustálí. Měřící knihovna na to myslí a nabízí možnost provést předem stanovený počet měření, ze kterých spočítá průměr.

Jakmile svoji zbastlenou váhou změříte správnou hmotnost, stačí tento koeficient používat tak dlouho, dokud se váha konstrukčně jakkoliv nezmění. A opravdu, stačí čímkoliv pohnout, změnit vzájemné rozložení čidel a měření bude mít opět velkou odchylku, dokud tento parametr znovu nenastavíte. Ke kalibraci pomůže třeba kód, který pro bastlíře připravil web SparkFun.

Měření hmotnosti je v tomto případě skutečná věda a citlivá hodinářská práce. I proto jako korpus váhy ideálně poslouží nějaká stará vyřazená, která má přesně vytvarované otvory pro váhová čidla.

A to je vlastně celé. Jakmile dosáhnete použitelných výsledků, už zbývá jen údaj zobrazit na displeji a třeba i poslat k vám na Facebook, aby všichni věděli, že to s tou pizzou opravdu musíte omezit. To vše jsme si už v našem seriálu vyzkoušeli. Na závěr stačí vše složit dohromady do konstrukce původní váhy a z ošklivého bastlu udělat zase novou a hezkou chytrou elektroniku.

Na úplný konec nesmím zapomenout na tradiční ukázku kódu, která v tomto případě bude velmi stručná, vše totiž za nás udělá knihovna.

Kód pro ruční kalibraci váhy:

#include "HX711.h"

// Komunikacni piny zesilovace s Arduinem
#define DAT  3 // DAT nebo DT
#define CLK  2 // CLK nebo SCK

// Objekt vahy
HX711 vaha(DAT, CLK);

// Vychozi hodnota kalibrace
int kalibrace = -1000;

void setup() {
  Serial.begin(9600);
  // Vychozi nastaveni bez kalibrace
  vaha.set_scale();
  // Reset vahy
  vaha.tare();
}

void loop() {
  // Nastaveni vychozi kalibrace
  vaha.set_scale(kalibrace);
  // Vypsani prumerne hmotnosti z peti rychlych mereni po sobe
  Serial.print(vaha.get_units(5), 1);
  Serial.print(" kg");
  // Vypsani aktualni kalibrace
  Serial.print(" kalibrace: ");
  Serial.println(kalibrace);
  Serial.println();
  // Pokud s. linkou poslu znak +, kalibrace se zvysi o 50
  // Pokud poslu znak -, snizi se o 50
  // Az bude vaha merit pouzitelne, ulozim si kalibraci
  if (Serial.available()) {
    char c = Serial.read();
    if (c == '+') kalibrace += 50;
    else if (c == '-') kalibrace -= 50;
  }
}

Kód pro změření váhy s kalibrací získanou v předchozím kódu:

#include "HX711.h"

// Komunikacni piny zesilovace s Arduinem
#define DAT  3 // DAT nebo DT
#define CLK  2 // CLK nebo SCK

// Objekt vahy
HX711 vaha(DAT, CLK);

void setup() {
  Serial.begin(9600);
  // Nastaveni kalibrace vahy pomoci hodnoty z predchozi ukazky
  vaha.set_scale(2200);
  // Reset vahy
  vaha.tare();
}

void loop() {
  /* Desetkrat zmerim vahu a vypisu jeji prumer
     Cim vice mereni, tim se spise zbavime pripadnych odchylek
     Zesilovac je totiz opravdu citlivý na jakekoliv ruseni
  */
  Serial.print(vaha.get_units(10), 1);
  Serial.println(" kg");
}
Diskuze (20) Další článek: Apple chystá na příští rok nový iPad. Cena se poprvé dostane pod devět tisíc

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,