ciao,
dopo aver spulciato un po' nel forum in ricerca di progetti interessanti ed aver letto un libro su arduino mi trovo qui a chiedere il vostro aiuto.
come altri nel forum vorrei realizzare un contagiri per lo scooter (un foresight 250 4t).
per il momento non mi servono grandissime funzioni, vorrei solo calcolare il numero di giri al minuto ed avere un output visivo (display o barra led).
il primo dubbio che ho avuto è come rilevare il segnale e fare la media,
ho letto che si potrebbe usare un sensore ad effetto hall o una fotocellula, poi però ho pensato che nell'impianto elettrico esiste già il pickup che rileva ogni giro del volano e mi sembra stupido metterne un altro.
non ho idea di cosa sia fisicamente, qualcuno può darmi un'indicazione su come collegarlo ad arduino?
o per lo meno come misurare quel che esce?
avete suggerimenti generici da tenere in considerazione?
ciao,
in realtà prima di aprire questa discussione ho risposto anche lì ma non c'è molto di utile,
oltretutto lui ha usato un sensore extra che io vorrei evitare.
non ho trovato neanche lo sketch per fare il calcolo della media =(
per il momento posso rimandare la parte del collegamento all'impianto elettrico,
vorrei cominciare a costruire qualcosa sulla scrivania in modo da affrontare i vari step uno per volta.
per cominciare ho pensato di rilevare la media al minuto delle pressioni di un pulsante (al posto del sensore) e comunicare tramite seriale la media al pc,
prendendo spunto dalle altre discussioni e dai vari link ho letto questo http://arduinotutorial.altervista.org/avarage/
e questo http://www.arduino.cc/playground/Main/ReadingRPM
che mi sembrano perfetti, solo che non capisco il calcolo nella parte loop
void loop()
{
total -= readings[index]; //Sottrae l'ultima lettura
readings[index] = analogRead(inputPin); //Legge i valori provenienti dal sensore e li salva nell'array
total += readings[index]; //Aggiunge la lettura al totale
index = (index + 1); //Incrementa l'indice
if (index >= NUMREADINGS)
index = 0; //Alla fine dell'array resetta l'indice a 0
average = total / NUMREADINGS; //Calcola la media
Serial.println(average); //Stampa la media
}
nel secondo esempio invece:
void loop()
{
if (rpmcount >= 20) {
//Update RPM every 20 counts, increase this for better RPM resolution,
//decrease for faster update
rpm = 30*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
Serial.println(rpm,DEC);
}
}
int count = 0;
void setup() {
pinMode(8, INPUT); //Metto il pin 8 in input
pinMode(9, INPUT);
Serial.begin(9600); //Inizializzo la comunicazione seriale
}
void loop() {
int statoBottone = digitalRead(8); //statoBottone legge il valore digitale dal pin 8
int statoReset = digitalRead(9);
Serial.println(count); //Stampo nel serial statoBottone
if (statoBottone == 1) { Blocca(); }
if (statoReset == 1) {
count = 0;
}
}
void Blocca() {
int statoBottone = digitalRead(8); //statoBottone legge il valore digitale dal pin 8
int statoReset = digitalRead(9);
if (statoBottone == 0){
count++;
loop();
}
}