Contatore volumetrico per liquidi

:slight_smile: :slight_smile:

Non preoccuparti gold. Come si dice, melius abundare quam deficere!
Proverò subito allora e comunque il disegno è stato semplice, ma veramente esaustivo! XD XD

wardog:
Per Paolo
No, non ho nessuna caratteristica tecnica del sensore. Non ne ho trovate su internet. Comunque ho un foglietto (che è attaccato al connettore digitale) che dice quanto detto in precedenza max 30V e 0,2 A.

Il misuratore è di tipo a turbina, ovvero ogni litro di fluido passato, viene emesso un impulso di +5v (verificato con un alimentatore collegato al sensore stesso). Adesso cercherò sul forum per quanto riguardi il giri del motore con gli interrupt e successivamente farò la prova. Grazie mille a tutti per l'aiuto! :smiley: :wink:

Ciao, occhio che la DUE non può accettare i 5V, anche i segnali analogici devono essere entro i 3,3V dell'alimentazione, così rischi di fare danni! Dovrai implementare un partitore resistivo o usare un chip per la conversione di tensione IN/OUT .

goldx +1 meritatissimo

se dici valori pericolosi sembra salti tutto, invece resta indeterminato lo stato. Per la due circuito identico ma usa il pin 3v al posto di 5v

manuelc:
Guardando un po' in giro... i prezzi vanno da 13 euro a ... parecchie centinaia fino ad arrivare a oltre 1000 euro per caratteristiche simili. A cosa può essere dovuto tale differenza?

La qualità, l'affidabilità, la durata.

lesto:
goldx +1 meritatissimo

se dici valori pericolosi sembra salti tutto, invece resta indeterminato lo stato. Per la due circuito identico ma usa il pin 3v al posto di 5v

credo si riferisse alla resistenza di 1,5 K messa li, serve a limitare la corrente assorbita dal switch, per 5V e 1,5K sarebbero intorno a 3,3 mA se non mi fallisce la memoria della legge di ohm, mentre tu stai indicando la funzione della resistenza da 10K che farebbe da pull down per il switch no? con 10K proteggi molto bene il pin digitale.

Ma prima si parlava che il sensore mandava in uscita 5V, e se usato sulla DUE sarebbe un problema, dovrebbe usare un partitore resistivo per "condizionarlo" a 3,3V della DUE, no? adesso di un switch, forse mi sono perso qualcosa, mmmm...

dallo schema è uno switch, quindi credo che la storia sui 5V sia stato un fraintendimento..

Ciao a tutti. Rieccomi qui. Scusate se non vi ho più risposto, ma sono stato un po' impegnato.
Paolo, ho provato il tuo collegamento. Va una bomba. Grazie mille.

Ho implementato un mio sketch, utilizzando gli interrupt. Nella funzione attachInterrupt, ho utilizzato il RISING, quindi dovrebbe scattare l'interrupt quando il pin passa da LOW ad HIGH.

Nella chiamata dell'interrupt invece, ho utilizzato la seguente dicitura:

void cambia (){
              stato =!stato
              contatore++
            }

In questo modo conta qualcosa, ma quando scatta l'impulso, e quindi si accende il led (ho utilizzato quello del pin 13) la funzione conta due volte, in quanto prima si accende e poi si spegne. Quindi effettivamente legge un cambiamento di stato due volte. Come posso risolvere questo problema? :relaxed: Avevo pensato anche di ingannare il programma facendoli contare solamente i numeri pari o dispari, ma non saprei come fare apparte dividere per due e verificare se il resto è zero! ma non so se in questo caso può andare bene.

Mi affido a voi luminati della programmazione!!! :smiley: :smiley: :smiley:

l'operazione che ritorna il resto di una divisione vienedetta "modulo" e indicata con %, da non confondere con il VERO modulo matematico |x| che ritorna ilvalore di x sempre positivo, e che vine chiamato in programmazione "abs(x)" da absolute value

Però è una operazione lentissima. A me sembra che ti manchi un if

void cambia (){
  stato =!stato; //inverte il valore di stato
  if (stato) //se true
    contatore++; //aumenta il contatore
}

Grazie lesto. Quindi mettendo l'if in quel modo verrà considerato solamente quando il valore di state=TRUE e quindi ad esempio HIGH??

Perchè in precedenza avevo utilizzato un if, in questo modo qui

if(sensorValue<100){  
digitalWrite(Pin,HIGH);
}
else {
digitalWrite(Pin,LOW);
}
digitalWrite(Pin, stato);

e successivamente avevo utilizzato la chiamata dall'interrupt scritta in precedenza.
Al momento non posso provare il tutto, perchè sono lontano dal laboratorio dove sto sperimentando arduino, ma al piu presto proverò! grazie ancora! :wink:

wardog:
Grazie lesto. Quindi mettendo l'if in quel modo verrà considerato solamente quando il valore di state=TRUE e quindi ad esempio HIGH??

il valore di state [ scollegato da quello del pin, se per esempio perdi un interrup o del codeice modifica state o il valore iniziale di state e del pin sono diversi, allora avrai che stae non [ allineato con il pin

lesto:

wardog:
Grazie lesto. Quindi mettendo l'if in quel modo verrà considerato solamente quando il valore di state=TRUE e quindi ad esempio HIGH??

il valore di state [ scollegato da quello del pin, se per esempio perdi un interrup o del codeice modifica state o il valore iniziale di state e del pin sono diversi, allora avrai che stae non [ allineato con il pin

Proverò al più presto!! Grazie tante ancora! :wink:

azz mi accorgo ora che ho scritto dalla tastuiera americana, le [ sono è