- Pesatrice Arduino funzionante
- Componenti necessari per pesatrici basate su Arduino
- Pesatrice basata su Arduino - Schema del circuito
- Realizzazione del circuito su una Perfboard punteggiata
- Costruzione di una custodia per pesatrice basata su Arduino
- Pesatrice Arduino - Codice
Le bilance digitali sono un altro miracolo dell'ingegneria e del design moderni. Sì, stiamo parlando della bilancia che vediamo spesso nella maggior parte dei negozi di alimentari e in altri luoghi, ma ti sei mai chiesto come funziona una bilancia? Per rispondere a questa domanda, in questo progetto, daremo uno sguardo alla cella di carico e al suo funzionamento. Infine, costruiremo una bilancia portatile basata su Arduino con il sensore di peso HX711, che può misurare pesi fino a 10 kg.
Questa pesa è perfetta per i negozi locali, dove imballano gli articoli in grandi quantità. Come i prodotti commerciali, la nostra bilancia avrà un pulsante zero che azzera la bilancia. Inoltre, ha un'opzione per impostare il peso per la misurazione, quando il peso di misurazione raggiunge il peso impostato, un cicalino suona velocemente e si ferma quando il peso impostato è uguale al peso di misurazione. In questo modo, l'utente può imballarlo semplicemente ascoltando il suono e non dovrebbe guardare il display. Poiché si tratta di un progetto molto semplice, lo costruiremo molto facilmente utilizzando componenti come Arduino e celle di carico estensimetriche. Quindi, senza ulteriori indugi, entriamo subito nel merito.
In un articolo precedente, abbiamo realizzato progetti come il sensore di peso basato su Raspberry Pi e lo Smart Container IoT con avviso e-mail e monitoraggio Web utilizzando il popolare modulo di amplificazione della cella di carico HX711. Quindi, controlla se questo è il tuo requisito.
Pesatrice Arduino funzionante
Il componente principale di questo progetto è una cella di carico e un modulo amplificatore per cella di carico HX711. Come puoi vedere, un lato è contrassegnato da dieci chilogrammi. Inoltre, puoi notare una sorta di colla protettiva bianca sulla cella di carico e quattro diversi colori di fili stanno uscendo, scoprirà il segreto sotto la colla protettiva bianca e la funzione di questi fili a quattro colori più avanti nell'articolo.
Una cella di carico è un trasduttore che trasforma la forza o la pressione in uscita elettrica. Ha due lati, diciamo il lato destro e il lato sinistro, ed è composto da blocchi di alluminio. Come puoi vedere al centro il materiale si assottiglia praticando un grosso buco. Ecco perché questo è il punto che subisce la deformazione quando un carico viene posizionato sul lato del supporto. Ora immagina che la cella sul lato destro sia montata alla base e il lato sinistro sia dove è posizionato il carico, questa configurazione deforma la cella di carico estensimetrica a causa del gigantesco foro al centro.
Quando un carico viene posizionato sul lato di carico della cella di carico, la parte superiore subirà una tensione e la parte inferiore subirà una compressione. Ecco perché la barra di alluminio si piega verso il basso sul lato sinistro. Se misuriamo questa deformazione, possiamo misurare la forza che è stata applicata al blocco di alluminio ed è esattamente quello che faremo.
Ora, la domanda rimane: cosa c'è dentro la colla protettiva bianca? All'interno di questa colla protettiva, troveremo un componente elastico molto sottile che viene chiamato estensimetro. Un estensimetro è un componente utilizzato per misurare la deformazione. Se diamo uno sguardo più da vicino a questo componente, possiamo vedere due piazzole di connessione e quindi abbiamo un modello di filo conduttivo con deflessioni ripetitive. Questo filo conduttivo ha una resistenza definita. Quando lo pieghiamo, il valore di resistenza cambierà? Quindi, un lato dell'estensimetro è montato e fissato in un punto, se posizioniamo un peso sull'altro lato della barra di alluminio, questo costringerà l'estensimetro a piegarsi, il che causerà un cambiamento nella resistenza. Come succede effettivamente? Il modello conduttivo dell'estensimetro è realizzato in rame, questo filo avrà una certa area e lunghezza, quindi queste due unità daranno la resistenza del filo. La resistenza di un filo si oppone al flusso di corrente. Ora è ovvio che se l'area di questo filo si riduce,potrebbero passare meno elettroni, il che significa una corrente inferiore. Ora se aumentiamo l'area, aumenterà la resistenza di un conduttore. Se si applica una forza a questo filo, si allungherà l'area e allo stesso tempo si rimpicciolirà, la resistenza aumenta. Ma questa variazione di resistenza è molto bassa. Se allunghiamo l'estensimetro, la resistenza aumenterà e se lo comprimiamo la resistenza si abbasserà. Per misurare la forza, dobbiamo misurare la resistenza. Misurare direttamente la resistenza non è sempre pratico, perché il cambiamento è molto piccolo. Quindi, invece di misurare la resistenza, possiamo misurare facilmente le tensioni. Quindi, in questo caso, dobbiamo convertire l'uscita del misuratore dai valori di resistenza ai valori di tensione.Se si applica una forza a questo filo, si allungherà l'area e allo stesso tempo si rimpicciolirà, la resistenza aumenta. Ma questa variazione di resistenza è molto bassa. Se allunghiamo l'estensimetro, la resistenza aumenterà e se lo comprimiamo la resistenza si abbasserà. Per misurare la forza, dobbiamo misurare la resistenza. Misurare direttamente la resistenza non è sempre pratico, perché il cambiamento è molto piccolo. Quindi, invece di misurare la resistenza, possiamo misurare facilmente le tensioni. Quindi, in questo caso, dobbiamo convertire l'uscita del misuratore dai valori di resistenza ai valori di tensione.Se si applica una forza a questo filo, si allungherà l'area e allo stesso tempo si rimpicciolirà, la resistenza aumenta. Ma questa variazione di resistenza è molto bassa. Se allunghiamo l'estensimetro, la resistenza aumenterà e se lo comprimiamo la resistenza si abbasserà. Per misurare la forza, dobbiamo misurare la resistenza. Misurare direttamente la resistenza non è sempre pratico, perché il cambiamento è molto piccolo. Quindi, invece di misurare la resistenza, possiamo misurare facilmente le tensioni. Quindi, in questo caso, dobbiamo convertire l'uscita del misuratore dai valori di resistenza ai valori di tensione.la resistenza si abbasserà. Per misurare la forza, dobbiamo misurare la resistenza. Misurare direttamente la resistenza non è sempre pratico, perché il cambiamento è molto piccolo. Quindi, invece di misurare la resistenza, possiamo misurare facilmente le tensioni. Quindi, in questo caso, dobbiamo convertire l'uscita del misuratore dai valori di resistenza ai valori di tensione.la resistenza si abbasserà. Per misurare la forza, dobbiamo misurare la resistenza. Misurare direttamente la resistenza non è sempre pratico, perché la variazione è molto piccola. Quindi, invece di misurare la resistenza, possiamo misurare facilmente le tensioni. Quindi, in questo caso, dobbiamo convertire l'uscita del misuratore dai valori di resistenza ai valori di tensione.
Possiamo farlo con l'aiuto del ponte di Wheatstone. Posizioniamo l'estensimetro nel ponte di Wheatstone se il ponte è bilanciato, la tensione nel punto medio dovrebbe essere zero (in precedenza abbiamo costruito un progetto in cui abbiamo descritto come funziona un ponte di Wheatstone, puoi verificarlo se lo desideri saperne di più sull'argomento). Quando l'estensimetro cambia la sua resistenza, sbilancia il ponte e cambia anche la tensione. Quindi, questo è il modo in cui il ponte di Wheatstone converte le variazioni di resistenza in valori di tensione.
Ma questa variazione di tensione è ancora molto piccola, quindi per aumentarla, dobbiamo utilizzare il modulo HX711. HX711 è un ADC differenziale a 24 bit, in questo modo potremmo misurare variazioni di tensione molto piccole. darà valori da 0 a 2 esponenziali 24.
Componenti necessari per pesatrici basate su Arduino
Per rendere questo progetto il più semplice possibile, abbiamo utilizzato componenti molto generici che puoi trovare in qualsiasi negozio di hobby locale. L'immagine qui sotto ti darà un'idea dei componenti. Inoltre, abbiamo la distinta base (BOM) elencata di seguito.
- Cella di carico (stiamo usando una cella di carico da 10 kg)
- Modulo amplificatore HX 711
- Arduino Nano
- I2C LCD 16X2 - Compatibile I2C
- Resistenza da 1k -2 n
- LED -2Nos
- Cicalino
- PCB comune
- Batteria da 7,4 V (se lo vuoi portatile)
- Regolatore di tensione LM7805
Pesatrice basata su Arduino - Schema del circuito
La cella di carico ha quattro fili che sono rosso, nero, verde e bianco. Questo colore può variare a seconda dei produttori, quindi è meglio fare riferimento alla scheda tecnica. Collegare il rosso a E + della scheda HX711, collegare il nero a E-, collegare il bianco a A + e collegare il verde a A-, Dout e l'orologio della scheda a D4 e D5 rispettivamente. Collegare un'estremità dei pulsanti a D3, D8, D9 e le altre estremità a terra. Abbiamo LCD I2C, quindi collega SDA ad A4 e SCL ad A5. Collega la massa di LCD, HX711 e Arduino a terra, collega anche i VCC al 5Vpin di Arduino. Tutti i moduli funzionano a 5V, quindi abbiamo aggiunto un regolatore di tensione LM7805. Se non vuoi che sia portatile, puoi alimentare direttamente Arduino utilizzando un cavo USB.
Realizzazione del circuito su una Perfboard punteggiata
Abbiamo saldato tutti i componenti su una comune perfboard punteggiata. Abbiamo usato connettori femmina per saldare Arduino e ADC con il circuito stampato, inoltre abbiamo usato fili per collegare tutti i pulsanti e LED. Dopo che tutto il processo di saldatura è terminato, ci siamo assicurati che dall'LM7805 escano 5V adeguati. Infine, abbiamo messo un interruttore per accendere / spegnere il circuito. Una volta che avevamo finito, sembrava l'immagine qui sotto.
Costruzione di una custodia per pesatrice basata su Arduino
Come puoi vedere, la cella di carico ha alcune filettature, quindi potremmo montarla su una piastra di base. Useremo un pannello in PVC per la base della nostra scala, per questo, prima tagliamo 20 * 20 cm quadrati e quattro rettangoli 20 * 5 dal pannello in PVC. Quindi, usando la colla dura, abbiamo incollato ogni pezzo e realizzato un piccolo recinto.
Ricorda, non abbiamo aggiustato un lato, perché abbiamo bisogno di posizionare i pulsanti, i LED e il display LCD su di esso. Quindi abbiamo usato una tavola di plastica per la parte superiore della scala. Prima di rendere permanente questa configurazione, dobbiamo assicurarci di avere spazio sufficiente da terra alla cella di carico, quindi sarà in grado di piegarsi, quindi abbiamo posizionato viti e dadi tra la cella di carico e la base, inoltre abbiamo aggiunto alcuni distanziatori in plastica tra la cella di carico e la parte superiore. abbiamo usato un foglio di plastica rotondo come il massimo dell'equilibrio.
Quindi abbiamo posizionato l' LCD, i LED ei pulsanti sul pannello frontale e tutto collegato con un lungo cavo isolato. Dopo aver terminato il processo di cablaggio, abbiamo incollato il pannello frontale alla base principale con una certa inclinazione, in modo da poter leggere i valori dall'LCD molto facilmente. infine, abbiamo attaccato l'interruttore principale al lato della bilancia e il gioco è fatto. È così che abbiamo creato il corpo per la nostra bilancia.
Puoi progettare con le tue idee ma ricordati di posizionare la cella di carico come nell'immagine.
Pesatrice Arduino - Codice
Dato che ora abbiamo finito con il processo di creazione della nostra bilancia digitale, possiamo passare alla parte di programmazione. Per una facile programmazione, utilizzeremo la libreria HX711, la libreria EEPROM e la libreria LiquidCrystal. Puoi scaricare la libreria HX711 dal repository ufficiale di GitHub o andare su strumenti > includi libreria > gestisci libreria, quindi cercare nella libreria usando la parola chiave HX711, dopo aver scaricato la libreria, installala in Arduino ide.
Per prima cosa, dobbiamo calibrare la cella di carico e memorizzare quel valore su EEPROM, per questo, vai su file> esempi> HX 711_ADC, quindi seleziona il codice di calibrazione. Prima di caricare il codice, posizionare la bilancia su una superficie piana stabile. Quindi carica il codice su Arduino e apri il monitor seriale. Quindi cambia il baud rate a 572600. Ora il monitor chiede di prendere il peso, per questo dobbiamo premere te entrare.
Ora, dobbiamo posizionare il peso noto sulla bilancia, nel mio caso, ovvero 194 g. Dopo aver posizionato il peso noto, digita peso sul monitor seriale e premi invio.
Ora, il monitor seriale ti chiede se vuoi salvare il valore in EEPROM o no, quindi digita Y per scegliere sì. Ora possiamo vedere il peso sul monitor seriale.
Il codice principale di questo progetto, che abbiamo sviluppato dallo schizzo di esempio della libreria HX711. Puoi scaricare il codice di questo progetto da sotto.
Nella sezione di codifica, innanzitutto, abbiamo aggiunto tutte e tre le librerie. La libreria HX711 serve per acquisire i valori delle celle di carico. EEPROM è la libreria incorporata di Arduino ide, che viene utilizzata per memorizzare i valori in EEPROM e la libreria LiquidCrystal è per il modulo LCD l2C.
#includere
Quindi definiti interi per diversi pin e valori assegnati. La funzione loadcell HX711_ADC serve per impostare il pin Dout e clock.
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; lungo 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;
Nella sezione setup, per prima cosa, abbiamo avviato il monitor seriale, questo è solo per il debug. Quindi abbiamo definito le modalità dei pin, tutti i pulsanti sono definiti come input. Con l'aiuto della funzione PULL UP di Arduino, impostiamo normalmente i pin su un valore logico alto. Quindi, non vogliamo utilizzare resistori esterni per questo.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Le seguenti righe di codice servono per l'impostazione dell'LCD I2C. Per prima cosa, abbiamo visualizzato il testo di benvenuto utilizzando la funzione LCD.print () , dopo due secondi abbiamo cancellato il display utilizzando lcd.clear () . Cioè, all'inizio, il display mostra ARDUINO BALANCE come testo di benvenuto e dopo due secondi si cancellerà e visualizzerà i pesi di misurazione.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("misuriamo"); ritardo (2000); lcd.clear ();
Quindi abbiamo iniziato a leggere i valori da loadcell utilizzando la funzione loadCell.begin () , dopodiché leggiamo la EEPROM per i valori calibrati, lo facciamo utilizzando la funzione EEPROM.get () . Cioè, abbiamo già memorizzato il valore utilizzando lo schizzo di calibrazione nell'indirizzo EEPROM, abbiamo semplicemente ripreso quel valore.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, CalibrationValue);
Nella sezione loop, per prima cosa, controlliamo se qualche dato dalla cella di carico è disponibile usando LoadCell.update (), se disponibile, leggiamo e memorizziamo quei dati, per questo, stiamo usando LoadCell.getData () . Successivamente, dobbiamo visualizzare il valore memorizzato nell'LCD. Per farlo, abbiamo utilizzato la funzione LCD.print () . inoltre, stampiamo il peso impostato. Il peso impostato viene impostato con l'aiuto del contatore a pulsante. Quello spiegato nell'ultima sezione.
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 ("weight:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Successivamente, impostiamo il valore della tara, per questo, prima, leggiamo lo stato del pulsante di tara usando la funzione digitalRead () , se lo stato è basso, mettiamo a zero quel peso. La funzione di tara di questa bilancia è quella di portare le letture a zero. Ad esempio, se abbiamo una ciotola in cui vengono caricate le cose, il peso netto sarà il peso della ciotola + il peso delle cose. Se premiamo il pulsante di tara con la ciotola sulla cella di carico prima di caricare le cose, il peso del cesto verrà annullato e potremo misurare il peso delle cose da solo.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Ora dobbiamo impostare le condizioni per diverse indicazioni come l'impostazione del ritardo del buzzer e lo stato del led. L'abbiamo fatto utilizzando le condizioni if , abbiamo un totale di tre condizioni. Innanzitutto, calcoliamo la differenza tra il peso impostato e il peso misurato, quindi memorizziamo quel valore nella variabile k.
float k = buttonPushCounter-i;
1. Se la differenza tra il peso impostato e il peso misurato è maggiore o uguale a 50 gms, il cicalino emette un segnale acustico con un ritardo di 200 millisecondi (lentamente).
se (k> = 50) { digitalWrite (6, HIGH); ritardo (200); digitalWrite (6, LOW); ritardo (200); }
2. Se la differenza tra il peso impostato e il peso misurato è inferiore a 50 e maggiore di 1 grammo, il cicalino emette un segnale acustico con un ritardo di 50 millisecondi (più veloce).
if (k <50 && k> 1) { digitalWrite (6, HIGH); ritardo (50); digitalWrite (6, LOW); ritardo (50); }
3. Quando il peso misurato è uguale o superiore al valore impostato, questo accenderà il led verde e spegnerà il buzzer e il led rosso.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
Abbiamo altre due funzioni void () per impostare il peso impostato (per contare la pressione del pulsante).
La funzione che aumenta il valore impostato di 10 gms ad ogni pressione. Questo viene fatto utilizzando la funzione digitalRead di Arduino se il pin è basso significa che il pulsante è premuto e questo incrementerà il valore di 10gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Allo stesso modo, il checkdown serve per diminuire il valore impostato di 10 gms ad ogni pressione.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Questo segna la fine della parte di programmazione.
Questa bilancia elettronica basata su Arduino è perfetta per misurare pesi fino a 10 kg (possiamo aumentare questo limite utilizzando una cella di carico con valore nominale più alto). Questo è accurato al 99% rispetto alle misurazioni originali.
Se hai domande su questo circuito per bilanciamento del peso LCD basato su Arduino, ti preghiamo di pubblicarlo nella sezione commenti, grazie!