Offline
Newbie
Karma: 0
Posts: 28
|
 |
« on: December 04, 2012, 02:32:35 pm » |
Buona sera sono nuovo del forum vorrei creare con arduino un contagiri a led per auto premetto che sono proprio agli inizi e posseggo un arduino uno quindi abbiate pazienza se non capisco a primo colpo  . allora un con un mio amico una volta abbiamo misurato il segnale e da quanto mi ricordo il segnale era un onda quadra con 12 volt picco picco e più i giri aumentavano e più il periodo diminuiva.ditemi se il ragionamento che voglio fare è giusto allora per prima cosa con un partitore di tensione bisogna abbassare i volt portandoli a 5 volt poi far leggere il segnale ad aurduino fargli calcolare il periodo e poi a con una equazione matematica (che posso rimediare) calcolare i giri motore fare una media e poi con la stringa if dirgli che i vari led si devono accendere dopo il superamento del tot di giri..il tutto trasformato in linguaggio di programmazione e li mi serve una mano  ...secondo voi il ragionamento che voglio fare fila ed è possibile farlo con arduino ??Grazie a tutti in anticipo per l aiuto
|
|
|
|
« Last Edit: December 09, 2012, 04:47:57 pm by luchetto19 »
|
Logged
|
|
|
|
|
Marche
Offline
Edison Member
Karma: 25
Posts: 2059
|
 |
« Reply #1 on: December 04, 2012, 05:01:09 pm » |
Con un LM2917 e degli LM3914 (ognuno controlla 10 led e si possono mettere in cascata) puoi farne uno senza scomodare l'arduino, partitori, regolatori di tensione, ecc. Sarebbe più comodo, ma se vuoi usare l'arduino sicuramente è un ottimo esercizio e avrai anche più flessibilità.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #2 on: December 05, 2012, 09:37:22 am » |
appunto io lo vorrei fare con arduino perché l anno prossimo lo dovrei usare anche a scuola per questo volevo esercitarmi
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #3 on: December 05, 2012, 09:45:01 am » |
gentilmente mi potreste dire come calcolarmi il periodo in millisecondi .ve ne sarei grato.
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #4 on: December 05, 2012, 09:54:46 am » |
La funzione millis() di Arduino è un contatore che viene incrementato ogni millisecondo partendo da zero all'accensione o al reset. Devi registrare in una variabile l'inizio delle evento esempio start = millis() e poi la fine finish = millis(). Il periodo, in millisecondi, lo trovi semplicemente calcolando periodo = finish - start. Per assegnare il valore alla variabile ti conviene appoggiarti ad un interrupt individuando la salita e la discesa del segnale.
|
|
|
|
« Last Edit: December 05, 2012, 09:57:25 am by PaoloP »
|
Logged
|
|
|
|
|
Marche
Offline
Edison Member
Karma: 25
Posts: 2059
|
 |
« Reply #5 on: December 05, 2012, 10:00:12 am » |
Ci sarebbe anche la funzione pulsein, magari può tornare utile
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #6 on: December 05, 2012, 10:17:06 am » |
si, anche se a me non ha mai funzionato. 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #7 on: December 05, 2012, 12:15:42 pm » |
ok mi devo studiare un po questi interrupt che non ho capito bene cosa sia...appena ho tempo vede se riesco almeno a far carpionare il segnale ad arduino e visualizzare sul serial monitor...vediamo cosa uscirà fuori...un altra cosa secondo voi per abbassare il voltaggio del segnale basta un partitore o ci vorrebbe anche un regolatore?? perchè il segnale esce direttamente dalla ecu
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #8 on: December 05, 2012, 01:31:08 pm » |
Ma se esce dalla ECU non ti conviene utilizzare direttamente il CAN BUS e le librerie OBD? --> http://sourceforge.net/projects/obdcon/
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #9 on: December 06, 2012, 08:38:13 am » |
questa delle librerie obd non lo sapevo quindi sulle auto stradali sarebbe una bella soluzione...il problema si pone sulle auto da rally (possibile istallazione) dato che sono totalmente prive di questo dispositivo
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #10 on: December 06, 2012, 08:54:28 am » |
Se utilizzano una centralina di serie dovrebbero avere il connettore da qualche parte. Se poi vengano modificate e allegerite di componentistica non necessaria non saprei dire. Ma dubito che non abbiano predisposto una connessione per la diagnostica. P.S. Parlo ovviamente delle nuove auto con centraline elettroniche non di una vecchia ritmo abarth. 
|
|
|
|
« Last Edit: December 06, 2012, 08:57:30 am by PaoloP »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #11 on: December 06, 2012, 10:22:44 am » |
per auto da rally io mi riferisco ad auto da corsa prototipi che sono prive di ecu originale... e le ecu che sono montate sono montate hanno una diagnostica completamente diversa dalle auto stradali. a parte questo questa e un parte dell programma che ho fatto avrei la necessità di calcolarmi la media dei valori assegnati a (duration) avete qualche suggerimento ?? const int LED1 = 1; //Led 1 collegato al pin 1 const int LED2 = 2; //Led 2 collegato al pin 2 const int LED3 = 3; //Led 3 collegato al pin 3 const int LED4 = 4; //Led 4 collegato al pin 4 const int LED5 = 5; //Led 5 collegato al pin 5 const int LED6 = 6; //Led 6 collegato al pin 6 const int LED7 = 7; //Led 7 collegato al pin 7 const int LED8 = 8; //Led 8 collegato al pin 8 const int LED9 = 9; //Led 9 collegato al pin 9 const int LED10 = 10; //Led 10 collegato al pin 10
int Impulso = 13; //indica che il pin di input al quale arriveranno gli impulso è il 13
unsigned long duration; //indica che la durata non può assumere valori negativi, long viene usato xk ha dimensione doppia rispetto a int
void setup() { pinMode(Impulso, INPUT); //configura il pin come input pinMode(LED1, OUTPUT); //configura il pin come output pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); pinMode(LED9, OUTPUT); pinMode(LED10, OUTPUT);
}
void loop() { duration = pulseIn(Impulso, HIGH); //misura il tempo in millisecondi che trascorre tra un impulso e l'altro
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #12 on: December 06, 2012, 01:06:13 pm » |
Devi sommare duration in una variabile. Ad ogni loop incrementi un contatore. Quando il contatore arriva ad un certo numero dividi la somma per il contatore. sumduration += duration; count++; if (count >= 10) media = sumduration/count;
una cosa del genere. Attento alla divisione intera, ma credo che non ti interessino i decimali degli rpm.  P.S. Sostituisci i const int con i #define. Pare rendano il codice più veloce. <-- si sta ancora investigando sull'argomento.
|
|
|
|
« Last Edit: December 06, 2012, 01:08:25 pm by PaoloP »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #13 on: December 06, 2012, 01:07:41 pm » |
scusate se vi rompo ancora ma su serial monitor invece di far stampare sempre un nuovo valore e possibile solo aggiornarlo ??
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3015
|
 |
« Reply #14 on: December 06, 2012, 01:09:21 pm » |
Sul serial monitor dell'IDE no, non ha il ritorno sulla riga superiore.
|
|
|
|
|
Logged
|
|
|
|
|
|