- Arduino veiemaskin fungerer
- Komponenter som kreves for Arduino-basert veiemaskin
- Arduino-basert veiemaskin - kretsdiagram
- Å lage kretsen på en prikket perfboard
- Bygg et kabinett for Arduino-basert veiemaskin
- Arduino veiemaskin - kode
Digitale lastvekter er et annet mirakel av moderne ingeniørarbeid og design. Ja, vi snakker om veievekten vi ofte ser i de fleste dagligvarebutikker og andre steder, men har du noen gang lurt på hvordan en vektvekt fungerer? For å svare på det spørsmålet, i dette prosjektet, skal vi ta en titt på lastcellen og dens arbeid. Til slutt skal vi bygge en bærbar Arduino-basert lasteskala med HX711 vektføler, som kan måle vekter opp til 10 kg.
Denne veiemaskinen er perfekt for lokale butikker, der de pakker varer i bulk. I likhet med kommersielle produkter vil vektvekten vår ha en null-knapp som nullstiller skalaen. Det har også et alternativ å stille inn vekt for måling. Når målevekten når den innstilte vekten, piper en summer raskt og stopper når den innstilte vekten er lik målevekten. På denne måten kan brukeren pakke den bare ved å høre lyden og slipper å se på skjermen. Siden dette er et veldig enkelt prosjekt, vil vi bygge dette veldig enkelt ved hjelp av komponenter som Arduino og belastningscelle for strekkmåler. Så, uten ytterligere forsinkelse, la oss komme rett inn i det.
I en tidligere artikkel har vi laget prosjekter som Raspberry Pi Based Weight Sensor og IoT Smart Container with Email Alert and Web Monitoring ved hjelp av den populære HX711 forsterkermodulen. Så sjekk det ut hvis det er ditt krav.
Arduino veiemaskin fungerer
Hovedkomponenten i dette prosjektet er en belastningscelle- og HX711-lastcellforsterkermodul. Som du kan se, er den ene siden merket med ti kilo. Du kan også legge merke til en slags hvitt beskyttende lim over lastcellen, og fire forskjellige farger på ledninger kommer ut, vil avdekke hemmeligheten under det hvite beskyttelseslimet og funksjonen til disse firefargede ledningene senere i artikkelen.
En lastcelle er en svinger som forvandler kraft eller trykk til elektrisk utgang. Den har to sider, la oss si høyre og venstre side, og den er laget av aluminiumsblokker. Som du kan se, tynnes materialet ved å sette et stort hull. Det er derfor det er poenget som lider av deformasjon når en last plasseres på monteringssiden. Tenk deg at cellen på høyre side er montert på basen og venstre side er der lasten er plassert. Denne konfigurasjonen deformerer belastningscellen på strekkmåler på grunn av det gigantiske hullet i midten.
Når en last plasseres på lastesiden av lastcellen, vil den øverste delen bli spent, og den nedre delen vil bli komprimert. Derfor bøyer aluminiumsstangen seg nedover på venstre side. Hvis vi måler denne deformasjonen, kan vi måle kraften som ble påført aluminiumblokken, og det er akkurat det vi vil gjøre.
Nå gjenstår spørsmålet hva som er inne i det hvite beskyttende limet? Inne i dette beskyttende limet, vil vi finne en veldig tynn elastisk komponent som kalles en strekkmåler. En strekkmåler er en komponent som brukes til å måle belastning. Hvis vi ser nærmere på denne komponenten, kan vi se to tilkoblingsputer, og så har vi et ledende trådmønster med repeterende avbøyninger. Denne ledende ledningen har en definert motstand. Når vi bøyer den, vil motstandsverdien endre seg? Så den ene siden av strekkmåleren er montert og festet på et sted. Hvis vi legger vekt på den andre siden av aluminiumstangen, vil dette tvinge strekkmåleren til å bøye seg, noe som vil føre til endring i motstand. Hvordan skjer dette egentlig? Det ledende mønsteret på strekkmåleren er laget av kobber, denne ledningen vil ha et visst område og lengde, så disse to enhetene vil gi ledningens motstand. Motstanden til en ledning motsetter strømmen av strøm. Nå er det åpenbart at hvis området til denne ledningen blir mindre,færre elektroner kan passere, noe som betyr en lavere strøm. Nå hvis vi øker arealet, vil det øke motstanden til en leder. Hvis det blir brukt noen kraft på denne ledningen, vil dette strekke området og det vil bli mindre samtidig, motstanden øker. Men denne motstandsvariasjonen er veldig lav. Hvis vi strekker strekkmåleren, vil motstanden øke, og hvis vi komprimerer den, vil motstanden bli lavere. For å måle kraften, må vi måle motstanden. Å måle motstanden direkte er ikke alltid praktisk, fordi endringen er veldig liten. Så i stedet for å måle motstand, kan vi enkelt måle spenninger. Så i dette tilfellet må vi konvertere måleresultatet fra motstandsverdier til spenningsverdier.Hvis det blir brukt noen kraft på denne ledningen, vil dette strekke området og det vil bli mindre samtidig, motstanden øker. Men denne motstandsvariasjonen er veldig lav. Hvis vi strekker strekkmåleren, vil motstanden øke, og hvis vi komprimerer den, vil motstanden bli lavere. For å måle kraften, må vi måle motstanden. Å måle motstanden direkte er ikke alltid praktisk, fordi endringen er veldig liten. Så i stedet for å måle motstand, kan vi enkelt måle spenninger. Så i dette tilfellet må vi konvertere måleresultatet fra motstandsverdier til spenningsverdier.Hvis det blir brukt noen kraft på denne ledningen, vil dette strekke området og det vil bli mindre samtidig, motstanden øker. Men denne motstandsvariasjonen er veldig lav. Hvis vi strekker strekkmåleren, vil motstanden øke, og hvis vi komprimerer den, vil motstanden bli lavere. For å måle kraften, må vi måle motstanden. Å måle motstanden direkte er ikke alltid praktisk, fordi endringen er veldig liten. Så i stedet for å måle motstand, kan vi enkelt måle spenninger. Så i dette tilfellet må vi konvertere måleresultatet fra motstandsverdier til spenningsverdier.motstanden vil bli lavere. For å måle kraften, må vi måle motstanden. Å måle motstanden direkte er ikke alltid praktisk, fordi endringen er veldig liten. Så i stedet for å måle motstand, kan vi enkelt måle spenninger. Så i dette tilfellet må vi konvertere måleresultatet fra motstandsverdier til spenningsverdier.motstanden vil bli lavere. For å måle kraften, må vi måle motstanden. Å måle motstanden direkte er ikke alltid praktisk, fordi endringen er veldig liten. Så i stedet for å måle motstand, kan vi enkelt måle spenninger. Så i dette tilfellet må vi konvertere måleresultatet fra motstandsverdier til spenningsverdier.
Vi kan gjøre dette ved hjelp av Wheatstone-broen. Vi plasserer strekkmåleren i Wheatstone-broen hvis broen er balansert, spenningen i midtpunktet skal være null (tidligere har vi bygget et prosjekt der vi har beskrevet hvordan en Wheatstone-bro fungerer, du kan sjekke det ut hvis du vil vite mer om temaet). Når strekkmåleren endrer motstand, vil den avbalanse broen, og spenningen vil også endre seg. Så dette konverterer Wheatstone-broen motstandsvariasjoner til spenningsverdier.
Men denne spenningsendringen er fortsatt veldig liten, så for å øke det, må vi bruke HX711-modulen. HX711 er en 24-bit Differensial ADC, på denne måten kan vi måle veldig små spenningsendringer. det vil gi verdier fra 0 til 2 eksponentiell 24.
Komponenter som kreves for Arduino-basert veiemaskin
For å gjøre dette prosjektet så enkelt som mulig, har vi brukt veldig generiske komponenter som du finner i en hvilken som helst lokal hobbybutikk. Bildet nedenfor gir deg en ide om komponentene. Videre har vi Stoffliste (BOM) oppført nedenfor.
- Lastecelle (vi bruker en 10 kg lastecelle)
- HX 711 forsterkermodul
- Arduino Nano
- I2C LCD 16X2 - I2C Kompatibel
- 1k motstand -2 Nos
- Lysdioder -2Nr
- Summer
- Vanlig PCB
- 7.4V batteri (hvis du vil ha det bærbart)
- LM7805 spenningsregulator
Arduino-basert veiemaskin - kretsdiagram
Lastcellen har fire ledninger som er røde, svarte, grønne og hvite. Denne fargen kan variere i henhold til produsentene, så det er bedre å referere til databladet. Koble rødt til E + på HX711-kortet, koble svart til E-, koble hvitt til A +, og koble grønt til henholdsvis A-, Dout og klokke på kortet, og koble til henholdsvis D4 og D5. Koble den ene enden av trykknappene til D3, D8, D9 og andre ender til bakken. Vi har I2C LCD, så koble SDA til A4 og SCL til A5. Koble bakken til LCD, HX711 og Arduino til bakken, og koble også VCC til 5Vpin på Arduino. Alle modulene fungerer på 5V, så vi har lagt til en LM7805 spenningsregulator. Hvis du ikke vil ha den som bærbar, kan du koble Arduino direkte med en USB-kabel.
Å lage kretsen på en prikket perfboard
Vi har loddet alle komponentene på et vanlig prikket perfboard. Vi brukte kvinnelige overskrifter for å lodde Arduino og ADC med kretskortet, og vi har også brukt ledninger for å koble til alle trykknapper og lysdioder. Etter at all loddeprosessen er ferdig, har vi sørget for at riktig 5V kommer ut av LM7805. Til slutt har vi satt en bryter for å slå kretsen på / av. Når vi alle var ferdige, så det ut som bildet nedenfor.
Bygg et kabinett for Arduino-basert veiemaskin
Som du ser, har lastcellen noen skruegjenger, så vi kan montere den på en bunnplate. Vi skal bruke et PVC-kort for bunnen av skalaen, for det kutter vi først 20 * 20 cm kvadrat og fire 20 * 5 rektangler fra PVC-kortet. Deretter limte vi hvert stykke med hardt lim og laget et lite kabinett.
Husk at vi ikke fikset den ene siden, fordi vi trenger å plassere trykknappene, lysdiodene og LCD-skjermen på den. Så brukte vi et plastbrett for toppen av skalaen. Før vi gjør dette oppsettet permanent, må vi sørge for at vi har tilstrekkelig plass fra bakken til lastcellen, slik at den kan bøyes, så vi plasserte skruer og muttere mellom lastcellen og basen, også la vi til noen plastavstandsstykker mellom lastcellen og toppdelen. Vi brukte et rundt plastark som balansen i toppen.
Deretter plasserte vi LCD, LED og trykknapper på frontpanelet, og alt som var koblet til lang isolert ledning. Etter at vi var ferdig med ledningsprosessen, limte vi frontpanelet til hovedbunnen med litt tilbøyelighet, slik at vi kan lese verdiene fra LCD veldig enkelt. til slutt festet vi hovedbryteren til siden av vekten, og det er det. Dette er hvordan vi laget kroppen til vektvekten vår .
Du kan designe med ideene dine, men husk å plassere lastecellelignende som på bildet.
Arduino veiemaskin - kode
Ettersom vi nå er ferdige med byggeprosessen for vår digitale skala, kan vi gå videre til programmeringsdelen. For enkel programmering skal vi bruke HX711-biblioteket, EEPROM-biblioteket og LiquidCrystal-biblioteket. Du kan laste ned HX711-biblioteket fra det offisielle GitHub-depotet, eller gå til verktøy > inkludere bibliotek > administrere bibliotek, og deretter søke i biblioteket ved hjelp av nøkkelordet HX711, etter å ha lastet ned biblioteket, installerer det i Arduino ide.
Først må vi kalibrere lastecellen og lagre den verdien på EEPROM, for det, gå til fil> eksempler> HX 711_ADC, og velg deretter kalibreringskoden. Før du laster opp koden, plasserer du vekten på et stabilt plan underlag. Last deretter opp koden til Arduino og åpne seriell skjerm. Deretter endrer du overføringshastigheten til 572600. Nå må monitor be om å ta vekten, for det må vi trykke t og gå inn.
Nå må vi legge den kjente vekten på vekten, i mitt tilfelle, det vil si 194 gm. Etter å ha plassert den kjente vekten, skriv inn vekten på den serielle skjermen, og trykk enter.
Nå spør den serielle skjermen om du vil lagre verdien i EEPROM eller ikke, så skriv Y for å velge ja. Nå kan vi se vekten på den serielle skjermen.
Hovedkoden til dette prosjektet, som vi utviklet fra eksemplet på skissen til HX711-biblioteket. Du kan laste ned koden til dette prosjektet nedenfor.
I kodingseksjonen la vi først til alle tre bibliotekene. HX711-biblioteket er beregnet på å ta belastningscelleverdiene. EEPROM er det innebygde biblioteket til Arduino ide, som brukes til å lagre verdier i EEPROM, og LiquidCrystal-biblioteket er for l2C LCD-modulen.
#inkludere
Definerte deretter heltall for forskjellige pinner og tildelte verdier. HX711_ADC loadcell- funksjonen er for innstilling av Dout og klokkepinne.
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; lang t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; flyte opp_knappStat = 0; flyte opp_lastButtonState = 0; flyte down_buttonState = 0; flyte ned_lastButtonState = 0;
I installasjonsdelen startet først den serielle skjermen, dette er bare for feilsøking. Så definerte vi pin-modusene, alle trykknapper er definert som inngang. Ved hjelp av Arduino PULL UP-funksjonen setter vi pinnene til en logisk høy på normalt. Så vi vil ikke bruke noen eksterne motstander til det.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Følgende kodelinjer er for innstilling av I2C LCD. Først viste vi velkomstteksten ved hjelp av funksjonen LCD.print () , etter to sekunder slettet vi skjermen ved hjelp av lcd.clear () . I begynnelsen viser displayet ARDUINO BALANCE som velkomsttekst, og etter to sekunder vil den tømme og vise målevektene.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("la oss måle"); forsinkelse (2000); lcd.clear ();
Så begynte å lese verdiene fra loadcell ved hjelp av loadCell.begin () -funksjonen, etter det, vi leste EEPROM for de kalibrerte verdiene, vi gjør det ved å bruke EEPROM.get () -funksjonen. Det vil si at vi allerede lagret verdien ved hjelp av kalibreringsskisse i EEPROM- adressen, vi tar bare den verdien på nytt.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
I loop-seksjonen sjekker vi først om noen data fra lastcellen er tilgjengelige ved bruk av LoadCell.update (), hvis tilgjengelig, leser og lagrer vi dataene, for det bruker vi LoadCell.getData () . Deretter må vi vise den lagrede verdien i LCD. For å gjøre det brukte vi funksjonen LCD.print () . også, vi skriver ut den innstilte vekten. Innstilt vekt innstilles ved hjelp av trykknapptelleren. Det ble forklart i forrige avsnitt.
hvis (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 ("vekt:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Deretter setter vi taraværdien, for det først leser vi tilstanden til taratrykknappen ved hjelp av digitalRead () -funksjonen. Hvis tilstanden er lav, tar vi den vekten til null. Tara-funksjonen til denne vektskalaen er å bringe avlesningene til null. For eksempel, hvis vi har en bolle der tingene er lastet, vil nettovekten være vekten av bollen + vekten av tingene. Hvis vi trykker på taraknappen med bollen på lastecellen før du laster ting, blir kurvens vekt negert, og vi kan måle vekten av tingene alene.
hvis (digitalRead (tpin) == LAV) { LoadCell.tareNoDelay ();
Nå må vi stille vilkårene for forskjellige indikasjoner, for eksempel å stille inn forsinkelsen for summeren og ledet status. Vi gjorde det ved hjelp dersom forholdene, har vi totalt tre forhold. Først beregner vi forskjellen mellom innstilt vekt og målevekt, og lagrer deretter verdien i variabelen k.
flyte k = buttonPushCounter-i;
1. Hvis forskjellen mellom innstilt vekt og målevekt er større enn eller lik 50 gram, piper lyden med en forsinkelse på 200 millisekunder (sakte).
hvis (k> = 50) { digitalWrite (6, HIGH); forsinkelse (200); digitalWrite (6, LAV); forsinkelse (200); }
2. Hvis forskjellen mellom innstilt vekt og målevekt er lavere enn 50 og større enn 1 gram, piper summeren med en forsinkelse på 50 millisekunder (raskere).
hvis (k <50 && k> 1) { digitalWrite (6, HIGH); forsinkelse (50); digitalWrite (6, LAV); forsinkelse (50); }
3. Når målevekten er lik eller større enn den innstilte verdien, vil denne slå på den grønne ledningen og av summeren og den røde lampen.
hvis (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HØY); }
Vi har to flere ugyldige funksjoner () for å stille inn innstilt vekt (for å telle knappetrykk).
Funksjonen øker den innstilte verdien med 10 gms for hvert trykk. Dette gjøres ved å bruke DigitalRead- funksjonen til Arduino hvis pinnen er lav, noe som betyr at knappen trykkes og som øker verdien med 10 gram.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
På samme måte, checkdown er for å redusere den innstilte verdien med 10 g for hvert trykk.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Dette markerer slutten på programmeringsdelen.
Denne Arduino-baserte elektroniske vekten er perfekt for å måle vekter opp til 10 kg (vi kan øke denne grensen ved å bruke en høyere belastningscelle). Dette er 99% nøyaktig i forhold til originale målinger.
Hvis du har spørsmål angående denne Arduino-baserte LCD vektbalansemaskinkretsen, kan du legge den inn i kommentarseksjonen, takk!