www.errorediridondanzaciclicodotcom

  • Home
  • LIVELLO CON ARDUINO
  • BACK P.P.
  • LEGGERE LIVELLO SERBATOI CON ARDUINO

    recentemente mi si è posto il problema di leggere un livello meccanico (filo + galleggiante) di due serbatoi orizzontali collegati insieme contenenti soda caustica. questa necessità può scaturire quando per esempio non è possibile inserire un sensore di livello su dei serbatoi esistenti, oppure per semplice esigenza di contenimento dei costi. per il momento ho utilizzato questo sistema per verificare il carico della soda, ma presto lo applicherò anche all'analisi del consumo. il primo problema è stato che i serbatoi erano posti in orizzontale. se posti in verticale, per calcolare il volume di liquido inserito in continuo, sarebbe bastato fare un rxrx3.14xh.

    io dovevo invece leggere un livello di un serbatoio orizzontale. questo implica un ragionamento basato sui segmenti circolari in quanto c'è la necessità di misurare in ogni momento il livello come lato di un triangolo inscritto in un segmento circolare.

    così per prima cosa ho sviluppato una serie di formule su excel che partendo da un'altezza in mm del livello rispetto al diametro verticale mi riportasse l'area del segmento circolare che avrei poi moltiplicato per la lunghezza del serbatoio. un problema era che quando sale il galleggiante perchè si sta facendo il carico il segmento circolare, o meglio, l'arco relativo cresce dallo 0 alla metà ma dopo diminuisce dalla metà del serbatoio fino al max. inoltre si deve considerare che quando sale il galleggiante, il peso esterno del livello scende in realtà. un altro aspetto, come si vede dal disegno è che le estremità dei serbatoi non sono piatte ma convesse, quindi ho inserito un fattore di correzione della lunghezza del serbatoio in relazione all'altezza del livello, inteso come minore o maggiore vicinanza al centro dove la lunghezza è maggiore (20 cm). nelle formule noterete che ai cm letti ho aggiunto una cifra di circa 12 cm che equivalgono all'altezza del galleggiante. in realtà ho visto che usando una cifra con i decimali evitavo un errore alla metà esatta del serbatoio che mi generava un 0 nei gradi calcolati per l'area del segmento circolare.
    qui di seguito la tabella con tutti i cm di livello (utilizzata per creare uno sticker di 2.5mt che ho posto sul serbatoio per una lettura immediata del livello.
    l'immagine sotto invece riporta le formule come sono state scritte:


    non ho evidenziato la formula che corregge la lunghezza del serbatoio a seconda di quanti cm è il livello che sta leggendo rispetto il centro del serbatoio. comunque a breve metterò una mail su cui potrete chiedere spiegazioni qualora interessati.



    a questo punto, prima di procedere con il progetto, ho voluto avere un riscontro. ho fatto uno sticker che ho messo a lato della barra entro cui scorre il peso del galleggiante. a destra sono riportati i m3 che erano stati misurati originariamente con acqua ed un contalitri, quindi, salvo due errori che ho così scoperto essere stati fatti, la misurazione anche se poco sensibile era precisa. vedete all'estrema sinistra il livello calcolato con il foglio excel, a destra le etichette azzurre con i m3, segnati ogni due.

    adesso viene il bello! volevo vedere su un computer il livello di soda caustica che saliva durante il carico e vederlo direttamente in quintali. sappiate che quando arriva la soda caustica, questa ha una concentrazione differente ogni volta. la concentrazione viene riportata sul ddt. tra l'altro non c'è una correlazione lineare tra peso di soda disciolta in acqua e concentrazione finale. infatti la densità che ci servirà per il calcolo in quintali viene scientificamente misurata per titolazione. si ottiene una tabella che riporta per ogni grado Baumè (grado di densità) il peso specifico relativo. è poi possibile per interpolazione calcolare i gradi intermedi. io ho trovato un sito in cui è possibile inserire la percentuale di soda e questo fa il calcolo per ritornare la densità.
    quindi ho bisogno:
    1. un sistema di lettura che mi permetta di ricevere come input il variare del galleggiante e, quindi, ottenere un valore leggibile dal pc. questo sarà un valore 0-10V o 4-20mA.
    2. un plc o microcontrollore (Arduino) che legge e converte il segnale analogico in un segnale digitale per essere interpretato dal pc.
    3. un software di acquisizione dati (DAQ) che interpreta il segnale digitale e lo trasforma in valore numerico di cm di livello.
    4. il mio foglio sopra descritto che elabora i cm per trasformarli in quintali di quella specifica soda che sta entrando.

    1. per il sistema di lettura avevo due possibilità: un encoder (700 euro) che richiede a sua volta una programmazione oppure un potenziometro. ho scelto il potenziometro a 10 giri con una risoluzione di 5kohm, più che sufficiente. ho messo il potenziometro in una scatola da cui fuoriesce il perno. 
    sul perno ho fissato una ruota in teflon che mi ha fatto un amico tornitore. infatti avevo bisogno di una dimensione esatta perchè la circonferenza di questa ruota moltiplicata per 10 volte fosse equivalente allo sviluppo necessario, 250cm. quindi il diametro è 76cm.
    in basso c'è un'altra ruota che permette il movimento fluido. attenzione alla polarità che si usa per connettere il potenziometro perchè sarà in relazione alla posizione ed al movimento del livello. il movimento viene impresso dal peso collegato al galleggiante che è stato bloccato ad un lungo OR di 3.53mm. per la chiusura di questa corda di NBR ho usato un connettore da elettricista, quelli da climpare, dopo avere tolto il rivestimento in plastica. a questo connettore ho poi fissato il peso del galleggiante perchè non scivolasse. in alternativa, per una maggiore stabilità nel tempo, si può usare una ruota dentata con il nastro dentato relativo come riporto in questo link: http://www.cnc-store.it/puleggia-t510-p-149.html
    questa puleggia è di 48 denti ed equivale a 76.42mm di diametro.
    2. per la lettura ho acquistato un arduino che ho sfruttato molto semplicemente come elaboratore di un segnale analogico.


    qui di seguito il mio sketch (terzo in assoluto per me, quindi se vedete errori marginali, visto che comunque funziona, non fateci caso):

    dentro questo sketch ci sono già le istruzioni per il programma di acquisizione dati che vedremo dopo. tuttavia notate il comando Serial.println(valpot*0.2434). il valore 0.2434 è dato dalla misura massima che legge il potenziometro con la ruota da 76mm da 0 a 249cm. si divide il valore di 249 per 1023 che corrisponde al massimo del potenziometro in bit. quindi il valore di 249 deve essere verificato in ogni installazione. la gestione del led in realtà è stata abbandonata.
    ora ho un segnale digitale del livello che viene inviato tramite la porta seriale al pc.
    3. il mio desiderio era di prendere questo valore digitale del livello e leggerlo in continuo in openoffice calc dove veniva elaborato nel mio foglio di calcolo. l'acquisizione di un valore dalla seriale da parte di openoffice richiede conoscenze di VBA che non ho. ho fatto alcuni tentativi grazie anche ai forum ma nessuno riportava un valore, avevo sempre 0. lo scopo era di affiancare in loco un raspberry che collegato in rete avrebbe poi trasmesso i dati ad un pc in ufficio. purtroppo ho dovuto accettare l'unica possibilità che è basata su windows ed excel, peraltro ottima ed opensource, della parallax.
    si chiama plx-daq, si installa con un normale eseguibile. una volta installata si deve scrivere nello sketch di arduino la riga di cui ho parlato sopra. una volta fatto ciò, si deve far partire il foglio di excel che contiene le macro fatte dalla parallax. volendo adattare l'applicazione alle nostre esigenze si dovrà semplicemente lavorare su quel foglio elettronico aggiungendo link o macro a nostro piacimento.
    quando si apre il foglio di excel preparato da plx compare una finestra dove si deve, per la prima volta, selezionare la porta su cui si trova la seriale di arduino. fatto ciò si deve clikkare connect per iniziare a leggere i dati acquisiti. inizierà sul foglio simple data (prima di aggiungere i nostri fogli, la prima volta, si deve lasciare il foglio simple data come primo foglio) a scrivere i dati che sta leggendo in cm.
    ho preparato il foglio di excel con delle macro allo scopo di accettare due valori: la percentuale di soda che, una volta scritta, trova in un'altra tabella il corrispondente valore di densità e il tasto che fissa il valore di partenza del livello da cui inizia il carico. a questo punto inizierà lo scarico ed il livello crescerà. vedremo il livello in cm crescere, i calcoli permetteranno di vedere questo incremento espresso in quintali, sulla base della densità specifica di questo carico di soda, così vedremo il valore finale che ci interessa sotto qta scaricata qtali.
    ultima cosa: ho preparato un pc con avvio automatico di questo foglio.

    per ultimo ho voluto risolvere un dubbio che mi si era posto. i serbatoi normalmente si trovano lontani da pc o reti. volevo vedere il mio output su un pc distante almeno 20mt, al piano superiore. dopo essermi documentato ho visto che il segnale in volt può percorrere solo una tratta fino a 25 mt. in alternativa si dovrebbe mettere un convertitore volt/mA vicino al potenziometro, percorrere anche 200 mt e posizionare un altro convertitore mA/volt, vicino al pc. poichè i costi dei convertitori sono elevati, mi sono accontentato di testare un cavo 3x1.5mm2 di circa 20mt. devo dire che ho ottenuto una lettura rapida e costante quindi senza alcun problema però solo con il pc alimentato a batteria. se utilizzo l'alimentatore di rete i valori sono instabili. ciò è dovuto all'utilizzo di un cavo normale non schermato. utilizzandone uno schermato il problema dovrebbe risolversi.