Utente:N.Bertucccioli/Sensore di luminosità

Da Wikiversità, l'apprendimento libero.
Jump to navigation Jump to search

Sensore di luminosità[modifica]

Questo progetto realizza un sensore di luminosità che, data la luce nell’ambiente e il livello di luminosità, attiva e disattiva automaticamente l’illuminazione oltre a indicale l’intensità luminosa e lo stato dell’illuminazione in un monitor.

Descrizione del progetto[modifica]

Il sistema è così composto:

  • in ingresso si hanno un sensore di luminosità che acquisisce l'intensità luminosa esterna e un potenziometro per regolare il livello di luce al di sotto del quale va accesa l'illuminazione;
  • in uscita si ha un display LCD a 2 righe per mostrare la condizione di luce e buio; un led che simula una lampada che si accende nella condizione di buio.

Quando il sensore di luminosità è al di sotto di un livello stabilito dall’utente:

  • si scrive nella prima riga del display lo stato buio/luce;
  • si accende il diodo led, in cui lo stato sia buio.

Il potenziometro serve per regolare l'intensità luminosa al di sotto della quale si deve accendere l'impianto luminoso (simulato da un diodo led).

Così è possibile attivare l’illuminazione quando si ha un livello di illuminazione prestabilito, il quale varia a seconda delle esigenze dell’utente.

Schema elettrico[modifica]

Sensore di luminosità schema.png

Componenti "speciali" che hanno bisogno di una spiegazione per cosa servono:

  • Un display LCD a 2 righe che è uno schermo con 2 righe e 16 colonne che permette di far scrivere ciò che si vuole su di esso;
  • Il potenziometro ruotando la manopola permette di variare la resistenza da 0 a 1023;
  • il fotoresistore varia la sua resistenza a differenza della luminosità presente nel luogo.

Schema di montaggio[modifica]

Schema di montaggio Breadboard.png

Codice[modifica]

Definizione delle variabili, una libreria e il disegno da imprimere a forma di %[non chiaro]

#include <LiquidCrystal_I2C.h>
#define LED_PIN 3

int fotor=A0;
int led=2;

LiquidCrystal_I2C lcd(0x27, 16, 2);

byte perc []={                             //disegno il simbolo della percentuale
  B11000,
  B11001,
  B00011,
  B00110,
  B01100,
  B11000,
  B10011,
  B00011
};
                                           //le 3 frasi che possono venire inpresse sullo schermo
String frase1 = "Luce";  
String frase2 = "Buio";
String frase3 = "int.luce:";

Definisco il setup dove viene impostato il led come OUTPUT e il FOTORESISTORE e il POTENZIOMETRO come INPUT, viene anche creato il simbolo di percentuale

void setup(){
  lcd.init();
  lcd.createChar(0, perc);
  lcd.backlight();
  pinMode(LED_PIN, OUTPUT);
  pinMode(fotor, INPUT);
  pinMode(led, OUTPUT);
  analogWrite(LED_PIN, 50);
  Serial.begin(9600);
}

Nel loop faccio funzionare le due variabili che ho creato per far funzionare tutto e inizio a scrivere una frase che non dovrà cambiare mai a differenza delle altre 2 che variano a differenza di ciò che il fotoresistore e il potenziometro gli dicono

void loop(){                                //qui provo a far funzionare tutto in loop
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print(frase3);
  luce();
  potenziometro();
  delay(500);
}

La funzione che ho creato per far funzionare il potenziometro, scrivere la percentuale sul display e far accendere il led

void potenziometro(){                        //qui creo la funzione per far funzionare il potenziometro 
  float pot = analogRead(A1);
  int percentuale = pot/1023*100;
  int lucex = analogRead(fotor);
  
  lcd.setCursor(10, 1);                      //qui scrivo sullo schermo a che valore si trova il potenziometro in percentuale
  lcd.print(percentuale);
  if(percentuale<10){
    lcd.setCursor(12, 1);
    lcd.write(byte(0));
  }
  if(percentuale>9){
    lcd.setCursor(13, 1);
    lcd.write(byte(0));
  } 

                                             //accendo e spengo il led potendo decidere anche a che intensità accenderlo con il potenziometro
  int luceLed(lucex-percentuale);
  if (luceLed<930){
    digitalWrite(led, LOW);
  }
  else{
    digitalWrite(led, HIGH);
  }
 }

Questa è la funzione che ho creato per far funzionare invece il fotoresistore e far scrivere sullo schermo lo stato della luminosità luce o buio

 void luce (){
   int luce = analogRead(fotor);
                                       
  if(luce<950){                              //il valore 950 è quello della luce, da me è 950 perchè è l'unico valore con cui funziona(da controllare nel monitor seriale)
    lcd.setCursor(0, 0);
    lcd.print(frase1);
  }
  else{
    lcd.setCursor(0, 0);
    lcd.print(frase2);
  }
 }

Conclusioni[modifica]

Il dispositivo può essere espanso introducendo un sensore di prossimità per attivare l’illuminazione quando è presente una persona.