Go Down

Topic: Conta giri a led per auto e temperatura (Read 3727 times) previous topic - next topic

luchetto19

se invece il valore lo stampo su lcd mi si dovrebbe solo aggiornare...chiedo questo perche per fare delle prove su serial monitor se mi scrive sempre un nuovo valore non ci capirei niente...ps grazie per le risposte sei gentilissimo

PaoloP

Si, su LCD lo pui visualizzare sempre nella stessa posizione.
Devi solo avere l'accortezza di cancellare le cifre nel caso si passi da 1000 a 999 o da 10000 a 9999 perché LCD ti visualizzerebbe lo zero finale.

luchetto19


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.
Code: [Select]

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.  :D

P.S. Sostituisci i const int con i #define. Pare rendano il codice più veloce. <-- si sta ancora investigando sull'argomento.



riguardo a questo tu hai messo count>= 10  cosi mi fa la media di 10 valori giusto ??

PaoloP

Esatto.
Modificando il valore dell'if puoi aumentare o diminuire il numero di valori su cui fare la media.
Occhio che codice l'ho scritto di getto e non l'ho verificato.

luchetto19


Si, su LCD lo pui visualizzare sempre nella stessa posizione.
Devi solo avere l'accortezza di cancellare le cifre nel caso si passi da 1000 a 999 o da 10000 a 9999 perché LCD ti visualizzerebbe lo zero finale.


scusa se ti rompo ancora ma sono proprio agli inizi.
come si fa a cancellare le cifre finali??

PaoloP

ho dai il comado clear e cancelli tutto lo schermo oppure prima di inviare il numero lo controlli con un if e se è il caso aggiungi uno spazio dopo le cifre in modo da cancellare eventuali numeri precedenti.

luchetto19

no ho capito molto bene comunque io ho fatto così e pare che funzioni per adesso sto facendo uno per la temperatura che è più semplice
Code: [Select]
lcd.setCursor(0,0);
    lcd.print("Temp:");
     if (valore_sensore_analg< 10)
   lcd.setCursor(6,0);
    lcd.print(" ");
   
    if (valore_sensore_analg< 100)
    lcd.setCursor(7,0);
    lcd.print(" ");
    if (valore_sensore_analg< 1000){
    lcd.setCursor(8,0);
    lcd.print(" ");
    }
    lcd.setCursor(5,0);
    lcd.print(valore_sensore_analg);
 
    delay(1);
  lcd.setCursor(10,0);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Rpm:");

luchetto19

