Tutorial Arduino n.03
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:
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:
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:




