Mi prendo cura di te
In questa esercitazione si descrive come realizzare un piccolo sistema domotico composto da un interruttore crepuscolare (una luce che si accende solo in caso sia buio) e un sensore di temperatura che attiva il riscaldamento in caso di necessità.
Descrizione del progetto
[modifica]Per approfondire questo argomento, consulta la pagina Interruttore crepuscolare con Arduino. |
Il progetto utilizza una fotoresistenza che – collegata in serie a una resistenza da (partitore di tensione) genera una differenza di potenziale che Arduino legge da un ingresso analogico. Se la fotoresistenza fosse collegata da sola, a prescindere dal suo valore, (che varia in base alla luce che la colpisce) su di lei cadrebbe tutta la tensione. Quando Arduino legge un valore sotto un soglia di luminosità prestabilita () il led si accende, diversamente rimane spento.
Per la temperatura – invece – si utilizza il sensore LM35, che restituisce un valore analogico pari a , pertanto – leggendo il voltaggio – è possibile ricavare la temperatura.
Per ricevere il valore in gradi Celsius si moltiplica la tensione rilevata per ovvero (tensione massima diviso la risoluzione di Arduino).
Sensori e attuatori
[modifica]Il progetto utilizza:
- un fotoresistore che varia la sua resistenza a seconda della quantità di luce che lo colpisce;
- un sensore di temperatura, il quale restituisce una tensione che aumenta all'aumentare della temperatura;
- un potenziometro per poter regolare la luminosità dello schermo LCD.
Schema di montaggio
[modifica]La luce che si accende quando la luminosità scende al di sotto dei viene controllata dal pin 8.
La lampada viene emulata attraverso un diodo led con opportuno resistore da per limitare la corrente. Il fotoresistore funziona grazie a un partitore di tensione con un resistore da ; viene alimentato dalla tensione di Arduino di di Arduino e poi collegato al massa.
Attraverso il pin A5, Arduino misura la caduta di tensione che c'è sulla fotoresistenza e – di conseguenza – accende o meno il led. Inoltre troviamo il sensore di temperatura LM35 che modifica la tensione ai suoi capi in base alla temperatura esterna.
A esso corrisponde un led che rappresenta il riscaldamento che si accende al di sotto della soglia di temperatura prefissata. Per concludere, attraverso il display LCD 16x2 collegato ad Arduino si visualizza la temperatura.
Componenti | Q.tà | Tipologia |
---|---|---|
Led | 2 | 1 verde, 1 blù |
Fotoresitore | 1 | |
Resistori | 4 | , |
Potenziometro | 1 | |
Sensore di temperatura | 1 | LM 35 |
Schermo LCD | 1 |
Codice
[modifica]Variabili globali e librerie
[modifica]In questa sezione si includono le librerie e impostano le variabili globali che verranno utilizzate in tutte le funzioni del progetto.
/*****************************************************************************/
// SCHERMO LCD
#include <LiquidCrystal.h>
// pin collegati al display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*****************************************************************************/
// FOTORESISTENZA
int led = 8; // pin per il led
int Lvl_luce = analogRead(A5); // pin per la fotoresistenza
int soglia_luce = 550; // soglia sotto la quale il led si accende
/*****************************************************************************/
// SERIALE
int serial = 9600; // velocita' porta seriale
/*****************************************************************************/
// TEMPERATURA
int riscaldamento = 7; // pin per il riscaldamento
int temperatura = 0; // inizializzo la temperatura
int soglia_temperatura= 18; // imposto la temperatura minima
#define potPin A0 // pin per la lettura della temperatura
int Templetta = analogRead(A0); // valore letto da Arduino
Inizializzazione del programma
[modifica]Di seguito il setup che viene eseguito una sola volta, all'avvio del programma (e alla pressione del tasto di reset).
void setup() {
// inizializza il pin del riscaldamento in uscita
pinMode(riscaldamento, OUTPUT);
// inizializza il pin del led in uscita
pinMode(led, OUTPUT);
// inizializza la comunicazione seriale
Serial.begin(serial);
// imposta il numero di colonne e il numero del display
lcd.begin(16, 2);
}
Ciclo di lavoro
[modifica]Di seguito il codice che verrà eseguito per gestire il sistema di controllo
void loop() {
/************************************************************************/
//FOTORESISENZA
// legge il valore della tensione della fotoresistenza
analogRead(Lvl_luce);
// invia al PC i valori di tensione rilevati
Serial.println(Lvl_luce);
// il livello di luminosità varia da 0 (livello minimo) a 1023 (massimo)
if (Lvl_luce < soglia_luce) {
// se la tensione è minore della soglia la luce si accende
digitalWrite(led, HIGH);
}
while (Lvl_luce > soglia_luce){
// in caso contrario si spegne
digitalWrite(led, LOW);
}
/************************************************************************/
//TEMPERATURA
// converte la tensione in gradi celsius
// si aggiunge 0.5 per l'arrotondamento
temperatura = analogRead(Templetta) * 0.48875 + .5;
// se la temperatura e' sotto la soglia impostata accende il riscaldamento
if (temperatura < soglia_temperatura){
digitalWrite(riscaldamento, HIGH);
}
// mentre la temperatura è sopra la soglia spenge il riscaldamento
while (temperatura > soglia_temperatura){
digitalWrite(riscaldamento, LOW);
}
/************************************************************************/
//SCHERMO LCD
// posiziona il cursore in colonna 0 e linea 1
lcd.setCursor(0, 1);
// scrive sullo schermo la temperatura rilevata
lcd.print(temperatura);
lcd.print(" °C");
// attende un decimo di secondo per non fare troppe acquisizioni
delay(100);
}
Espansioni suggerite
[modifica]Per migliorare il progetto attraverso un relè collegato ad Arduino si potrebbe comandare il riscaldamento della propria abitazione.
Inoltre si possono modificare i parametri di soglia secondo le proprie esigenze.