リレー付き光センサーモジュールのArduinoコードと動画
このチュートリアルでは、光センサーモジュールを使って交流照明を制御する方法を学びます。本プロジェクトでは、暗くなると自動で点灯し、明るくなると消灯するようにします。これは屋外照明やガレージの照明などの用途に特に便利です。チュートリアルの終わりまでには、周囲の明るさに応じて照明を効果的に管理できる動作するシステムが完成します。(動画の02:15で)

光抵抗(LDR)を使って光レベルを検出する光センサーモジュールと、AC照明を制御するリレーを使用します。システムには光検出の感度を調整するためのポテンショメータも組み込みます。この構成により、センサーが検出した周囲光に応じて照明をデジタルおよびアナログの両方で制御できます。詳しい説明は動画の04:30.を参照してください。
ハードウェアの解説
この構成の主なコンポーネントは、光センサーモジュール、リレー、そしてArduinoです。光センサーモジュールは、光の強さに応じて抵抗が変化する光抵抗器(LDR)で構成され、デジタルまたはアナログの出力を提供します。リレーは高電圧の交流照明を制御するスイッチとして機能し、低電圧のArduinoによって安全に駆動されます。この分離は安全性と機能性のために重要です。
リレーには3つの主要な端子があり、共通(COM)、常開(NO)、常閉(NC)です。作動するとリレーは共通端子を常開端子に接続し、接続されたライトに電流が流れるようになります。この仕組みにより、リレーはArduinoから受け取る信号に基づいてライトを制御できます。
データシートの詳細
| 製造業者 | 一般的 |
|---|---|
| 部品番号 | 光センサーモジュール |
| ロジック/IO電圧 | 5 V |
| 電源電圧 | 5 V |
| 出力電流(チャンネルごと) | 10 mA |
| ピーク電流(チャンネルあたり) | 20 mA |
| PWM周波数に関するガイダンス | 該当なし |
| 入力ロジックの閾値 | 2.5 V(高)/0.8 V(低) |
| 電圧降下 / RDS(オン)/ 彩度 | 0.2 V(典型値) |
| 熱制限 | 85℃ |
| パッケージ | モジュール |
| 備考 / バリエーション | 感度調整用ポテンショメータ付属 |
- リレーの適切な放熱を確保してください。
- 光センサーの入力にはプルアップ抵抗を使用してください。
- 交流機器を接続する前に、定格電圧を確認してください。
- システムに通電しているときは、露出した配線に触れないでください。
- 所望の光感度になるようにポテンショメータを調整してください。
配線手順

光センサーモジュールとリレーをArduinoに配線するには、まず光センサーモジュールのVCCピンをArduinoの5Vピンに接続します。次に光センサーのグラウンド(GND)ピンをArduinoのGNDピンに接続します。光センサーのデジタル出力ピンはArduinoの2番ピンに接続し、アナログ出力ピンはアナログ読み取り用にA0に接続します。
次にリレーについては、リレーのVCCピンをArduinoの5Vピンに、GNDピンをArduinoのGNDに接続します。リレーの入力ピンはArduinoの9番ピンに接続してください。最後に、ACライトの片方の線をリレーの共通ピン(COM)に、もう片方の線を通常開(NO)ピンに接続します。この接続により、光センサーの読み取り値に基づいてリレーがACライトを制御できるようになります。
コード例と解説
光センサーの基本的なデジタルコードでは、センサーとリレーのピンを定義します。setup関数はシリアル通信を初期化し、ピンモードを設定します:

#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
}
このコードはピン2を光センサーの読み取り用入力に、ピン9をリレー制御用の出力に設定します。シリアルモニタも初期化され、光の状態に関するフィードバックを表示します。
loop関数内で、センサーの状態を継続的に読み取ります:
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 (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
}
}
このセクションでは、光センサーのアナログ読み取り値に基づいて感度を調整でき、照明の作動閾値をより細かく制御できます。
デモンストレーション/当日について
セットアップが完了して電源を入れると、暗い環境ではライトが点灯し、明るい環境では消灯するはずです。光センサーを覆って暗闇を模擬し、リレーの動作を観察することでシステムをテストできます。設定が正しければ、シリアルモニタにはセンサーの読み取りに応じて "light is ON" または "light is OFF" と表示されます。ACライトを接続する際は極性を逆にしないよう注意してください。極性の逆転は誤動作や安全上の危険を引き起こす可能性があります(ビデオの10:00)。
動画のタイムスタンプ
- 00:00プロジェクトの紹介
- 02:15コンポーネントと配線の概要
- 午前04:30コードの説明
- 10:00機能の実演
++
/*
* 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
}
}
必要かもしれないもの
-
アマゾンAmazonからLDRライトセンサーモジュールを購入するamzn.to
リソースと参考文献
まだリソースはありません。
ファイル📁
フリッツィングファイル
-
LDR光センサーモジュール黒
LDR_module_black.fzpz0.01 MB