GUIDA 15: Arduino, termometro a LED (TMP35)

Dopo aver spiegato il funzionamento del sensore TMP35 (precedente guida), oggi vediamo un circuito leggermente differente: oltre a visualizzare la temperatura sul monitor seriale, disporremo sulla breadboard una serie di LED che indicheranno la temperatura. Se essa è minore di x gradi, si accendaeà il primo LED; se è compresa tra y si accenderà anche un secondo LED; se è maggiore di  si accenderà un terzo LED. Nateualmente è possibile aggiungere altri LED intermedi: in questa dimostrazione ne userò 6.

Devi semplicemente collegare i LED ad altrettanti pin digitali di Arduino e il sensore TMP35, come visto nel precedente articolo su Arduino:

schema

Sketch:

 int led1=2;
int led2=3;
int led3=4;
int led4=5;
int led5=6;
int led6=7;
int val_Adc = 0;
float temp = 0;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
}
void loop() {
val_Adc = analogRead(0);
temp = ((val_Adc * 0.00488) - 0.5) / 0.01;
Serial.print(temp);
Serial.println(" gradi");
delay(300);
if(temp<15.0) {
digitalWrite(led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if(temp>15 && temp<19) {
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if(temp>19 && temp<23) {
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if(temp>23 && temp<26) {
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if(temp>26 && temp<30) {
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, LOW);
}
if(temp>30) {
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
}

 La parte relativa al controllo del sensore e alla trasformazione del valore dell’ADC in gradi centigradi è già stata spiegata nel precedente articolo. Ti rimando quindi a quest’ultimo se hai dubbi.

A”inizio, oltre alle variabili già inserite nel vecchio codice, ho definito alcune costanti che servono come riferimento per i LED.

Nel setup() ho quindi inizializzato i pin a cui essi sono collegati in modalità OUTPUT.

Nel loop() ho inserito degli if. Nel primo dico ad Arduino di associare lo stato logico alto a led1 e quello basso agli altri LED se temp è minore di x. Nel secondo dico: “Se temp è maggiore di x e minore di y, associa lo stato logico alto a led1 e led2 e quello basso alle altre costanti”. E così via fino alla sesta condizione, in cui dico di associare lo stato logico lto a tutte le costanti se la temperatura è maggiore di z.

Ovviamente puoi cambiare le varie condizioni degli if come preserisci, e, mgari, rendere più sensibile l’accensione di alcuni LED rispetto ad altri.

Il risultato che ottieni è l’accensione e lo spegnimento dei LED a seconda della temperatura e la scrittura sulla porta seriale del dato della temperatura seguita da ” gradi”.