HX711 lettura canali A e B

Ciao a tutti,
da tempo uso HX711 accoppiato con questo sensore di pressione , con questa libreria essenziale.

uso questo sistema - lo dico a chi possa interessare - per misurare i livelli di un pozzo (acque nere). Il sistema funziona meglio di tutti gli altri che ho sperimentato (sensori ultrasuoni, interruttori a galleggiante, ecc.). Questo è il migliore: nessun filo o elettronica esposta all'acqua, nessun problema meccanico di blocco galleggianti a causa urti o incrostazioni. Solo un tubo in PVC immerso in acqua.

Il sistema funziona con una precisione < 2% e una risoluzione di 1mm, ha pero' solo un difetto: la taratura non è stabile. Le misure effettuate sono affette dal bias dovuto alla pressione atmosferica. In altre parole una qualsiasi misura (es. 10 cm di acqua) fissa cambia seguendo l'andamento della pressione dell'aria.

per ovviare a questo inconveniente devo semplicemente annullare la variazione attraverso un altro sensore (misura differenziale).

Ora HX711 dispone di due canali (A e B vedi qui). Percio' pensavo di utilizzare un solo modulo HX711 con due sensori (uno per la misura e uno per la compensazione).

E' vero che hanno due guadagni diversi ma tale problema si risolve probabilmente applicando un moltiplicatore.

Il problema invece che non so risolvere è come leggere in sequenza i due canali.
l'ideale sarebbe avere due funzioni tipo "readChA()" e "readChB()", o read(chan)...

chi mi aiuta a modificare la libreria (posto che sia possibile)?

grazie
Valerio

PS
NOTA: questo convertitore HX711, funziona benissimo e sebbene quasi tutti lo usino con le celle di carico, puo essere utilizzato con qualsiasi sensore collegato a ponte (impedenza 5k),quindi per esempio NTC, fotoresistenze, sensori umidità , ecc. fornendo una notevole amplificazione e una uscita digitale.

va solo calibrato. Veramente utile e facilissimo da usare... e soprattutto costa due lire.

