giovedì 15 marzo 2012

Funzione di calcolo velocità

Ecco la funzione che sviluppato per calcolare la velocità raggiunta dallo scooter.

Si parte dall'assunzione di non usare l'ingresso digitale, ma analogico, ho usato questo sistema perche' i PIN digitali mi servono per fare altre cose in futuro..



Questo per dare una idea di come si implementano con facilità soluzioni su Arduino..

Ecco il codice:

/variabili x conta KM
int pincontgiri=5; // legge segnale x contagiri
int state; //the state of the input
int oldstate;
unsigned long t; //timer
unsigned long s; //samples
unsigned long c; //count
double f=0; //frequency
double cont=0;
double sensvalgiri=0;
double giricalc=0; // lettura del valore sensore di hall
// End variabili contaKM




double GetKmh()
{
// la funzione calcola il nr di giri al secondo in funzione di un ciclo di valutazione
c = 0;
t = millis(); // read time at start of sampling
for(s=0; s<1500; s++){ //take a number of samples dura circa 0,4 sec
sensvalgiri = analogRead(pincontgiri);
sensvalgiri=sensvalgiri/1023*5;
if (sensvalgiri > 3)
{
state = 1; // se il segnale analogico supera i 3V vuol dire che hall sensor è attivo
}
else
{
state = 0; // se il segnale analogico supera i 3V vuol dire che hall sensor è 0
}
if (state != oldstate){ //lo stato è cambiato:
c++; //conta il nr di cambiamenti
oldstate = state; //and reset current state
}

}
t = millis() - t; //read time at end of sampling

c = c/2; // need to divide by 2 because counter incremented on each change - two changes per cycle

f = 1000*c/t; //calcola il nr di volte che hall sensor è attivo per un secondo

// in km/h
// dove 23= nr di volte che hall sensor va a 5V
// 1.42 metri di circonferenza ruota
// il resto dei numeri serve a convertire i valori da sec a h e da metri a KM
f= (f/23*3600*1.42/1000);

return f;

}

Nessun commento: