- Arduino tehtalni stroj deluje
- Komponente, potrebne za tehtalno tehtnico na osnovi Arduino
- Tehtnica na osnovi Arduino - vezalni diagram
- Izdelava vezja na pikčasti deski
- Izdelava ohišja za tehtalnico na osnovi Arduino
- Tehtalnik Arduino - koda
Digitalne tehtnice so še en čudež sodobnega inženiringa in oblikovanja. Da, govorimo o tehtnici, ki jo pogosto vidimo v večini trgovin in drugih krajih, a ste se kdaj vprašali, kako deluje tehtnica? Da bi odgovorili na to vprašanje, si bomo v tem projektu ogledali merilno celico in njeno delovanje. Končno bomo izdelali prenosno obremenitveno tehtnico na osnovi Arduina s senzorjem teže HX711, ki lahko meri težo do 10 kg.
Ta tehtnica je kot nalašč za lokalne trgovine, kjer pakirajo predmete v razsutem stanju. Tako kot komercialni izdelki bo tudi naša tehtnica imela gumb nič, ki tehtnico izniči. Ima tudi možnost nastavitve teže za merjenje, ko merilna teža doseže nastavljeno težo, zvočni signal hitro zapiska in se ustavi, ko je nastavljena teža enaka merilni teži. Tako ga lahko uporabnik zapakira samo tako, da sliši zvok in mu ni treba gledati zaslona. Ker je to zelo preprost projekt, ga bomo zelo enostavno zgradili z uporabo komponent, kot sta Arduino in merilna celica merilnika napetosti. Torej, brez nadaljnjega odlašanja, pojdimo naravnost v to.
V prejšnjem članku smo s pomočjo priljubljenega ojačevalnega modula HX711 izdelovali projekte, kot sta senzor teže na osnovi Raspberry Pi in pametni zabojnik IoT z elektronskim opozorilom in spletnim nadzorom. Torej, preverite, ali je to vaša zahteva.
Arduino tehtalni stroj deluje
Glavna sestavina tega projekta je Load celic in HX711 merilne celice ojačevalnika. Kot lahko vidite, je ena stran označena z deset kilogrami. Prav tako lahko opazite nekakšno belo zaščitno lepilo nad merilno celico in izhajajo štiri različne barve žic, ki bodo razkrile skrivnost pod belim zaščitnim lepilom in funkcijo teh štiribarvnih žic v nadaljevanju članka.
Merilna celica je pretvornik, ki pretvori silo ali tlak v električno moč. Ima dve strani, recimo desno in levo stran, narejena je iz aluminijastih blokov. Kot lahko vidite, se sredina materiala redči tako, da se da velika luknja. Zato je to točka, ki trpi zaradi deformacije, ko je obremenitev nameščena na nosilec. Zdaj si predstavljajte, da je desna celica pritrjena na dno, na levi strani pa je obremenitev. Ta konfiguracija zaradi velike luknje na sredini deformira merilno celico merilnika napetosti.
Ko je tovor nameščen na tovorni strani merilne celice, bo zgornji del pod napetostjo, spodnji pa bo stisnjen. Zato se aluminijasta palica na levi strani upogne navzdol. Če izmerimo to deformacijo, lahko izmerimo silo, ki je bila uporabljena na aluminijasti blok, in točno to bomo storili.
Zdaj ostaja vprašanje, kaj je znotraj belega zaščitnega lepila? Znotraj tega zaščitnega lepila bomo našli zelo tanko elastično komponento, ki se imenuje merilnik napetosti. Merilnik napetosti je komponenta, ki se uporablja za merjenje napetosti. Če podrobneje pogledamo to komponento, lahko vidimo dve priključni blazinici, nato pa imamo prevodni vzorec žice s ponavljajočimi se odkloni. Ta prevodna žica ima definiran upor. Ko ga upognemo, se bo vrednost upora spremenila? Torej, ena stran merilnika napetosti je nameščena in pritrjena na svoje mesto, če na drugo stran aluminijaste palice postavimo utež, bo to povzročilo upogibanje merilnika napetosti, kar bo povzročilo spremembo upora. Kako se to dejansko zgodi? Prevodni vzorec merilnika napetosti je izdelan iz bakra, ta žica bo imela določeno površino in dolžino, zato bosta ti dve enoti dali upor žice. Upor žice nasprotuje toku toka. Zdaj je očitno, da če se površina te žice zmanjša,manj elektronov bi lahko prešlo, kar pomeni nižji tok. Če zdaj povečamo površino, se bo povečala upornost vodnika. Če na to žico deluje neka sila, se bo to območje raztegnilo in bo hkrati postalo manjše, odpornost se bo povečala. Toda ta odpornost je zelo majhna. Če raztegnemo merilnik napetosti, se bo upor povečal in če ga stisnemo, bo upor manjši. Za merjenje sile moramo izmeriti upor. Neposredno merjenje upora ni vedno praktično, ker je sprememba zelo majhna. Namesto merjenja upora lahko napetosti enostavno merimo. V tem primeru moramo pretvoriti izhod merilnika iz vrednosti upora v vrednosti napetosti.Če na to žico deluje neka sila, se bo to območje raztegnilo in bo hkrati postalo manjše, odpornost se bo povečala. Toda ta odpornost je zelo majhna. Če raztegnemo merilnik napetosti, se bo upor povečal in če ga stisnemo, bo upor manjši. Za merjenje sile moramo izmeriti upor. Neposredno merjenje upora ni vedno praktično, ker je sprememba zelo majhna. Namesto merjenja upora lahko napetosti enostavno merimo. V tem primeru moramo pretvoriti izhod merilnika iz vrednosti upora v vrednosti napetosti.Če na to žico deluje neka sila, se bo to območje raztegnilo in bo hkrati postalo manjše, odpornost se bo povečala. Toda ta odpornost je zelo majhna. Če raztegnemo merilnik napetosti, se bo upor povečal in če ga stisnemo, bo upor manjši. Za merjenje sile moramo izmeriti upor. Neposredno merjenje upora ni vedno praktično, ker je sprememba zelo majhna. Namesto merjenja upora lahko napetosti enostavno merimo. V tem primeru moramo pretvoriti izhod merilnika iz vrednosti upora v vrednosti napetosti.upor se bo zmanjšal. Za merjenje sile moramo izmeriti upor. Neposredno merjenje upora ni vedno praktično, ker je sprememba zelo majhna. Namesto merjenja upora lahko napetosti enostavno merimo. V tem primeru moramo pretvoriti izhod merilnika iz vrednosti upora v vrednosti napetosti.upor se bo zmanjšal. Za merjenje sile moramo izmeriti upor. Neposredno merjenje upora ni vedno praktično, ker je sprememba zelo majhna. Namesto merjenja upora lahko napetosti enostavno merimo. V tem primeru moramo pretvoriti izhod merilnika iz vrednosti upora v vrednosti napetosti.
To lahko storimo s pomočjo Wheatstonovega mostu. Merilnik napetosti postavimo v most Wheatstone, če je most uravnotežen, napetost v srednji točki mora biti nič (prej smo zgradili projekt, v katerem smo opisali, kako deluje Wheatstoneov most, to lahko preverite, če želite vedeti več o temi). Ko bo merilnik napetosti spremenil svoj upor, bo most uravnotežil in tudi napetost se bo spremenila. Torej, tako Wheatstoneov most spreminja odpornost v vrednosti napetosti.
Toda ta sprememba napetosti je še vedno zelo majhna, zato moramo za povečanje uporabiti modul HX711. HX711 je 24-bitni diferencialni ADC, na ta način bi lahko izmerili zelo majhne spremembe napetosti. dal bo vrednosti od 0 do 2 eksponentno 24.
Komponente, potrebne za tehtalno tehtnico na osnovi Arduino
Da bi bil ta projekt čim bolj preprost, smo uporabili zelo splošne komponente, ki jih najdete v kateri koli lokalni trgovini s hobi izdelki. Spodnja slika vam bo dala idejo o komponentah. Poleg tega imamo spodaj našteto specifikacijo gradiva (BOM).
- Merilna celica (uporabljamo 10-kilogramsko merilno celico)
- Ojačevalni modul HX 711
- Arduino Nano
- I2C LCD 16X2 - Združljiv z I2C
- 1k upor -2 št
- LED-2
- Zvočni signal
- Skupni PCB
- 7,4 V baterija (če jo želite prenesti)
- LM7805 regulator napetosti
Tehtnica na osnovi Arduino - vezalni diagram
Merilna celica ima štiri žice, ki so rdeča, črna, zelena in bela. Ta barva se lahko razlikuje glede na proizvajalce, zato je bolje, da se sklicujete na podatkovni list. Priključite rdečo na E + plošče HX711, črno na E-, belo na A + in zeleno na A-, Dout, ura plošče pa na D4 in D5. En konec tipk priključite na D3, D8, D9 in druge konce na tla. Imamo I2C LCD, zato priključite SDA na A4 in SCL na A5. Povežite ozemljitev LCD-jev, HX711 in Arduino s tlemi, priključite tudi VCC-je na 5Vpin Arduino-a. Vsi moduli delujejo na 5V, zato smo dodali regulator napetosti LM7805. Če ne želite, da je prenosni, lahko Arduino neposredno napajate s kablom USB.
Izdelava vezja na pikčasti deski
Vse komponente smo spajkali na skupno pikčasto ploščo. Za spajkanje Arduina in ADC z vezjem smo uporabili ženske glave, prav tako smo uporabili žice za povezavo vseh tipk in LED. Po končanem postopku spajkanja smo poskrbeli, da iz LM7805 prihaja ustreznih 5 V. Končno smo vklopili / izklopili vezje. Ko smo bili vsi končani, je bilo videti kot spodnja slika.
Izdelava ohišja za tehtalnico na osnovi Arduino
Kot lahko vidite, ima merilna celica nekaj navojev vijakov, zato jo lahko namestimo na osnovno ploščo. Za osnovo naše lestvice bomo uporabili PVC ploščo, zato smo iz PVC plošče najprej izrezali kvadrat 20 * 20 cm in štiri pravokotnike 20 * 5. Nato smo s trdim lepilom zlepili vsak kos in naredili majhno ohišje.
Ne pozabite, da nismo pritrdili ene strani, ker moramo nanjo postaviti tipke, LED in LCD. Nato smo za vrh tehtnice uporabili plastično ploščo. Preden je ta nastavitev trajna, se moramo prepričati, da imamo dovolj prostora od tal do merilne celice, da se bo lahko upognila, zato smo med merilno celico in dno postavili vijak in matice, prav tako smo dodali nekaj plastičnih distančnikov med merilno celico in zgornjim delom. za vrhunsko sredstvo ravnotežja smo uporabili okroglo plastično folijo.
Nato smo na sprednjo ploščo postavili LCD, LED in tipke ter vse, kar je bilo povezano z dolgo izolirano žico. Ko smo zaključili postopek ožičenja, smo sprednjo ploščo z nekaj nakloni prilepili na glavno podlago, tako da lahko vrednosti z LCD-ja beremo zelo enostavno. končno smo glavno stikalo pritrdili na stran tehtnice in to je to. Tako smo naredili telo za našo tehtnico.
Lahko načrtujete s svojimi idejami, vendar ne pozabite postaviti obremenitvene celice, kot je na sliki.
Tehtalnik Arduino - koda
Ko smo zdaj končali s postopkom izdelave za našo digitalno lestvico, lahko preidemo na programski del. Za lažje programiranje bomo uporabili knjižnico HX711, knjižnico EEPROM in knjižnico LiquidCrystal. Knjižnico HX711 lahko prenesete iz uradnega repozitorija GitHub ali pa pojdite na orodja > vključi knjižnico > upravlja knjižnico, nato po knjižnici poiščite knjižnico s ključno besedo HX711, po prenosu knjižnice jo namestite v Arduino ide.
Najprej moramo umeriti merilno celico in to vrednost shraniti na EEPROM, za to pojdite na file> examples> HX 711_ADC, nato izberite umeritveno kodo. Pred nalaganjem kode postavite tehtnico na stabilno ravninsko površino. Nato naložite kodo v Arduino in odprite serijski monitor. Nato spremenite hitrost prenosa na 572600. Zdaj monitor zahteva, da vzame težo, za to moramo pritisniti t in vnesti.
Zdaj moramo na tehtnico položiti znano težo, v mojem primeru je to 194gm. Po namestitvi znane teže na serijski monitor vnesite utež in pritisnite Enter.
Zdaj vas serijski monitor vpraša, ali želite vrednost shraniti v EEPROM ali ne, zato vnesite Y in izberite da. Zdaj lahko težo vidimo na serijskem monitorju.
Glavna koda tega projekta, ki smo ga razvili na primeru skice knjižnice HX711. Kodo tega projekta lahko prenesete od spodaj.
V odsek za kodiranje smo najprej dodali vse tri knjižnice. Knjižnica HX711 je namenjena zajemanju vrednosti celice obremenitve. EEPROM je vgrajena knjižnica Arduino ide, ki se uporablja za shranjevanje vrednosti v EEPROM, knjižnica LiquidCrystal pa za l2C LCD modul.
#include
Nato definiramo cela števila za različne nožice in dodeljene vrednosti. Funkcija loadcell HX711_ADC je namenjena nastavitvi zatiča in izhoda ure.
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; dolga t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; lebdi navzdol_buttonState = 0; float down_lastButtonState = 0;
V razdelku za namestitev smo najprej zagnali serijski monitor, to je samo za odpravljanje napak. Nato smo definirali načine zatičev, vsi gumbi so definirani kot vhod. S pomočjo funkcije Arduino PULL UP smo normalno nastavljali nožice na logično višino. Torej za to ne želimo uporabljati zunanjih uporov.
pinMode (tpin, INPUT_PULLUP); pinMode (6, IZHOD); pinMode (12, IZHOD); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Naslednje vrstice kode so za nastavitev I2C LCD. Najprej smo pozdravno besedilo prikazali s funkcijo LCD.print () , po dveh sekundah smo zaslon očistili s pomočjo lcd.clear () . To pomeni, da na začetku zaslon prikaže ARDUINO BALANCE kot pozdravno besedilo, po dveh sekundah pa se izbriše in prikaže merilne uteži.
lcd.init (); lcd. backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("izmerimo"); zamuda (2000); lcd.clear ();
Nato smo začeli brati vrednosti iz loadcell s pomočjo funkcije loadCell.begin () , nato smo za umerjene vrednosti prebrali EEPROM, to storimo s funkcijo EEPROM.get () . To pomeni, da smo vrednost že shranili s kalibracijsko skico v naslovu EEPROM, to vrednost pa le prevzamemo.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
V odseku zanke najprej z LoadCell.update () preverimo , ali so na voljo kateri koli podatki iz celice za nalaganje, če so na voljo, te podatke preberemo in shranimo, zato uporabljamo LoadCell.getData () . Nato moramo shranjeno vrednost prikazati na LCD-prikazovalniku. Za to smo uporabili funkcijo LCD.print () . tudi tiskamo nastavljeno težo. Nastavljena teža se nastavlja s pomočjo števca tipk. To je bilo pojasnjeno v zadnjem poglavju.
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 ("teža:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Nato nastavimo vrednost tare, za to najprej preberemo stanje gumba za taro s funkcijo digitalRead () , če je stanje nizko, to težo taramo na nič. Tara funkcije te utežne lestvice je, da odčitke zniža na nič. Če imamo na primer skledo, v katero so naložene stvari, bo neto teža teža sklede + teža stvari. Če pritisnemo gumb za taro s skledo na tovorni celici, preden naložimo stvari, bo teža košare izničena in težo stvari lahko izmerimo sami.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Zdaj moramo določiti pogoje za različne indikacije, kot je nastavitev zakasnitve zvočnega signala in stanja LED. To smo storili z uporabo pogojev if , imamo skupaj tri pogoje. Najprej izračunamo razliko med nastavljeno in merilno težo, nato pa to vrednost shranimo v spremenljivko k.
float k = buttonPushCounter-i;
1. Če je razlika med nastavljeno in merilno težo večja ali enaka 50 gms, zvočni signal zapiska z 200-milisekundno zakasnitvijo (počasi).
if (k> = 50) { digitalWrite (6, HIGH); zamuda (200); digitalWrite (6, LOW); zamuda (200); }
2. Če je razlika med nastavljeno in merilno težo manjša od 50 in večja od 1 grama, se zvočni signal oglasi s 50-milisekundno zakasnitvijo (hitreje).
if (k <50 && k> 1) { digitalWrite (6, HIGH); zamuda (50); digitalWrite (6, LOW); zamuda (50); }
3. Ko je merilna teža enaka ali večja od nastavljene vrednosti, se prižge zelena in izključi brenčalo in rdeča lučka.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, VISOKO); }
Za nastavitev nastavljene teže (za štetje pritiska na gumb) imamo še dve praznini ().
Funkcija, ki poveča nastavljeno vrednost za 10 gms za vsak pritisk. To se naredi z uporabo funkcije digitalRead za Arduino, če je zatič nizek, kar pomeni, da je gumb pritisnjen in bo vrednost povečala za 10 gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Podobno, checkdown je namenjen zmanjšanju nastavljene vrednosti za 10gms za vsak pritisk.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
To pomeni konec programskega dela.
Ta elektronska tehtnica na osnovi Arduina je kot nalašč za merjenje uteži do 10 kg (to mejo lahko povečamo z uporabo višje nazivne obremenitvene celice). To je 99% natančno glede na prvotne meritve.
Če imate kakršna koli vprašanja v zvezi s tem vezjem stroja za uravnoteženje teže na osnovi Arduino, ga objavite v komentarju, hvala!