[RISOLTO] Problema con sonda

Salve a tutti,
Premetto che ho una discreta preparazione nella programmazione ma, elettronicamente, sono un autodidatta alle primissime armi.
Ho realizzato un piccolo progetto con Arduino il quale mi consente di pilotare un sistema di erogazione acqua. Per quanto riguarda i relè, led, pulsanti e tastierino non ho avuto nessun problema e tutto funziona perfettamente.
Mi è rimasta la sonda, un flussometro, la quale ha 3 fili:
Rosso: +12V
Nero: 0V
Marrone: Segnale.
Sul datasheet leggo: "Segnale in uscita NPN: Vin - 0,4V 20mA max".
Se collego l'oscilloscopio tra +12V e SEGNALE, soffiando nel flussometro riesco a vedere l'onda quadra.
Se collego l'oscilloscopio tra 0V e SEGNALE, non riesco ad agganciare nulla... sembra come se il filo sia floating...
A riposo il livello su SEGNALE è 0V (sempre rispetto alla +12)

Faccio, ad i tanti esperti rispetto a me, 2 domande:

  1. E' possibile che la sonda si comporti in questo modo? Oppure è un mio problema nell'usare l'oscilloscopio?
  2. Qualora dovessi misurare il segnale tra 12V e SEGNALE con un arduino, che tipo di circuito dovrei collegare? Avevo pensato ad un semplice partitore ma mi sono perso perché non posso prendere la massa come riferimento... o almeno, non ce l'ho fatta.

Vi prego si scusarmi se non sono stato chiarissimo.
Un saluto.
Dino

ciao
io per interfacciare segnali digitali con tensioni superiori a 5v uso dei fotoaccoppiatori

saluti
stefano

npn di solito indica che è open collector... in pratica più che un'onda quadra apre e chiude un transistor e tu lo puoi vedere un po' come un interruttore che butta a massa... guarda questo schema:

http://static.electro-tech-online.com/imgcache/10263-a203fig03c.gif

comunque sempre ottimi i fotoaccoppiatori. eventualmente per tagliare i 12 volt qualora fosse sconveniente un fotoaccoppiatore io faccio un partitore e ci metto di sicurezza un diodo zenere da 4,7volt

Grazie innanzitutto per le risposte.
Quello che non riesco a comprendere é questo: se avessi un normale segnale oscillante tra 0 e 12v, allora potrei usare un partitore di tensione o, meglio, un fotoaccoppiatore come mi avete consigliato.
Vedendo tuttavia gli schemi, io, detta un po' semplicisticamente, ho i due fili lato sonda che sono la +12 v e il segnale... A destra, lato ardui o, dovrei avere massa e segnale.
Come faccio a connetterei? Non vedo una massa comune...
Perdonate la banalitá della mia domanda ma c'é qualcosa che mi sfugge...

MadDoc65:
Grazie innanzitutto per le risposte.
Quello che non riesco a comprendere é questo: se avessi un normale segnale oscillante tra 0 e 12v, allora potrei usare un partitore di tensione o, meglio, un fotoaccoppiatore come mi avete consigliato.
Vedendo tuttavia gli schemi, io, detta un po' semplicisticamente, ho i due fili lato sonda che sono la +12 v e il segnale... A destra, lato ardui o, dovrei avere massa e segnale.
Come faccio a connetterei? Non vedo una massa comune...
Perdonate la banalitá della mia domanda ma c'é qualcosa che mi sfugge...

hai guardato come funziona l'open collector? ti risulta che il tuo sensore possa funzionare così? imho tu misuri l'onda quadra tra i 12 ed il segnale perchè il sensore ti attacca il transistor scaricandoti a terra il segnale... se tu prendi un + a 5 volt anzichè il 12 sei a posto... non so come spiegarmi... cerca open collector su internet.

