Digitální váhová váha s využitím snímače a Arduina

Digitální váhová váha s využitím snímače a Arduina

V tomto příspěvku se budeme učit o siloměru založeném na tenzometru. Budeme zkoumat, co je to Strain Gauge, co je Load Cell, teplotní účinek na tenzometr, teplotní kompenzace pomocí Wheatstoneova můstku a Load Cell zesilovače HX711, a nakonec se naučíme, jak postavit vážicí váhu založenou na Arduinu implementací snímače zatížení jako snímač hmotnosti.

Tento příspěvek se zabývá měřením hmotnosti a měřicími metodami a jejich implementací v obvodu vážicí váhy založeném na Arduinu.



Všichni rádi vidíme svou váhu bez ohledu na náš věk, malé dítě může rád vidět svůj přírůstek hmotnosti a dospělí mohou rádi vidět svůj úbytek hmotnosti. Hmotnost je zásadním konceptem od starověku, kdy pomáhala při obchodování se zbožím, vývoji vědeckých zařízení a komerčních produktů.



V moderní době měříme pro laboratorní účely váhy v kilogramech, miligramech nebo dokonce mikrogramech. Jeden gram je po celém světě stejný, všechna zařízení pro měření hmotnosti musí měřit stejně. Hromadná výroba pilulky s nepatrným rozdílem několika miligramů dávkování stačí k tomu, aby se z pilulky na záchranu života stala sebevražedná pilulka.

Co je to váha?

Hmotnost je síla vyvíjená na rovinu. Množství vynaložené síly je přímo úměrné hmotnosti objektu, což znamená, že čím vyšší je hmotnost objektu, tím vyšší je vyvíjená síla.



Hmotnost je množství fyzické hmoty přítomné v objektu.

Hmotnost závisí na jednom dalším faktoru: gravitaci.

Gravitace je po celé planetě konstantní (Existují malé odchylky v gravitaci kvůli nerovnoměrnému sférickému tvaru Země, ale je velmi malá). Hmotnost 1 kg na Zemi bude vážit 160 gramů na Měsíci se stejnou hmotností, protože Měsíc má mnohem slabší gravitační tah.



Nyní víte, co je váha a jaké jsou faktory, které ztěžují předmět.

Co je tenzometr:

Tenzometr je snímač nebo snímač, který měří deformaci (deformaci) na předmětu. To vynalezli elektrotechnik Edward E. Simmons a strojní inženýr Arthur Claude Ruge.

Ilustrace tenzometru:

Senzor tenzometru

Tenzometr je flexibilní, jedná se o tenký kovový fóliový vzor vložený mezi dva tenké plastové listy a musí být připevněn k povrchu pomocí vhodného lepidla nebo jakéhokoli lepicího materiálu.

Když na povrch aplikujeme váhu nebo sílu, deformuje se a deformuje se také tenzometr. Deformace tenzometru způsobí změnu elektrického odporu kovové fólie.

Nyní je změna odporu tenzometru přímo úměrná hmotnosti nebo aplikované síle na povrch.

V reálném životě je změna odporu tenzometru detekovatelná velmi nevýznamně. K detekci nepatrných změn odporu používáme Wheatstoneův můstek.

Podívejme se ve zkratce na Wheatstoneův most.

Pochopení Wheatstoneova mostu:

Most z pšeničného kamene je obvod, který lze použít ke stanovení neznámého odporu. Wheatstoneův most vymyslel Samuel Hunter Christie, později byl Wheatstoneův most vylepšen a šířen sirem Charlesem

Wheatstone.

Ilustrace obvodu Wheatstoneova mostu:

Obvod Wheatstoneova mostu

Naše moderní digitální multimetry umí číst hodnotu odporu v rozmezí od mega ohmů, kilo ohmů a ohmů.

Pomocí můstku z pšeničného kamene můžeme měřit odpor v rozsahu milli ohmů.

Most z pšeničného kamene se skládá ze 4 rezistorů, ze čtyř jsou 3 známé rezistence a jeden neznámý rezistence.

Rozdíl potenciálů (napětí) se aplikuje na body „A“ a „C“ a z bodů „B“ a „D“ se připojí voltmetr.

Pokud jsou všechny odpory stejné, v bodech „B“ a „D“ neprotéká žádný proud a voltmetr bude číst nulu. Tomu se říká vyvážený můstek.

Pokud se odpor rezistoru liší od ostatních tří rezistorů, bude mezi body „B“ a „D“ proudit napětí a voltmetr přečte nějakou hodnotu úměrnou neznámému odporu. Tomu se říká nevyvážený most.

