Pages: 1 [2] 3   Go Down
Author Topic: Contatore volumetrico per liquidi  (Read 2097 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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-grin smiley-wink



----Ho detto una stro****a...l'impulso è in corrente...circa 0,05 A (molto ballerino)!
« Last Edit: April 04, 2014, 04:12:43 pm by wardog » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6994
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ad esempio --> http://playground.arduino.cc/Main/ReadingRPM
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Conegliano
Offline Offline
Full Member
***
Karma: 5
Posts: 220
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 ++;
         }
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley smiley

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

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 292
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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-grin 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 .
Logged

"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

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10453
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Italy (Venice)
Offline Offline
Edison Member
*
Karma: 22
Posts: 1263
Quello che non c'è non si può rompere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 292
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

"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

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10453
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 1
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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!!! smiley-grin smiley-grin smiley-grin
Logged

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10453
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
void cambia (){
  stato =!stato; //inverte il valore di stato
  if (stato) //se true
    contatore++; //aumenta il contatore
}
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 1
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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! smiley-wink
« Last Edit: April 12, 2014, 09:54:03 am by wardog » Logged

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10453
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 [2] 3   Go Up
Jump to: