Cosa impareremo: 
Toccando il sensore di temperatura collegato sulla nostra breadboard, Arduino inizierà a controllare nelle varie condizioni da noi programmate se accendere i LED rossi per far capire che il sensore sta percependo calore, altrimenti(con la versione alternativa del project) misureremo e faremo accendere i LED blu per misurare un corpo freddo vicino al sensore.

Componenti Richiesti:

 

1 TMP36 temperature sensor.tmp36icon

LED 3 rossi.Red-LEDRed-LEDRed-LED

3 resistori 220 ohmresistore

 

Programmazione:
Possiamo trovare questo codice precompilato aprendo l’IDE Arduino ,

successivamnete  cliccando su File > Esempi > 10 StarterKit>  p03_LoveOMeter

// il nome della costante dove è collegato il nostro sensore di temperatura.
const int sensorPin = A0;
// la temperatura è letta in Celsius
const float baselineTemp = 21.0;
 
void setup(){
// Arduino legge una frequenza di 9600 Baund(simboli per secondo)
Serial.begin(9600);
 
// con un ciclo for dichiariamo in sequenza i nostri 3 pin utilizzati
// partendo da due perché i pin 0 e 1 sono dedicati alle comunicazioni seriali.
for(int pinNumber = 2; pinNumber<5; pinNumber++){
pinMode(pinNumber,OUTPUT);
digitalWrite(pinNumber, LOW);
}
}
 
void loop(){
 
int sensorVal = analogRead(sensorPin);
 
// invia il valore del sensore a 10 bit alla porta seriale.
Serial.print("sensor Value: ");
Serial.print(sensorVal);
 
// divisione che ci permette di visualizzare i Volt corretti
float voltage = (sensorVal/1024.0) * 5.0;
Serial.print(", Volts: ");
Serial.print(voltage);
 
// Converte la tensione di temperatura in gradi C°
// Il sensore cambia 10 mV per grado
// La datasheet dice che c'è un offset 500 mV
// ((Volatge - 500mV) 100 volte)
Serial.print(", degrees C: ");
float temperature = (voltage - .5) * 100;
Serial.println(temperature);
// Se la temperatura attuale è inferiore alla linea di base
// Disattivare tutti i LED
if(temperature < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} //Se la temperatura sale 2-4 gradi, accendere un LED
else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} // ise la temperatura sale 4-6 gradi, accendere i primi due LED
else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
} // se la temperatura sale oltre 6 gradi, accendere tutti i LED
else if(temperature >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1); //ritardo ps:ne abbiamo parlato nel tutorial precedente
}

NOTE:

Project by Scott Fitzgerald

 

Schema Elettronico:

rappresentaz3

 

Dimostrazione:
dimostrazione3

 

Versione alternativa(solo per Arduino Master)

Vi presentiamo due tipi di programmazione. Il primo, quello commentato, ci permettere di utilizzare 0 e 1 per indicare LED acceso e spento. L’ordine è da destra verso sinistra e il primi due bit sono quelli meno significativi, ovvero i pin 0(RX) e 1(TX).

Altrimenti c’è quella proposta nello sketch non commentata, identica,  a quella proposta precedentemente.

Programmazione v2:

 

/* Alternative version by
 
Antonio Gison e Daniele Poddighe
 
*/
 
const int sensorPin = A0;
 // room temperature in Celcius
 const float baselineTemp = 20.0;
 
unsigned long prevmillis=millis(); //remember the previous instant of time
 void setup(){
 // open a serial connection to display values
 Serial.begin(9600);
 // set the LED pins as outputs
 // the for() loop saves some extra coding
 for(int pinNumber = 2; pinNumber<7; pinNumber++){
 pinMode(pinNumber,OUTPUT);
 digitalWrite(pinNumber, LOW);
 }
 }
 
void loop(){
 // read the value on AnalogIn pin 0
 // and store it in a variable
 int sensorVal = analogRead(sensorPin);
 
// send the 10-bit sensor value out the serial port
 Serial.print("sensor Value: ");
 Serial.print(sensorVal);
 
// convert the ADC reading to voltage
 float voltage = (sensorVal/1024.0) * 5.0;
 
// Send the voltage level out the Serial port
 Serial.print(", Volts: ");
 Serial.print(voltage);
 
// 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)
 Serial.print(", degrees C: ");
 float temperature = (voltage - .5) * 100;
 Serial.println(temperature);
 if(millis()>= prevmillis+1000){ // delay(1000)
 if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){ // HOT ZONE
 /*PORTD &=(B00000011);*/
 digitalWrite(2, HIGH); //PD2 HIGH
 digitalWrite(3, LOW);
 digitalWrite(4, LOW);
 digitalWrite(5, LOW);
 digitalWrite(6, LOW);
 digitalWrite(7, LOW);
 /*PORTD |=B00000100;
 Serial.println (PORTD,BIN);*/
 }
 else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){// HOT ZONE
 /* PORTD &=(B00000011);*/
 digitalWrite(2, HIGH); //PD2-3 HIGH
 digitalWrite(3, HIGH);
 digitalWrite(4, LOW);
 digitalWrite(5, LOW);
 digitalWrite(6, LOW);
 digitalWrite(7, LOW);
 /*PORTD |=B00001100;
 Serial.println (PORTD,BIN);*/
 }
 else if(temperature >= baselineTemp+6){ // HOT ZONE
 /* PORTD &=(B00000011);*/
 digitalWrite(2, HIGH); //PD2-3-4 HIGH
 digitalWrite(3, HIGH);
 digitalWrite(4, HIGH);
 digitalWrite(5, LOW);
 digitalWrite(6, LOW);
 digitalWrite(7, LOW);
 /* PORTD |=B00011100;
 Serial.println (PORTD,BIN);*/
 }
 
else if (temperature <= baselineTemp-3){ // COLD ZONE
 /*PORTD &=(B00000011);*/
 digitalWrite(2, LOW); //PD5-6-7 HIGH
 digitalWrite(3, LOW);
 digitalWrite(4, LOW);
 digitalWrite(5, HIGH);
 digitalWrite(6, HIGH);
 digitalWrite(7, HIGH);
 /*PORTD |=B11100000;
 Serial.println (PORTD,BIN);*/
 }
 
else if(temperature <= baselineTemp-2 && temperature < baselineTemp-6){ // COLD ZONE
 /*PORTD &=(B00000011);*/
 digitalWrite(2, LOW); //PD 5-6 HIGH
 digitalWrite(3, LOW);
 digitalWrite(4, LOW);
 digitalWrite(5, HIGH);
 digitalWrite(6, HIGH);
 digitalWrite(7, LOW);
 /*PORTD |=B11100000;
 Serial.println (PORTD,BIN);*/
 }
 
else if(temperature <= baselineTemp-1 && temperature < baselineTemp-2){ // COLD ZONE
 /*PORTD &=(B00000011);*/
 digitalWrite(2, LOW); //PD5 HIGH
 digitalWrite(3, LOW);
 digitalWrite(4, LOW);
 digitalWrite(5, HIGH);
 digitalWrite(6, LOW);
 digitalWrite(7, LOW);
 /*PORTD |=B11100000;
 Serial.println (PORTD,BIN);*/
 
}
 
}
 }

 

Dimostrazione:

 

expert