Zde je neznámým odporem tenzometr, který se při změně odporu projeví na voltmetru.

Nyní jsme převedli deformaci nebo váhu nebo sílu na napěťový signál. Toto napětí je třeba zesílit, aby bylo možné získat několik užitečných odečtů, které se přivedou do mikrokontroléru, aby se získaly odečty v gramech.

Nyní pojďme diskutovat o tom, jak teplota ovlivňuje výkon tenzometru.

Teplotní vlivy na tenzometr:

Tenzometr je citlivý na teplotu a může pokazit skutečné hodnoty hmotnosti / síly. Při změně okolní teploty je kovová fólie vystavena kovové expanzi, která přímo ovlivňuje odpor.

Můžeme anulovat teplotní efekt pomocí Wheatstoneova můstku. Podívejme se, jak můžeme kompenzovat teplotu pomocí Wheatstoneova můstku.

Teplotní kompenzace:

Můžeme snadno neutralizovat teplotní efekt nahrazením všech odporů tenzometrem. Nyní bude veškerý odpor tenzometru ovlivněn teplotou stejně a nežádoucí hluk bude odstraněn charakterem Wheatstoneova mostu.

Co je siloměr?

Siloměr je hliníkový profil s tenzometrem připojeným na 4 strany v konfiguraci Wheatstoneova mostu.

Ilustrace siloměru:

Načíst mobilní zařízení

Tento typ snímače je tuhý a běžně se používá v průmyslových odvětvích. K dispozici jsou 4 šroubové úchyty, jedna strana je přišroubována ke stacionární ploše a druhý konec je přišroubován k držáku (řekněme koš), který drží měřený objekt.

Má maximální váhu uvedenou v datovém listu nebo na jeho těle, překročení specifikace by mohlo poškodit siloměr.

Celé můstkové články se skládají ze 4 svorek, jmenovitě E +, E-, což jsou budicí vodiče, kterými je napájeno napájecí napětí. Další dva vodiče jsou S + a S-, což jsou signální vodiče, ze kterých se měří napětí.

Nyní jsou tato napětí v rozsahu milivoltů, která nejsou dostatečně silná na to, aby mikrokontrolér mohl číst a zpracovávat. Potřebujeme zesílení a drobné změny by měly být viditelné pro mikrokontrolér. K tomu jsou vyhrazené moduly zvané zesilovače zátěžových buněk, pojďme si tedy udělat přehled.

Zesilovač siloměru HX711:

Ilustrace modulu zesilovače snímače HX711:

Zesilovač siloměru HX711

Zesilovač snímače je založen na IC HX711, což je 24bitový analogově-digitální převodník speciálně navržený pro měření hmotnosti. Má různé volitelné zisky 32, 64 a 128 a pracuje na 2,6 až 5,5 V.
Tato vylamovací deska pomáhá detekovat malé odchylky na siloměru. Tento modul vyžaduje pro práci knihovnu HX711.h

Arduino nebo jiné mikrokontroléry.

Snímač bude připojen k modulu HX711 a modul bude propojen s Arduino. Tímto způsobem je třeba vyvinout obvod pro měření hmotnosti.

Na závěr nyní víte, co je tenzometr, co je Wheatstoneův most, teplotní účinky na tenzometr, teplotní kompenzace a co je zesilovač siloměrů.

Z výše uvedené diskuse jsme komplexně porozuměli teoretické části konstrukce váhy, nyní se podívejme, jak může být buňka Loas použita k výrobě pratického váhy pomocí Arduina

Návrh zařízení pro digitální vážení pomocí Arduina

V následujících diskusích se naučíme, jak postavit digitální váhu pomocí Arduina, která dokáže s přiměřenou přesností měřit váhy od několika gramů do 40 kg (v závislosti na specifikacích vašeho siloměru). Budeme se učit o klasifikaci zatěžovacích buněk s přesným stupněm a budeme kalibrovat navrhovaný obvod a finalizovat váhovou stupnici.

Poznámka: Tento obvod nemusí být v souladu se standardy požadovanými pro komerční implementaci.

Váhové váhy se používají v různých odrůdách obchodů a výzkumů od miligramů po několik tun. Maximální váha navrhovaného váhového měřítka závisí na specifikaci snímače hmotnosti. K dispozici jsou rozmezí od 500 gramů, 1 kg, 5 kg, 10 kg, 20 kg a 40 kg atd.

Existují různé stupně siloměru, které nabízejí různý rozsah přesnosti a měli byste zvolit ten vhodný pro váš projekt.

Klasifikace třídy přesnosti snímače zatížení:

Různé třídy přesnosti jsou definovány pro různé druhy aplikací. Níže uvedená klasifikace je od nejnižší přesnosti po nejvyšší rozsah přesnosti.

Snímače zatížení s nižší přesností (ale přiměřeně přesné) jsou klasifikovány jako D1, C1 a C2. To pro tento projekt stačí. Tyto siloměry se používají k měření hmotnosti písku, cementu nebo vody.

Zátěžový článek třídy C3 se používá k zajištění kvality, jako je kontrola hmotnosti kuličkových ložisek, dílů konstrukcí strojů atd.

C4, C5, C6 jsou nejlepší ve své třídě přesnosti, tyto stupně siloměrů se používají k měření v gramech až mikrogramech. Tyto třídní třídy se používají v obchodních váhách, monitorování výroby ve velkém, balení potravin a laboratorní použití atd.

Nyní se ponoříme do technických detailů projektu.

Kruhový diagram:

Připojte zátěžovou buňku HX711 k Arduinu a zátěžovou buňku.

Připojte zátěžovou buňku HX711 k Arduinu a zátěžovou buňku.

Projekt se skládá z desky zesilovače Arduino, Load cell a HX711 a počítače. Výstup lze sledovat na sériovém monitoru Arduino IDE.

Mozek projektu je jako vždy arduino, můžete použít jakýkoli model desky Arduino. HX711 je 24bitový ADC, který dokáže najít nejmenší flex díky hmotnosti na siloměru. Může pracovat od 2,7 V do 5 V. Napájení zajišťuje deska Arduino.

Snímač má obecně čtyři vodiče, což je výstup z tenzometru nakonfigurovaného pomocí Wheatstoneova můstku.

Červený vodič je E +, černý vodič je E-, zelený vodič je A- a bílý vodič je A +. Některé moduly HX711 specifikují název svorek snímače zatížení a některé moduly HX711 specifikují barvy vodičů, takový model je znázorněn na schématu zapojení.

Pin DATA HX711 je připojen k pinu č. 3 Arduina a hodinový pin HX711 je připojen k pinu č. 2 Arduina.

Jak namontovat siloměr:

jak nainstalovat loadcell s Arduino

Siloměr má čtyři otvory pro šrouby, dva na obou stranách. Kterákoli strana musí být pro maximální přesnost nehybná, může být navršena na dřevo s přiměřenou hmotností.

K držení měřicího závaží lze použít tenké dřevo nebo tenkou desku, jak je znázorněno výše.

Když tedy umístíte závaží, zatěžovací článek se ohne, stejně tak tenzometr a změníte jeho odpor, který se měří modulem HX711 a přivádí se do Arduina.

Po dokončení instalace hardwaru nahrajeme kód a provedeme kalibraci.

Kalibrace obvodu:

Existují dva programy, jeden je kalibrační program (zjištění kalibračního faktoru). Dalším kódem je program pro měření hmotnosti, kalibrační faktor nalezený v kódu kalibračního programu je třeba zadat do programu pro měření hmotnosti.

Kalibrační faktor určuje přesnost měření hmotnosti.

Stáhněte si knihovnu HX711 zde: github.com/bogde/HX711

Kalibrační programový kód:

//-------------------- --------------------//
#include
const int out = 3
const int clck = 2
HX711 scale(out, clck)
float CalibrationFactor = -96550
char var
void setup()
{
Serial.begin(9600)
Serial.println('------------- Weight Scale Calibration --------------')
Serial.println('Press Q,W,E,R or q,w,e,r to increase calibration factor by 10,100,1000,10000 respectively')
Serial.println('Press A,S,D,F or a,s,d,f to decrease calibration factor by 10,100,1000,10000 respectively')
Serial.println('Press 'T' or 't' for tare')
scale.set_scale()
scale.tare()
long zero_factor = scale.read_average()
Serial.print('Zero factor: ')
Serial.println(zero_factor)
}
void loop()
{
scale.set_scale(CalibrationFactor)
Serial.print('Reading: ')
Serial.print(scale.get_units(), 3)
Serial.println(' Kilogram')
Serial.print('Calibration Factor is: ')
Serial.println(CalibrationFactor)
Serial.println('--------------------------------------------')
if (Serial.available())
{
var = Serial.read()
if (var == 'q')
{
CalibrationFactor = CalibrationFactor + 10
}
else if (var == 'a')
{
CalibrationFactor = CalibrationFactor - 10
}
else if (var == 'w')
{
CalibrationFactor = CalibrationFactor + 100
}
else if (var == 's')
{
CalibrationFactor = CalibrationFactor - 100
}
else if (var == 'e')
{
CalibrationFactor = CalibrationFactor + 1000
}
else if (var == 'd')
{
CalibrationFactor = CalibrationFactor - 1000
}
else if (var == 'r')
{
CalibrationFactor = CalibrationFactor + 10000
}
else if (var == 'f')
{
CalibrationFactor = CalibrationFactor - 10000
}
else if (var == 'Q')
{
CalibrationFactor = CalibrationFactor + 10
}
else if (var == 'A')
{
CalibrationFactor = CalibrationFactor - 10
}
else if (var == 'W')
{
CalibrationFactor = CalibrationFactor + 100
}
else if (var == 'S')
{
CalibrationFactor = CalibrationFactor - 100
}
else if (var == 'E')
{
CalibrationFactor = CalibrationFactor + 1000
}
else if (var == 'D')
{
CalibrationFactor = CalibrationFactor - 1000
}
else if (var == 'R')
{
CalibrationFactor = CalibrationFactor + 10000
}
else if (var == 'F')
{
CalibrationFactor = CalibrationFactor - 10000
}
else if (var == 't')
{
scale.tare()
}
else if (var == 'T')
{
scale.tare()
}
}
}
//-------------------- --------------------//

