Arduino 3

1,039 views
895 views

Published on

Lezione /Esercitazione n° 3 Arduino

"Termometro"

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,039
On SlideShare
0
From Embeds
0
Number of Embeds
250
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Arduino 3

  1. 1. ARDUINO eserc. n° 3 Controllo di temperatura
  2. 2. Schema a blocchi Input: sensore di INPUT: sensore di temperatura Scheda Arduino Output: 3 LED
  3. 3. Schema elettrico Schema di montaggio
  4. 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. 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. 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
  7. 7. Pausa per spiegazione della conversione ADC • Alla lavagna
  8. 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. 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. 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. 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. 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

×