- „Arduino“ svarstyklių darbas
- Komponentai, reikalingi „Arduino“ pagrindo svarstyklėms
- Arduino svėrimo mašina - grandinės schema
- Grandinės sudarymas ant punktyrinės lentos
- „Arduino“ pagrindo svarstyklių korpuso statyba
- „Arduino“ svėrimo mašina - kodas
Skaitmeninės apkrovos svarstyklės yra dar vienas šių dienų inžinerijos ir dizaino stebuklas. Taip, mes kalbame apie svėrimo svarstykles, kurias dažnai matome daugumoje maisto prekių parduotuvių ir kitų vietų, tačiau ar kada susimąstėte, kaip veikia svorio svarstyklės? Norėdami atsakyti į šį klausimą, šiame projekte mes apžvelgsime apkrovos elementą ir jo veikimą. Galiausiai su „HX711“ svorio jutikliu sukursime nešiojamąją „Arduino“ apkrovos svarstyklę, galinčią išmatuoti svorį iki 10 kg.
Ši svėrimo mašina puikiai tinka vietinėms parduotuvėms, kur jie pakuoja daiktus dideliais kiekiais. Kaip ir komerciniai produktai, mūsų svorio skalėje bus nulinis mygtukas, kuris nulinės skalę. Be to, ji turi galimybę nustatyti matavimo svorį, kai matavimo svoris pasiekia nustatytą svorį, garsinis signalas greitai pypteli ir sustoja, kai nustatytas svoris yra lygus matavimo svoriui. Tokiu būdu vartotojas gali jį supakuoti tik išgirdęs garsą ir jam nereikėtų žiūrėti į ekraną. Kadangi tai yra labai paprastas projektas, mes jį sukursime labai lengvai, naudodami tokius komponentus kaip „Arduino“ ir įtempio matuoklio apkrovos elementą. Taigi, nedelsdami leiskitės į tai.
Ankstesniame straipsnyje mes sukūrėme tokius projektus kaip „Raspberry Pi“ svorio jutiklis ir „IoT Smart Container with Email Alert and Web Monitoring“, naudodami populiarųjį „HX711“ apkrovos elementų stiprintuvo modulį. Taigi, patikrinkite, ar tai jūsų reikalavimas.
„Arduino“ svarstyklių darbas
Pagrindinis šio projekto komponentas yra apkrovos elementas ir HX711 krūvio elemento stiprintuvo modulis. Kaip matote, viena pusė pažymėta dešimčia kilogramų. Be to, galite pastebėti tam tikrus baltus apsauginius klijus virš krovimo elemento, o išeina keturios skirtingų spalvų laidai, kurie vėliau straipsnyje atskleis paslaptį po baltais apsauginiais klijais ir šių keturių spalvų laidų funkciją.
Krūvio elementas yra daviklis, kuris jėgą ar slėgį paverčia elektros išėjimu. Jis turi dvi puses, tarkime, dešinę ir kairę, ir yra pagamintas iš aliuminio blokų. Kaip matote, viduryje medžiaga yra praskiedžiama įdėjus didelę skylę. Štai kodėl būtent ta vieta deformuojasi, kai apkrova dedama ant kalno pusės. Dabar įsivaizduokite, kad dešinės pusės elementas yra pritvirtintas prie pagrindo, o kairė pusė yra ta vieta, kur dedama apkrova. Ši konfigūracija deformuoja deformacijos matuoklio apkrovos elementą dėl milžiniškos skylės viduryje.
Kai apkrova dedama ant apkrovos elemento apkrovos pusės, viršutinė dalis patirs įtampą, o apatinė dalis - suspaudimą. Štai kodėl aliuminio strypas lenkiasi žemyn kairėje pusėje. Jei išmatuosime šią deformaciją, galime išmatuoti jėgą, kuri buvo padaryta aliuminio blokui, ir būtent tai ir padarysime.
Dabar lieka klausimas, kas yra baltųjų apsauginių klijų viduje? Šių apsauginių klijų viduje rasime labai ploną elastingą komponentą, kuris vadinamas įtempimo matuokliu. Įtempimo matuoklis yra komponentas, naudojamas deformacijai matuoti. Jei atidžiau pažvelgsime į šį komponentą, galime pamatyti dvi jungties pagalvėles, tada turime laidų laidų modelį su pasikartojančiais įlinkiais. Šis laidus laidas turi apibrėžtą varžą. Kai mes jį sulenksime, pasipriešinimo vertė pasikeis? Taigi, viena įtempimo matuoklio pusė yra sumontuota ir pritvirtinta toje vietoje, jei ant kitos aliuminio juostos pusės uždėsime svorį, tai privers deformacijos matuoklį sulenkti, o tai sukels pasipriešinimą. Kaip tai vyksta iš tikrųjų? Laidus tempimo matuoklio modelis yra pagamintas iš vario, ši viela turės tam tikrą plotą ir ilgį, todėl šie du vienetai suteiks laido atsparumą. Vielos varža priešinasi srovės srautui. Dabar akivaizdu, kad jei šios vielos plotas mažėja,mažiau elektronų galėtų praeiti, o tai reiškia mažesnę srovę. Dabar, jei padidinsime plotą, jis padidins laidininko varžą. Jei šiai vielai bus pritaikyta tam tikra jėga, tai ištemps plotą ir tuo pačiu mažės, padidės pasipriešinimas. Bet šis atsparumo pokytis yra labai mažas. Jei ištempsime tempimo matuoklį, pasipriešinimas padidės, o jei jį suspauksime, pasipriešinimas sumažės. Norėdami išmatuoti jėgą, turime išmatuoti pasipriešinimą. Tiesiogiai matuoti varžą ne visada yra praktiška, nes pokytis yra labai mažas. Taigi, užuot matavę varžą, galime lengvai išmatuoti įtampą. Taigi, šiuo atveju mes turime konvertuoti matuoklio išėjimą iš varžos verčių į įtampos vertes.Jei šiai vielai bus pritaikyta tam tikra jėga, tai ištemps plotą ir tuo pačiu mažės, padidės pasipriešinimas. Bet šis atsparumo pokytis yra labai mažas. Jei ištempsime įtempimo matuoklį, pasipriešinimas padidės, o jei jį suspausime, pasipriešinimas sumažės. Norėdami išmatuoti jėgą, turime išmatuoti pasipriešinimą. Tiesiogiai matuoti varžą ne visada yra praktiška, nes pokytis yra labai mažas. Taigi, užuot matavę varžą, galime lengvai išmatuoti įtampą. Taigi, šiuo atveju mes turime konvertuoti matuoklio išėjimą iš varžos verčių į įtampos vertes.Jei šiai vielai bus pritaikyta tam tikra jėga, tai ištemps plotą ir tuo pačiu mažės, padidės pasipriešinimas. Bet šis atsparumo pokytis yra labai mažas. Jei ištempsime įtempimo matuoklį, pasipriešinimas padidės, o jei jį suspausime, pasipriešinimas sumažės. Norėdami išmatuoti jėgą, turime išmatuoti pasipriešinimą. Tiesiogiai matuoti varžą ne visada yra praktiška, nes pokytis yra labai mažas. Taigi, užuot matavę varžą, galime lengvai išmatuoti įtampą. Taigi, šiuo atveju mes turime konvertuoti matuoklio išėjimą iš varžos verčių į įtampos vertes.pasipriešinimas sumažės. Norėdami išmatuoti jėgą, turime išmatuoti pasipriešinimą. Tiesiai matuoti varžą ne visada yra praktiška, nes pokytis yra labai mažas. Taigi, užuot matavę varžą, galime lengvai išmatuoti įtampą. Taigi, šiuo atveju mes turime konvertuoti matuoklio išėjimą iš varžos verčių į įtampos vertes.pasipriešinimas sumažės. Norėdami išmatuoti jėgą, turime išmatuoti pasipriešinimą. Tiesiogiai matuoti varžą ne visada yra praktiška, nes pokytis yra labai mažas. Taigi, užuot matavę varžą, galime lengvai išmatuoti įtampą. Taigi, šiuo atveju mes turime konvertuoti matuoklio išėjimą iš varžos verčių į įtampos vertes.
Tai galime padaryti naudodami Wheatstone tiltą. Įtempimo matuoklį dedame į Wheatstone tiltą, jei tiltas yra subalansuotas, vidurio taško įtampa turėtų būti lygi nuliui (anksčiau mes sukūrėme projektą, kuriame aprašėme, kaip veikia Wheatstone tiltas, galite tai patikrinti, jei norite daugiau sužinoti apie temą). Kai deformacijos matuoklis pakeis savo atsparumą, jis išbalansuos tiltą, taip pat pasikeis įtampa. Taigi, Wheatstone tiltas paverčia pasipriešinimo pokyčius įtampos vertėmis.
Bet šis įtampos pokytis vis dar yra labai mažas, todėl norėdami tai padidinti, turime naudoti HX711 modulį. HX711 yra 24 bitų diferencialinis ADC, tokiu būdu galėtume išmatuoti labai mažus įtampos pokyčius. tai duos reikšmes nuo 0 iki 2 eksponentinių 24.
Komponentai, reikalingi „Arduino“ pagrindo svarstyklėms
Kad šis projektas būtų kuo paprastesnis, mes panaudojome labai bendrus komponentus, kuriuos galite rasti bet kurioje vietinėje pomėgių parduotuvėje. Žemiau pateiktas paveikslėlis suteiks jums idėją apie komponentus. Be to, mes turime toliau išvardytą medžiagų sąrašą (BOM).
- Matavimo elementas (mes naudojame 10 kg svorio matuoklį)
- HX 711 stiprintuvo modulis
- „Arduino Nano“
- I2C LCD 16X2 - suderinamas su I2C
- 1k rezistorius -2 Nr
- Šviesos diodai -2Ne
- Buzeris
- Bendra PCB
- 7.4V baterija (jei norite, kad ji būtų nešiojama)
- LM7805 įtampos reguliatorius
Arduino svėrimo mašina - grandinės schema
Krovinio elementas turi keturis laidus, kurie yra raudoni, juodi, žali ir balti. Ši spalva gali skirtis priklausomai nuo gamintojų, todėl geriau kreiptis į duomenų lapą. Prijunkite raudoną spalvą prie HX711 plokštės E +, juodą - prie E-, baltą - prie A +, žalią - prie A-, Dout ir lentos laikrodis - atitinkamai prie D4 ir D5. Prijunkite vieną mygtukų galą prie D3, D8, D9 ir kitus galus prie žemės. Mes turime I2C LCD, todėl prijunkite SDA prie A4, o SCL - prie A5. Prijunkite LCD, HX711 ir „Arduino“ žemę prie žemės, taip pat prijunkite VCC prie „ Arduino “ 5Vpin. Visi moduliai veikia esant 5 V įtampai, todėl mes pridėjome LM7805 įtampos reguliatorių. Jei nenorite, kad jis būtų nešiojamas, galite tiesiogiai maitinti „Arduino“ naudodami USB kabelį.
Grandinės sudarymas ant punktyrinės lentos
Mes sulitavome visus komponentus ant bendros punktyrinės lentos. Mes naudojome moteriškas antraštes, kad lituotume „Arduino“ ir ADC su grandine, taip pat naudojome laidus, kad sujungtume visus mygtukus ir šviesos diodus. Baigę visus litavimo procesus, įsitikinome, kad iš LM7805 išeina tinkamas 5V. Galiausiai įjungėme / išjungėme grandinę. Kai mes visi baigėme, atrodė žemiau pateiktas vaizdas.
„Arduino“ pagrindo svarstyklių korpuso statyba
Kaip matote, apkrovos elementas turi keletą varžtų sriegių, todėl mes galime jį pritvirtinti ant pagrindo plokštės. Savo svarstyklių pagrindui naudosime PVC plokštę, tam pirmiausia iš PVC lentos iškirpėme 20 * 20 cm kvadratą ir keturis 20 * 5 stačiakampius. Tada, naudodami kietus klijus, mes suklijavome kiekvieną gabalėlį ir padarėme mažą gaubtą.
Atminkite, kad mes nepataisėme vienos pusės, nes ant jos turime uždėti mygtukus, šviesos diodus ir skystųjų kristalų ekraną. Tada svarstyklių viršuje naudojome plastikinę lentą. Prieš nustatydami, kad ši sąranka būtų nuolatinė, turime įsitikinti, kad nuo žemės iki apkrovos elemento turime pakankamai vietos, kad ji galėtų sulenkti, todėl tarp apkrovos elemento ir pagrindo įdėjome varžtus ir veržles, taip pat pridėjome kai kurie plastikiniai tarpikliai tarp matavimo elemento ir viršutinės dalies. Mes naudojome apvalų plastikinį lakštą kaip geriausią pusiausvyros išmanumą.
Tada mes įdėjome LCD ekraną, šviesos diodus ir mygtukus prie priekinio skydelio ir viską, kas sujungta ilga izoliuota viela. Pabaigę laidų procesą, priekinį skydą šiek tiek pakreipėme ant pagrindo, kad galėtume labai lengvai nuskaityti LCD vertes. galiausiai pagrindinį jungiklį pritvirtinome prie svarstyklių šono ir viskas. Taip mes padarėme kūną pagal savo svorio skalę.
Galite kurti savo idėjas, tačiau nepamirškite įdėti apkrovos elementų, panašių į paveikslėlį.
„Arduino“ svėrimo mašina - kodas
Kadangi dabar baigėme kurti skaitmeninės skalės procesą, galime pereiti prie programavimo dalies. Kad būtų lengviau programuoti, ketiname naudoti HX711 biblioteką, EEPROM biblioteką ir „LiquidCrystal“ biblioteką. Galite atsisiųsti HX711 biblioteką iš oficialios „GitHub“ saugyklos arba eiti į įrankius > įtraukti biblioteką > tvarkyti biblioteką, tada ieškoti bibliotekoje naudodami raktinį žodį HX711, atsisiųsdami biblioteką, įdiekite ją į „Arduino ide“.
Pirmiausia turime sukalibruoti apkrovos langelį ir išsaugoti tą vertę EEPROM. Tam eikite į failą> pavyzdžiai> HX 711_ADC, tada pasirinkite kalibravimo kodą. Prieš įkeldami kodą, svarstykles padėkite ant stabilaus plokštumos paviršiaus. Tada įkelkite kodą į „Arduino“ ir atidarykite nuoseklųjį monitorių. Tada pakeiskite duomenų perdavimo greitį į 572600. Dabar monitorius paprašys paimti svorį, tam turime paspausti t ir įvesti.
Dabar mums reikia uždėti žinomą svorį ant svarstyklių, mano atveju, tai yra 194 gm. Įdėję žinomą svorį, įveskite svorį į nuoseklųjį monitorių ir paspauskite „Enter“.
Dabar serijinis monitorius klausia, ar norite išsaugoti reikšmę EEPROM, ar ne, todėl įveskite Y, jei norite pasirinkti „Taip“. Dabar serijiniame monitoriuje galime pamatyti svorį.
Pagrindinis šio projekto kodas, kurį sukūrėme iš HX711 bibliotekos eskizo pavyzdžio. Šio projekto kodą galite atsisiųsti iš apačios.
Kodavimo skyriuje pirmiausia pridėjome visas tris bibliotekas. HX711 biblioteka skirta apkrovos elementų reikšmėms nustatyti. EEPROM yra integruota „Arduino ide“ biblioteka, naudojama vertėms saugoti EEPROM, o „LiquidCrystal“ biblioteka skirta „l2C“ LCD moduliui.
# įtraukti
Tada nustatomi sveikieji skaičiai skirtingiems kaiščiams ir priskirtoms vertėms. HX711_ADC „loadcell“ funkcija skirta nustatyti „Dout“ ir laikrodžio kaiščius.
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; ilgas t; const int Aukštesnis_ mygtukasPin = 9; const int Down_buttonPin = 8; plūduriuojantis mygtukasPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; plaukti žemyn_ mygtukasValstybė = 0; plaukti žemyn_pastabaButtonState = 0;
Sąrankos skiltyje pirmiausia pradėjome nuoseklųjį monitorių, tai skirtas tik derinimui. Tada mes apibrėžėme kaiščių režimus, visi mygtukai yra apibrėžti kaip įvestis. Naudodami „Arduino PULL UP“ funkciją, mes nustatėme kaiščius į logiškai aukštą, paprastai. Taigi, mes nenorime tam naudoti jokių išorinių rezistorių.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode („Up_buttonPin“, INPUT_PULLUP); „pinMode“ („Down_buttonPin“, INPUT_PULLUP);
Šios kodo eilutės yra skirtos I2C LCD nustatymui. Pirma, mes rodėme pasveikinimo tekstą naudodamiesi funkcija LCD.print () , po dviejų sekundžių išvalėme ekraną naudodami lcd.clear () . Tai yra, pradžioje ekrane rodomas ARDUINO BALANCE kaip pasveikinimo tekstas, o po dviejų sekundžių jis bus išvalytas ir rodomas matavimo svoris.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("pamatuokime"); vėlavimas (2000); lcd.clear ();
Tada pradėjome skaityti reikšmes iš „loadcell“ naudodami funkciją loadCell.begin () , po to perskaitėme kalibruotų verčių EEPROM, tai darome naudodami funkciją EEPROM.get () . Tai yra, mes jau išsaugojome vertę naudodami kalibravimo eskizą EEPROM adresu, mes tiesiog perimame šią vertę.
„LoadCell.begin“ (); EEPROM.get (calVal_eepromAdress, calibrationValue);
Pirmiausia ciklo skyriuje patikriname, ar yra duomenų iš apkrovos langelio, naudodami „ LoadCell.update ()“, jei yra, mes tuos duomenis perskaitėme ir saugome, tam naudojame „ LoadCell.getData“) . Toliau turime parodyti išsaugotą vertę LCD. Norėdami tai padaryti, mes naudojome LCD.print () funkciją. taip pat atspausdiname nustatytą svorį. Nustatytas svoris nustatomas mygtuko skaitiklio pagalba. Tai paaiškinta paskutiniame skyriuje.
if (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (milis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("nustatyti wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print („GM“); lcd.setCursor (0, 1); lcd.print ("svoris:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print („GM“);
Toliau nustatome taros vertę, tam pirmiausia skaitome taros mygtuko būseną naudodami „ digitalRead ()“ funkciją, jei būsena yra maža, mes tą svorį nulupame iki nulio. Šios svorio skalės taros funkcija yra nuliniai rodmenys. Pavyzdžiui, jei mes turime dubenį, į kurį daiktai yra pakrauti, tada grynasis svoris bus dubens svoris + daiktų svoris. Jei prieš kraunant daiktus paspausime taros mygtuką su dubeniu ant apkrovos langelio, krepšelio svoris bus paneigtas ir mes galėsime matuoti vien tik daiktų svorį.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Dabar turime nustatyti sąlygas skirtingoms indikacijoms, pvz., Nustatyti garsinio signalo vėlavimą ir šviesos būseną. Mes padarėme, kad naudojant , jei sąlygos, turime tris sąlygas iš viso. Pirmiausia apskaičiuojame nustatyto svorio ir matuojamo svorio skirtumą, tada tą vertę išsaugome kintamajame k
plūdė k = buttonPushCounter-i;
1. Jei skirtumas tarp nustatyto svorio ir matuojamo svorio yra didesnis arba lygus 50 gms, garsinis signalas pypteli 200 milisekundžių vėlavimu (lėtai).
if (k> = 50) { digitalWrite (6, HIGH); vėlavimas (200); „digitalWrite“ (6, LOW); vėlavimas (200); }
2. Jei skirtumas tarp nustatyto svorio ir matuojamo svorio yra mažesnis nei 50 ir didesnis nei 1 gramas, garsinis signalas pypteli 50 milisekundžių vėlavimu (greičiau).
if (k <50 && k> 1) { digitalWrite (6, HIGH); vėlavimas (50); „digitalWrite“ (6, LOW); vėlavimas (50); }
3. Kai matavimo svoris bus lygus arba didesnis už nustatytą vertę, tai įjungs žalią lemputę ir išjungs garsinį signalą bei raudoną lemputę.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); „digitalWrite“ (12, HIGH); }
Mes turime dar dvi negaliojančias funkcijas () nustatytam svoriui nustatyti (mygtuko paspaudimui skaičiuoti).
Funkcija padidina nustatytą vertę 10gms kiekvienam paspaudimui. Tai daroma naudojant „ Arduino“ funkciją „ digitalRead“ , jei kaištis yra žemas, tai reiškia, kad mygtukas yra paspaustas ir vertė padidės 10 gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = mygtukasPushCounter + 10; }
Panašiai
patikrinimas yra skirtas sumažinti nustatytą vertę 10gms kiekvienam paspaudimui.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = mygtukasPushCounter - 10; }
Tai žymi programavimo dalies pabaigą.
Ši „Arduino“ pagrindu sukurta elektroninė svarstyklė puikiai tinka matuoti svorį iki 10 kg (šią ribą galime padidinti naudodami aukštesnį vardinį apkrovos elementą). Tai yra 99% tikslumas, palyginti su pradiniais matavimais.
Jei turite klausimų dėl šios „Arduino“ pagrindu sukurtos LCD svorio balansavimo mašinos grandinės, prašome ją paskelbti komentarų skyriuje, ačiū!