Arduino 3

12
ARDUINO eserc. n° 3 Controllo di temperatura

description

Lezione /Esercitazione n° 3 Arduino "Termometro"

Transcript of Arduino 3

Page 1: Arduino 3

ARDUINO eserc. n° 3Controllo di temperatura

Page 2: Arduino 3

Schema a blocchi

Input: sensore di INPUT: sensore di temperatura

Scheda Arduino Output: 3 LED

Page 3: Arduino 3

Schema elettrico Schema di montaggio

Page 4: Arduino 3

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 WR = (VAL – VD)/ I con I media di circa 15 mA

VAL di 5 V e VD a seconda del colore del LED

Page 5: Arduino 3

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

Page 6: Arduino 3

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

Page 7: Arduino 3

Pausa per spiegazione della conversione ADC

• Alla lavagna

Page 8: Arduino 3

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* Ndove N (sensorVal) sta per il valore digitale in cui è stato convertito il valore di temperatura acquisita immagazzinato in sensorVal (n=10 bit)

Page 9: Arduino 3

Tensione di Offsetfloat 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]

Page 10: Arduino 3

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;

Page 11: Arduino 3

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)

Page 12: Arduino 3

• /* 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