مشروعات تطبيقية · الدرس 4.9
إضاءة ليلية تستجيب للحركة
العودة إلى الدروسفكرة المشروع والتوصيل
يكشف حساس الحركة (HC-SR501 PIR Motion Sensor) حركة الأشخاص من تغير الأشعة تحت الحمراء ويشغّل إضاءة RGB تلقائيًا.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3).
- لوحة الحساسات (ALL IN ONE Sensor Shield).
- حساس الحركة (HC-SR501 PIR Motion Sensor).

تضاء LEDs عند وجود حركة وتنطفئ عند عدمها. بعد تشغيلها 20 ثانية يفحص وجود حركة؛ إذا استمرت يبقى الضوء، وإلا ينطفئ.
قراءة الحساس وإعادة توقيت الإضاءة
الجزء الأول
يقرأ digitalRead(pirPin) إلى pirValue. إذا كانت القراءة HIGH، يشغّل الألوان الثلاثة بقيمة 255. وعندما تكون LOW، يطفئها بكتابة 0 لكل لون.
افتح ملف البرنامج hc-s501_led.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتجربة تشغيل الإضاءة بالحركة.
الجزء الثاني
لإبقاء الإضاءة نحو 20 ثانية بعد آخر حركة، افحص الحساس مرة كل ثانية داخل حلقة for من 0 إلى 19، واستخدم delay(1000) داخل الحلقة. إذا أصبحت pirValue مساوية لـ 1، فأعد i إلى 0 لتبدأ مهلة الإضاءة من جديد.
الكود
hc-s501_led/hc-s501_led.ino
//www.elegoo.com
//2016.12.8
// define pins
#define BLUE 9
#define GREEN 6
#define RED 5
int pirPin = 12; // Input for HC-S501
int pirValue; // Place to store read PIR Value
void setup()
{
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
}
// main loop
void loop()
{
pirValue = digitalRead(pirPin);
Serial.println(digitalRead(pirPin));
if (pirValue == 1) {
for (int i = 0; i < 20; i++) {
analogWrite(BLUE, 255);
analogWrite(RED, 255);
analogWrite(GREEN, 255);
if (digitalRead(pirPin)) {
i = 0;
}
delay(10);
}
}
else {
analogWrite(BLUE, 0);
analogWrite(RED, 0);
analogWrite(GREEN, 0);
}
}