ragazzi ho un problema io devo capionare un segnale analogico allora  arduino va da 0 a 1020 bit se io volessi fare una tabbella in coi dico ad arduino che a 10 bit corrispondono 25 gradi a 20 bit corrispondo 32 gradi ecc. però io non voglio che arduino mi dia solo 25 gradi 32 gradi ecc. ma voglio che in base alla tabbella mi dia i gradi diciamo da 0 a 120 gradi non so se mi sono spiegato. :(  aiutatemi sto uscendo pazzo

MauroTec

Pensa un po, quello che hai scritto fa impazzire pure me. Io non ho capito per intero tutto ma intuisco che non ha ben chiaro il concetto di campione digitale, risoluzione ecc.

Ora veniamo al dunque.
Il microcontroller di arduino ha un solo ADC e uno switch interno che permette di aquisire da un numero x di porte, nel caso del ATmega328 dip il numero di porte adc è 5. L'ADC ha una risoluzione di conversione di 1024, per cui una tensione massima di 5 volts viene divisa per 1024, quindi ottieni 1024 valori diversi incluso lo zero, per cui il valore massimo restituito dal'ADC sarà di 1023 equivalenti a 5/1024*ADCvalue.

Questo ammesso che l'alimentazione del micro sia a 5 volts.

Non ho capito che sensore di temperatura usi, se usi quello dell'auto si tratta di un NTC di cui però non hai la curva caratteristica R/t.

Non uscire pazzo per così poco, ok.  :P

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

luchetto19

allora adesso ti spiego tutto: un amico di mi padre a programmato un display lcd esattamente questo http://www.mikroe.com/smartglcd/ con contagiri e temperatura motore per un auto da corsa di mio fratello  adesso io vorrei fare la stessa cosa da quello che so il sensore della temperatura che abbiamo usato che e di serie sulla auto che utilizza anche la ecu tira fuori un segnale analogico credo 0 - 12 volt(non l ho ancora misurato ) adesso io quello che ho intensione di fare e con un partitore e  abbassare i volt a 5 in modo da farli mangiare ad arduino, io ricordo che abbiamo preso il sensore lo abbiamo immerso in una ciotola con un fornello sotto e abbiamo campionato il segnale in base ai bit che tirava fuori e alla temperatura a cui era l acqua si e fatto una sorta di tabella e quindi credo si è ricavato la curva caratteristica R/t io vorrei fare la stessa cosa ma non so che funzione usare per mettere questa tabella ad arduino, allora  io avevo pensato di fare così mettiamo che alla minima temperatura di 10° il sensore tira fuori 0 e alla massima temperatura di 120 tira fuori 5 volt cioè 1024 se uso la finzione  temp1 = map(valore_segnale, 0, 1024, 10, 120); secondo voi i valori di temperatura da 10 a 120  sono giusti ?? è giusto il ragionamento che ho fatto ?? che soluzioni mi date

MauroTec

Non conosco la mcro map, ma credo sia giusto quello che dici, e funziona se la curva r/t è una linea retta, ma se è una curva ci sarà un errore. Comunque in questo caso la curva (o retta) sarà v/t in quanto mette in relazione la tensione e la temperatura.

Da 0 a 5vdc un range di 110 (120 - 10) ottieni una retta dove v/t è uguale a 5/110 = 0,045454545, e questo valore lo otterrai a tutte le temperature, mentre se il sensore di temperatura non è così lineare a 50 °C v/t dovrebbe essere 0,045ecc e invece risulta 0,056. Se le differenze di v/t sono minime avrai un errore accettabile.

Puoi anche fare un'array di interi senza segno da riempire con le temperature, ma ti servirebbe un array grande 1024 elementi questo esaurirebbe la ram di 2Kb.

Per i valori di temperatura a 120 l'acqua diventa vapore e già la guarnizione di testata la puoi buttare o quasi, per la temperatura minima mi sembra inutile scendere sotto i 10 gradi, anche in caso di gara nelle Madonie, nel radiatore c'è l'antigelo e sapere che l'acqua e a 3 °C non è una informazione utile. Quindi mi sembra un range ragionevole.

Simpatico l'LCD intelligente smartglcd, comodo per quelle applicazioni tipo cruscotto digitale.

Ciao.

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

luchetto19

#26
Dec 11, 2012, 01:41 pm Last Edit: Dec 11, 2012, 01:44 pm by luchetto19 Reason: 1
oggi finalmente ho trovato il tempo per misurare il sensore allora il sensore tira fuori 5 - 0 volt  :D con l aumentare la temperatura ho modificato la funzione così : temp1 = map(valore_segnale, 1024, 0, 10, 120); ma sembra dare de valori sbagliati rispetto al cruscotto digitale. ho notato pure una cosa di strano che qundo attacco arduino al sensore, il cruscotto digitale sballi che cosa può causare questo interferenza  fra i due ??io ho pensato di mettere un diodo  all entrata di arduino


MauroTec

Io trovo sbagliato il modo di procedere che hai intrapreso. Mi sta bene il fatto che sperimenti sperando di ottenere dei risultati, non si sa mai quando arriva un colpo di fortuna.

Comunque, fammi una foto del sensore di temperatura, descrivendomi anche dove viene montato sulla vettura, quanti fili ha il sensore ecc.

Le auto moderne hanno sensori di temperatura un po ovunque, quelle vecchie ti po 205, uno ecc, ne hanno al massimo 2, uno non è facilmente accessibile, l'altro è montato sul radiatore. Nel caso fosse quello montato sul radiatore si tratta di un NTC (documentati su cosa è).

Nel caso di un NTC, c'è una formula che permette di ricavare la temperatura in base ai dati del NTC, dati che si trovano nel datasheet, in questo caso però il datasheet non c'è è bisogna procedere a tentativi, ma la formula rimane sempre valida.

Quindi per prima cosa devi appurare circa il tipo di sensore, NTC, PTC ecc, e poi si possono fare le altre considerazioni. Questo è il modo giusto di procedere, e il fatto che tu legga una tensione non vuole dire che il sensore fornisce una tensione. Altri errori di interpretazioni devono essere evitati e per questo devi sapere nel dettaglio con quali componenti stai lavorando.

Prova a metterti nei miei panni o in genere nei panni di chi deve risponderti e quindi fornisci più dati possibili per risponderti in modo risolutivo, cioè foto, sigle, marca, modello ecc.

Io ad esempio non ho idea di che sensore di temperatura sia montata nella tua vettura di cui non conosco la marca il modello e se per caso mi dici che è una fiat uno, mi hai detto meno che niente perchè di versioni della uno ne sono state prodotte tante e sono in genere riconoscibili anche dalla data di produzione.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

luchetto19

#29
Dec 13, 2012, 06:52 pm Last Edit: Dec 13, 2012, 06:56 pm by luchetto19 Reason: 1
ecco le foto http://imageshack.us/photo/my-images/818/20121213182152.jpg/ecco anche i ldatasheet  http://home.kpn.nl/duran103/pics/wts05%20v4.pdf il sensore qui dice che è un NTC appartiene ad una fiat 600 , misurato col tester collegato all'auto col quadro girato il sensore a temperatura minima tira fuori 5v e se scaldato la tensione si abbassa, ecco anche un link http://www.dotshop.it/index.php?main_page=product_info&products_id=25548 il sensore e istallato sul'collettore di aspirazione dell'auto il sensore de è collegato alla centralina di gestione motore(ecu).Io l entrata analogica dell aurduino l ho collegata al filo viola (dalle foto di vede) e il gnd alla massa dell auto ripeto se scaldo il sensore la temperatura si alza ma mi da dei valori sbagliati.Grazie a MauroTec per l' aiuto che mi stai dando sei proprio gentilissimo grazie ancora  :smiley-red:

Go Up