Vai al contenuto
PLC Forum


frequenzimetro con arduino


roberto8303

Messaggi consigliati

salve,

una curiosità mi serve una lettura di frequenza quindi genero un impulso a 100hz, utilizzo con arduino pulse in.

 pinMode(led,INPUT);
  Serial.begin(9600);

}
void loop(){
 

   

pulsante=pulseIn(led,HIGH);
    

 a=410000/pulsante;
 Serial.println(a);
  
  delay(300);    
  }

 

perchè la frequenza esatta viene fuori solo se metto a=410000? e non 500000?

Link al commento
Condividi su altri siti


Scusa Roberto, ma non è che si capisce molto di quello che stai facendo

Tu misuri il tempo, in microsecondi, per cui l'ingresso rimane nello stato alto.

Se leggi 100 significa che il tuo impulso rimane alto per circa 244µs.

 

Questo è il metodo classico che si usa per misurare la distanza tramite un sensore ad ultasuoni.

 

Se vuoi misurare la requenza devi crearti una base tempi e contre gli impulsi che occorrono durante questo tempo. A esempio se fai una base tempi di 1" conterai 100 impulsi se la frequenza è 100Hz.

 

Oppure per aumentare la precisione si misura il periodo ovvero si conta il tempo che trascorre tra un fronte ed il successivo.

Cn arduino di solito si usa Timer1 con clock esterno come contatore e timer2 come geenratore di base di tempo oppure contimer1 si conta il clock interno da 16MHz abilitando e stoppando il conteggio con i fronti dell'impulso da misurare.

Link al commento
Condividi su altri siti

ho provato a generare con un generatore di segnale un impulso a 100hz 2,5volt e con questo codice su arduino riesco a leggere la frequenza solo che volevo capire perchè bisogna dividere solo per 410000 il contenuto di pulsein. Ho provato a portare la frequenza fino a 1khz e oltre e si trova arduino legge bene anche se è un modo diverso volevo capire se era possibile usare questo codice

Link al commento
Condividi su altri siti

Dipende da quanto dura il semiperiodo alto del tuo impulso perchè, ripeto, l'istruzione che stai usando serve per determinare il tempo che impiega l'ingresso per passare dallo stato alto a quello basso. Se scegli LOW invece di HIFGH misura esattamente l'altra parte del periodo, cioè circa 9.75ms se l'impulso ha una frequenza di 100Hz

Comunque se fai una ricerca con goolgle con chiave " arduino pulseIn()" trovi spiegazioni dettagliate di come lavora questa funzione.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...