Go Down

Topic: Contatore volumetrico per liquidi (Read 2 times) previous topic - next topic

wardog

#15
Apr 03, 2014, 10:25 am Last Edit: Apr 04, 2014, 11:12 pm by wardog Reason: 1
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! :D ;)



----Ho detto una stro****a...l'impulso è in corrente...circa 0,05 A (molto ballerino)!


tapirinho

Domanda magari stupida: non è che i dati che tu riporti siano i valori massimi accettabili dal reed?
Come lo colleghi il sensore? se è a turbina trovo che l'alimentazione sia superflua, ma magari mi sbaglio.

leo72

Quote

poi vi chiederò informazioni in più riguardo alla lettura del tempo!  :smiley-zipper: :smiley-zipper:

Prima di pensare al prossimo aiuto da chiedere, potevi anche sistemare il tuo post, includendo il codice nei tag appositi così come ti aveva fatto presente Paolo, eh...

wardog

Scusami Leo, non sapevo si potesse fare in "postproduzione", non pratico molto i forum. Starò più attento la prossima volta.

Comunque, ho provato a modificare il mio codice come mi facevate presente, ma nada, nisba, non va. O meglio, quando apro il monitor seriale continua a dare valori crescenti in funzione del delay utilizzato. Conta a priori qualcosa.

Ho provato comunque a modificare un po' il codice utilizzando gli interrupt, però adesso sono senza arduino e quindi non ho la possibilità di testarlo. Vi posto alla fine il risultato. Mi scuso già da adesso se ho scritto qualche castroneria, ma mi sto cimentando da poco con questo linguaggio.  :smiley-red:

Per quello che riguarda invece l'alimentazione, collegando un apposito alimentatore che permette di leggere anche dei segnali in ingresso, ho notato che al passaggio del litro di acqua, arriva effettivamente un impulso sotto forma corrente (se non sbaglio un valore variabile intorno a 0.05 A). Questo non vuol dire nulla? cioè devo comunque usare il tutto senza alimentazione??
PS ho trovato su internet uno sketch che legge un segnale in ingresso, tramite un pulsante, accendendo il led sul pin 13 di arduino mega. Essendoci anche lo schema disegnato con fritzing, ho provato a collegare il mio sensore di portata al posto del pulsantino e lanciando lo stesso programma. Mi aspettavo che al passaggio del litro, e quindi all'invio dell'impulso, si accendesse il led, ma anche questa volta non va. Non saprei come risolverlo.

Se posso aggiungere un collegamento ad un link esterno vi faccio vedere come è realizzato il collegamento.

Code: [Select]
int impulso=52;
long tempo_trascorso;
long durata;
volatile int contatore = LOW ;

   void routine_di_servizio ()
        {
           durata=millis()-tempo_trascorso;
           tempo_trascorso=millis();
        }

    void setup()
    {
         pinMode(impulso, OUTPUT);
         attachInterrupt (0,conta,RISING);
         attachInterrupt (0,routine_di_servizio,RISING);

           Serial.begin( 9600 );
           Serial.println( "Misuratore portata: ");
    }

    void loop()
    {
    digitalWrite (impulso,contatore);
    }

     void conta()
         {
         contatore ++;
         }

wardog

:) :)

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

hiperformance71


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! :D ;)



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 .
"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle" - Steve Jobs

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

icio


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.

hiperformance71


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...
"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle" - Steve Jobs

lesto

dallo schema è uno switch, quindi credo che la storia sui 5V sia stato un fraintendimento..
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

wardog

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:
Code: [Select]
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? :smiley-slim: 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!!! :D :D :D

lesto

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

Code: [Select]

void cambia (){
  stato =!stato; //inverte il valore di stato
  if (stato) //se true
    contatore++; //aumenta il contatore
}
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

wardog

#28
Apr 12, 2014, 04:52 pm Last Edit: Apr 12, 2014, 04:54 pm by wardog Reason: 1
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
Code: [Select]
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! ;)

lesto


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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up