leggere segnale tachimetrico ventola 3 fili

Stò cercando di leggere il segnale tachimetrico della ventola, senza alcun risultato, ho usato questo codice:

int pin = 2;
int i=0;
int sensorValue=LOW;

void setup()
{
pinMode(pin, INPUT);
Serial.begin(9600);
}

void loop()
{ sensorValue=digitalRead(pin);
if(sensorValue==HIGH) i=i+1;
Serial.println(i, DEC);
}

facendo così il serial monitor mi mostra una fila interminabile di zeri...

ho aggiunto (scusate se è parecchio brutto) lo schema di come ho fatto le connessioni.

Se con un cavo collego il +5V di arduino con il pin 2 i aumenta... inoltre ho collegato la ventola al pc,
e da li con speed fan leggo la velocità... quindi il segnale arriva... non capisco cosa sbaglio.

Usa una pulse in :slight_smile:

Ho provato anche con quella, ma mi da sempre 0(solo con intervalli più lunghi tra uno e l'altro), inoltre misurando col tester la tensione tra i 2 fili più esterni della ventola mi da 0V...

prova a misurare tra +5V e il filo giallo...
e più che la pulse in un interrupt in evento falling.... in ogni caso metti una foto della tua ventola ed il relativo collegamento che capiamo meglio :slight_smile:

Funziona! ho messo il gnd di arduino sul filo del tachimetro e l'ingesso 2 di arduino sul +12V!!! non è che si brucia qualcosa così vero? a me sembrava tutto apposto, il cip non scaldava...

taz86:
Funziona! ho messo il gnd di arduino sul filo del tachimetro e l'ingesso 2 di arduino sul +12V!!! non è che si brucia qualcosa così vero?

Ti dice qualcosa che il processore lavori a 5V?

Quindi secondo te potrei bruciare l'ingresso...

Ci sono anche bellissime ventole con segnale pwm (4 fili) che piloti e leggi banalmente da arduino, cosi', per un'altra volta :slight_smile:

Controlla che non ti dia più di 5V... sennò risolvi con uno zener da 4.7/5.1V ed una resistenza da 470 ohm....
se la tensione è > di 5V friggi il chip....

a vuoto la tensione è al massimo 7V mentre una volta che collego arduino scende a 3.5V. A questo punto anche se mettessi il diodo zener passerebbero tutti i 3.5V quindi credo di essere tranquillo anche senza, correggetemi se sbaglio!

allora ti spiego come collegare lo zener...
ne prendi uno da 4.7V (anche se non sono 5 precisi arduino li sente come seglale 1, HIGH)
colleghi tra il cavo che ti da il segnale ed arduino la resistenza da 470 ohm...
poi colleghi lo zener (deve puntaare da massa al pin dell arduino che usi come ingresso) tra la resistenza e il pin d'ingresso

cavo
-----> resistenza---------> arduino
^
diodo

Gnd

ok! adesso ho capito! (per lo zener)

vi posto il codice che ho scritto per rilevare il numero di giri, devo solo migliorarlo mediando i valori che salgono e scendono un po' a caso, penso che userò qualcosa di simile a smooth.

unsigned long time;
unsigned long lastTime=0;
float duration;
float nGiri0;

void setup(){
attachInterrupt(1,upDown,FALLING);
Serial.begin(9600);
}
void loop(){
nGiri0=1/(float(duration))1e660;
delay(1000);
if(nGiri0<5000){
Serial.println(nGiri0);
}
}
void upDown(){
time=micros();
duration=time-lastTime;
lastTime=time;
}

Fai una media su alcuni campioni scartando quelli che sono troppo diversi (letture errate)