Schema progetto sensore temperatura + display

Salve,

sapreste darmi indicazioni su dove trovare lo schema hardware per creare un progetto che legga la temperatura e rimandi i valori sul display.

grazie a tutti

Specifica che temperatura (range) e dove/cosa vuoi misurare. Ciao Uwe

che display hai? 2 righe 16 colonne? hai un lm35 per la lettura delle temperature?

leggi qua: http://www.adrirobot.it/sensori/lm35/scheda_arduino_lm35.htm

ciao

in effetti sono stato poco esplicito…
vorrei assemblare il progetto con i componenti dello starter kit, ovvero il sensore LM35 e il display a 2 righe.

avevo già visto lo schema postato, ma sinceramente il fatto che non viene usato arduino uno ho un pò di difficoltà a capire lo schema.

sulla base di questo schema ho provato a sviluppare i collegamenti utilizzando arduino uno, mi fate sapere se può andare bene?

grazie

ferdard: avevo già visto lo schema postato, ma sinceramente il fatto che non viene usato arduino uno ho un pò di difficoltà a capire lo schema.

Se usano Arduino 2009 é compatibile del tutto con Arduino UNO.

Lo schama allegato é sbaglaito. Manca l' aliementazione e la pedianture del modulo é siccuramente diverso.

http://burnsforce.com/index.php/arduino-lcd-hd44780-simple-tutorial/ http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/

controlla se il Tuo Display ha la stessa disposizione dei piedini.

Ciao Uwe

Ho capito come collegarlo, ho dovuto modificare una parte del codice per adattarlo a questo display (C1602A).

Ora il sistema funziona, ma il sensore mi restituisce un valore di temperatura di 72°C, sarà guasto il sensore ho bisogna modificare ulteriormente il codice.

posto il codice adattato al display per chi fosse interessato. ricordo che non ho creato io il codice ma ho solo fatto questo piccolo adeguamento.

 /*
 
#include <LiquidCrystal.h>



#define RS  4
#define EN  5
#define D7  9  
#define D6  8
#define D5  7
#define D4  6


#define LM35_pin 1

 LiquidCrystal lcd( RS, EN, D4, D5, D6, D7 ); 




void setup() 
{
  analogReference( INTERNAL );  
  analogRead( LM35_pin );       
  lcd.begin( 2, 16 );           }

void loop()
{
  float temp = readTemp();  
  sendTempToLCD( temp );    
}

float readTemp()
{
  float temp = 0.0;       
  int val = 0;            
  int nread = 5;          
  float somma = 0.0;      
  for (int i=0; i<nread; i++)
  {
    val = analogRead( LM35_pin );              
    temp = ( 100.0 *  vref * val ) / 1024.0; 
    somma += temp;                             
  }   
  return ( somma / nread );                     
}


void sendTempToLCD( float temp )
{
  lcd.clear();               
  lcd.setCursor( 0, 0 );     
  lcd.print( "Temperatura di: ");
  lcd.setCursor( 0, 1 );     
  lcd.print( temp );       
  lcd.print( ' ' );          
  lcd.print( (char) 223 );   
  lcd.print( 'C' );
  delay(1500);
}

define LM35_pin 1

il Pin A1 corrisponde al pin A1 ( o 15 ) quindi

define LM35_pin A1

o

define LM35_pin 15

quindi era questo l'errore per cui veniva letta una temperatura di 70°C...

nel codice è inserita una formula che converte il segnale del sensore in temperatura, ma precisamente su cosa si basa questo calcolo?

qui lo spiega bene

http://learn.adafruit.com/tmp36-temperature-sensor

brunello: il Pin A1 corrisponde al pin A1 ( o 15 ) quindi

define LM35_pin A1

o

define LM35_pin 15

Non mi torna. Quando si parla di pin analogici, fare

analogRead(1)

oppure

analogRead(A1)

è del tutto identico perché analogRead accetta un numero che identifica il pin nel range 0..5 (parlando di Arduino UNO): passando alla funzione un valore del pin superiore a 13, essa lo riporta nel range 0..5. A1 è una costante predefinita che vale 15: quindi, con A1 si legge sempre dal pin 1. Ecco l'estratto dal codice di analogRead (file wiring_analog.c):

if (pin >= 14) pin -= 14; // allow for channel or pin numbers

Buona Pasqua a tutti...

l'errore della lettura della temperatura non è dovuto al codice della numerazione del pin. L'errore dovrebbe stare nel calcolo che converte il valore misurato in °C.

il calcolo esatto dovrebbe essere questo:

 int val = 0;
  int sensore = analogRead(A1);
  Serial.println ("Temperatura C");
  Serial.println (sensore / 10.0);
  delay(2000);

anche se con questo codice il sensore in casa mi legge una temperatura di 15°C, che è di -6°C inferiore alla temperatura reale. penso sia dovuto alla sensibilità del sensore.

ma in qualche modo è possibile correggere il valore letto? dovrei usare una funzione matematica o esiste un comando specifico?

sono riuscito a fare la correzione

 int sensore = analogRead(A1);
  Serial.println ("Temperatura C");
  Serial.println (sensore / 10.0);
  Serial.println ("Temperatura Corretta");
  Serial.println ((sensore / 10.0) + 6);
  delay(2000);

ma ho il timore che il mio sensore non sia molto affidabile...

Ma tu hai usato il codice che c'era nella pagina che hai linkato?

    val = analogRead( LM35_pin );              // legge il dato della tensione sul pin 'LM35_pin' 
    temp = ( 100.0 *  vref * val ) / 1024.0;   // lo converte in °C

Metti verf a 5.0 se usi il reference di default oppure adegua alla tensione che usi come campione.

no il codice originale con quel sensore non va bene. ho impostato il nuovo codice seguendo le informazioni della scheda tecnica del sensore.

Ma tu non hai un LM35?

si. il calcolo di conversione indicato nella scheda tecnica del sensore.

la formula indica voltaggio in mV / 10

provando il codice che hai postato vi viene restituita una temperatura di oltre 5000 °C.

Hai il link al datasheet?

ferdard: la formula indica voltaggio in mV / 10

Si dice tensione e non voltaggio, il calcolo è giusto se disponi dei mV però l'analog read ritorna un valore in count (0-1023) che indica la tensione in ingresso sotto forma di una frazione di quella di riferimento.

Ho preso le informazioni da questa pagina:

http://learn.adafruit.com/tmp36-temperature-sensor

ferdard: Ho preso le informazioni da questa pagina:

Se hai un TMP36 prima di dividere per 10 devi sottrarre 500 mV dalla tensione misurata.