كود أردوينو وفيديو لوحدة مستشعر ضوء مع ريليه
في هذا الدرس سنتعلم كيفية استخدام وحدة استشعار الضوء للتحكم في ضوء يعمل بالتيار المتردد. سيسمح المشروع بتشغيل الضوء تلقائياً عندما يكون الجو مظلماً وإيقافه عندما يصبح الجو مشرقاً. هذا مفيد بشكل خاص لتطبيقات مثل الإضاءة الخارجية أو أضواء المرآب. بنهاية هذا الدرس سيكون لديك نظام عملي يمكنه إدارة الضوء بفعالية بناءً على ظروف الإضاءة المحيطة. (في الفيديو عند 02:15)

سنستخدم وحدة حساس ضوء تتضمن مقاومة متغيرة بالضوء (LDR) لاكتشاف مستويات الإضاءة وريليه للتحكم في ضوء التيار المتردد. سيشمل النظام أيضًا مقاومًا متغيرًا (بوتنشيومتر) لضبط حساسية كشف الضوء. يتيح هذا الإعداد تحكمًا رقميًا وتناظريًا في الضوء استنادًا إلى مستوى الإضاءة المحيطة الذي يكتشفه المستشعر. للمزيد من التوضيح التفصيلي، راجع الفيديو عند 04:30.
شرح الأجهزة
المكونات الأساسية لهذا التصميم هي وحدة مستشعر الضوء، والمرحّل، والأردوينو. تتألف وحدة مستشعر الضوء من مقاوم ضوئي (LDR) يغيّر مقاومته اعتمادًا على شدة الإضاءة، ويوفر خرجًا رقميًا أو تماثليًا. يعمل المرحّل كمفتاح يمكنه التحكم في مصباح تيار متردد عالي الجهد بينما يُشغَّل بأمان بواسطة أردوينو ذي جهد منخفض. هذا الفصل ضروري للسلامة ووظائف النظام.
المرحل له ثلاث أطراف رئيسية: المشترك (COM) والمفتوح عادةً (NO) والمغلق عادةً (NC). عند تفعيله، يوصّل المرحل الطرف المشترك بالطرف المفتوح عادةً، مما يسمح بتدفق التيار عبر المصباح المتصل. تتيح هذه الآلية للمرحل التحكم بالمصباح بناءً على الإشارات المستلمة من الأردوينو.
تفاصيل ورقة البيانات
| المصنّع | عام |
|---|---|
| رقم القطعة | وحدة مستشعر الضوء |
| جهد المنطق/المدخلات والمخرجات | 5 فولت |
| جهد التغذية | 5 فولت |
| تيار الإخراج (لكل قناة) | 10 مللي أمبير |
| تيار الذروة (لكل قناة) | 20 ميلي أمبير |
| إرشادات تردد PWM | غير متاح |
| عتبات مستوى المنطق للمدخلات | 2.5 V (عالٍ) / 0.8 V (منخفض) |
| هبوط الجهد / Rالمصرف–المصدر (عند التشغيل)/ التشبع | 0.2 فولت نموذجي |
| الحدود الحرارية | 85 درجة مئوية |
| حزمة | وحدة |
| ملاحظات / تنويعات | يتضمن مقاومًا متغيرًا لضبط الحساسية |
- تأكد من تبديد الحرارة بشكل صحيح للمرحل
- استخدم مقاومة سحب (pull-up) لمدخل حساس الضوء.
- تحقق من مواصفات الجهد قبل توصيل الأجهزة التي تعمل بالتيار المتناوب
- تجنّب لمس الأسلاك المكشوفة عندما يكون النظام موصولًا بالطاقة.
- اضبط المقاوم المتغير لتحقيق حساسية الضوء المطلوبة.
تعليمات الأسلاك

لتوصيل وحدة حساس الضوء والريليه بالأردوينو، ابدأ بتوصيل دبوس VCC في وحدة حساس الضوء بدبوس 5V في الأردوينو. بعد ذلك، صِل دبوس الأرضي في حساس الضوء إلى دبوس GND في الأردوينو. يجب توصيل دبوس الخرج الرقمي للحساس بالدبوس 2 على الأردوينو، بينما يتصل دبوس الخرج التناظري بـ A0 لقراءات تناظرية.
الآن، بالنسبة للمرحّل، وصل دبوس VCC الخاص به إلى دبوس 5V على الأردوينو ووصل دبوس الأرضي إلى GND. يجب توصيل دبوس الإدخال للمرحّل بالدبوس 9 على الأردوينو. أخيراً، وصل أحد أسلاك مصباح التيار المتردد (AC) إلى الدبوس المشترك (COM) للمرحّل والسلك الآخر إلى الدبوس المفتوح عادةً (NO). سيسمح هذا الإعداد للمرحّل بالتحكم في مصباح التيار المتردد بناءً على قراءات حساس الضوء.
أمثلة على الكود وشرح تفصيلي
في الكود الرقمي الأساسي لمستشعر الضوء، نحدد دبابيس المستشعر والمرحّل. تقوم دالة الإعداد بتهيئة الاتصال التسلسلي وتضبط أوضاع الدبابيس:

#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" بناءً على قراءات المستشعر. كن حذرًا من عكس القطبية عند توصيل المصباح المتصل بالتيار المتردد، لأن ذلك قد يسبب أعطالًا أو مخاطر على السلامة (في الفيديو عند 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
}
}
الأشياء التي قد تحتاجها
-
أمازون
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
Fritzing File
-
وحدة مستشعر الضوء LDR الأسود
LDR_module_black.fzpz0.01 MB