Go Down

Topic: Contachilometri (Read 5 times) previous topic - next topic

Locke

Salve,
Sto inciampando in alcuni problemi con il mio ultimo progetto...
L'idea è quella di utilizzare il sensore di passaggio di un contachilometri da bicicletta, per misurare poi con arduino la velocità di una moto, visualizzata su un display 16x2.

Il problema è che non so come creare una variabile che aumenti di una sola unità ad ogni attivazione dell'imput (passaggio della calamita).
Per rendere meglio l'idea...
Premo un pulsante, la variabile va da 0 a 1, ripremo, va da 1 a 2.
Passato 1 secondo devo far in modo di leggere la variabile, effettuare i calcoli di conversione tra il tempo (1 secondo) ed i passaggi della calamita e visualizzare sul display la velocità in Km/h.

Confido in un aiuto dall'alto  :D

Luca P.

uwefed

Ciao

perché non misuri il tempo tra un impulso e l' altro e ti calcoli con quello la velocitá
commando pulseIn()
http://arduino.cc/en/Reference/PulseIn

Ciao Uwe

kokiua

Devi rapportare ciascun impulso alla circonferenza della ruota della tua moto, e quando avrai determinato quanti giri (impulsi) fa al secondo, potrai calcolare facilmente la velocità in Km orari...

BrainBooster

#3
Jun 21, 2010, 05:14 pm Last Edit: Jun 21, 2010, 05:47 pm by brainbooster Reason: 1
ti dico la logica...
ad ogni impulso del sensore, sai che la ruota ha percorso un giro completo, quindi hai un valore espresso in "ruota al secondo" se misuri ogni secondo il numero di impulsi hai la velocità corrente in ruote al secondo, poi per passare alla velocità in Kmh devi sostituire la circonferenza della ruota nella formula, quindi se per esempio la circonferenza fosse 1m avresti una velocità di 1m/s e quindi per passare a kmh lo moltiplichi per 3,6.
P.S.
volevi dire tachimetro vero? ::)
per azzerare puoi implementate un timeout sui dati ricevuti del tipo se entro un secondo non ricevo impulsi azzera la visualizzazione.

Locke

Grazie mille ragazzi :D
Ma il punto è che non so come farlo fare al programma  ;D

Uwe approfondirò il discorso pulsein, se riesci a dirmi di più tene sarei grato :D

Comunque l'idea di fondo è, 1 secondo di tempo, registro i passaggi del sensore, e calcolo la velocità rapportata alla circonferenza/passaggi/al secondo

kokiua

Ci risiamo... un'altro che "pretende" la pappa pronta...

Locke

#6
Jun 21, 2010, 06:06 pm Last Edit: Jun 21, 2010, 06:09 pm by Locke Reason: 1
No affatto...
Ho fatto molte prove con if else while ma non vengo a capo di nulla, non è la prima volta che uso arduino, non pretendo il programma già scritto, ma solo una funzione che mi permetta di fare quello che desidero, ovvero contare gli impulsi.


#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int sensorepin;
int giri = 0;
int giri2 = 0;
int abba;


void setup()
{
 pinMode(1,INPUT);
 lcd.begin(16, 2);
 lcd.print("    -DUCATI-");
 delay(1000);
 lcd.clear();
}


void loop()
{
 abba = analogRead(sensorepin);
 if(abba > 900)
 if(giri==0)
 {{
 giri = 1;
 giri2++;
 }}
 else {
   giri = 0;
 }


 
 lcd.setCursor(0, 0);
 lcd.print("Speed");
 lcd.setCursor(0, 1);
 lcd.print(giri2);
 lcd.print(" Km/h ");
   lcd.print(giri);

 delay (5);
}


Così non funziona, perchè non conta gli impulsi singoli, ma conta alla frequenza di refresh del programma delay (5); per il periodo durante il quale l'if è vero

BrainBooster

e dai, un pò di applicazione... hai  tutto quello che serve per capire.
se ti serve altro basta chiedere,
se ti serve "un" altro invece, basta pagarlo :)

Locke

Se ho scritto qua sul forum, evidentemente non ci arrivo...
Comunque nessun problema, speravo di trovare un aiuto, non credevo che pure nell'openhardware ci fosse un clima così... come non detto.

BrainBooster

l'openhardware lo stai gia usando, qui si tratta di software e poi perchè sei così permaloso, ti assicuro che non è il caso, chi ti risponde su questo forum lo fà con tutto l'entusiasmo possibile e nessun pregiudizio, certo che se uno si accorge che l'obbiettivo di chi chiede è un pò ambizioso per le sue capacità, non puo fare altro che fornirgli una base per imparare ad apprezzare i suggerimenti inizialmente non capiti, ma non ci si piò aspettare che qualcuno scriva una sola riga di codice al posto tuo.
tutto ciò senza rancore  :) capisco che quando non si è addentro ad un argomento, un consiglio può sembrare sanscrito, ma se si parla la stessa lingua....

Locke

void loop()
{
 abba = digitalRead(sensorepin);
 if(abba == HIGH)
 {
 giri2++;
 }
 else {
   giri2 = 0;
 }

if(giri2>0)
if(x==0)
{{
 giri = 1;
 x = 1;
}}
if(giri2>0)
if(x==1)
{{
 giri = 2;
 x = 2;
}}
 
 lcd.setCursor(0, 0);
 lcd.print("Speed");
 lcd.setCursor(0, 1);
 lcd.print(giri);
 lcd.print(" Km/h ");
 delay (5);
}

Continua a non contare gli impulsi.... ripeto, sto chiedendo una funzione che mi consenta di contarli, non sto chiedendo a nessuno di scrivermi nemmeno una riga di codice, per chi vuole ancora aiutarmi sono qui, e non sono permaloso, questo forum nasce anche per chiedere aiuti...

kokiua

Sono allibito!
@brainbooster: ti prego, non dargli ulteriore corda perchè qui si sta rasentando il ridicolo! Non solo questo qua se ne esce dandoci dei bambini perchè non lo aiutiamo, ma arriva pure a pretendere che lo si aiuti perchè secondo lui "questo forum nasce anche per chiedere aiuti...".

@Locke: se esiste una funzione che fa quello che ti  serve, perchè non te la cerchi???

Roba da matti!

uccio

@locke vuoi contare il numero degli inpulsi o il tempo che intercorre tra due inpulsi?

BrainBooster

un pò di informazioni sul sensore? cos'è un rele reed? come lo hai collegato? se possibile lo hai provato con un tester? hai una foto del cablaggio? hai provato ad isolare la parte non funzionante, cioè a scrivere un miniprogramma che ad ogni passaggio del sensore ti scriva un 1 sulla seriale?

kokiua

@uccio: non lo sa neppure lui cosa vuole veramente.. non a caso gli sono state date tutte le risposte che ha cercato ma sembra non gli interessi "faticare" e sta aspettando che qualcuno gli dia la pappa pronta..

Go Up