- Vážiaci stroj Arduino pracuje
- Komponenty požadované pre vážiaci stroj na báze Arduino
- Vážiaci stroj na báze Arduino - obvodový diagram
- Výroba obvodu na bodkovanej doske
- Budovanie krytu pre vážiaci stroj na báze Arduino
- Vážiaci stroj Arduino - kód
Digitálne váhy váhy sú ďalším zázrakom moderného inžinierstva a dizajnu. Áno, hovoríme o váhe, ktorú často vidíme vo väčšine obchodov s potravinami a na iných miestach, ale zamysleli ste sa niekedy nad tým, ako váha funguje? Aby sme odpovedali na túto otázku, v tomto projekte sa pozrieme na silomer a jeho prácu. Na záver postavíme prenosnú váhu na báze Arduina so snímačom hmotnosti HX711, ktorý dokáže merať hmotnosti až 10 kg.
Táto váha je ideálna pre miestne obchody, kde balia veci vo veľkom množstve. Rovnako ako komerčné výrobky, aj naša váha bude mať nulové tlačidlo, ktoré vynuluje váhu. Má tiež možnosť nastaviť hmotnosť na meranie, keď meraná hmotnosť dosiahne nastavenú hmotnosť, bzučiak rýchlo pípne a zastaví sa, keď sa nastavená hmotnosť rovná meranej hmotnosti. Takto si ho môže používateľ zbaliť iba na základe počutia zvuku a nemusel by sa pozerať na displej. Pretože sa jedná o veľmi jednoduchý projekt, budeme ho stavať veľmi ľahko pomocou komponentov ako Arduino a silomerný silomer. Poďme teda bez ďalšieho odkladania priamo do toho.
V predchádzajúcom článku sme uskutočnili projekty ako Raspberry Pi Based Weight Sensor a IoT Smart Container s e-mailovým upozornením a webovým monitorovaním pomocou populárneho modulu zosilňovača zaťažovacích buniek HX711. Skontrolujte teda, či je to vaša požiadavka.
Vážiaci stroj Arduino pracuje
Hlavnou zložkou tohto projektu je Load bunka a HX711 silomer zosilňovač modul. Ako vidíte, jedna strana je označená desiatimi kilogramami. Tiež si môžete všimnúť akési biele ochranné lepidlo na silomere a štyri rôzne farby drôtov, ktoré vychádzajú, odhalia tajomstvo pod bielym ochranným lepidlom a funkciu týchto štvorfarebných drôtov ďalej v článku.
Zaťažovací článok je prevodník, ktorý transformuje silu alebo tlak na elektrický výstup. Má dve strany, povedzme pravú a ľavú stranu a je vyrobená z hliníkových blokov. Ako môžete vidieť, v strede materiálu je zriedený tým, že veľký otvor. To je dôvod, prečo ide o bod, ktorý utrpí deformáciu, keď je na strane montáže zaťaženie. Teraz si predstavte, že článok na pravej strane je pripevnený k základni a na ľavej strane je miesto, kde je zaťaženie, táto konfigurácia deformuje snímač zaťaženia tenzometra z dôvodu obrovského otvoru v strede.
Keď sa na záťažovú stranu silomeru položí bremeno, horná časť bude vystavená napätiu a spodná časť bude stlačená. Preto sa hliníková lišta na ľavej strane ohýba smerom dole. Ak zmeriame túto deformáciu, môžeme zmerať silu, ktorá pôsobila na hliníkový blok, a to je presne to, čo urobíme.
Teraz zostáva otázkou, čo je vo vnútri bieleho ochranného lepidla? Vo vnútri tohto ochranného lepidla nájdeme veľmi tenkú elastickú súčasť, ktorá sa nazýva tenzometer. Tenzometer je súčasť, ktorá sa používa na meranie deformácie. Ak sa pozrieme bližšie na tento komponent, môžeme vidieť dve spojovacie podložky a potom máme vodivý drôtový vzor s opakovanými výchylkami. Tento vodivý drôt má definovaný odpor. Keď ho ohneme, zmení sa hodnota odporu? Jedna strana tenzometra je teda namontovaná a upevnená na danom mieste, ak na druhú stranu hliníkovej tyče položíme závažie, prinúti to tenzometer k ohnutiu, čo spôsobí zmenu odporu. Ako sa to vlastne deje? Vodivý vzor tenzometra je vyrobený z medi, tento drôt bude mať určitú plochu a dĺžku, takže tieto dve jednotky budú dávať odpor drôtu. Odpor drôtu je proti prúdeniu prúdu. Teraz je zrejmé, že ak sa plocha tohto drôtu zmenší,mohlo by prejsť menej elektrónov, čo znamená nižší prúd. Teraz, keď zväčšíme plochu, zvýši sa odpor vodiča. Ak na tento drôt vyviniete určitú silu, roztiahne sa to oblasť a zároveň sa zmenší, zvýši sa odpor. Ale táto variácia odporu je veľmi nízka. Ak napneme tenzometer, odpor sa zvýši a ak ho stlačíme, odpor sa zníži. Na meranie sily potrebujeme zmerať odpor. Priame meranie odporu nie je vždy praktické, pretože zmena je veľmi malá. Takže namiesto merania odporu môžeme ľahko merať napätie. Takže v tomto prípade musíme previesť výstup meradla z hodnôt odporu na hodnoty napätia.Ak na tento drôt vyviniete určitú silu, roztiahne sa to oblasť a zároveň sa zmenší, zvýši sa odpor. Ale táto variácia odporu je veľmi nízka. Ak napneme tenzometer, odpor sa zvýši a ak ho stlačíme, odpor sa zníži. Na meranie sily potrebujeme zmerať odpor. Priame meranie odporu nie je vždy praktické, pretože zmena je veľmi malá. Takže namiesto merania odporu môžeme ľahko merať napätie. Takže v tomto prípade musíme previesť výstup meradla z hodnôt odporu na hodnoty napätia.Ak na tento drôt vyviniete určitú silu, roztiahne sa to oblasť a zároveň sa zmenší, zvýši sa odpor. Ale táto variácia odporu je veľmi nízka. Ak napneme tenzometer, odpor sa zvýši a ak ho stlačíme, odpor sa zníži. Na meranie sily potrebujeme zmerať odpor. Priame meranie odporu nie je vždy praktické, pretože zmena je veľmi malá. Takže namiesto merania odporu môžeme ľahko merať napätie. Takže v tomto prípade musíme previesť výstup meradla z hodnôt odporu na hodnoty napätia.odpor sa zníži. Na meranie sily potrebujeme zmerať odpor. Priame meranie odporu nie je vždy praktické, pretože zmena je veľmi malá. Takže namiesto merania odporu môžeme ľahko merať napätie. Takže v tomto prípade musíme previesť výstup meradla z hodnôt odporu na hodnoty napätia.odpor sa zníži. Na meranie sily potrebujeme zmerať odpor. Priame meranie odporu nie je vždy praktické, pretože zmena je veľmi malá. Takže namiesto merania odporu môžeme ľahko merať napätie. Takže v tomto prípade musíme previesť výstup meradla z hodnôt odporu na hodnoty napätia.
Môžeme to urobiť pomocou Wheatstoneovho mosta. Tenzometer umiestnime do Wheatstoneovho mosta, ak je most vyvážený, napätie v strednom bode by malo byť nulové (predtým sme vytvorili projekt, kde sme popísali, ako Wheatstoneov most funguje, môžete si to skontrolovať, ak chcete vedieť viac o téme). Keď tenzometer zmení svoj odpor, dôjde k nerovnováhe mostíka a zmení sa tiež napätie. Takto teda Wheatstoneov most premení variácie odporu na hodnoty napätia.
Ale táto zmena napätia je stále veľmi malá, takže aby sme ju zvýšili, musíme použiť modul HX711. HX711 je 24-bitový diferenciálny ADC, týmto spôsobom by sme mohli merať veľmi malé zmeny napätia. dá hodnoty od 0 do 2 exponenciálnych 24.
Komponenty požadované pre vážiaci stroj na báze Arduino
Aby bol tento projekt čo najjednoduchší, použili sme veľmi všeobecné komponenty, ktoré nájdete v ktoromkoľvek miestnom hobby obchode. Obrázok nižšie vám poskytne predstavu o jednotlivých komponentoch. Ďalej máme zoznam materiálu (BOM) uvedený nižšie.
- Snímač zaťaženia (používame snímač zaťaženia 10 kg)
- Modul zosilňovača HX 711
- Arduino Nano
- I2C LCD 16X2 - kompatibilný s I2C
- 1k rezistor -2 č
- LED diódy -2č
- Bzučiak
- Spoločné PCB
- 7,4 V batéria (ak ju chcete prenosnú)
- Regulátor napätia LM7805
Vážiaci stroj na báze Arduino - obvodový diagram
Snímač zaťaženia má štyri vodiče, ktoré sú červené, čierne, zelené a biele. Táto farba sa môže líšiť podľa výrobcov, takže je lepšie pozrieť sa do údajového listu. Pripojte červený k E + na doske HX711, čierny na E-, biely na A + a zelený na A-, Dout a hodiny na D4 a D5. Pripojte jeden koniec tlačidiel k D3, D8, D9 a druhý koniec k zemi. Máme I2C LCD, takže pripojte SDA k A4 a SCL k A5. Pripojte dôvod LCD, HX711 a Arduino k zemi, sa tiež pripojiť VCCS na 5Vpin z Arduino. Všetky moduly pracujú na 5V, preto sme pridali regulátor napätia LM7805. Ak ho nechcete mať ako prenosný, môžete Arduino napájať priamo pomocou kábla USB.
Výroba obvodu na bodkovanej doske
Všetky komponenty sme spájkovali na spoločnom bodkovanom perfboarde. Na spájkovanie Arduina a ADC s doskou plošných spojov sme použili samičie konektory, taktiež sme použili vodiče na pripojenie všetkých tlačidiel a LED diód. Po dokončení celého procesu spájkovania sme sa ubezpečili, že z LM7805 vychádza správne napätie 5 V. Nakoniec sme prepínali vypínač na zapnutie / vypnutie obvodu. Keď sme boli všetci hotoví, vyzeralo to ako na obrázku nižšie.
Budovanie krytu pre vážiaci stroj na báze Arduino
Ako vidíte, silomer má niekoľko skrutkových závitov, takže sme ho mohli namontovať na základovú dosku. Na základňu našej stupnice použijeme dosku z PVC, preto sme z dosky z PVC najskôr vyrezali štvorec 20 * 20 cm a štyri obdĺžniky 20 * 5. Potom sme pomocou tvrdého lepidla každý kúsok zlepili a vyrobili malú ohradu.
Pamätajte, že sme neopravili jednu stranu, pretože na ňu musíme umiestniť tlačidlá, LED diódy a LCD. Potom sme na vrch váhy použili plastovú dosku. Predtým, ako urobíte toto nastavenie natrvalo, musíme sa ubezpečiť, že máme dostatočný priestor od zeme k silomeru, aby sa mohol ohýbať, preto sme medzi silomer a základňu umiestnili skrutky a matice niektoré plastové rozpery medzi silomerom a hornou časťou. ako špičkovú inteligentnú váhu sme použili okrúhly plastový plech.
Potom sme umiestnili LCD, LED diódy a tlačidlá na predný panel a všetko bolo spojené dlhým izolovaným drôtom. Po dokončení procesu zapojenia sme predný panel s určitým sklonom prilepili k hlavnej základni, aby sme mohli hodnoty z LCD ľahko načítať. nakoniec sme hlavný vypínač pripevnili na bočnú stranu váhy a je to. Takto sme vytvorili telo pre našu váhovú škálu.
Môžete navrhnúť podľa svojich nápadov, ale nezabudnite umiestniť zaťažovací článok ako na obrázku.
Vážiaci stroj Arduino - kód
Keď sme teraz skončili s procesom zostavovania našej digitálnej váhy, môžeme prejsť na programovú časť. Pre ľahké programovanie použijeme knižnicu HX711, EEPROM Library a LiquidCrystal. Knižnicu HX711 si môžete stiahnuť z oficiálneho úložiska GitHub alebo prejsť na nástroje > zahrnúť knižnicu > spravovať knižnicu a potom knižnicu vyhľadať pomocou kľúčového slova HX711. Po stiahnutí knižnice ju nainštalujte do Arduino ide.
Najskôr musíme nakalibrovať zaťažovací článok a túto hodnotu uložiť na EEPROM, prejsť na súbor> examples> HX 711_ADC a potom zvoliť kalibračný kód. Pred načítaním kódu položte váhu na stabilný rovný povrch. Potom nahrajte kód do Arduina a otvorte sériový monitor. Potom zmeňte prenosovú rýchlosť na 572600. Teraz monitor žiada, aby ste vzali váhu, preto musíme stlačiť t a vstúpiť.
Teraz musíme dať na váhu známu váhu, v mojom prípade to je 194 gm. Po vložení známej hmotnosti zadajte váhu na sériovom monitore a stlačte kláves Enter.
Teraz sa vás sériový monitor opýta, či chcete uložiť hodnotu do EEPROM, alebo nie, tak zadajte Y pre výber áno. Teraz vidíme váhu na sériovom monitore.
Hlavný kód tohto projektu, ktorý sme vyvinuli z ukážkovej skice knižnice HX711. Kód tohto projektu si môžete stiahnuť z nižšie.
V časti o kódovaní sme najskôr pridali všetky tri knižnice. Knižnica HX711 slúži na získavanie hodnôt snímača zaťaženia. EEPROM je zabudovaná knižnica Arduino ide, ktorá sa používa na ukladanie hodnôt do EEPROM a knižnica LiquidCrystal je určená pre l2C LCD modul.
#include
Potom definované celé čísla pre rôzne piny a priradené hodnoty. Funkcia loadcell HX711_ADC slúži na nastavenie Dout a pin hodín.
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; dlhé 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 sekcii nastavenia sme najskôr spustili sériový monitor, ktorý slúži iba na ladenie. Potom sme definovali režimy pinov, všetky tlačidlá sú definované ako vstup. Pomocou funkcie Arduino PULL UP nastavíme piny na logicky najvyššiu hodnotu za normálnych okolností. Na to teda nechceme používať žiadne externé rezistory.
pinMode (tpin, INPUT_PULLUP); pinMode (6, VÝSTUP); pinMode (12, VÝSTUP); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Nasledujúce riadky kódu slúžia na nastavenie I2C LCD. Najskôr sme pomocou funkcie LCD.print () zobrazili uvítací text, po dvoch sekundách sme displej vyčistili pomocou lcd.clear () . To znamená, že na začiatku sa na displeji zobrazí ARDUINO BALANCE ako uvítací text a po dvoch sekundách sa vymaže a zobrazí meracie závažie.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print („poďme merať“); meškanie (2000); lcd.clear ();
Potom sme začali čítať hodnoty z loadcell pomocou funkcie loadCell.begin () , potom sme načítali EEPROM pre kalibrované hodnoty, urobíme to pomocou funkcie EEPROM.get () . To znamená, že sme už hodnotu uložili pomocou kalibračného náčrtu na adresu EEPROM, túto hodnotu iba znovu zadáme.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, kalibračná hodnota);
V časti slučky najskôr skontrolujeme, či sú nejaké údaje z bunky zaťaženia dostupné pomocou funkcie LoadCell.update (), ak sú k dispozícii, tieto údaje načítame a uložíme, na to používame funkciu LoadCell.getData () . Ďalej musíme zobraziť uloženú hodnotu na LCD. K tomu sme použili funkciu LCD.print () . vytlačíme tiež nastavenú hmotnosť. Nastavená hmotnosť sa nastavuje pomocou počítadla tlačidiel. To bolo vysvetlené v poslednej časti.
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 ("váha:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print („GM“);
Ďalej nastavíme hodnotu tary, najskôr si pomocou funkcie digitalRead () prečítame stav tlačidla tara, ak je stav nízky, vytárujeme túto váhu na nulu. Tárovou funkciou tejto váhovej stupnice je vynulovanie nameraných hodnôt. Napríklad, ak máme misku, v ktorej sú veci naložené, potom čistá hmotnosť bude hmotnosť misy + hmotnosť vecí. Ak pred naložením vecí stlačíme tárovacie tlačidlo s miskou na silomeri, hmotnosť koša bude negovaná a môžeme si zmerať váhu samotných vecí.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Teraz musíme nastaviť podmienky pre rôzne indikácie, ako je nastavenie oneskorenia bzučiaka a stavu LED. Urobili sme to pomocou podmienok if , máme celkovo tri podmienky. Najskôr vypočítame rozdiel medzi nastavenou hmotnosťou a nameranou hmotnosťou, potom sme túto hodnotu uložili do premennej k.
float k = buttonPushCounter-i;
1. Ak je rozdiel medzi nastavenou hmotnosťou a nameranou hmotnosťou väčší alebo rovný 50 gms, bzučiak pípne s 200-milisekundovým oneskorením (pomaly).
if (k> = 50) { digitalWrite (6, HIGH); oneskorenie (200); digitalWrite (6, LOW); oneskorenie (200); }
2. Ak je rozdiel medzi nastavenou hmotnosťou a nameranou hmotnosťou menší ako 50 a väčší ako 1 gram, bzučiak pípne s 50-milisekundovým oneskorením (rýchlejšie).
if (k <50 && k> 1) { digitalWrite (6, HIGH); oneskorenie (50); digitalWrite (6, LOW); oneskorenie (50); }
3. Ak je meraná hmotnosť rovnaká alebo vyššia ako nastavená hodnota, zapne sa zelená LED a vypne sa bzučiak a červená LED.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
Máme dve ďalšie prázdne funkcie () na nastavenie nastavenej hmotnosti (na počítanie stlačenia tlačidla).
Funkcia zvyšujúca nastavenú hodnotu o 10 gms pre každé stlačenie. To sa deje pomocou funkcie digitalRead v Arduine, ak je pin nízky, čo znamená, že je stlačené tlačidlo a tým sa hodnota zvýši o 10 gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Podobne
checkdown slúži na zníženie nastavenej hodnoty o 10gms pre každé stlačenie.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Týmto sa označuje koniec programovacej časti.
Táto elektronická váha na báze Arduino je ideálna na meranie hmotnosti do 10 kg (túto hranicu môžeme zvýšiť použitím vyššej menovitej zaťažovacej bunky). To je na 99% presnosť s pôvodnými meraniami.
Ak máte akékoľvek otázky týkajúce sa tohto obvodu stroja na vyvažovanie váhy LCD založeného na Arduine, uverejnite ho v sekcii komentárov, ďakujeme!