الوصف
وحدة مستشعر الحركة بالأشعة تحت الحمراء HC-SR501
تستخدم وحدة كشف الحركة HC-SR501 مستشعرًا سلبيًا للأشعة تحت الحمراء لاكتشاف الحركة ضمن مجال يصل إلى 7 أمتار وزاوية 120 درجة.
المواصفات التفصيلية
- جهد التغذية: من 4.5V إلى 20V DC
- الخرج: إشارة رقمية HIGH (3.3V) أو LOW (0V)
- زاوية الكشف: < 120 درجة
- مسافة الكشف: حتى 7 أمتار
- زمن التأخير: قابل للضبط من 5 ثوانٍ إلى 5 دقائق
- الأبعاد: 32 mm x 24 mm
- استهلاك التيار: < 60µA
- درجة حرارة التشغيل: من -15°C إلى 70°C
طريقة العمل
يكتشف مستشعر PIR HC-SR501 التغيرات في مستويات الأشعة تحت الحمراء ضمن مجال رؤيته. عند دخول جسم دافئ، مثل إنسان أو حيوان، إلى هذا المجال، يرسل المستشعر إشارة HIGH. وتتيح مقاومتان متغيرتان على الوحدة ضبط الحساسية وزمن التأخير.
الاستخدامات
- أنظمة الأمان
- الإضاءة التلقائية
- عدّ الأشخاص
- أنظمة الإنذار
- مشاريع المنزل الذكي
توزيع الأطراف
- VCC: مصدر الطاقة (من 4.5V إلى 20V)
- OUT: خرج رقمي
- GND: الأرضي
طريقة الاستخدام
لاستخدام HC-SR501 مع Arduino، صِل VCC بمصدر 5V في Arduino، وGND بالأرضي، وOUT بمدخل رقمي في Arduino (مثل D2).
طريقة الاستخدام مع Arduino Uno
مثال أساسي على كود Arduino
#define PIR_PIN 2
#define LED_PIN 13
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int pirState = digitalRead(PIR_PIN);
if (pirState == HIGH) {
digitalWrite(LED_PIN, HIGH);
Serial.println("Mouvement détecté !");
} else {
digitalWrite(LED_PIN, LOW);
Serial.println("Pas de mouvement.");
}
delay(1000);
}
هدف الكود
يقرأ هذا الكود حالة مستشعر الحركة ويضيء LED عند اكتشاف حركة. كما يعرض حالة المستشعر في Serial Monitor.
المكونات المطلوبة للمثال الأساسي
- Arduino Uno
- وحدة مستشعر الحركة HC-SR501
- أسلاك توصيل
شرح تفصيلي للكود الأساسي
- التهيئة: يُضبط الاتصال التسلسلي على 9600 baud. ويُهيأ الطرفان
PIR_PINوLED_PINكمدخل ومخرج على التوالي. - قراءة البيانات: تُقرأ قيمة
PIR_PINوتُخزن فيpirState. عند اكتشاف حركة، يضيء LED وتظهر رسالة في Serial Monitor. وإلا ينطفئ LED وتظهر رسالة أخرى.
توصيلات المثال الأساسي
- VCC: يُوصل بمصدر 5V في Arduino
- GND: يُوصل بأرضي Arduino
- OUT: يُوصل بالطرف D2 في Arduino
مثال Arduino متقدم: عرض على LCD ومعالجة الأخطاء وتحسينات
#include <LiquidCrystal_I2C.h>
// Constantes
const int PIR_PIN = 2; // Broche du capteur PIR
const int LED_PIN = 13; // Broche de la LED interne de l'Arduino
const int DELAY_TIME = 1000; // Délai entre les lectures en millisecondes
LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialisation de l'écran LCD I2C avec l'adresse 0x27 et une taille de 16x2
void setup() {
pinMode(PIR_PIN, INPUT); // Configurer la broche PIR_PIN en entrée
pinMode(LED_PIN, OUTPUT); // Configurer la broche LED_PIN en sortie
lcd.begin(); // Initialisation de l'écran LCD
lcd.backlight(); // Allumer le rétroéclairage de l'écran LCD
Serial.begin(9600); // Initialisation de la communication série à 9600 bauds
}
void readSensorValue(int& pirState) {
pirState = digitalRead(PIR_PIN); // Lire l'état du capteur PIR
}
void displayValuesOnLCD(int pirState) {
static int lastPirState = -1; // Variable pour stocker le dernier état du capteur PIR affiché
if (pirState != lastPirState) { // Met à jour l'affichage uniquement si l'état a changé
lcd.clear(); // Efface l'écran LCD
lcd.setCursor(0, 0); // Positionne le curseur à la première ligne
lcd.print("PIR Sensor: "); // Affiche le texte "PIR Sensor: "
if (pirState == HIGH) {
lcd.setCursor(0, 1); // Positionne le curseur à la deuxième ligne
lcd.print("Mouvement!"); // Affiche "Mouvement!"
} else {
lcd.setCursor(0, 1); // Positionne le curseur à la deuxième ligne
lcd.print("Pas de mouv."); // Affiche "Pas de mouv."
}
lastPirState = pirState; // Met à jour le dernier état affiché
}
}
void displayValuesOnSerialConsole(int pirState) {
if (pirState == HIGH) {
Serial.println("Mouvement détecté !"); // Affiche "Mouvement détecté !" sur la console série
} else {
Serial.println("Pas de mouvement."); // Affiche "Pas de mouvement." sur la console série
}
}
void loop() {
int pirState;
readSensorValue(pirState); // Lire l'état du capteur PIR
digitalWrite(LED_PIN, pirState); // Allumer ou éteindre la LED en fonction de l'état du capteur PIR
displayValuesOnLCD(pirState); // Afficher l'état sur l'écran LCD
displayValuesOnSerialConsole(pirState); // Afficher l'état sur la console série
delay(DELAY_TIME); // Attendre avant de refaire une lecture
}
المكونات المطلوبة للمثال المتقدم
- Arduino Uno
- وحدة مستشعر الحركة HC-SR501
- شاشة LCD 1602 بواجهة I2C
- أسلاك توصيل
شرح تفصيلي للكود المحسّن
- إضافة المكتبة: تتيح
LiquidCrystal_I2C.hالاتصال بشاشة LCD باستخدام بروتوكول I2C. - تعريف الثوابت: تحدد الثوابت طرف مستشعر PIR (
PIR_PIN) وطرف LED (LED_PIN) والفاصل بين القراءات (DELAY_TIME). - تهيئة شاشة LCD: تهيئ
setup()الشاشة والاتصال التسلسلي بسرعة 9600 baud، كما تهيئPIR_PINوLED_PINكمدخل ومخرج. - قراءة قيم المستشعر: تقرأ
readSensorValue(int& pirState)حالة مستشعر PIR وتخزنها فيpirState. - عرض القيم على شاشة LCD: تعرض
displayValuesOnLCD(int pirState)حالة المستشعر ولا تحدّث الشاشة إلا عند تغير الحالة. ويُستخدم متغير static لحفظ آخر حالة معروضة. - عرض القيم في Serial Monitor: ترسل
displayValuesOnSerialConsole(int pirState)حالة مستشعر PIR إلى وحدة التحكم التسلسلية. - الحلقة الرئيسية: تقرأ
loop()حالة المستشعر، وتحدّث LED، وتعرض الحالة على الشاشة ووحدة التحكم التسلسلية، ثم تنتظر ثانية قبل القراءة مجددًا.
تثبيت المكتبات
الكود الأساسي والمتقدم: لا يحتاج المثال الأساسي إلى مكتبة خاصة. لاستخدام المثال المتقدم مع شاشة I2C، ثبّت LiquidCrystal_I2C عبر مدير المكتبات في Arduino IDE.
- افتح Arduino IDE.
- انتقل إلى Sketch -> Include Library -> Manage Libraries…
- ابحث عن
LiquidCrystal_I2Cواضغط Install.
الكلمات المفتاحية: مستشعر الحركة، الأشعة تحت الحمراء السلبية، كشف PIR، HC-SR501، أمان المنزل، الأتمتة الصناعية، توفير الطاقة.