Bella idea anche se viene già usata da tempo nelle nuove lavabiancherie (prima era un pressostato meccanico).
Una soluzione al tuo problema è cambiare la libreria, come dici tu.
Ma un'altra soluzione è limitare l'errore della pressione atmosferica aumentando il livello misurato (cioè la quantità di tubo immerso nell'acqua.
Se misuro un centimetro d'acqua, per esempio, l'errore è del 10%
ma se misuro 10 cm di acqua l'errore si abbassa all' 1%

Visto che il canale B è quello con gain 32, non ti basta istanziarlo prima di fare la lettura ?

setGain (32)

steve-cr:
...
Ma un'altra soluzione è limitare l'errore della pressione atmosferica aumentando il livello misurato (cioè la quantità di tubo immerso nell'acqua.
Se misuro un centimetro d'acqua, per esempio, l'errore è del 10%
ma se misuro 10 cm di acqua l'errore si abbassa all' 1%

vero. Purtroppo pero' il livello non lo posso cambiare di un ordine di grandezza. Devo misurare livelli entro 50cm.

Tieni conto che normalmente misuro 15-20 cm e lo scostamento a occhio è intorno a +/- 1,5 cm. quindi già introduce un errore sensibile.

brunello22:
Visto che il canale B è quello con gain 32, non ti basta istanziarlo prima di fare la lettura ?

setGain (32)

Semplice e geniale... se funziona. Lo provo al volo.

:astonished: come ho fatto a non pensarci....

a dopo.

C'è una versione modificata della libreria pensata apposta per letture da canali multipli: hx711-multi

krypton18:
C'è una versione modificata della libreria pensata apposta per letture da canali multipli: hx711-multi

Grazie mille! mi era sfuggita.

Cmq questa lib fa una cosa un po diversa: permette di leggere piu moduli HX711. Il che cmq puo' servire.
In effetti avevo già pensato di risolvere aggiungendo un secondo sensore barometrico (ES. BMP180).

leggi il valore lo converti in mmH2O, e lo sottrai al risultato dell'altro, e il gioco è fatto.

Ma certo se si riuscisse invece a leggere i due canali di un solo modulo sarebbe l'ideale.

grazie cmq.

Fermi tutti, ci sono riuscito! !!!!

come si vede ho reso pubblica la funzione e con questo codice, ottengo le due letture:

void loop() {

  Serial.print("Reading A:");
  HX711.setGain(128);
  Serial.println(HX711.read() / 1000);
  delay(2000);

  Serial.print("Reading B:");
  HX711.setGain(32);
  Serial.println(HX711.read() / 1000);
  delay(2000);
}

adesso provo a duplicare invece la funzione read() cambiando solo il GAIN, cosi integro tutto nella library.

poi posto il risultato.

grazie Brunello22 dell'idea.

Perché non usi un sensore di pressione differenziale o con riferimeto atmosferico al posto di uno assoluto?

Usando 2 Sensori introduci nuovi errori.

Ciao Uwe

uwefed:
Perché non usi un sensore di pressione differenziale o con riferimeto atmosferico al posto di uno assoluto?

Usando 2 Sensori introduci nuovi errori.

Ciao Uwe

e' una possibilità, quelli differenziali non sono molto facili da trovare e costicchiano

inoltre al momento dispongo di diversi sensori assoluti e quindi cerco di utilizzarli
subito.

L'errore introdotto cmq è sicuramente inferiore allo shift presente con un solo sensore.

cmq certamente se trovo sensori differenziali a basso costo, è la soluzione ideale.
Elimino anche la doppia lettura, che rallenta sempre.

grazie

Hai il modello del sensore che usi? la foto linkata dice poco.
Ciao Uwe

uwefed:
Hai il modello del sensore che usi? la foto linkata dice poco.
Ciao Uwe

certo lo trovi facilmente su ebay
è il Pressure Sensor MPS20N0040D-S (o D secondo la piedinatura SMD o DIP6)

costa pochissimo, 10 pezzi 10 euri, e funziona egregiamente per basse pressioni 0-300mbar

cmq ho già fatto delle prove. Ho dovuto calibrare il tutto con una serie di misure empiriche e qualche calcoletto. Sembra funzionare benino, pare che il drift sia annullato, la lettura rimane stabile. Appena ne trovo uno differenziale sarà ancora meglio e piu preciso.
Pero quelli che trovo costano dai 10 euri in su al pezzo... io son povero :slight_smile: (scherzo)

ciao
val.

P.S. a chi puo' far comodo il codice con cui l'ho testato, me lo dica che lo posto, c'è anche un semplice sistema di auto calibratura... è uno scketch molto semplice eh!

Ciao a tutti e grazie a Steve Cr per avermi segnalato questo Thread.

Stavo giusto cercando un metodo per misurare il livello di una cisterna e questa mi sembra un ottima soluzione.
Non ho capito però come andrebbe montato il sensore.
La mia cisterna è di circa 1000lt, un diametro di circa 1,60 mt.
Dovrei quindi inserire un tubo in pvc nella cisterna lungo 1,60 con fissato nella parte superiore il sensore di pressione?
(Volevo allegare un'immagine ma il form non mi funziona :frowning: )

Grazie
Glitch

Certo.
Come vedi il sensore ha un tubetto di plastica dove tu devi calzare perfettamente un tubetto di gomma.
Se colleghi il tubo al sensore (anche se in teoria ha una dilatazione ma è impercettibile), di quelli trasparenti per alimenti (cristal oppure extraflex) e lo inserisci nella cisterna, già da subito l'aria all'interno del tubo ha una pressione che viene misurata.
Se l'acqua sale comprime l'aria all'interno del tubo aumentandola, se scende la diminuisce.
Con questi valori, trasformandoli, hai il tuo livello di acqua nella cisterna.

glitched:
Non ho capito però come andrebbe montato il sensore.
La mia cisterna è di circa 1000lt, un diametro di circa 1,60 mt.
Dovrei quindi inserire un tubo in pvc nella cisterna lungo 1,60 con fissato nella parte superiore il sensore di pressione?
Grazie
Glitch

io uso un altro metodo: materiali facilmente reperibili, e il sensore è montato direttamente nella centralina, allego un po di foto.

nel contenitore devi infilare un tubo dritto, verticale che copra tutta la profondità del serbatoio, con area di sezione >1cm2 . Io uso le canne per impianti elettrici da 20-25, oppure trovo comodo usare un tubo da 32 in pvc per scarichi, che trovi in qualsiasi idraulica a 2 lire.

fissi il tubo nella cisterna
in cima al tubo metti il tappo specifico per questi tubi.
sul tappo fai un foro e ci avviti un passacavo per scatole elettriche
(nota bene l'o-ring che serve a sigillare)

nel passacavo ci infili un tubetto per microirrigazione da 4mm
e stringi.

qui

il tubetto te lo porti dove sta la centralina

li devi raccordarlo con un tubetto da 2,5mm che si connette al sensore (io ne ho comprato uno in silicone, si trovano solo in rete o al limite quelli per l'olio delle motoseghe)

la cosa piu difficile è trovare il raccordo, tecnicamente sarebbe un raccordo portagomma 4mm/2,5mm, con cui connetti il nero microirrigazione col tubetto in silicone.
poichè non esistono te ne devi inventare uno in qualche modo. Io ho saldato due tubetti in rame , da 5 e da 3. (in foto se ne vede uno).

ricordati di che tutti i raccordi devono essere a tenuta, non serve stringere tanto, la pressione è bassissima <50mBar, basta che ci sia la gomma a sigillare.

fammi sapere se le foto si vedono.

spero di essere stato utile.

Per la serie "I LAVORI FATTI BENE"... Bravo dr_vagus.

steve-cr:
Per la serie "I LAVORI FATTI BENE"... Bravo dr_vagus.

Grazie Steve.

lo scopo dei forum è condividere esperienze e conoscenze, almeno per me, cosi oltre a chiedere quando posso do il mio contributo.

Vale la pena di menzionare questo sensore che ho trovato l'altro giorno

Mi pare faccia al caso nostro, è differenziale ha solo 4 pin, e soprattutto costa poco. Li ho ordinati cosi li provo. Se funziona il problema della doppia lettura sarà un caro ricordo.
L'unico problema è che con questo ci si puo' misurare massimo un metro. La gamma di pressione che compre è ristretta (max 1,5 PSI = 100mBar = 10kPa), quindi per profondità maggiori occorre un altro sensore.