- Vážicí stroj Arduino pracuje
- Komponenty požadované pro vážící stroj založený na Arduinu
- Vážicí stroj na bázi Arduino - obvodové schéma
- Výroba obvodu na tečkované desce
- Budování skříně pro vážící stroj založený na Arduinu
- Vážící stroj Arduino - kód
Digitální váhy jsou dalším zázrakem moderního inženýrství a designu. Ano, mluvíme o stupnici váhy, kterou často vidíme ve většině obchodů s potravinami a na dalších místech, ale přemýšleli jste někdy o tom, jak váha funguje? Abychom na tuto otázku odpověděli, v tomto projektu se podíváme na siloměr a jeho fungování. Nakonec postavíme přenosnou stupnici zatížení založenou na Arduinu se snímačem hmotnosti HX711, který může měřit hmotnosti až 10 kg.
Tato váha je ideální pro místní obchody, kde balí zboží ve velkém množství. Stejně jako komerční produkty bude mít naše váhová stupnice tlačítko nulování, které vynuluje váhu. Má také možnost nastavit hmotnost pro měření, když měřicí hmotnost dosáhne nastavené hmotnosti, bzučák rychle pípne a zastaví se, když se nastavená hmotnost rovná měřené hmotnosti. Tímto způsobem jej může uživatel zabalit pouhým poslechem zvuku a nemusel by se dívat na displej. Jelikož se jedná o velmi jednoduchý projekt, budeme jej stavět velmi snadno pomocí komponent jako Arduino a tenzometrický snímač. Takže bez dalšího zpoždění pojďme přímo do toho.
V předchozím článku jsme vytvořili projekty jako Raspberry Pi Based Weight Sensor a IoT Smart Container with Email Alert and Web Monitoring using the popular HX711 load cell amplifier module. Zkontrolujte tedy, zda je to váš požadavek.
Vážicí stroj Arduino pracuje
Hlavní složkou tohoto projektu je Load buňka a HX711 siloměr zesilovač modul. Jak vidíte, jedna strana je označena deseti kilogramy. Také si můžete všimnout jakéhosi bílého ochranného lepidla nad snímačem zatížení a vycházejí čtyři různé barvy vodičů, které odhalí tajemství pod bílým ochranným lepidlem a funkci těchto čtyřbarevných vodičů dále v článku.
Siloměr je snímač, který transformuje sílu nebo tlak na elektrický výstup. Má dvě strany, řekněme pravou a levou stranu, a je vyrobena z hliníkových bloků. Jak můžete vidět, uprostřed materiálu je ztenčeno vložením velké díry. To je důvod, proč se jedná o bod, který trpí deformací, když je na straně montáže umístěno zatížení. Nyní si představte, že buňka na pravé straně je namontována na základnu a na levé straně je místo, kde je umístěno zatížení, tato konfigurace deformuje snímač zatížení tenzometru kvůli obřímu otvoru uprostřed.
Když je na zátěžovou stranu siloměru položeno břemeno, horní část bude trpět napětím a spodní část bude trpět kompresí. Proto se hliníková tyč na levé straně ohýbá dolů. Pokud změříme tuto deformaci, můžeme změřit sílu, která byla aplikována na hliníkový blok, a to je přesně to, co uděláme.
Otázkou nyní zůstává, co je uvnitř bílého ochranného lepidla? Uvnitř tohoto ochranného lepidla najdeme velmi tenkou elastickou součástku, která se nazývá tenzometr. Tenzometr je součást, která se používá k měření deformace. Podíváme-li se podrobněji na tuto součást, můžeme vidět dvě spojovací podložky a pak máme vodivý drátový vzor s opakujícími se průhyby. Tento vodivý vodič má definovaný odpor. Když jej ohneme, hodnota odporu se změní? Jedna strana tenzometru je tedy namontována a upevněna na místě, pokud na druhou stranu hliníkové tyče umístíme závaží, bude to tenzometr nutit k ohnutí, což způsobí změnu odporu. Jak se to vlastně děje? Vodivý vzor tenzometru je vyroben z mědi, tento vodič bude mít určitou plochu a délku, takže tyto dvě jednotky budou dávat odpor drátu. Odpor drátu je proti toku proudu. Nyní je zřejmé, že pokud se plocha tohoto drátu zmenší,mohlo by projít méně elektronů, což znamená nižší proud. Pokud nyní zvětšíme plochu, zvýší se odpor vodiče. Pokud na tento drát působí nějaká síla, tím se oblast roztáhne a zároveň se zmenší, zvyšuje se odpor. Ale tato variace odporu je velmi nízká. Pokud napneme tenzometr, odpor se zvýší a pokud jej stlačíme, odpor se sníží. Abychom změřili sílu, musíme změřit odpor. Přímé měření odporu není vždy praktické, protože změna je velmi malá. Takže místo měření odporu můžeme snadno měřit napětí. V tomto případě tedy musíme převést výstup měřidla z hodnot odporu na hodnoty napětí.Pokud na tento drát působí nějaká síla, tím se oblast roztáhne a zároveň se zmenší, zvyšuje se odpor. Ale tato variace odporu je velmi nízká. Pokud napneme tenzometr, odpor se zvýší a pokud jej stlačíme, odpor se sníží. Abychom změřili sílu, musíme změřit odpor. Přímé měření odporu není vždy praktické, protože změna je velmi malá. Takže místo měření odporu můžeme snadno měřit napětí. V tomto případě tedy musíme převést výstup měřidla z hodnot odporu na hodnoty napětí.Pokud na tento drát působí nějaká síla, tím se oblast roztáhne a zároveň se zmenší, zvyšuje se odpor. Ale tato variace odporu je velmi nízká. Pokud napneme tenzometr, odpor se zvýší a pokud jej stlačíme, odpor se sníží. Abychom změřili sílu, musíme změřit odpor. Přímé měření odporu není vždy praktické, protože změna je velmi malá. Takže místo měření odporu můžeme snadno měřit napětí. V tomto případě tedy musíme převést výstup měřidla z hodnot odporu na hodnoty napětí.odpor se sníží. Abychom změřili sílu, musíme změřit odpor. Přímé měření odporu není vždy praktické, protože změna je velmi malá. Takže místo měření odporu můžeme snadno měřit napětí. V tomto případě tedy musíme převést výstup měřidla z hodnot odporu na hodnoty napětí.odpor se sníží. Abychom změřili sílu, musíme změřit odpor. Přímé měření odporu není vždy praktické, protože změna je velmi malá. Takže místo měření odporu můžeme snadno měřit napětí. V tomto případě tedy musíme převést výstup měřidla z hodnot odporu na hodnoty napětí.
Můžeme to udělat pomocí Wheatstoneova mostu. Umístíme tenzometr do Wheatstoneova mostu, pokud je most vyvážený, napětí ve středním bodě by mělo být nulové (dříve jsme vytvořili projekt, kde jsme popsali, jak funguje Wheatstoneův most, můžete to zkontrolovat, pokud chcete více o tématu). Když tenzometr změní svůj odpor, vyváží můstek a změní se také napětí. Takto tedy Wheatstoneův můstek převádí variace odporu na hodnoty napětí.
Ale tato změna napětí je stále velmi malá, takže abychom ji zvýšili, musíme použít modul HX711. HX711 je 24bitový diferenciální ADC, tímto způsobem bychom mohli měřit velmi malé změny napětí. dá hodnoty od 0 do 2 exponenciálních 24.
Komponenty požadované pro vážící stroj založený na Arduinu
Aby byl tento projekt co nejjednodušší, použili jsme velmi obecné komponenty, které najdete v jakémkoli místním hobby obchodě. Obrázek níže vám poskytne představu o součástech. Dále máme kusovník (BOM) uvedený níže.
- Snímač zatížení (používáme snímač hmotnosti 10 kg)
- Modul zesilovače HX 711
- Arduino Nano
- I2C LCD 16X2 - I2C kompatibilní
- 1k rezistor -2 č
- LED diody -2
- Bzučák
- Společné PCB
- 7.4V baterie (pokud ji chcete přenosnou)
- Regulátor napětí LM7805
Vážicí stroj na bázi Arduino - obvodové schéma
Siloměr má čtyři vodiče, které jsou červené, černé, zelené a bílé. Tato barva se může lišit podle výrobce, takže je lepší se podívat na datový list. Připojte červenou k E + desky HX711, připojte černou k E-, připojte bílou k A + a zelenou k A-, Dout a hodiny desky připojte k D4 a D5. Připojte jeden konec tlačítek k D3, D8, D9 a druhý konec k zemi. Máme I2C LCD, takže připojte SDA k A4 a SCL k A5. Připojte zem LCD, HX711 a Arduino k zemi, také připojte VCC k 5Vpin Arduino. Všechny moduly fungují na 5V, proto jsme přidali regulátor napětí LM7805. Pokud jej nechcete mít přenosný, můžete Arduino napájet přímo pomocí kabelu USB.
Výroba obvodu na tečkované desce
Všechny komponenty jsme pájeli na společný tečkovaný perfboard. Pro pájení Arduina a ADC s deskou plošných spojů jsme použili samičí konektory, také jsme použili vodiče pro připojení všech tlačítek a LED. Po dokončení celého procesu pájení jsme se ujistili, že z LM7805 vychází správné 5V. Nakonec jsme umístili vypínač pro zapnutí / vypnutí obvodu. Jakmile jsme byli všichni hotovi, vypadalo to jako na obrázku níže.
Budování skříně pro vážící stroj založený na Arduinu
Jak vidíte, siloměr má několik šroubových závitů, takže jsme jej mohli namontovat na základní desku. Pro základnu naší stupnice použijeme desku z PVC, nejprve jsme z desky z PVC vyřezali čtverec 20 * 20 cm a čtyři obdélníky 20 * 5. Poté jsme pomocí tvrdého lepidla slepili každý kus a vytvořili malou krabičku.
Nezapomeňte, že jsme neopravili jednu stranu, protože na ni musíme umístit tlačítka, LED diody a LCD. Poté jsme na horní část váhy použili plastovou desku. Než toto nastavení nastavíme jako trvalé, musíme se ujistit, že máme dostatečný prostor od země k siloměru, aby se mohl ohýbat, proto jsme mezi siloměr a základnu umístili šroub a matice, také jsme přidali některé plastové rozpěrky mezi siloměrem a horní částí. Použili jsme kulatý plastový list jako špičku vyvážení.
Poté jsme na přední panel umístili LCD, LED diody a tlačítka a vše propojili dlouhým izolovaným vodičem. Poté, co jsme dokončili proces zapojení, přilepili jsme přední panel s trochou sklonu k hlavní základně, abychom mohli hodnoty na LCD snadno přečíst. nakonec jsme připojili hlavní vypínač na stranu váhy a je to. Takto jsme vyrobili tělo pro naši váhovou stupnici.
Můžete navrhnout podle svých nápadů, ale nezapomeňte umístit snímač jako v obrázku.
Vážící stroj Arduino - kód
Jakmile jsme dokončili proces sestavení pro naše digitální měřítko, můžeme přejít na programovací část. Pro snadné programování použijeme knihovnu HX711, knihovnu EEPROM a knihovnu LiquidCrystal. Knihovnu HX711 si můžete stáhnout z oficiálního úložiště GitHub, nebo přejít na nástroje > zahrnout knihovnu > spravovat knihovnu, poté prohledat knihovnu pomocí klíčového slova HX711, po stažení knihovny ji nainstalovat do Arduino ide.
Nejprve musíme kalibrovat siloměr a uložit tuto hodnotu na EEPROM, k tomu přejděte do souboru> příklady> HX 711_ADC a poté vyberte kalibrační kód. Před nahráním kódu umístěte váhu na stabilní rovnou plochu. Poté nahrajte kód do Arduina a otevřete sériový monitor. Poté změňte přenosovou rychlost na 572600. Nyní monitor vyzve k převzetí hmotnosti, proto musíme stisknout t a zadat.
Nyní musíme na váhu umístit známou váhu, v mém případě, to je 194 gm. Po umístění známé hmotnosti zadejte hmotnost na sériovém monitoru a stiskněte klávesu Enter.
Nyní se vás sériový monitor zeptá, zda chcete uložit hodnotu do EEPROM, nebo ne, takže zadejte Y pro výběr ano. Nyní vidíme hmotnost na sériovém monitoru.
Hlavní kód tohoto projektu, který jsme vyvinuli z ukázkového náčrtu knihovny HX711. Níže si můžete stáhnout kód tohoto projektu.
V sekci kódování jsme nejprve přidali všechny tři knihovny. Knihovna HX711 slouží k odebírání hodnot snímače zatížení. EEPROM je vestavěná knihovna Arduino ide, která se používá k ukládání hodnot v EEPROM a knihovna LiquidCrystal je pro l2C LCD modul.
#zahrnout
Poté jsou definována celá čísla pro různé piny a přiřazené hodnoty. Funkce loadcell HX711_ADC slouží k nastavení Dout a pin hodin.
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; dlouhé t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
V sekci nastavení jsme nejprve spustili sériový monitor, je to jen pro ladění. Poté jsme definovali režimy pinů, všechna tlačítka jsou definována jako vstup. S pomocí funkce Arduino PULL UP nastavíme kolíky na logicky vysokou hodnotu za normálních okolností. K tomu tedy nechceme používat žádné externí rezistory.
pinMode (tpin, INPUT_PULLUP); pinMode (6, VÝSTUP); pinMode (12, VÝSTUP); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Následující řádky kódu slouží k nastavení I2C LCD. Nejprve jsme pomocí funkce LCD.print () zobrazili uvítací text, po dvou sekundách jsme displej vyčistili pomocí lcd.clear () . To znamená, že na začátku se na displeji zobrazí ARDUINO BALANCE jako uvítací text a po dvou sekundách se vymaže a zobrazí měřicí váhy.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print („ARDUINO BALANCE“); lcd.setCursor (0, 1); lcd.print („změřme“); zpoždění (2000); lcd.clear ();
Poté jsme začali číst hodnoty z loadcell pomocí funkce loadCell.begin () , poté jsme načetli EEPROM pro kalibrované hodnoty, uděláme to pomocí funkce EEPROM.get () . To znamená, že jsme již uložili hodnotu pomocí kalibračního náčrtu na adresu EEPROM, tuto hodnotu jsme znovu získali.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, kalibraceValue);
V části smyčky nejprve zkontrolujeme, zda jsou k dispozici nějaká data z buňky zatížení pomocí funkce LoadCell.update (), pokud jsou k dispozici, tato data čteme a ukládáme, proto používáme LoadCell.getData () . Dále musíme zobrazit uloženou hodnotu na LCD. K tomu jsme použili funkci LCD.print () . také vytiskneme nastavenou hmotnost. Nastavená hmotnost se nastavuje pomocí počitadla tlačítka. To bylo vysvětleno v poslední části.
if (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (millis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("set wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print („GM“); lcd.setCursor (0, 1); lcd.print ("hmotnost:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print („GM“);
Dále nastavíme hodnotu táry, k tomu nejprve načteme stav tlačítka táry pomocí funkce digitalRead () , pokud je stav nízký, vytárujeme tuto váhu na nulu. Tárovací funkcí této váhové stupnice je vynulování hodnot. Například pokud máme misku, ve které jsou věci naloženy, pak čistá hmotnost bude váha mísy + hmotnost věcí. Pokud před načtením věcí stiskneme tlačítko táry s miskou na siloměru, váha koše bude negována a můžeme měřit váhu věcí samostatně.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Nyní musíme nastavit podmínky pro různé indikace, jako je nastavení zpoždění bzučáku a stavu LED. Udělali jsme to pomocí podmínek if , máme celkem tři podmínky. Nejprve spočítáme rozdíl mezi nastavenou hmotností a měřenou hmotností, poté jsme tuto hodnotu uložili do proměnné k.
float k = buttonPushCounter-i;
1. Pokud je rozdíl mezi nastavenou hmotností a měřenou hmotností větší nebo roven 50 gms, bzučák pípne se zpožděním 200 milisekund (pomalu).
if (k> = 50) { digitalWrite (6, HIGH); zpoždění (200); digitalWrite (6, LOW); zpoždění (200); }
2. Pokud je rozdíl mezi nastavenou hmotností a měřenou hmotností menší než 50 a větší než 1 gram, bzučák pípne se zpožděním 50 milisekund (rychlejším).
if (k <50 && k> 1) { digitalWrite (6, HIGH); zpoždění (50); digitalWrite (6, LOW); zpoždění (50); }
3. Pokud je měřená hmotnost rovna nebo větší než nastavená hodnota, rozsvítí se zelená LED a vypne bzučák a červená LED.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
Máme dvě další funkce prázdnoty () pro nastavení nastavené hmotnosti (pro počítání stisknutí tlačítka).
Funkce zvyšující nastavenou hodnotu o 10 gms pro každé stisknutí. Toho se dosáhne pomocí funkce digitalRead Arduina, pokud je pin nízký, což znamená, že je stisknuto tlačítko a tím se zvýší hodnota o 10 gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Podobně, checkdown slouží ke snížení nastavené hodnoty o 10 gms pro každé stisknutí.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
To znamená konec programovací části.
Tato elektronická váha založená na Arduinu je ideální pro měření hmotností do 10 kg (tento limit můžeme zvýšit použitím vyšší jmenovité zátěžové buňky). To je na 99% s přesností na původní měření.
Máte-li jakékoli dotazy týkající se tohoto obvodu stroje pro vyvažování váhy LCD založeného na Arduinu, pošlete jej do sekce komentářů, děkuji!