comunque: assicurati che sia open collector... dovresti misurare una variazione ohmica importante tra massa e segnale del sensore quando cambia stato.
Accertato che è in open collector metti una resistenza tra i 5v di arduino ed il pin e collega il pin anche al segnale del sensore. la massa di arudino attaccala con la massa del sensore (che chiaramente dovrebbe essere con la massa dell'alimentazione a 12v...)... In seguito potrai usare anche la resistenza interna di arduino (attivata via software) ma per il momento dovresti provare così... da arduino vedrai LOW quando il transistor del sensore andrà in conduzione e viceversa HIGH a transistor non acceso... ..quindi per certi aspetti una logica "negata"

Uscita NPN vuol dire che hai un transistore NPN col emettitore collgato a massa e il collettotre che é collegato al uscita. Quando il transistore é pilotato tira a massa l' uscita. Quando non é pilotato non conduce. Se aggiungi una resistenza pullup puoi avere un segnale H e L. La resistenza pullup puoi collegarla a 5V e avere in questo modo un segnale compatibile alle entrate di Arduino. Al posto di una resistenza pullup esterna puoi usare quella interna.

Ciao Uwe

Non hai indicato il modello della sonda ma, se è come quella in allegato, può funzionare anche a 5V.

In qualsiasi caso, anche se la tua prevedesse solo l'alimentazione a 12V, essendo un'uscita open collector, puoi alimentare il transistor di uscita con un resistore di pullup da 1k collegato ai 5V di Arduino.

Se non ti è chiaro, posso inviarti uno schema.

Per rispondere alla tua domanda, il comportamento sull'oscilloscopio è del tutto normale in quanto "vedi" la commutazione del transistor, ma per utilizzare l'uscita è necessario il resistore di pullup.

Con 1k la corrente che passa a 5V è circa 5mA mentre a 12V è circa 12 mA.

Allora,
Scusatemi se vi ringrazio in ritardo, ma solo ora ho potuto verificare i vostri consigli, dei quali ringrazio tutti.

Quello di cui vi sono maggiormente grato non è semplicemente dovuto al fatto che ho RISOLTO, ma al fatto che ho capito...

leggendo le vostre spiegazioni e googlando in giro ho capito che la sonda funziona appunto come un filo "interrotto" e quindi non agganciavo il segnale:
Ho messo una resistenza di pullup di 1K tra segnale e + 5V (che ho usato per alimentarla) ed ho subito agganciato il segnale tra GND e SIGNAL.

Approfitto di voi per un'ultima domanda:
Attualmente il mio codice, facendo polling, pseudo-debouncing ed altro, legge lo stato della sonda contandone gli impulsi. Fino ad ora ho usato un secondo Arduino per generare un'onda quadra simile all'output della sonda. Tutto funziona bene...

In alternativa se ci attaccassi un interrupt potrei contare gli impulsi quando viene sollevato l'evento RAISE.
Questo secondo approccio - secondo voi - è consigliabile rispetto al mio?
Considerate che ho 2 istanze di una classe (quindi 2 flussometri), ogni istanza controlla: il flussometro appunto, 3 relais, una lampada di segnalazione ed un pulsante.
Sto usando un Mega rev3

Grazie di tutto!

Dimenticavo, la sonda è questa:

l'interrupt ti permette di gestire l'evento (anche il change se vuoi) senza perderne mai neanche uno... ossia quando il pin sale qualsiasi cosa stia facendo il codice lui si ferma e fa quello che dici tu (che verosimilmente sarà l'incrementare un contatore).
Dipende da quello che devi fare: imho è un buon metodo per contare molto rapidamente e molto "certamente" senza che il resto del programma interferisca... però se ti funziona anche senza gli interrupt ed il segnale non è comunque velocissimo o non ti serve una precisione assoluta puoi anche tenerlo così

Allora,
Si, ho notato che posso triggerare l'evento che voglio (RAISE, FALL ecc)...
in sostanza devo contare gli impulsi per sapere la quantità di liquido versato.
Come frequenza, anche spremendola al massimo cioè 15 litri al minuto, ho 0,25 litri al secondo cioè 207 Hz al massimo. (830 impulsi al litro)
Mi chiedevo se usando l'interrupt avrei avuto una precisione maggiore o una misura più "certa" in qualche senso...
Grazie

MadDoc65:
Allora,
Si, ho notato che posso triggerare l'evento che voglio (RAISE, FALL ecc)...
in sostanza devo contare gli impulsi per sapere la quantità di liquido versato.
Come frequenza, anche spremendola al massimo cioè 15 litri al minuto, ho 0,25 litri al secondo cioè 207 Hz al massimo. (830 impulsi al litro)
Mi chiedevo se usando l'interrupt avrei avuto una precisione maggiore o una misura più "certa" in qualche senso...
Grazie

ok...lo fai anche senza interrupt... se non ti metti a fare delay e stupidate per i tasti... comunque la soluzione interrupt è "da campioni" :grin:
l'unica cosa è il deboucing... che però se sai come si fa è una stupidata... e se non sai come si fa si fa come ha fatto questo signore:
http://arduino.cc/forum/index.php/topic,45000.0.html