شِفر (کود) آردوینو و ویدیو برای ماجیول حساس(حس کننده) نور با ریلی
در این آموزش، ما یاد میگیریم چگونه از یک ماجیول حساس(حس کننده) نور برای کنترل یک چراغ AC استفاده کنیم. این پروژه باعث میشود چراغ بهطور خودکار وقتی تاریک است روشن و وقتی روشنایی افزایش مییابد خاموش شود. این امر بهویژه برای کاربردهایی مانند روشنایی بیرونی یا چراغهای گاراژ مفید است. تا پایان این آموزش، یک سیستم عملی خواهید داشت که میتواند نور را بر اساس شرایط محیطی بهطور مؤثر مدیریت کند. (در ویدیو در 02:15)

ما از یک ماجیول حساس(حس کننده) نور استفاده خواهیم کرد که شامل یک مقاومت وابسته به نور (LDR) برای تشخیص شدت نور و یک ریلی برای کنترل چراغ AC است. در این سیستم همچنین یک پتانسیومتر برای تنظیم حساسیت تشخیص نور تعبیه خواهد شد. این پیکربندی امکان کنترل دیجیتال و آنالوگ چراغ را بر اساس نور محیطی که توسط حساس(حس کننده) تشخیص داده میشود فراهم میآورد. برای توضیح دقیقتر، به ویدیو در 04:30 مراجعه کنید.
شرح سختافزار
اجزای اصلی این پروژه ماجیول حساس(حس کننده) نور، ریلی و آردوینو هستند. ماجیول حساس(حس کننده) نور از یک LDR تشکیل شده است که بر اساس شدت نور مقاومت آن تغییر میکند و خروجی دیجیتال یا آنالوگ ارائه میدهد. ریلی بهعنوان یک کلید عمل میکند که میتواند یک چراغ جریان متناوب (AC) با ولتاژ بالا را کنترل کند در حالی که بهطور ایمن توسط آردوینو با ولتاژ پایین راهاندازی میشود. این جداسازی برای ایمنی و عملکرد صحیح حیاتی است.
ریلی سه پایه اصلی دارد: مشترک (COM)، معمولاً باز (NO) و معمولاً بسته (NC). وقتی فعال میشود، ریلی پایه مشترک را به پایه معمولاً باز متصل میکند و اجازه میدهد جریان از طریق چراغ متصل عبور کند. این مکانیزم به ریلی امکان میدهد تا بر اساس سیگنالهای دریافتی از آردوینو چراغ را کنترل کند.
جزئیات دیتاشیت
| تولیدکننده | عمومی |
|---|---|
| شماره قطعه | ماجیول حساس(حس کننده) نور |
| ولتاژ منطق/ورودی-خروجی | 5 V |
| ولتاژ تغذیه | ۵ ولت |
| جریان خروجی (به ازای هر کانال) | 10 mA |
| جریان پیک (به ازای هر کانال) | 20 میلیآمپر |
| راهنمای فرکانس PWM | مربوط نیست |
| آستانههای منطقی ورودی | 2.5 V (بالا) / 0.8 V (پایین) |
| افت ولتاژ / Rدرین-سورس (روشن)/ اشباع | 0.2 V معمولی |
| محدودیتهای حرارتی | 85 درجه سانتیگراد |
| بسته | ماجیول |
| یادداشتها / واریانتها | شامل پتانسیومتر برای تنظیم حساسیت |
- اطمینان حاصل کنید که حرارت ریلی بهطور مناسب دفع شود.
- برای ورودی حساس(حس کننده) نور از یک مقاومت پولآپ استفاده کنید.
- قبل از اتصال دستگاههای AC، مشخصات ولتاژ را بررسی کنید.
- هنگامی که سیستم روشن است از لمس سیمهای لخت خودداری کنید.
- پتانسیومتر را برای حساسیت نوری موردنظر تنظیم کنید.
دستورالعملهای سیمکشی

برای سیمکشی ماجیول حساس(حس کننده) نور و ریلی به آردوینو، با اتصال پایه VCC ماجیول حساس(حس کننده) نور به پایه 5V روی آردوینو شروع کنید. سپس پایه زمین حساس(حس کننده) نور را به یکی از پایههای GND آردوینو متصل کنید. پایه خروجی دیجیتال حساس(حس کننده) نور باید به پایه 2 آردوینو وصل شود، در حالی که پایه خروجی آنالوگ برای خوانشهای آنالوگ به A0 متصل میشود.
حال برای ریلی، پایه VCC آن را به پایه 5V روی آردوینو و پایه گراند آن را به GND وصل کنید. پایه ورودی ریلی را به پایه 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
}
}
این بخش امکان تنظیم حساسیت را بر اساس مقدار آنالوگ خواندهشده از حساس(حس کننده) نور فراهم میکند و کنترل بیشتری بر آستانههای فعالسازی نور ارائه میدهد.
نمایش / آنچه باید انتظار داشته باشید
وقتی راهاندازی کامل شد و دستگاه روشن شد، چراغ باید در شرایط نور کم روشن شود و در شرایط نور زیاد خاموش شود. میتوانید سیستم را با پوشاندن حساس(حس کننده) نور برای شبیهسازی تاریکی آزمایش کنید و فعال شدن ریلی را مشاهده کنید. اگر بهدرستی پیکربندی شده باشد، نمایشگر مسلسل بسته به خوانشهای حساس(حس کننده) عبارت «چراغ روشن است» یا «چراغ خاموش است» را نمایش میدهد. مراقب معکوس کردن قطبیت هنگام اتصال چراغ 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
}
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
فایل فریزینگ
-
ماجیول حساس(حس کننده) نور LDR سیاه
LDR_module_black.fzpz0.01 MB