Codice Arduino e video per un modulo sensore di luce con relè
In questo tutorial impareremo come utilizzare un modulo sensore di luce per controllare una luce AC. Il progetto consentirà alla luce di accendersi automaticamente quando è buio e di spegnersi quando diventa luminosa. Questo è particolarmente utile per applicazioni come l'illuminazione esterna o le luci del garage. Al termine di questo tutorial avrai un sistema funzionante in grado di gestire efficacemente la luce in base alle condizioni ambientali. (nel video a 02:15)

Useremo un modulo sensore di luce, che include una fotoresistenza (LDR) per rilevare i livelli di luce e un relè per controllare la luce in corrente alternata. Il sistema incorporerà anche un potenziometro per regolare la sensibilità del rilevamento della luce. Questa configurazione consente sia il controllo digitale sia quello analogico della luce in base alla luce ambientale rilevata dal sensore. Per chiarimenti dettagliati, fare riferimento al video al minuto 04:30.
Hardware spiegato
I componenti principali di questo progetto sono il modulo sensore di luce, il relè e l'Arduino. Il modulo sensore di luce è composto da un LDR che varia la resistenza in base all'intensità luminosa, fornendo un'uscita digitale o analogica. Il relè funge da interruttore in grado di controllare una lampada in corrente alternata ad alta tensione, pur essendo azionato in sicurezza dall'Arduino a bassa tensione. Questa separazione è cruciale per la sicurezza e il funzionamento.
Il relè ha tre pin principali: comune (COM), normalmente aperto (NO) e normalmente chiuso (NC). Quando viene attivato, il relè collega il pin comune al pin normalmente aperto, permettendo alla corrente di fluire attraverso la luce collegata. Questo meccanismo consente al relè di controllare la luce in base ai segnali ricevuti dall'Arduino.
Dettagli della scheda tecnica
| Produttore | Generico |
|---|---|
| Numero di parte | Modulo sensore di luce |
| Tensione logica/IO | 5 V |
| Tensione di alimentazione | 5 V |
| Corrente di uscita (per canale) | 10 mA |
| Corrente di picco (per canale) | 20 mA |
| Linee guida sulla frequenza PWM | N/D |
| Soglie logiche di ingresso | 2.5 V (alto) / 0.8 V (basso) |
| Caduta di tensione / RDS(on)/ saturazione | 0,2 V tipico |
| Limiti termici | 85 °C |
| Pacchetto | Modulo |
| Note / varianti | Include un potenziometro per la regolazione della sensibilità. |
- Assicurare una corretta dissipazione del calore per il relè.
- Usare una resistenza pull-up per l'ingresso del sensore di luce.
- Verificare la tensione nominale prima di collegare dispositivi in corrente alternata.
- Evitare di toccare i fili esposti quando il sistema è alimentato.
- Regolare il potenziometro per ottenere la sensibilità alla luce desiderata.
Istruzioni di cablaggio

Per collegare il modulo sensore di luce e il relè all'Arduino, inizia collegando il pin VCC del modulo sensore di luce al pin 5V dell'Arduino. Successivamente, collega il pin di massa (GND) del sensore a un pin GND dell'Arduino. Il pin di uscita digitale del sensore dovrebbe essere collegato al pin 2 dell'Arduino, mentre il pin di uscita analogica si collega ad A0 per letture analogiche.
Ora, per il relè, collega il suo pin VCC al pin 5V dell'Arduino e il suo pin di massa a GND. Il pin di ingresso del relè dovrebbe essere collegato al pin 9 dell'Arduino. Infine, collega un filo della tua lampada in corrente alternata al pin comune (COM) del relè e l'altro filo al pin normalmente aperto (NO). Questa configurazione permetterà al relè di controllare la lampada in corrente alternata in base alle letture del sensore di luce.
Esempi di codice e guida passo-passo
Nel codice digitale di base per il sensore di luce definiamo i pin per il sensore e il relè. La funzione setup inizializza la comunicazione seriale e imposta le modalità dei pin:

