al posto della pulseIn fai:
unsigned long time;
while (digitalRead(fanPulse) == LOW){
continue;//wait to be HIGH
}
while (digitalRead(fanPulse) == HIGH){
continue;//wait to be LOW
}
time = micros();
while (digitalRead(fanPulse) == LOW){
continue;//wait to be HIGH
}
pulseDuration = micros()-time;
in pratica conm questo codice sei sicuro di posizionarti ALL'INIZIO del segnale basso, e non magari di iniziare a leggerlo da metà (non ricordo se la puilseIn lo faccia, ma non sarebbe la prima volta che la pulseIn sfasa) che versione di IDE hai?
poi al posto di 1000000 scrivi 1000000.0 (se non forzi la divisione ad essere in double perdi i decimali!)