Home Forum PROGRAMMAZIONE EMBEDDED Termometro con Arduino + LM35cz + multiplex a 4 cifre + visualizza temperature sotto zero

Questo argomento contiene 6 risposte, ha 5 partecipanti, ed è stato aggiornato da  taraschi.nicola 1 anno, 6 mesi fa.

Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
  • Autore
    Articoli
  • #59635

    RobertoZ
    Membro

    Ciao a tutti, sto cominciando a fare i primi passi nel mondo embedded e programmazione.

    Come da manuale, cerco di realizzare il mio primo progettino: un termometro digitale.

    Sono ai primi rudimenti di C e del linguaggio di Arduino, ci provo . . .

    Diciamo che sono riuscito a trovare uno sketch per Arduino che visualizza la temperatura ma, purtroppo, solo su LCD (o mandarli su seriale) e riproduce valori di temperatura da zero in poi (niente da fare per i valori sotto zero).

    Lo sketch l’ho capito, adesso sto cercando di adattarlo con varie prove sperimentali se non mi blocco prima. . .

    Io vorrei che la temperatura venisse riportata su un multiplex (catodo comune), quindi non LCD, e che riporti anche i dati delle temperature negative (sotto zero).

    Come potete aiutarmi? C’é già qualche listato adatto al mio scopo? oppure, quali istruzioni fondamentali.

    Vi ringrazio in anticipo
    Roberto

    #73293
    Piero Boccadoro
    Piero Boccadoro
    Partecipante
    #73300

    RobertoZ
    Membro

    Grazie Piero per la tua risposta. Ho letto il post che hai linkato ma purtroppo non sono stato in grado di “legarlo” alle necessità dello sketch su cui sto sbattendo.

    Diciamo che sono arrivato a comporre, con vari pezzi, il segunte listato che, come dicevo prima, visualizza i dati su LCD (li vorrei su multiplex 4 cifre). Per ora però mi basterebbe visualizare i dati sui display a 7-seg senza ricorrere integrati per il loro pilotaggio:

    #define LM35_TEMP 0 // Pin analogico 0
    #define LM35_REF 1 // Pin analogico 1
    #include //include la libreria per il funzionamento dell’lcd

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //setta le uscite di arduino per lcd
    float temperatura; // variabile in cui viene salvata la temperatura in gradi centigradi
    float prev_temperatura = 0; // temperatura precendente
    int ref; // valore della tensione di riferimento dei due diodi
    int ref_medio = 0; // valore della tensione di riferimento medio
    int sensoreTemperatura; // valore di tensione letto dal pin OUT del sensore
    int sensoreTemperatura_medio = 0; // valore sensoreTemperatura medio
    int cont; //contatore usato per ottenere un valore medio
    void setup()
    {
    lcd.begin(16, 2); // setta del numero delle colonne e delle righe
    }
    void loop()
    {
    // vengono sommati 10 valori di temperatura per poi farne la media
    for( cont = 0; cont < 10; cont++)
    {
    sensoreTemperatura = analogRead(LM35_TEMP); // lettura della tensione del pin OUT LM35
    sensoreTemperatura_medio += sensoreTemperatura; //sommatoria dei valori
    ref = analogRead(LM35_REF); // lettura della tensione di riferimento
    ref_medio += ref; // sommatoria dei valori
    delay(500); // intervallo di campionamento
    //la lettura durera’ 10 (numero di camoioni) x 500ms (intervallo tra due campioni) = 5000ms
    }
    if(cont == 10) // quando ho sommato i dieci valori campionati si esegue:
    {
    cont = 0; // azzeramento contatore, per far ripartire il successivo campionamento
    // media della sommatoria dei dieci valori campionati di ref e sensoreTemperatura
    sensoreTemperatura_medio = sensoreTemperatura_medio / 10;
    ref_medio = ref_medio / 10;
    // conversione dei valori medi misurati in una temperatura in gradi centigradi
    temperatura = (sensoreTemperatura_medio – ref_medio) * 100/2.56;
    temperatura = temperatura * 5/1024;
    // valore di temperatura che verra’ mostrato quando si e’ in fase di campionamento
    //e non c’e’ una temperatura disponibile
    prev_temperatura = temperatura;
    sensoreTemperatura_medio = 0;
    ref_medio = 0;
    }
    else{
    temperatura = prev_temperatura;
    }
    lcd.clear(); //pulisce lo schermo
    lcd.print(“Temperatura: “); // stampa della prima riga sull’lcd
    lcd.setCursor(0, 1); //setta il cursore sulla seconda riga al primo carattere
    lcd.print(“gradi “); //stampa la temperatura su lcd
    lcd.print(temperatura); //valore della temperatura media calcolata
    delay(1000); //attende un secondo
    }

    Ecco, ritengo che su quest’ultime righe occorrerebbe “agganciare” le istruzioni per pilotare il multiplex

    Non so se sono stato chiaro, scusatemi
    grazie ancora
    Roberto

    #73301

    Ma oltre il listato bisogna anche vedere che circuito di condizionamento hai usato esternamente con LM35CZ..
    Io avrei tentato con qualcosa di simile

    http://www.webalice.it/crapellavittorio/schemivari/adc_pic.html

    poi avrei adattato il listato con i calcoli indicati

    #73303

    Boris L.
    Partecipante

    Devo dire che anche a me sembrava mancasse questo pezzo alla discussione… Non abbiamo ancora visto uno schematico…
    Come si può pensare di programmare un sistema che non si sa com’è fatto?

    #73313

    RobertoZ
    Membro

    Si, in effetti avete ragione, scusatemi, manca il riferimento al circuito che gestirà LM35cz per le temperature anche negative. Io avevo trovato questo:

    http://cinquetau.altervista.org/blog/wp-content/uploads/2010/02/Tutorial-lm35.pdf

    ma il listato che presenta, non prevede l’uscita su multiplex.

    Per il resto non ho altri schemi se non quello di avere Arduino uno ed i suoi pin da programmare per gestire l’LM35 ed il multiplex a 4 cifre.
    vi ringrazio tutti
    ciao

    #73349

    taraschi.nicola
    Partecipante

    ho messo oggi un articolo sui sensori di temperatura ed arduino

Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.