Prove di carico
Progetto cella di carico
Descrizione
A volte c’è chi chiede un aiuto per una propria idea. In questo caso mi ha stimolato fare degli esperimenti per una cella di carico. Come si potrebbe immaginare non è proprio un progetto completo ma solo la prova con un convertitore analogico digitale specifico per la lettura di una cella di carico.
Lo sviluppo si basa su un modulo che monta un HX711. Questo modulo contiene alcuni componenti come sono presentati nello schema, quindi considerare che non sono aggiunti.
Secondo le direttive di chi mi ha chiesto l’aiuto ho utilizzato una MCU 16F877A. Di seguito ho montato un insieme di display a sette segmenti (Chiamiamolo 7SD, che sarebbe 7 Segments Display). Ci sono altre opzioni per programmare un diverso display. Come si può notare nello schema.
L’integrato HX711 è un ADC a 24 bit, del quale 23bit segnano il positivo e gli altri il negativo. Per leggere i dati raccolti ci serve una comunicazione seriale sincrona per 25, 26 oppure 27 bit. Il perché viene a determinare quale sarà il guadagno successivo di lettura. Se si interrompe la comunicazione oltre i 60 microsecondi il circuito integrato entra in modalità risparmio energetico e toglie la tensione anche al circuito esterno, tramite il piedino base.
Con 25 impulsi di clock si determina il guadagno massimo a 128, mentre a 26 si ha 32 e connesso al canale B dell’integrato, ultimo i 27 clock determinano il guadagno a 64.
Vista la sensibilità e accuratezza dell’integrato questo viene impiegato per la lettura di un ponte di Wheatstone che viene creato con le 4 resistenze della cella di carico.
Schema
A riguardo del 7SD, ci sono le opzioni per la larghezza da un minimo di quatto cifre o più. Direi che non ho considerato oltre sei cifre, non penso che dia problemi.
Tra le varie opzioni c’è la possibilità d’ interfacciare una periferica UART. Per questo io ho montato il modulo bluetooth, con attenzione a mettere il partitore resistivo al piedino TX del micro.
Come mostra lo schema si vede che ci può essere un collegamento diretto con un LCD, seguendo le indicazioni delle etichette alle linee di collegamento. Non è previsto il controllo della retro-illuminazione, ma basta un semplice transistor NPN che porta a massa il piedino 16 (catodo) del display.
Eventualmente si può utilizzare anche un modulo d’ interfaccia I2C che si trovano comunemente ai negozi online.
In caso del collegamento diretto non viene previsto il controllo di retro-illuminazione. Magari basta un transistor con una fotoresistenza.
Programma
Il programma e commentato in inglese, come precedenti sviluppi. Per quelli che non sono avvezzi, potrei farne una copia tradotta, mentre la mia ambizione sarebbe di poterlo divulgare anche per coloro che non conoscono l’Italiano anche perché è razionale che sia scritto in modo internazionale.
Il compilatore usato è il Proton Basic, del quale mi trovo bene per le varie peculiarità. Tra cui inserire codice in assembly. Per questo c’è un caso da notare nella posizione delle variabili, in special modo per i due array, visto che si utilizza un metodo che non accetta salti di banchi di memoria.
In questo progetto è stato usato un metodo di separare il file in tre parti. Una parte si prende carico di determinare le variabili e altre definizioni, lasciando migliore visibilità nella parte importante del programma. Un altro file è necessario solo se si vuole utilizzare il display con interfaccia I2C.
Nel programma principale (Wscale??.Bas) si nota un paio di $define di rilievo. Questi definiscono quale grandezza di misura si vuole implementare in chilogrammi. Vedasi alla riga 10. Infatti si può usare per celle di carico da 5, 10 o 20 chili.
Nella riga 12 si decide il livello di informazioni che si vuole vedere durante il processo. Infatti per risoluzione del problema si aumenta il livello e quindi entra a far parte del programma anche la comunicazione tramite seriale.
Di seguito ci sono le linee che permettono di optare se usare un 7SD o un LCD, del quale una opzione seguente determina il tipo di collegamento.
Il programma prevede anche il risparmio energetico. Allora se non si usa il sistema per un periodo di 10 secondi il display viene disattivato.
In alcuni casi, i disturbi elettrici o meccanici possono prolungare il periodo di accensione. Infatti non solo le attività coi tasti rinnovano il periodo, ma anche le variazioni di letture permettono di mantenere il display attivo.
È previsto anche una costante che sceglie il numero di campioni da effettuare per ogni lettura della cella. Al momento sono stati previsti venticinque campioni. Credo che sia il valore ottimale, perché in caso di meno campioni subentrerebbe troppe variazioni, mentre nel caso di numero alto, allora la risposta alla lettura diventerebbe alquanto lunga. Già con quaranta campioni la risposta si aggira sul secondo di tempo.
Inoltre si rischierebbe di disturbare la visualizzazione del 7SD, in quanto una lettura del modulo viene fatta senza interrupt attivi.
Modalità d’uso
Il modo di utilizzare e composto da quattro tasti.
-
TARE (collegato a RD4) che si utilizza in due e più fasi.
All’avvio si preme brevemente per azzerare il valore che quindi da il punto di tara.
Premendo per almeno 2 secondi si entra alla fase di calibrazione. -
UP (collegato a RD5) si utilizza per aumentare un valore durante la calibrazione.
Se premuto brevemente esce la calibrazione con il valore solo in memoria. -
DOWN (collegato a RD6) come per UP serve a diminuire un valore durante la calibrazione.
Se premuto dopo la fase di conferma determina il salvataggio della calibrazione in EEPROM. -
SETTING (collegato a RD7) ha qualche funzione a secondo dei casi.
Se premuto brevemente durante la fase di calibrazione, viene accettato il valore. Solo che si hanno quattro secondi per accettare o ignorare di salvare in EEPROM.
Se premuto per almeno 2 secondi, allora abbandona la procedura di calibrazione e nessuna variazione sarà attuata.
In caso di errore fatale, se premuto allora effettuerà un reset del sistema. Se non si risolve, significherà che ci sono dei danni da verificare.
Durante la presentazione con 7SD, che lampeggia per quattro volte, si può interrompere premendo qualsiasi tasto dei quattro.
Anche quando entra in azione il risparmio energetico, qualsiasi tasto permette di riattivare il funzionamento.
Per quanto riguarda la calibrazione, si pone un peso noto per la verifica e quindi si inserisce il suo valore.
L’immissione si presenta con sei zeri (o meno per quei 7SD con meno cifre). Il punto decimale (per 7SD) o il trattino di sottolineatura (per LCD) determina la posizione che si vuole modificare. Quindi coi tasti UP o DOWN si potrà cambiare il valore. Per passare alla cifra a destra successiva si preme TARE per poco. In caso si volesse modificare una cifra a sinistra si dovrà premere TARE in successione fino a che il posizionamento riprende dalla prima cifra a sinistra.
Si potrebbe anche usare il fattore di calibrazione come un moltiplicatore di comodo. In tal modo potrebbe essere un prezzo o una variabile di comodo che serve per il proprio scopo. Il programma non prevede immissione di numeri in virgola mobile. Anche il valore di pesatura è espresso in grammi. Automaticamente verrà visualizzato il punto per le migliaia. Mentre per valori inferiori a mille non c’è il punto.
Si potrà scaricare il pacchetto dal mio drive.
Anche un po di video…
Ben fatto.
Per una parte convengo che sia informativo sul funzionamento degli estensimetri. Per l’altra parte ho concentrato il concetto principale di cosa serve questo esperimento.
Di solito, e si vede, propongo solo degli esperimenti che possono avere un utilizzo per intero o parziale. Infatti io imparai l’elettronica leggendo le riviste, non certo ad assemblare i kit che si proponeva, dal quale io ricavavo degli spunti per le mie necessità.
Come al solito un progetto completo ma essenziale. Partendo da questo poi ognuno decide, se lo desidera, di adattarlo alle proprie necessità Io personalmente avrei inserito qualcosa in più per descrivere le celle di carico e la interfaccia analogico digitale, non è fondamentale perciò non cambia l’ottimo giudizio che ho del progetto.