تشغيل مصباح تلقائيًا باستخدام حساس الموجات فوق الصوتية و Arduino و Relay



في هذا المشروع سنتعلم كيفية تشغيل وإطفاء مصباح تلقائيًا عند اكتشاف جسم قريب باستخدام لوحة Arduino Uno وحساس الموجات فوق الصوتية وRelay. الهدف الأساسي من المشروع هو فهم طريقة عمل المرحل الكهربائي وكيف يمكن لدارة إلكترونية منخفضة الجهد التحكم في دارة أخرى.

⚠️ تحذير مهم جدًا: يتضمن الفيديو تجربة على مصباح يعمل بجهد الشبكة الكهربائية. جهد 220V أو 110V قد يسبب صعقًا كهربائيًا خطيرًا أو حريقًا. إذا لم تكن مؤهلًا للعمل على جهد الشبكة، فلا تنفذ الجزء عالي الجهد. يمكنك تعلم نفس المبدأ واختبار البرنامج باستخدام LED أو حمل منخفض الجهد وآمن.

فيديو المشروع

فكرة المشروع

يقيس حساس الموجات فوق الصوتية المسافة بينه وبين الجسم الموجود أمامه. عندما تصبح المسافة أقل من القيمة المحددة في البرنامج، يرسل Arduino إشارة إلى وحدة Relay لتغيير حالة الحمل المتصل بها.

في التجربة تم تحديد مسافة 10 cm للاختبار. عند تقريب اليد من الحساس يشتغل المصباح، وعند إبعادها ينطفئ.

جسم أمام الحساس → قياس المسافة → Arduino → Relay → المصباح

المكونات المطلوبة

المكونالعدد
Arduino Uno1
حساس الموجات فوق الصوتية1
وحدة Relay 5V1
Breadboard1
Jumper Wiresحسب الحاجة
LED وحمل منخفض الجهد للاختبار الآمنحسب الحاجة

كيف يعمل Relay؟

الـ Relay هو مفتاح كهربائي يتم التحكم فيه بواسطة إشارة كهربائية. يحتوي عادة على جهة تحكم منخفضة الجهد وجهة أخرى خاصة بالحمل.

الطرفالوظيفة
VCCتغذية وحدة Relay
GNDالأرضي
INإشارة التحكم القادمة من Arduino
COMالطرف المشترك للمفتاح
NONormally Open: غير متصل بـ COM في الحالة العادية
NCNormally Closed: متصل بـ COM في الحالة العادية

عند تفعيل المرحل تتغير حالة نقاط التلامس الداخلية، وبذلك يمكن التحكم في دارة الحمل بواسطة إشارة التحكم القادمة من Arduino.

توصيل الدارة منخفضة الجهد

في هذا المشروع يتم التحكم في وحدة Relay بواسطة المنفذ الرقمي D2. أما حساس الموجات فوق الصوتية فيستخدم D7 لإشارة Trigger وD4 لإشارة Echo.

المكونالطرفArduino Uno
RelayIND2
RelayVCC5V
RelayGNDGND
UltrasonicTRIGD7
UltrasonicECHOD4
UltrasonicVCC5V
UltrasonicGNDGND

توصيل الحمل بالـ Relay

⚠️ السلامة أولًا: الفيديو يشرح مبدأ استخدام COM و NO مع حمل يعمل بجهد الشبكة، لكن لا ننصح المبتدئين ببناء توصيلات مكشوفة على 220V/110V. استخدم حملًا منخفض الجهد للتجربة، أو تجهيزًا مغلقًا ومعتمدًا وتحت إشراف شخص مؤهل عند التعامل مع جهد الشبكة.

لفهم المبدأ فقط: عند استخدام COM وNO تكون الدارة مفتوحة في الحالة العادية، ثم تغلق عند تفعيل Relay. أما استخدام COM وNC فيعطي السلوك المعاكس.

كيف يقيس حساس الموجات فوق الصوتية المسافة؟

يرسل Arduino نبضة قصيرة إلى طرف TRIG، فيرسل الحساس موجة فوق صوتية. بعد انعكاس الموجة عن الجسم يقيس الحساس مدة عودتها عبر طرف ECHO.

باستخدام زمن الرحلة وسرعة الصوت يمكن حساب المسافة. ولأن الموجة تقطع المسافة إلى الجسم ثم تعود إلى الحساس، نقسم المسافة المحسوبة على اثنين.

الكود المستخدم في المشروع

التسجيل يشرح منطق البرنامج ومنافذه، لكنه لا يحتوي على النص الكامل للكود سطرًا بسطر. لذلك من الأفضل وضع الكود الأصلي المستخدم في الفيديو هنا داخل Code Block Pro حتى يطابق المقال الفيديو تمامًا.

// Relay
const int relayPin = 2;

// Capteur ultrason HC-SR04
const int trigPin = 7;
const int echoPin = 4;

// Vitesse du son en cm/µs
const float soundSpeed = 0.0343;

// Variables pour le calcul de la distance
long duration;
float distance;

