Kód Arduina a video pre modul svetelného senzora s relé
V tomto návode sa naučíme, ako použiť modul svetelného senzora na ovládanie AC svetla. Projekt umožní, aby sa svetlo automaticky zapínalo, keď je tma, a vypínalo, keď sa rozvidnie. Toto je užitočné najmä pre aplikácie, ako je vonkajšie osvetlenie alebo garážové svetlá. Na konci tohto návodu budete mať funkčný systém, ktorý dokáže efektívne riadiť svetlo na základe okolitých podmienok. (vo videu o 02:15)

Použijeme modul svetelného senzora, ktorý obsahuje fotorezistor (LDR) na detekciu úrovne svetla, a relé na ovládanie AC svetla. Systém bude tiež obsahovať potenciometer na nastavenie citlivosti detekcie svetla. Toto zapojenie umožňuje digitálne aj analógové ovládanie svetla na základe okolitého svetla detekovaného senzorom. Pre podrobné vysvetlenie si pozrite video o 04:30.
Vysvetlenie hardvéru
Hlavnými komponentmi tohto zapojenia sú modul svetelného senzora, relé a Arduino. Modul svetelného senzora pozostáva z fotorezistora, ktorý mení odpor na základe intenzity svetla a poskytuje digitálny alebo analógový výstup. Relé funguje ako spínač, ktorý môže ovládať vysokonapäťové AC svetlo, pričom je bezpečne ovládané nízkonapäťovým Arduinom. Toto oddelenie je kľúčové pre bezpečnosť a funkčnosť.
Relé má tri hlavné piny: spoločný (COM), normálne otvorený (NO) a normálne zatvorený (NC). Po aktivácii relé spojí spoločný pin s normálne otvoreným pinom, čo umožní prúdenie prúdu cez pripojené svetlo. Tento mechanizmus umožňuje relé ovládať svetlo na základe signálov prijatých z Arduina.
Podrobnosti z datasheetu
| Výrobca | Generic |
|---|---|
| Označenie dielu | Modul svetelného senzora |
| Logické/IO napätie | 5 V |
| Napájacie napätie | 5 V |
| Výstupný prúd (na kanál) | 10 mA |
| Špičkový prúd (na kanál) | 20 mA |
| Odporúčaná PWM frekvencia | N/A |
| Logické prahové hodnoty vstupu | 2,5 V (vysoká) / 0,8 V (nízka) |
| Pokles napätia / RDS(on) / saturácia | 0,2 V typicky |
| Tepelné limity | 85 °C |
| Puzdro | Modul |
| Poznámky / varianty | Obsahuje potenciometer na nastavenie citlivosti |
- Zabezpečte správny odvod tepla pre relé.
- Použite pull-up rezistor pre vstup svetelného senzora.
- Pred pripájaním AC zariadení skontrolujte napäťové hodnoty.
- Vyhnite sa dotyku odkrytých vodičov, keď je systém pod napätím.
- Nastavte potenciometer pre požadovanú citlivosť na svetlo.
Pokyny na zapojenie

Na zapojenie modulu svetelného senzora a relé k Arduinu začnite pripojením pinu VCC modulu svetelného senzora na pin 5V na Arduine. Potom pripojte uzemňovací pin svetelného senzora na pin GND na Arduine. Digitálny výstupný pin svetelného senzora by mal byť pripojený na pin 2 na Arduine, zatiaľ čo analógový výstupný pin sa pripája na A0 pre analógové čítanie.
Teraz pre relé pripojte jeho pin VCC na pin 5V na Arduine a jeho uzemňovací pin na GND. Vstupný pin relé by mal byť pripojený na pin 9 na Arduine. Nakoniec pripojte jeden vodič vášho AC svetla na spoločný pin (COM) relé a druhý vodič na normálne otvorený pin (NO). Toto zapojenie umožní relé ovládať AC svetlo na základe hodnôt zo svetelného senzora.

Príklady kódu a vysvetlenie
V základnom digitálnom kóde pre svetelný senzor definujeme piny pre senzor a relé. Funkcia setup inicializuje sériovú komunikáciu a nastavuje režimy pinov:
#define LIGHT 2 // definuje pin 2 pre senzor
#define RELAY 9 // definuje pin 9 pre relé
void setup() {
Serial.begin(9600); // nastavenie sériového monitora
pinMode(LIGHT, INPUT_PULLUP); // definuje pin ako vstupný senzor
pinMode(RELAY, OUTPUT); // definuje pin ako VÝSTUP pre relé
}
Tento kód nastaví pin 2 ako vstup pre čítanie svetelného senzora a pin 9 ako výstup na ovládanie relé. Sériový monitor je tiež inicializovaný na poskytovanie spätnej väzby o stave svetla.
Vo vnútri funkcie loop nepretržite čítame stav senzora:
int L = digitalRead(LIGHT); // čítanie senzora
if (L == 1) {
Serial.println(" svetlo je ZAPNUTÉ");
digitalWrite(RELAY, LOW); // zapnutie relé
} else {
Serial.println(" === svetlo je VYPNUTÉ");
digitalWrite(RELAY, HIGH); // vypnutie relé
}
Táto logika kontroluje stav svetelného senzora a podľa toho zapína alebo vypína relé, pričom poskytuje spätnú väzbu cez sériový monitor.
V pokročilom analógovom kóde zahrnieme metódu na čítanie hodnôt z analógového výstupu:
if (digital == true) {
int L = digitalRead(LIGHT); // čítanie senzora
if (L == 1) {
Serial.println(" svetlo je ZAPNUTÉ");
digitalWrite(RELAY, LOW); // zapnutie relé
} else {
Serial.println(" === svetlo je VYPNUTÉ");
digitalWrite(RELAY, HIGH); // vypnutie relé
}
} else {
int a0Value = analogRead(A0); // čítanie hodnoty A0
if (a0Value >= LightValue) {
Serial.print(analogRead(A0));
Serial.println(" Svetlo je ZAPNUTÉ");
digitalWrite(RELAY, LOW); // zapnutie relé
} else {
Serial.print(analogRead(A0));
Serial.println(" === svetlo VYPNUTÉ");
digitalWrite(RELAY, HIGH); // vypnutie relé
}
}
Táto časť umožňuje nastavenie citlivosti na základe analógového údaja zo svetelného senzora, čo poskytuje väčšiu kontrolu nad prahmi aktivácie svetla.
Ukážka / Čo očakávať
Keď je zapojenie dokončené a zariadenie je zapnuté, svetlo by sa malo zapnúť pri slabom osvetlení a vypnúť pri jasných podmienkach. Systém môžete otestovať zakrytím svetelného senzora, aby ste simulovali tmu, a pozorovaním aktivácie relé. Ak je všetko správne nakonfigurované, sériový monitor zobrazí "light is ON" alebo "light is OFF" na základe údajov zo senzora. Buďte opatrní pri prepólovaní pri pripájaní striedavého svetla, pretože to môže spôsobiť poruchy alebo bezpečnostné riziká (vo videu v čase 10:00).
Časové značky videa
- 00:00 Úvod do projektu
- 02:15 Prehľad komponentov a zapojenia
- 04:30 Vysvetlenie kódu
- 10:00 Ukážka funkčnosti
++
/*
* 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
}
}
Things you might need
-
Amazon
Resources & references
No resources yet.
Files📁
Fritzing File
-
LDR light sensor module black
LDR_module_black.fzpz0.01 MB