Mi prendo cura di te

laboratorio
Mi prendo cura di te
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 1
Avanzamento Avanzamento: laboratorio completa al 100%.

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 progettoModifica

  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 attuatoriModifica

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 montaggioModifica

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 utilizzati
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  

CodiceModifica

Variabili globali e librerieModifica

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 programmaModifica

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 lavoroModifica

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 suggeriteModifica

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.