void setup() {

  Serial.begin(9600);

  pinMode(relayPin, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  // Relay éteint au démarrage
  digitalWrite(relayPin, LOW);
}

void loop() {

  // Éteindre le Relay par défaut
  digitalWrite(relayPin, LOW);

  // Générer l'impulsion TRIG
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  // Mesurer la durée de l'écho
  duration = pulseIn(echoPin, HIGH);

  // Calculer la distance en cm
  distance = duration * soundSpeed / 2;

  // Afficher la distance
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  // Si un objet est à moins de 10 cm
  if (distance < 10) {
    digitalWrite(relayPin, HIGH);
  }

  // Nouvelle mesure après 1 seconde
  delay(1000);
}

ملاحظة: هذا الكود مبسط لأغراض التعلم، ويمكن تحسينه بإضافة مهلة زمنية timeout إلى الدالة pulseIn() للتعامل مع الحالات التي لا يستقبل فيها الحساس إشارة الصدى.

شرح البرنامج

تحديد المنافذ

في بداية البرنامج نحدد منفذ التحكم في Relay، ثم منفذي TRIG وECHO الخاصين بحساس الموجات فوق الصوتية. حسب الدارة المستخدمة في الفيديو: Relay على D2، وTrigger على D7، وEcho على D4.

إعداد المنافذ

داخل setup() يبدأ الاتصال التسلسلي، ثم نحدد منافذ Relay وTrigger كمخارج، ومنفذ Echo كمدخل.

إرسال نبضة Trigger

داخل loop() يرسل Arduino نبضة إلى الحساس لبدء عملية القياس، ثم يقيس مدة إشارة Echo ويستخدمها لحساب المسافة.

اتخاذ القرار

يقارن البرنامج المسافة المحسوبة بالقيمة المحددة. في الفيديو تم استخدام 10 cm فقط للاختبار. عندما يكون الجسم أقرب من هذه المسافة تتغير إشارة التحكم في Relay لتشغيل الحمل.

إعادة القياس

بعد كل عملية قياس ينتظر البرنامج مدة قصيرة قبل إعادة الاستشعار. في التجربة الموضحة في الفيديو تتم إعادة القياس تقريبًا كل ثانية.

اختبار المشروع بأمان

قبل تجربة أي حمل ذي جهد مرتفع، تم في الفيديو اختبار منطق الدارة أولًا باستخدام LED صغير. هذه خطوة جيدة للتأكد من أن الحساس والبرنامج وRelay يعملون كما هو متوقع.

  1. تأكد من توصيل Arduino والحساس وRelay بشكل صحيح.
  2. ارفع البرنامج إلى Arduino.
  3. اختبر الاستشعار أولًا باستخدام LED أو حمل منخفض الجهد.
  4. قرّب يدك من حساس الموجات فوق الصوتية.
  5. عند تجاوز عتبة المسافة يجب أن تتغير حالة Relay والحمل.
  6. أبعد يدك وتأكد من عودة الحمل إلى حالته الأصلية.

مدى وزاوية الاستشعار

الحساس المستخدم في الفيديو مناسب لقياس الأجسام أمامه ضمن نطاق محدود وزاوية استشعار ضيقة نسبيًا. إذا كان المشروع يحتاج إلى تغطية مساحة أوسع، يمكن استخدام أكثر من حساس موجه في اتجاهات مختلفة أو اختيار مستشعر مناسب بزاوية كشف أوسع.

مشاكل شائعة

Relay لا يبدل حالته

تحقق من تغذية الوحدة ومن توصيل GND ومنفذ IN. كما يجب معرفة ما إذا كانت وحدة Relay المستخدمة من نوع Active HIGH أو Active LOW لأن منطق التشغيل قد يختلف من وحدة إلى أخرى.

المسافة غير مستقرة

تأكد من أن الحساس موجه مباشرة نحو الجسم وأنه لا توجد أسطح قريبة تسبب انعكاسات غير مرغوبة. يمكن أيضًا أخذ عدة قراءات ومعالجتها إذا احتاج المشروع إلى استقرار أكبر.

المصباح يشتغل في الحالة المعاكسة

تحقق من منطق وحدة Relay ومن اختيار NO أو NC. تغيير نقطة التلامس المستخدمة يغير الحالة الافتراضية للحمل.

كيف يمكن تطوير المشروع؟

  • زيادة مسافة التفعيل بدل 10 cm حسب التطبيق.
  • إضافة مؤقت ليبقى المصباح مشتغلًا لعدة ثوان بعد اكتشاف الحركة.
  • استخدام أكثر من حساس لتوسيع منطقة الكشف.
  • استبدال الحمل بمشروع منخفض الجهد مناسب للتعلم.
  • إضافة شاشة لعرض المسافة المقاسة.

ماذا تعلمنا؟

  • المبدأ الأساسي لعمل Relay.
  • الفرق بين أطراف COM وNO وNC.
  • التحكم في Relay بواسطة Arduino.
  • استخدام حساس الموجات فوق الصوتية لقياس المسافة.
  • ربط قرار برمجي بقياس حقيقي من الحساس.
  • تشغيل حمل تلقائيًا عند اكتشاف جسم قريب.
  • أهمية اختبار الدارة على جهد منخفض قبل الانتقال إلى تطبيقات أكثر خطورة.