Jak kalibrovat:

  • Po dokončení nastavení hardwaru nahrajte výše uvedený kód.
  • Odstraňte tenkou desku nebo dřevo, které slouží k uchycení závaží, včetně dvou šroubů (druhá strana snímače hmotnosti by měla být připevněna k základně)
  • Otevřete sériový monitor.
  • Umístěte známou hmotnost přímo na siloměr, 100 gramů (řekněme).
  • lis Q, W, E, R zvýšit kalibrační faktor o 10 100 100 000 10000.
  • lis A, S, D, F snížit kalibrační faktor o 10 100 100 000 10000.
  • Po každém zvýšení nebo snížení kalibračního faktoru stiskněte „Enter“.
  • Zvyšujte nebo snižujte kalibrační faktor, dokud se neobjeví správná hmotnost známého materiálu hmotnosti.
  • Funkce Tára je nastavit váhovou stupnici na nulu, což je užitečné, pokud chcete měřit hmotnost vody (řekněme) bez hmotnosti mísy. Nejprve položte misku, stiskněte taru a zalijte vodou.
  • Poznamenejte si kalibrační faktor a zapište si jej poté, co se objeví známá hmotnost.

Nyní může měřit neznámé váhy.

Kód programu pro měření hmotnosti:

//---------------- ----------------//
#include
const int out = 3
const int clck = 2
HX711 scale(out, clck)
float CalibrationFactor = -12000 // Replace -12000 the calibration factor.
void setup()
{
Serial.begin(9600)
Serial.println('Press 'T' or 't' to tare')
scale.set_scale(CalibrationFactor)
scale.tare()
}
void loop()
{
Serial.print('Weight: ')
Serial.print(scale.get_units(), 3)
Serial.println(' Kilogram')
if (Serial.available())
{
char var = Serial.read()
if (var == 't')
{
scale.tare()
}
if (var == 'T')
{
scale.tare()
}
}
}
//---------------- ----------------//

float CalibrationFactor = -12000

Nahraďte -12000 kalibračním faktorem, který jste našli. Může to být záporné číslo nebo kladné číslo.

Nahrajte výše uvedený kód s úplným nastavením hardwaru a váš váhový válec je připraven.

Hmotnost váhy pomocí LCD displeje

Výše uvedený článek vysvětluje systém vážení založený na Arduinu pomocí vašeho PC, v následující části se pokusíme postavit praktickou verzi váhy váhy přidáním LCD displeje 16 x 2, abychom při měření nebyli závislí na PC závaží. V tomto příspěvku jsou navrženy dvě verze, jedna s LCD displejem „I2C“ 16 x 2 a jedna bez displeje LCD „I2C“ 16 x 2.

Zde jsou dány dvě možnosti, aby si čtenáři mohli vybrat design podle svých výhod. Hlavní rozdíl mezi těmito dvěma je drátové připojení s modulem adaptéru I2C, pro fungování LCD displeje jsou zapotřebí pouze 4 vodiče (Vcc, GND, SCL a SDA), zatímco bez adaptéru I2C potřebujete několik vodičů pro připojení mezi Arduino a LCD displejem.

Obě funkce jsou však úplně stejné, někteří preferují I2C před konvenčními a někteří naopak, takže zde jsou oba návrhy.

Podívejme se na konvenční design LCD:

Kruhový diagram:

arduino, 16 x 2 LCD displej a 10K potenciometr pro nastavení kontrastu LCD displeje

Ve výše uvedeném schématu máme arduino, 16 x 2 LCD displej a 10K potenciometr pro nastavení kontrastu LCD displeje.

3,3 V lze napájet z Arduina na LCD displej pro podsvícení. Tlačítko slouží k vynulování odečtu hmotnosti, tato funkce bude podrobně vysvětlena na konci.

Jedná se pouze o spojení mezi LCD a Arduino, připojení mezi snímačem a zesilovačem snímače k ​​Arduinu je uvedeno v předchozí části.

Kód pro váhový váhový stroj LCD:

// -------- Program developed by R.GIRISH -------//
#include
#include
const int rs = 10
const int en = 9
const int d4 = 8
const int d5 = 7
const int d6 = 6
const int d7 = 5
LiquidCrystal lcd(rs, en, d4, d5, d6, d7)
const int out = 3
const int clck = 2
const int Tare = 4
HX711 scale(out, clck)
float CalibrationFactor = -12000 // Replace -12000 the calibration factor.
void setup()
{
lcd.begin(16, 2)
pinMode(Tare, INPUT)
digitalWrite(Tare, HIGH)
lcd.setCursor(0, 0)
lcd.print(' Weight Scale')
lcd.setCursor(0, 1)
lcd.print(' Machine')
delay(2000)
scale.set_scale(CalibrationFactor)
scale.tare()
}
void loop()
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Weight:')
lcd.print(scale.get_units(), 3)
lcd.print(' Kg')
delay(200)
if (digitalRead(Tare) == LOW)
{
scale.tare()
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Tare ......')
lcd.setCursor(0, 1)
lcd.print('Setting to 0 Kg.')
delay(1000)
}
}
// -------- Program developed by R.GIRISH -------//

Nyní se podívejme, jak používat tento váhový stroj s LCD displejem založeným na adaptéru I2C.

Schéma zapojení Arduino a LCD displej s adaptérem I2C:

Arduino a LCD displej s adaptérem I2C

Zde máme na zadní straně pouze Arduino a LCD displej s adaptérem I2C. Nyní jsou drátová spojení zjednodušená a přímá.

Ilustrace modulu I2C:

Modul I2C

Tento modul lze připájet přímo na zadní stranu běžného LCD displeje 16 x 2 nebo dokonce 20 x 4 a postupovat podle schematického schématu.

A znovu si prosím přečtěte předchozí část pro připojení zátěžového článku, zesilovače zátěžového článku a Arduina.

Stáhněte si následující knihovnu pro I2C:

github.com/marcoschwartz/LiquidCrystal_I2C

github.com/PaulStoffregen/Wire

Kód pro váhovou stupnici založenou na I2C:

// -------- Program developed by R.GIRISH -------//
#include
#include
#include
const int out = 3
const int clck = 2
const int Tare = 4
HX711 scale(out, clck)
float CalibrationFactor = -12000 // Replace -12000 the calibration factor.
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
pinMode(Tare, INPUT)
digitalWrite(Tare, HIGH)
lcd.setCursor(0,0)
lcd.print(' Weight Scale')
lcd.setCursor(0,1)
lcd.print(' Machine')
delay(2000)
scale.set_scale(CalibrationFactor)
scale.tare()
}
void loop()
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Weight:')
lcd.print(scale.get_units(), 3)
lcd.print(' Kg')
delay(200)
if (digitalRead(Tare) == LOW)
{
scale.tare()
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Tare ......')
lcd.setCursor(0,1)
lcd.print('Setting to 0 Kg.')
delay(1000)
}
}
// -------- Program developed by R.GIRISH -------//

POZNÁMKA:

Před nahráním některého z kódů do Arduina byste měli do kódu zadat kalibrační faktor.

float CalibrationFactor = -12000

Získání kalibračního faktoru je vysvětleno v jedné předchozí části výše.

Funkce táry:

Funkce tárování na váhové stupnici znamená vynulování naměřených hodnot. Například pokud máme koš, do kterého je zboží naloženo, pak čistá hmotnost bude váha koše + hmotnost zboží.

Pokud před naložením zboží stiskneme tlačítko táry s košem na buňce zatížení, bude hmotnost koše zanedbána a můžeme měřit hmotnost samotného zboží.

Máte-li jakékoli dotazy týkající se tohoto praktického obvodu vážicí váhy LCD založeného na Arduinu, vyjádřete v sekci komentářů rychlou odpověď.




Předchozí: Polovodičový stykačový obvod pro motorová čerpadla Další: Jak vyrobit sestupné transformátory