- Arduino-punnituslaite toimii
- Tarvittavat komponentit Arduino-pohjaiseen punnituslaitteeseen
- Arduino-pohjainen punnituslaite - piirikaavio
- Piirin tekeminen pisteviivalla
- Kotelon rakentaminen Arduino-pohjaiselle punnituskoneelle
- Arduino-punnituskone - koodi
Digitaaliset kuormitusasteikot ovat toinen nykyajan suunnittelun ja suunnittelun ihme. Kyllä, puhumme punnitusasteikosta, jota usein näemme useimmissa ruokakaupoissa ja muissa paikoissa, mutta oletko koskaan miettinyt, miten vaaka toimii? Vastaamme tähän kysymykseen tässä projektissa tarkastelemme punnituskennoa ja sen toimintaa. Lopuksi rakennamme kannettavan Arduino-pohjaisen kuormitusasteikon HX711-painotunnistimella, joka voi mitata painoja jopa 10 kg.
Tämä punnituslaite on täydellinen paikallisille myymälöille, joissa ne pakkaavat tavaroita irtotavarana. Kuten kaupallisissa tuotteissa, myös painovaakaamme tulee nolla-painike, joka nollaa asteikon. Lisäksi sillä on mahdollisuus asettaa paino mittausta varten, kun mittauspaino saavuttaa asetetun painon, summeri antaa nopean äänimerkin ja pysähtyy, kun asetettu paino on sama kuin mittauspaino. Tällä tavalla käyttäjä voi pakata sen vain kuulemalla äänen, eikä hänen tarvitse katsoa näyttöä. Koska kyseessä on hyvin yksinkertainen projekti, rakennamme tämän erittäin helposti käyttämällä komponentteja, kuten Arduino ja venymäliuska-anturi. Joten, viipymättä, mennään suoraan siihen.
Aikaisemmassa artikkelissa olemme tehneet projekteja, kuten Raspberry Pi -pohjainen painotunnistin ja IoT Smart Container with Email Alert and Web Monitoring, käyttämällä suosittua HX711-kuormituskennovahvistinmoduulia. Joten, tarkista se, jos se on sinun vaatimuksesi.
Arduino-punnituslaite toimii
Pääkomponentti Tämän projektin on punnitusanturi ja HX711 punnituskenno vahvistin moduuli. Kuten näette, toinen puoli on merkitty kymmenellä kilogrammalla. Lisäksi voit huomata jonkinlaisen valkoisen suojaliiman punnituskennon päällä ja neljä eriväristä johtoa tulee ulos, paljastaa salaisuuden valkoisen suojaliiman alla ja näiden neliväristen johtojen toiminnan myöhemmin artikkelissa.
Punnituskenno on anturi, joka muuntaa voiman tai paineen sähkötehoksi. Siinä on kaksi puolta, sanotaan oikea ja vasen puoli, ja se on valmistettu alumiinilohkoista. Kuten voit nähdä keskellä materiaalia ohennetaan asettamalla iso reikä. Siksi se kärsii muodonmuutoksista, kun kuorma asetetaan kiinnityspuolelle. Kuvittele nyt, että oikeanpuoleinen kenno on asennettu pohjaan ja vasen puoli on kuorman sijoituspaikka, tämä kokoonpano vääristää venymän mittarin kuormituskennoa keskellä olevan jättiläisreiän takia.
Kun kuorma asetetaan punnituskennon kuormapuolelle, yläosa kärsii jännitteestä ja alaosa puristuu. Siksi alumiinitanko taipuu alaspäin vasemmalle puolelle. Jos mitataan tämä muodonmuutos, voimme mitata alumiinilohkoon kohdistetun voiman ja juuri sen teemme.
Nyt jää kysymys, mikä on valkoisen suojaliiman sisällä? Tämän suojaliiman sisällä on erittäin ohut elastinen komponentti, jota kutsutaan venymäliuskaksi. Venymäliuska on komponentti, jota käytetään venymän mittaamiseen. Jos tarkastelemme tätä komponenttia tarkemmin, voimme nähdä kaksi liitäntätyynyä, ja sitten meillä on johtava lankakuvio, jossa on toistuvia taipumia. Tällä johtavalla langalla on määritelty vastus. Kun taivutamme sitä, vastuksen arvo muuttuu? Joten, venymäliuskan toinen puoli on asennettu ja kiinnitetty paikkaan, jos asetamme painon alumiinitangon toiselle puolelle, se pakottaa venymäliuskan taipumaan, mikä aiheuttaa muutoksen vastuksessa. Kuinka tämä todella tapahtuu? Venymämittarin johtava kuvio on valmistettu kuparista, tällä langalla on tietty pinta-ala ja pituus, joten nämä kaksi yksikköä antavat langan vastuksen. Johdon vastus vastustaa virran virtausta. Nyt on selvää, että jos tämän langan pinta-ala pienenee,vähemmän elektroneja voisi kulkea, mikä tarkoittaa pienempää virtaa. Nyt jos kasvatamme pinta-alaa, se lisää johtimen vastusta. Jos tälle langalle kohdistetaan jonkin verran voimaa, se venyttää aluetta ja pienenee samalla, vastus kasvaa. Mutta tämä resistanssimuutos on hyvin pieni. Jos venytämme venymäliuskaa, vastus kasvaa ja jos puristamme sitä, vastus pienenee. Voiman mittaamiseksi meidän on mitattava vastus. Vastuksen mittaaminen suoraan ei ole aina käytännöllistä, koska muutos on hyvin pieni. Joten resistanssin mittaamisen sijasta voimme mitata jännitteet helposti. Joten tässä tapauksessa meidän on muunnettava mittarin lähtö vastusarvoista jännite-arvoihin.Jos tälle langalle kohdistetaan jonkin verran voimaa, se venyttää aluetta ja pienenee samalla, vastus kasvaa. Mutta tämä resistanssimuutos on hyvin pieni. Jos venytämme venymäliuskaa, vastus kasvaa ja jos puristamme sitä, vastus pienenee. Voiman mittaamiseksi meidän on mitattava vastus. Vastuksen mittaaminen suoraan ei ole aina käytännöllistä, koska muutos on hyvin pieni. Joten resistanssin mittaamisen sijasta voimme mitata jännitteet helposti. Joten tässä tapauksessa meidän on muunnettava mittarin lähtö vastusarvoista jännite-arvoihin.Jos tälle langalle kohdistetaan jonkin verran voimaa, se venyttää aluetta ja pienenee samalla, vastus kasvaa. Mutta tämä resistanssimuutos on hyvin pieni. Jos venytämme venymäliuskaa, vastus kasvaa ja jos puristamme sitä, vastus pienenee. Voiman mittaamiseksi meidän on mitattava vastus. Vastuksen mittaaminen suoraan ei ole aina käytännöllistä, koska muutos on hyvin pieni. Joten resistanssin mittaamisen sijasta voimme mitata jännitteet helposti. Joten tässä tapauksessa meidän on muunnettava mittarin lähtö vastusarvoista jännite-arvoihin.vastus laskee. Voiman mittaamiseksi meidän on mitattava vastus. Vastuksen mittaaminen suoraan ei ole aina käytännöllistä, koska muutos on hyvin pieni. Joten resistanssin mittaamisen sijasta voimme mitata jännitteet helposti. Joten tässä tapauksessa meidän on muunnettava mittarin lähtö vastusarvoista jännite-arvoihin.vastus laskee. Voiman mittaamiseksi meidän on mitattava vastus. Vastuksen mittaaminen suoraan ei ole aina käytännöllistä, koska muutos on hyvin pieni. Joten resistanssin mittaamisen sijasta voimme mitata jännitteet helposti. Joten tässä tapauksessa meidän on muunnettava mittarin lähtö vastusarvoista jännite-arvoihin.
Voimme tehdä tämän Wheatstonen sillan avulla. Sijoitamme venymämittarin Wheatstonen sillalle, jos silta on tasapainossa, keskipisteen jännitteen tulisi olla nolla (aiemmin olemme rakentaneet projektin, jossa olemme kuvanneet Wheatstonen sillan toiminnan, voit tarkistaa sen, jos haluat tietää enemmän aiheesta). Kun venymäliuska muuttaa vastuksensa, se tasapainottaa siltaa ja myös jännite muuttuu. Joten näin Wheatstonen silta muuntaa vastuksen vaihtelut jännitearvoiksi.
Mutta tämä jännitteen muutos on edelleen hyvin pieni, joten sen lisäämiseksi meidän on käytettävä HX711-moduulia. HX711 on 24-bittinen differentiaalinen ADC, tällä tavalla voimme mitata hyvin pieniä jännitemuutoksia. se antaa arvot 0 - 2 eksponentiaalista 24.
Tarvittavat komponentit Arduino-pohjaiseen punnituslaitteeseen
Jotta projekti olisi mahdollisimman yksinkertainen, olemme käyttäneet hyvin yleisiä komponentteja, jotka löydät mistä tahansa paikallisesta harrastekaupasta. Alla oleva kuva antaa sinulle käsityksen komponenteista. Lisäksi meillä on alla lueteltu materiaaliluettelo (BOM).
- Punnituskenno (Käytämme 10 kg: n punnituskennoa)
- HX 711 -vahvistinmoduuli
- Arduino Nano
- I2C LCD 16X2 - I2C-yhteensopiva
- 1k vastus -2 Nro
- LEDit -2Ei
- Summeri
- Yhteinen piirilevy
- 7,4 V: n akku (jos haluat sen kannettavan)
- LM7805-jännitesäädin
Arduino-pohjainen punnituslaite - piirikaavio
Punnituskennossa on neljä johtoa, jotka ovat punaisia, mustia, vihreitä ja valkoisia. Tämä väri voi vaihdella valmistajien mukaan, joten on parempi viitata tietolomakkeeseen. Yhdistä punainen HX711-kortin E + -laitteeseen, musta E-liitäntään, valkoinen A + -liitäntään ja vihreä A-, Dout- ja D4-korttiin ja vihreä D4- ja D5-korttiin. Liitä painonappien toinen pää D3-, D8-, D9- ja muihin päihin maahan. Meillä on I2C LCD, joten liitä SDA A4: ään ja SCL A5: een. Liitä LCD: n, HX711: n ja Arduinon maa maahan, liitä myös VCC: t Arduinon 5Vpiniin. Kaikki moduulit toimivat 5 V: n jännitteellä, joten olemme lisänneet LM7805-jännitesäätimen. Jos et halua sen olevan kannettava, voit virrata Arduinon suoraan USB-kaapelilla.
Piirin tekeminen pisteviivalla
Olemme juotaneet kaikki komponentit yhteiselle katkoviivalle. Käytimme naispuolisia otsikoita juottaaksemme Arduinon ja ADC: n piirilevyllä, ja olemme myös käyttäneet johtoja kaikkien painikkeiden ja LEDien kytkemiseen. Kun kaikki juotosprosessit on saatu päätökseen, olemme varmistaneet, että oikea 5 V tulee ulos LM7805: stä. Lopuksi olemme asettaneet kytkimen virran päälle / pois päältä. Kun olimme kaikki valmiit, se näytti alla olevalta kuvalta.
Kotelon rakentaminen Arduino-pohjaiselle punnituskoneelle
Kuten näette, punnituskennossa on joitain ruuvikierteitä, joten voimme kiinnittää sen pohjalevyyn. Käytämme vaakapohjan pohjana PVC-levyä, jota varten leikkaamme ensin 20 * 20 cm neliön ja neljä 20 * 5 suorakulmiota PVC-levystä. Sitten kovalla liimalla liimattiin jokainen kappale ja teimme pienen kotelon.
Muista, että emme korjanneet toista puolta, koska meidän on asetettava painikkeet, LEDit ja nestekidenäyttö siihen. Sitten käytimme muovilevyä asteikon yläosaan. Ennen kuin teet tämän asennuksen pysyväksi, meidän on varmistettava, että meillä on riittävästi tilaa maasta punnituskennoon, jotta se pystyy taipumaan, joten panimme ruuvit ja mutterit punnituskennon ja alustan väliin, lisäsimme myös jotkut muoviset välikappaleet punnituskennon ja yläosan välissä. käytimme pyöreää muovilevyä tasapainon huipputekijänä.
Sitten sijoitimme LCD-näytön, LEDit ja painikkeet etupaneeliin, ja kaikki liitettiin pitkällä eristetyllä johdolla. Kun johdotus on saatu päätökseen, liimattiin etupaneeli pääjalustaan jonkin verran kallistuksella, jotta voimme lukea arvot LCD-näytöltä helposti. lopuksi kiinnitimme pääkytkimen vaakatasoon ja siinä kaikki. Näin teimme kehon painoskaalaamme varten.
Voit suunnitella ideoillasi, mutta muista sijoittaa punnituskennot kuten kuvassa.
Arduino-punnituskone - koodi
Kun digitaalisen mittakaavan rakennusprosessi on nyt valmis, voimme siirtyä ohjelmointiosaan. Ohjelmoinnin helpottamiseksi aiomme käyttää HX711-kirjastoa, EEPROM-kirjastoa ja LiquidCrystal-kirjastoa. Voit ladata HX711-kirjaston virallisesta GitHub-arkistosta tai siirtyä työkaluihin > sisällyttää kirjasto > hallita kirjastoa ja hakea sitten kirjastosta avainsanalla HX711, kun olet ladannut kirjaston, Asenna se Arduino ideen.
Ensinnäkin meidän on kalibroitava punnituskenno ja tallennettava kyseinen arvo EEPROM: iin. Siirry sitä varten tiedostoon> esimerkkejä> HX 711_ADC ja valitse sitten kalibrointikoodi. Aseta vaaka vakaalle tasopinnalle ennen koodin lataamista. Lataa sitten koodi Arduinoon ja avaa sarjamonitori. Muuta sitten siirtonopeudeksi 572600. Monitori pyytää nyt ottamaan painon, jota varten meidän on painettava t ja syötettävä.
Nyt meidän on asetettava tunnettu paino tasapainoon, minun tapauksessani, joka on 194 g. Kun olet asettanut tunnetun painon, kirjoita paino sarjavalvontaan ja paina Enter.
Sarjamonitori kysyy, haluatko tallentaa arvon EEPROM-tiedostoon vai ei, joten kirjoita Y valitaksesi kyllä. Nyt voimme nähdä painon sarjavalvonnassa.
Tämän projektin pääkoodi, jonka kehitimme HX711-kirjaston esimerkkikaaviosta. Voit ladata tämän projektin koodin alhaalta.
Koodausosioon lisättiin ensin kaikki kolme kirjastoa. HX711-kirjasto on tarkoitettu lataussoluarvojen ottamiseen. EEPROM on sisäänrakennettu Arduino ide -kirjasto, jota käytetään arvojen tallentamiseen EEPROM-muistiin, ja LiquidCrystal-kirjasto on tarkoitettu l2C LCD -moduulille.
#sisältää
Sitten määritetään kokonaislukuja eri nastoille ja määritetyille arvoille. HX711_ADC loadcell -toiminto on tarkoitettu Doutin ja kellonastan asettamiseen.
const int HX711_uuti = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; pitkä t; const int Up_buttonPin = 9; const int Alas-painikePin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
Asennusosassa aloitimme ensin sarjamoduulin, tämä on tarkoitettu vain virheenkorjaukseen. Sitten määritimme nastatilat, kaikki painikkeet määritetään syötteeksi. Arduino PULL UP -toiminnon avulla asetamme nastat loogiselle korkeudelle normaalisti. Joten emme halua käyttää mitään ulkoisia vastuksia siihen.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Seuraavat koodirivit ovat I2C LCD: n asettamiseen. Ensinnäkin näytimme tervetulotekstin LCD.print () -toiminnon avulla, kahden sekunnin kuluttua tyhjensimme näytön lcd.clear () -toiminnolla . Toisin sanoen alussa näytöllä näkyy ARDUINO BALANCE tervetulotekstinä, ja kahden sekunnin kuluttua se tyhjentää ja näyttää mittauspainot.
lcd.init (); lcd.taustavalo (); lcd.setCursor (0, 0); lcd.print ("ARDUINO-TASE"); lcd.setCursor (0, 1); lcd.print ("mitataan"); viive (2000); lcd.clear ();
Sitten aloimme lukea arvoja loadcellista käyttämällä loadCell.begin () -toimintoa, sen jälkeen luimme EEPROM kalibroiduille arvoille, teemme sen käyttämällä EEPROM.get () -toimintoa. Toisin sanoen, olemme jo tallentaneet arvon kalibrointipiirustuksen avulla EEPROM- osoitteeseen, otamme vain arvon uudelleen.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
Silmukkaosassa tarkistetaan ensin, onko mitään tietoja lataussolusta käytettävissä LoadCell.update () -ominaisuuden avulla , jos saatavilla, luemme ja tallennamme kyseiset tiedot, käytämme sitä varten LoadCell.getData () . Seuraavaksi meidän on näytettävä tallennettu arvo LCD-näytöllä. Tätä varten käytimme LCD.print () -toimintoa. tulostamme myös asetetun painon. Asetettu paino asetetaan painonappilaskurin avulla. Se selitettiin viimeisessä osassa.
if (LoadCell.update ()) newDataReady = tosi; 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 ("paino:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Seuraavaksi asetetaan taaran arvo, jota varten luemme ensin taaran painikkeen tilan digitalRead () -toiminnolla, jos tila on matala, taaramme sen painon nollaan. Tämän painoasteikon taaratoiminto on tuoda lukemat nollaan. Esimerkiksi, jos meillä on kulho, johon tavarat ladataan, nettopaino on kulhon paino + tavaroiden paino. Jos painamme taarapainiketta kulholla punnituskennossa ennen tavaroiden lataamista, korin paino mitätöidään ja voimme mitata tavaroiden painon yksin.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Nyt meidän on asetettava ehdot erilaisille merkinnöille, kuten äänimerkin viiveen ja led-tilan asettaminen. Teimme että käyttämällä jos olosuhteet, meillä on yhteensä kolme ehtoa. Ensinnäkin lasketaan asetetun painon ja mitatun painon välinen ero ja tallennetaan sitten arvo muuttujaan k.
kelluva k = buttonPushCounter-i;
1. Jos asetetun painon ja mittauspainon ero on suurempi tai yhtä suuri kuin 50 g, summeri antaa äänimerkin 200 millisekunnin viiveellä (hitaasti).
if (k> = 50) { digitalWrite (6, HIGH); viive (200); digitalWrite (6, LOW); viive (200); }
2. Jos asetetun painon ja mittauspainon ero on alle 50 ja suurempi kuin 1 gramma, summeri antaa äänimerkin 50 millisekunnin viiveellä (nopeammin).
if (k <50 && k> 1) { digitalWrite (6, HIGH); viive (50); digitalWrite (6, LOW); viive (50); }
3. Kun mittauspaino on yhtä suuri tai suurempi kuin asetettu arvo, tämä käynnistää vihreän ledin ja sammuttaa summerin ja punaisen ledin.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
Meillä on vielä kaksi tyhjää toimintoa () asetetun painon asettamiseksi (painalluksen laskemiseksi).
Toiminto, joka lisää asetettua arvoa 10 g: lla jokaiselle painallukselle Tämä tapahtuu käyttämällä Arduinon digitalRead- toimintoa, jos nasta on alhaalla, mikä tarkoittaa, että painiketta painetaan ja joka lisää arvoa 10 gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Samoin, tarkistus on tarkoitettu vähentämään asetettua arvoa 10 g: lla kutakin painallusta kohti.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Tämä merkitsee ohjelmointiosan loppua.
Tämä Arduino-pohjainen elektroninen vaaka on täydellinen mittaamaan painoja jopa 10 kg (voimme lisätä tätä rajaa käyttämällä suurempaa nimelliskuormaa). Tämä on 99% tarkkuus alkuperäisiin mittauksiin.
Jos sinulla on kysyttävää tästä Arduino-pohjaisesta LCD-painotasapainokoneen piiristä, lähetä se kommenttiosioon, kiitos!