4. Componenti
• INPUT:
Sensore di temperatura LM35
(cercare e scaricare data sheet di
TMP35, TMP36, TMP37 analog device (pdf) ed
anche di LM35 (National Semiconductor)
• OUTPUT: 3 LED e 3 resistenze da 220
R = (VAL – VD)/ I con I media di circa 15 mA
VAL di 5 V e VD a seconda del colore del LED
5. Parametri del sensore LM35DZ
Package fornitore TOP-92
Funzione Sensore di temperatura
Pin Count 3
Precisione (accuracy) +/-
Sensibilità (K in mV/°C)
Temperature massima
Temperatura minima
Tensione tipica di funzionamento
Tipo uscita
6. Esame del data sheet del sensore di
temperatura
• LM35DZ
• V = KT + V0 dove V è la tensione alla temperatura T (°C);
K è la sensibilità di 10 mV / °C ; V0 è la tensione di offset
ovvero il valore di tensione a 0°C.
• offset (OUTPUT)
Componente a 25° a 20° A 0° V0
(offset)
TMP37 500 mV
TMP36 750mV
TMP35 250mV
8. Conversione Vanalogico ->Vdigitale (10 bit)
float voltage = (sensorVal/1024.0) * 5.0;
• L’acquisizione del valore di temperatura effettuata dal sensore
va a finire nella variabile sensorVal dopo la lettura del pin
analogico numero 0 e la successiva conversione in 10 digit.
REGOLE della CONVERSIONE: quanto => Q = VF.S. / 2n
• n = 10 numero di bit per campione
• 5V = tensione di fondo scala
Quanto (ampiezza di un livello L.S.B.) Q = VF.S. / 2n = 5/1024
2 10 = 1024 numero di livelli
V = Q* N
dove N (sensorVal) sta per il valore digitale in cui è stato convertito
il valore di temperatura acquisita immagazzinato in sensorVal (n=10 bit)
9. Tensione di Offset
float temperature = (voltage - .5) * 100;
• Nella variabile voltage è immagazzinato il valore di tensione
analogica
• Nella variabile temperature sarà immagazzinato lo stesso
valore dopo che è stato sottratto l’offset di 500 mV e dopo che
è stato diviso per 100
• float temperature = (voltage - .5) * 100;
– T = (V - 0.5) * 100 la costante è infatti 10 mV /° C
con un offset di 0,5 V (500mV)
• V = K T + Vo T = (V – Vo) / K [1/k = 1/ 0,01 =
100]
10. Quali variabili?
• Dichiarazione di costanti e inizializzazione
(colleghiamo il sensore di temperatura al pin A0
analogico e valutiamo in 20° la temperatura di
riferimento)
• const int sensorPin = A0;
• const float baselineTemp = 20.0;
• int pinNumber = …;
• int sensorVal;
• float voltage;
• float temperature;
11. Alcune osservazioni
• Impostare una connessione seriale per visualizzare i valori a 9600
bit/s.
• Utilizzare il monitor per visualizzare i valori delle variabili di
temperatura.
• Pin digitali 2, 3, 4 impostati come OUTPUT ed inizialmente a livello
basso.
• Pin A0 come ingresso analogico.
• Il programma di esempio è calibrato su LM36: effettuare le dovute
modifiche dopo aver analizzato lo skatch.
• Collaudare modifcando a piacere le condizioni di accensione dei 3
LED ( per esempio tutti spenti se la temperatura è minore di quella
ambiente di riferimento presa a 25°, led verde se supera di 10 gradi
o se arriva alla temperatura corporea, giallo se supera di 15 e rosso
se supera di 20)
12. • /* Arduino Starter Kit example Project 3 - Love-O-Meter */
• const int sensorPin = A0;
• const float baselineTemp = 20.0;
• void setup(){
• Serial.begin(9600);
• for(int pinNumber = 2; pinNumber<5; pinNumber++){
• pinMode(pinNumber,OUTPUT);
• digitalWrite(pinNumber, LOW);
• }
• }
• void loop(){
• int sensorVal = analogRead(sensorPin);
• Serial.print("sensor Value: ");
• Serial.print(sensorVal);
• float voltage = (sensorVal/1024.0) * 5.0;
• Serial.print(", Volts: ");
• Serial.print(voltage);
• Serial.print(", degrees C: ");
• float temperature = (voltage - .5) * 100;
• Serial.println(temperature);
• if(temperature < baselineTemp){
• digitalWrite(2, LOW);
• digitalWrite(3, LOW);
• digitalWrite(4, LOW);
• }
• else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
• digitalWrite(2, HIGH);
• digitalWrite(3, LOW);
• digitalWrite(4, LOW);
• }
• else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){
• digitalWrite(2, HIGH);
• digitalWrite(3, HIGH);
• digitalWrite(4, LOW);
• }
• else if(temperature >= baselineTemp+6){
• digitalWrite(2, HIGH);
• digitalWrite(3, HIGH);
• digitalWrite(4, HIGH);
• }
• delay(1);
• }
• /* Arduino Starter Kit example
• Project 3 - Love-O-Meter */
• // named constant for the pin the sensor is connected to
• // room temperature in Celcius
• // open a serial connection to display values
• // set the LED pins as outputs
• // the for() loop saves some extra coding
• // read the value on AnalogIn pin 0
• // and store it in a variable
• // send the 10-bit sensor value out the serial port
• // convert the ADC reading to voltage
• // Send the voltage level out the Serial port
• // convert the voltage to temperature in degrees C
• // the sensor changes 10 mV per degree
• // the datasheet says there's a 500 mV offset
• // ((volatge - 500mV) times 100)
• // if the current temperature is lower than the baseline
• // turn off all LEDs
• // if the temperature rises 2-4 degrees, turn an LED on
•
• // if the temperature rises 4-6 degrees, turn a second LED on
• // if the temperature rises more than 6 degrees, turn all LEDs on