- Mașina de cântărit Arduino funcționează
- Componente necesare pentru mașina de cântărit pe bază de Arduino
- Mașină de cântărit pe bază de Arduino - Diagrama circuitului
- Realizarea circuitului pe o bordură de puncte
- Construirea unei incinte pentru aparatul de cântărit pe bază de Arduino
- Mașină de cântărit Arduino - Cod
Scările de încărcare digitale sunt un alt miracol al ingineriei și proiectării moderne. Da, vorbim despre cântarul pe care îl vedem adesea în majoritatea magazinelor alimentare și în alte locuri, dar v-ați întrebat vreodată cum funcționează o cântare ? Pentru a răspunde la această întrebare, în acest proiect, vom analiza celula de încărcare și funcționarea acesteia. În cele din urmă, vom construi o scală de încărcare portabilă pe bază de Arduino cu senzorul de greutate HX711, care poate măsura greutăți de până la 10 kg.
Această mașină de cântărit este perfectă pentru magazinele locale, unde ambalează articole în cantitate mare. La fel ca produsele comerciale, cântarul nostru de greutate va avea un buton zero care pune la zero cântarul. De asemenea, are opțiunea de a seta greutatea pentru măsurare, când greutatea de măsurare atinge greutatea stabilită, un buzzer emite un bip rapid și se oprește când greutatea setată este egală cu greutatea de măsurare. În acest fel, utilizatorul îl poate împacheta doar auzind sunetul și nu ar trebui să se uite la ecran. Deoarece acesta este un proiect foarte simplu, vom construi acest lucru foarte ușor folosind componente precum Arduino și celula de sarcină a manometrului. Deci, fără alte întârzieri, să intrăm direct în asta.
Într-un articol anterior, am realizat proiecte precum senzorul de greutate bazat pe Raspberry Pi și containerul inteligent IoT cu alertă de e-mail și monitorizare web utilizând popularul modul de amplificare a celulelor de încărcare HX711. Deci, verificați dacă aceasta este cerința dvs.
Mașina de cântărit Arduino funcționează
Componenta principală a acestui proiect este o celulă de încărcare și HX711 sarcină modul amplificator de celule. După cum puteți vedea, o parte este marcată cu zece kilograme. De asemenea, puteți observa un fel de adeziv de protecție alb peste celula de încărcare și patru culori diferite ale firelor vor ieși, va descoperi secretul sub adezivul de protecție alb și funcția acestor fire de patru culori mai târziu în articol.
O celulă de sarcină este un traductor care transformă forța sau presiunea în ieșire electrică. Are două laturi, să zicem partea dreaptă și partea stângă, și este realizat din blocuri de aluminiu. După cum puteți vedea, în mijlocul materialului este subțiat prin punerea unei găuri mari. Motiv pentru care acesta este punctul care suferă o deformare atunci când o sarcină este plasată pe partea de montare. Acum imaginați-vă că celula din partea dreaptă este montată la bază și partea stângă este locul în care este plasată sarcina, această configurație deformează celula de sarcină a gabaritului de tensiune din cauza găurii gigantice din mijloc.
Când o sarcină este plasată pe partea de încărcare a celulei de încărcare, partea superioară va suferi tensiune, iar partea inferioară va suferi compresie. De aceea bara de aluminiu se îndoaie în jos pe partea stângă. Dacă măsurăm această deformare, putem măsura forța care a fost aplicată blocului de aluminiu și exact asta vom face.
Acum, rămâne întrebarea ce este în interiorul lipiciului protector alb? În interiorul acestui lipici de protecție, vom găsi o componentă elastică foarte subțire, numită tensometru. Un manometru este o componentă care este utilizată pentru a măsura tensiunea. Dacă aruncăm o privire mai atentă asupra acestei componente, putem vedea două plăcuțe de conectare și apoi avem un model conductiv de sârmă cu devieri repetitive. Acest fir conductor are o rezistență definită. Când o îndoim, valoarea rezistenței se va schimba? Deci, o parte a manometrului este montată și fixată într-un loc, dacă așezăm o greutate pe cealaltă parte a barei de aluminiu, acest lucru va forța manometrul să se îndoaie, ceea ce va provoca o schimbare a rezistenței. Cum se întâmplă acest lucru de fapt? Modelul conductiv al manometrului este realizat din cupru, acest fir va avea o anumită suprafață și lungime, astfel încât aceste două unități vor da rezistența firului. Rezistența unui fir se opune fluxului de curent. Acum este evident că, dacă suprafața acestui fir devine mai mică,ar putea trece mai puțini electroni, ceea ce înseamnă un curent mai mic. Acum, dacă mărim aria, aceasta va crește rezistența unui conductor. Dacă se aplică o forță acestui fir, aceasta va întinde zona și va deveni mai mică în același timp, rezistența crește. Dar această variație de rezistență este foarte mică. Dacă întindem manometrul, rezistența va crește și, dacă îl comprimăm, rezistența va scădea. Pentru a măsura forța, trebuie să măsurăm rezistența. Măsurarea rezistenței în mod direct nu este întotdeauna practică, deoarece schimbarea este foarte mică. Deci, în loc să măsurăm rezistența, putem măsura tensiunile cu ușurință. Deci, în acest caz, trebuie să convertim ieșirea manometrului de la valorile rezistenței la valorile tensiunii.Dacă se aplică o forță la acest fir, aceasta va întinde zona și va deveni mai mică în același timp, rezistența crește. Dar această variație de rezistență este foarte mică. Dacă întindem manometrul, rezistența va crește și, dacă îl comprimăm, rezistența va scădea. Pentru a măsura forța, trebuie să măsurăm rezistența. Măsurarea rezistenței în mod direct nu este întotdeauna practică, deoarece schimbarea este foarte mică. Deci, în loc să măsurăm rezistența, putem măsura tensiunile cu ușurință. Deci, în acest caz, trebuie să convertim ieșirea manometrului de la valorile rezistenței la valorile tensiunii.Dacă se aplică o forță la acest fir, aceasta va întinde zona și va deveni mai mică în același timp, rezistența crește. Dar această variație de rezistență este foarte mică. Dacă întindem manometrul, rezistența va crește și, dacă îl comprimăm, rezistența va scădea. Pentru a măsura forța, trebuie să măsurăm rezistența. Măsurarea rezistenței în mod direct nu este întotdeauna practică, deoarece schimbarea este foarte mică. Deci, în loc să măsurăm rezistența, putem măsura tensiunile cu ușurință. Deci, în acest caz, trebuie să convertim ieșirea manometrului de la valorile rezistenței la valorile tensiunii.rezistența va scădea. Pentru a măsura forța, trebuie să măsurăm rezistența. Măsurarea rezistenței în mod direct nu este întotdeauna practică, deoarece schimbarea este foarte mică. Deci, în loc să măsurăm rezistența, putem măsura tensiunile cu ușurință. Deci, în acest caz, trebuie să convertim ieșirea manometrului de la valorile rezistenței la valorile tensiunii.rezistența va scădea. Pentru a măsura forța, trebuie să măsurăm rezistența. Măsurarea rezistenței în mod direct nu este întotdeauna practică, deoarece schimbarea este foarte mică. Deci, în loc să măsurăm rezistența, putem măsura tensiunile cu ușurință. Deci, în acest caz, trebuie să convertim ieșirea manometrului de la valorile rezistenței la valorile tensiunii.
Putem face acest lucru cu ajutorul podului Wheatstone. Așezăm gabaritul de tensiune în podul Wheatstone dacă podul este echilibrat, tensiunea din punctul de mijloc ar trebui să fie zero (anterior am construit un proiect în care am descris cum funcționează un pod Wheatstone, puteți verifica asta dacă doriți să aflați mai multe despre subiect). Când manometrul își modifică rezistența, acesta va dezechilibra puntea și se va schimba și tensiunea. Deci, acesta este modul în care podul Wheatstone convertește variațiile de rezistență în valori de tensiune.
Dar această schimbare de tensiune este încă foarte mică, așa că, pentru a crește acest lucru, trebuie să folosim modulul HX711. HX711 este un ADC diferențial pe 24 de biți, în acest fel am putea măsura modificări de tensiune foarte mici. va da valori de la 0 la 2 exponențiale 24.
Componente necesare pentru mașina de cântărit pe bază de Arduino
Pentru a face acest proiect cât mai simplu posibil, am folosit componente foarte generice pe care le puteți găsi în orice magazin local de hobby-uri. Imaginea de mai jos vă va oferi o idee despre componente. Mai mult, avem lista materialelor (BOM) enumerate mai jos.
- Celulă de încărcare (folosim o celulă de încărcare de 10 kg)
- Modul amplificator HX 711
- Arduino Nano
- I2C LCD 16X2 - Compatibil I2C
- 1k rezistor -2 Nr
- LED-uri -2No
- Buzzer
- PCB comun
- Baterie de 7,4 V (dacă doriți să fie portabilă)
- Regulator de tensiune LM7805
Mașină de cântărit pe bază de Arduino - Diagrama circuitului
Celula de încărcare are patru fire care sunt roșii, negre, verzi și albe. Această culoare poate varia în funcție de producători, deci este mai bine să consultați fișa tehnică. Conectați roșu la E + al plăcii HX711, conectați negru la E-, conectați alb la A + și conectați verde la A-, Dout și ceasul plăcii conectați la D4 și respectiv D5. Conectați un capăt al butoanelor la D3, D8, D9 și alte capete la sol. Avem LCD I2C, deci conectați SDA la A4 și SCL la A5. Conectați solul LCD, HX711 și Arduino la sol, conectați, de asemenea, VCC-urile la 5Vpin al Arduino. Toate modulele funcționează pe 5V, așa că am adăugat un regulator de tensiune LM7805. Dacă nu doriți ca acesta să fie portabil, puteți alimenta direct Arduino folosind un cablu USB.
Realizarea circuitului pe o bordură de puncte
Am lipit toate componentele pe un panou de puncte obișnuit. Am folosit anteturi de sex feminin pentru a lipi Arduino și ADC cu placa de circuit, de asemenea, am folosit fire pentru a conecta toate butoanele și LED-urile. După ce s-a încheiat tot procesul de lipire, ne-am asigurat că ieșirea de 5V corespunzătoare din LM7805. În cele din urmă, am pus un comutator la pornirea / oprirea circuitului. După ce am terminat cu toții, arăta ca imaginea de mai jos.
Construirea unei incinte pentru aparatul de cântărit pe bază de Arduino
După cum puteți vedea, celula de încărcare are niște fire de șurub, așa că am putea să o montăm pe o placă de bază. Vom folosi o placă din PVC pentru baza scalei noastre, pentru aceasta, mai întâi tăiem 20 * 20 cm pătrat și patru 20 * 5 dreptunghiuri de pe placa din PVC. Apoi, folosind adeziv tare, am lipit fiecare piesă și am făcut o mică incintă.
Amintiți-vă, nu am reparat o parte, deoarece trebuie să amplasăm butoanele, LED-urile și LCD-ul pe ea. Apoi am folosit o placă de plastic pentru partea de sus a cântarului. Înainte de a face această configurație permanentă, trebuie să ne asigurăm că avem suficient spațiu de la sol la celula de încărcare, astfel încât să se poată îndoi, așa că am așezat șurub și piulițe între celula de încărcare și bază, de asemenea, am adăugat unele distanțieri din plastic între celula de încărcare și partea superioară. am folosit o foaie rotundă din plastic ca vârf inteligent al echilibrului.
Apoi am așezat ecranul LCD, LED-urile și butoanele de apăsare pe panoul frontal și tot ceea ce este conectat cu un fir lung izolat. După ce am terminat procesul de cablare, am lipit panoul frontal de baza principală cu o anumită înclinare, astfel încât să putem citi valorile de pe LCD foarte ușor. în cele din urmă, am atașat comutatorul principal pe partea balanței și gata. Așa am făcut corpul pentru greutatea noastră .
Puteți proiecta cu ideile dvs., dar nu uitați să plasați celula de încărcare ca în imagine.
Mașină de cântărit Arduino - Cod
Deoarece acum am terminat procesul de construcție pentru scara noastră digitală, putem trece la partea de programare. Pentru o programare ușoară, vom folosi biblioteca HX711, biblioteca EEPROM și biblioteca LiquidCrystal. Puteți descărca biblioteca HX711 din depozitul oficial GitHub sau accesați instrumente > include bibliotecă > gestionați biblioteca, apoi căutați biblioteca utilizând cuvântul cheie HX711, după ce ați descărcat biblioteca, instalați-o în Arduino ide.
Mai întâi, trebuie să calibrăm celula de încărcare și să stocăm acea valoare pe EEPROM, pentru aceasta, accesați fișierul> exemple> HX 711_ADC, apoi selectați codul de calibrare. Înainte de a încărca codul, așezați balanța pe o suprafață plană stabilă. Apoi încărcați codul pe Arduino și deschideți monitorul serial. Apoi modificați rata de transmisie la 572600. Acum monitorul cere să ia greutatea, pentru asta trebuie să apăsăm t și să intrăm.
Acum, trebuie să plasăm greutatea cunoscută pe balanță, în cazul meu, adică 194gm. După plasarea greutății cunoscute, tastați greutatea pe monitorul serial și apăsați Enter.
Acum, monitorul serial vă întreabă dacă doriți să salvați valoarea în EEPROM sau nu, așa că tastați Y pentru a alege da. Acum putem vedea greutatea pe monitorul serial.
Codul principal al acestui proiect, pe care l-am dezvoltat din schița de exemplu a bibliotecii HX711. Puteți descărca codul acestui proiect de mai jos.
În secțiunea de codificare, mai întâi, am adăugat toate cele trei biblioteci. Biblioteca HX711 este pentru preluarea valorilor celulei de încărcare. EEPROM este biblioteca încorporată a ideilor Arduino, care este utilizată pentru a stoca valori în EEPROM și biblioteca LiquidCrystal este pentru modulul LCD l2C.
#include
Apoi s-au definit numere întregi pentru diferiți pini și valori atribuite. Funcția HX711_ADC loadcell este pentru setarea pinului Dout și a ceasului.
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int Adresa calVal_eeprom = 0; lung 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;
În secțiunea de configurare, mai întâi, am pornit monitorul serial, acesta este doar pentru depanare. Apoi am definit modurile pin, toate butoanele sunt definite ca intrare. Cu ajutorul funcției Arduino PULL UP, setăm pinii la un nivel logic normal. Deci, nu vrem să folosim rezistențe externe pentru asta.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Următoarele linii de cod sunt pentru setarea LCD I2C. Mai întâi, am afișat textul de bun venit folosind funcția LCD.print () , după două secunde, am șters afișajul folosind lcd.clear () . Adică, la început, afișajul arată ARDUINO BALANCE ca text de bun venit și, după două secunde, va șterge și va afișa greutățile de măsurare.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print („să măsurăm”); întârziere (2000); lcd.clear ();
Apoi am început să citim valorile din loadcell folosind funcția loadCell.begin () , după care citim EEPROM pentru valorile calibrate, facem asta folosind funcția EEPROM.get () . Adică, am stocat deja valoarea folosind schița de calibrare în adresa EEPROM, doar că preluăm acea valoare.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
În secțiunea buclă, mai întâi, verificăm dacă sunt disponibile date din celula de încărcare utilizând LoadCell.update (), dacă sunt disponibile, citim și stocăm aceste date, pentru aceasta, folosim LoadCell.getData () . Apoi, trebuie să afișăm valoarea stocată în LCD. Pentru a face acest lucru, am folosit funcția LCD.print () . de asemenea, imprimăm greutatea stabilită. Greutatea setată este setată cu ajutorul contorului cu butoane. Acest lucru a fost explicat în ultima secțiune.
if (LoadCell.update ()) newDataReady = adevărat; 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 ("greutate:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Apoi, setăm valoarea de tare, pentru care, mai întâi, citim starea butonului de tare folosind funcția digitalRead () , dacă starea este scăzută, tarăm acea greutate la zero. Funcția de tară a acestei scale de greutate este de a aduce citirile la zero. De exemplu, dacă avem un castron în care sunt încărcate lucrurile, atunci greutatea netă va fi greutatea castronului + greutatea lucrurilor. Dacă apăsăm butonul de tare cu vasul de pe celula de încărcare înainte de a încărca lucruri, greutatea coșului va fi negată și putem măsura singura greutatea lucrurilor.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Acum, trebuie să setăm condițiile pentru diferite indicații, cum ar fi setarea întârzierii sonorului și a stării ledului. Am făcut asta folosind condițiile if , avem în total trei condiții. Mai întâi, calculăm diferența dintre greutatea setată și greutatea de măsurare, apoi stocăm acea valoare în variabila k.
float k = buttonPushCounter-i;
1. Dacă diferența dintre greutatea setată și greutatea de măsurare este mai mare sau egală cu 50gms, soneria emite un sunet cu o întârziere de 200 de milisecunde (încet).
if (k> = 50) { digitalWrite (6, HIGH); întârziere (200); digitalWrite (6, LOW); întârziere (200); }
2. Dacă diferența dintre greutatea setată și greutatea de măsurare este mai mică de 50 și mai mare de 1 gram, soneria emite un sunet cu o întârziere de 50 de milisecunde (mai rapidă).
if (k <50 && k> 1) { digitalWrite (6, HIGH); întârziere (50); digitalWrite (6, LOW); întârziere (50); }
3. Când greutatea de măsurare este egală sau mai mare decât valoarea setată, aceasta va porni ledul verde și va opri sonorul și ledul roșu.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
Mai avem două funcții de gol () pentru setarea greutății setate (pentru numărarea apăsării butonului).
Funcția crește valoarea setată cu 10gms pentru fiecare apăsare. Acest lucru se face folosind funcția de citire digitală a Arduino dacă pinul este scăzut, ceea ce înseamnă că butonul este apăsat și care va crește valoarea cu 10gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
În mod similar, checkdown este pentru reducerea valorii setate cu 10gms pentru fiecare apăsare.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Aceasta marchează sfârșitul părții de programare.
Această cântare electronică bazată pe Arduino este perfectă pentru măsurarea greutăților de până la 10 kg (putem crește această limită utilizând o celulă de sarcină nominală mai mare). Aceasta este 99% exactă față de măsurătorile originale.
Dacă aveți întrebări cu privire la acest circuit al mașinii de echilibrare a greutății LCD bazat pe Arduino, vă rugăm să îl postați în secțiunea de comentarii, vă mulțumesc!