Ciao a tutti,
come primo progetto ho rispolverato un vecchio progetto funzionante che avevo fatto assieme ad alcuni amici su PIC per la gestione di una tenda motorizzata.
Ho risolto abb.za tutto ma vorrei un aiuto da voi su come gestire l'anemometro che sto usando.
L'anemometro in questione ad una velocità del vento pari a 10 km/h corrisponde a 4 impulsi al secondo.
Come potrei misurarla con arduino?
ehm vado a leggermi come si usano gli interrupt... se magari avete qualche esempio di come dovrei fare..
Nel frattempo ho provato ad usare la funzione pulseIn ma non mi sembra faccia al caso mio o forse sbaglio ad usarla...
AnemometroState = pulseIn(AnemometroPin,HIGH);
sapendo che l'anemometro fa 4 impulsi/secondo @ 10km/h vuol dire che fa 1 impulso in 250ms (250000 microsecondi)
Ho provato a debuggare il comando facendo girare la ventolina con un phon ma mi torna dei valori non tanto ragionevoli in quanto facendo girare piano la ventola ho un valore di circa 28000, aumentapo poco la velocità mi ritrovo con valori compresi tra 26 e 45 e ogni tanto anche valori negativi
WindSpeed e VelocitaVentoChiusura sono dichiarati come float
Non capisco perchè con WindSpeed che vale 0.00 la condizione if si avvera e applica il codice.
l'unico modo che ho trovato per risolvere è usare un int al posto del float e moltiplicando per 100 il valore (15 diventa 1500).
il compare con i float leggendo anche sulle reference non sembra funzionare molto bene... Altra cosa strana è che se modifico la funzione aggiungendo un + 0.01 tanto per far valere windspeed qualcosa di diverso da 0.00 mi torna sempre 0.00
se modifico la funzione iniziale WindSpeed = abs(1000000.0/AnemometroState2.5); in WindSpeed = abs(1000000.0/AnemometroState2.5)+0.01; cmq non funziona
perchè se modifico la funzione in WindSpeed = abs(1000000.0/AnemometroState*2.5)*100; definendo WindSpeed come variabile int funziona correttamente.
cmq per ora uso la modalità scritta nel punto 2 ma non mi è chiaro perchè non andasse prima...
ciao TheBus
per primo una divisione di 0 produce un errore perché é un valore non definito.
Nella matematica considerando il limes della funzione 1/0 si arriva che il valore é infinito. ma un microprocessore non gestisce cosí il calcolo.
Incolla tutto il codice senó non possiamo capire cosa stai facendo.
Controlla prima di fare la divisione se il tempo reso dalla funzione pulseIn() non sia sopra un valore limite oppure 0. Le eliche dei anemometri hanno un limite di funzionamento sotto il quale non girano a causa della resistenza dei cuscinetti. (é ca 0,4m/s per quelli a elica)
Solo nel caso di un valore rilevante fai il calcolo della velocitá.
cerca di non fare calcoli inutili che fanno appesantire il codice e il tempo di esecuzione: al posto di
1000000.0/AnemometroState*2.5
scrivi
2500000/AnemometroState