#define LIGHT 2 // define pin 2 for sensor
#define RELAY 9 // define pin 9 as for relay
void setup() {
Serial.begin(9600); // setup Serial Monitor
pinMode(LIGHT, INPUT_PULLUP); // define pin as Input sensor
pinMode(RELAY, OUTPUT); // define pin as OUTPUT for relay
}
Questo codice configura il pin 2 come ingresso per leggere il sensore di luce e il pin 9 come uscita per controllare il relè. Anche il monitor seriale viene inizializzato per fornire informazioni sullo stato della luce.
All'interno della funzione loop, leggiamo continuamente lo stato del sensore:
int L = digitalRead(LIGHT); // read the sensor
if (L == 1) {
Serial.println(" light is ON");
digitalWrite(RELAY, LOW); // turn the relay ON
} else {
Serial.println(" === light is OFF");
digitalWrite(RELAY, HIGH); // turn the relay OFF
}
Questa logica verifica lo stato del sensore di luce e accende o spegne il relè di conseguenza, fornendo feedback tramite il monitor seriale.
Nel codice analogico avanzato, incorporiamo un metodo per leggere i valori dall'uscita analogica:
if (digital == true) {
int L = digitalRead(LIGHT); // read the sensor
if (L == 1) {
Serial.println(" light is ON");
digitalWrite(RELAY, LOW); // turn the relay ON
} else {
Serial.println(" === light is OFF");
digitalWrite(RELAY, HIGH); // turn the relay OFF
}
} else {
int a0Value = analogRead(A0); // read A0 value
if (a0Value >= LightValue) {
Serial.print(analogRead(A0));
Serial.println(" Light is ON");
digitalWrite(RELAY, LOW); // turn the relay ON
} else {
Serial.print(analogRead(A0));
Serial.println(" === light OFF");
digitalWrite(RELAY, HIGH); // turn the relay OFF
}
}
Questa sezione consente di regolare la sensibilità in base alla lettura analogica del sensore di luce, offrendo un maggiore controllo sulle soglie di attivazione della luce.
Dimostrazione / Cosa aspettarsi
Quando l'installazione è completa e alimentata, la luce dovrebbe accendersi in condizioni di scarsa illuminazione e spegnersi in condizioni di luminosità elevata. Puoi testare il sistema coprendo il sensore di luce per simulare l'oscurità e osservando l'attivazione del relè. Se configurato correttamente, il monitor seriale visualizzerà la scritta la luce è ACCESA o la luce è SPENTA in base alle letture del sensore. Fai attenzione a non invertire la polarità quando colleghi la luce in AC, poiché ciò può causare malfunzionamenti o rischi per la sicurezza (nel video a 10:00).
Marcatori temporali del video
- 00:00Introduzione al progetto
- 02:15Panoramica dei componenti e del cablaggio
- 04:30Spiegazione del codice
- 10:00Dimostrazione della funzionalità
++
/*
* This is the Arduino code for the Light module for Arduino (basic).
This video shows you how to turn an AC light ON during the night using a light sensor
and turn it OFF during the day. This code is a basic version where
the digital output of the module is used.
// Written for Robojax.com video
* Watch the HC-SR505 Motion Sensor video for details https://youtu.be/qhThpxiXubI
* Code is available at http://robojax.com/learn/arduino
*
// Written by Ahmad S. for Robojax.com on
// February 10, 2018 at 13:43 in Ajax, Ontario, Canada
*/
#define LIGHT 2 // define pin 2 for sensor
#define RELAY 9 // define pin 9 as for relay
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// Light LDR Sensor Code by Robojax.com 20180210
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(LIGHT, INPUT_PULLUP);// define pin as Input sensor
pinMode(RELAY, OUTPUT);// define pin as OUTPUT for relay
}
void loop() {
// Light LDR Sensor Code by Robojax.com 20180210
int L =digitalRead(LIGHT);// read the sensor
if(L == 1){
Serial.println(" light is ON");
digitalWrite(RELAY,LOW);// turn the relay ON
}else{
Serial.println(" === light is OFF");
digitalWrite(RELAY,HIGH);// turn the relay OFF
}
delay(500);
// Light LDR Sensor Code by Robojax.com 20180210
}
/*
Light Sensor module for Arduino (Advanced: analog)
This video shows you how to turn an AC light ON during the night using
a light sensor and turn it OFF during the day.
This code is to control a light either digitally and control
the sensitivity with the potentiometer on the module.
You can control the light using an analog value from pin A0
and set your own sensitivity. Make sure you turn the
potentiometer to the maximum value and set digital=false.
// Written for Robojax.com video
* Watch Light Sensor video https://youtu.be/CyDAWcY8_5w
* Code is available at http://robojax.com/learn/arduino
*
*/
#define LIGHT 2 // define pin 2 for sensor
#define RELAY 9 // define pin 9 as for relay
/*
*
// Written by Ahmad S. for Robojax.com on
// February 10, 2018 at 13:43 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
// LDR, Light Dependant Resistor
boolean digital = false;// set true to use digital and control the sensitivity with potentiometer on the module
// set to false to control with A0 value on Arduino
unsigned int LightValue = 350;// LightValue to determine
// at what value the relay should be ON
void setup() {
// Light LDR Sensor Code by Robojax.com 20180210
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(LIGHT, INPUT_PULLUP);// define pin as Input sensor
pinMode(RELAY, OUTPUT);// define pin as OUTPUT for relay
}
void loop() {
delay(500);
relay();// call the relay() method
// Light LDR Sensor Code by Robojax.com 20180210
}
void relay()
{
if(digital == true)
{
// Light LDR Sensor Code by Robojax.com 20180210
int L =digitalRead(LIGHT);// read the sensor
if(L == 1){
Serial.println(" light is ON");
digitalWrite(RELAY,LOW);// turn the relay ON
}else{
Serial.println(" === light is OFF");
digitalWrite(RELAY,HIGH);// turn the relay OFF
} // if
}// if digital end
else
{
int a0Value = analogRead(A0);// read A0 value
if( a0Value >= LightValue){
Serial.print(analogRead(A0));
Serial.println(" Light is ON");
digitalWrite(RELAY,LOW);// turn the relay ON
}else{
Serial.print(analogRead(A0));
Serial.println(" === light OFF");
digitalWrite(RELAY,HIGH);// turn the relay OFF
} // if
}
}
Cose di cui potresti avere bisogno
-
Amazon
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
File Fritzing
-
Modulo sensore di luce LDR nero
LDR_module_black.fzpz0.01 MB