حاجز ليزر لكشف التسلل باستخدام حساس الضوء و ESP32



في الحلقة الثامنة من سلسلة ESP32 من الصفر سنصنع حاجز ليزر بسيطًا لكشف التسلل. طالما يصل شعاع الليزر إلى المقاومة الضوئية يبقى النظام في وضع المراقبة، وبمجرد قطع الشعاع يكتشف ESP32 الحدث ويشغّل جرس الإنذار.

الميزة المهمة في هذا المشروع هي أن الإنذار يبقى مشتغلًا حتى إذا عاد شعاع الليزر إلى الحساس، ولا تتم إعادة تسليح النظام إلا بعد إعادة تشغيل لوحة ESP32.

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

فكرة المشروع

نعتمد في عملية الكشف على المقاومة الضوئية LDR التي تتغير مقاومتها حسب كمية الضوء الساقط عليها. نوجّه شعاع ليزر منخفض القدرة نحو الحساس، ثم يقرأ ESP32 الإشارة التناظرية الناتجة عبر GPIO34.

بعد معايرة الحساس نحدد قيمة عتبة Threshold تفصل بين حالتي وصول الليزر وانقطاعه. في التركيب المستخدم في الفيديو تنخفض قراءة الحساس عند قطع الشعاع. عندما تصبح القراءة أقل من العتبة، يفعّل ESP32 الترانزستور المتصل بـ GPIO23 فيعمل الجرس.

مسار العمل:
Laser → LDR → GPIO34 → ESP32 → GPIO23 → NPN Transistor → Buzzer

⚠️ تحذير مهم بخصوص الليزر: استخدم ليزرًا منخفض القدرة ومثبتًا باتجاه الحساس فقط. لا توجّه شعاع الليزر نحو العين أو نحو الأشخاص أو الأسطح العاكسة. الليزر ليس لعبة وقد يسبب أذى للعين.

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

المكوّنالكمية / القيمة
لوحة ESP321
مقاومة ضوئية LDR1
مقاومة10kΩ
وحدة ليزر منخفض القدرة1
جرس Buzzer يعمل بشكل مناسب عند 3.3V1
ترانزستور NPN1
مقاومة لقاعدة الترانزستور1kΩ
لوحة تجارب Breadboard1
أسلاك توصيل Jumper Wiresحسب الحاجة

توصيل حساس الضوء

نستخدم المقاومة الضوئية مع مقاومة 10kΩ لتكوين مقسم للجهد Voltage Divider. يتم توصيل نقطة المنتصف بالمنفذ GPIO34 حتى يتمكن ESP32 من قياس تغير الجهد كقيمة تناظرية.

العنصرالتوصيل / الوظيفة
LDR + مقاومة 10kΩمقسم جهد
نقطة المنتصفGPIO34
GPIO34قراءة الإشارة التناظرية

معايرة حساس الضوء وتحديد العتبة

قبل كتابة برنامج الإنذار يجب معرفة القيم الفعلية التي يعطيها الحساس في حالتي وصول الليزر وانقطاعه. يمكن استخدام برنامج بسيط يقرأ GPIO34 ويعرض النتيجة على Serial Monitor.

const int ldrPin = 34;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int valeurLDR = analogRead(ldrPin);

  Serial.println(valeurLDR);

  delay(200);
}


سجّل القراءة عندما يصل الليزر إلى LDR، ثم سجّلها مرة أخرى عند قطع الشعاع. بعد ذلك اختر قيمة بين القراءتين لتكون عتبة الكشف.

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

إضافة الجرس والترانزستور NPN

في التجربة وجدنا أن الجرس المستخدم يعمل جيدًا عند 3.3V ويستهلك حوالي 14mA. ومع ذلك، بدل جعل منفذ ESP32 يغذي الجرس مباشرة، نستخدم ترانزستور NPN كمفتاح إلكتروني.

بهذه الطريقة يقوم GPIO23 فقط بالتحكم في قاعدة الترانزستور عبر مقاومة 1kΩ، بينما يحصل الجرس على التغذية من خط 3.3V.

الجزءالتوصيل / الوظيفة
حساس الضوءGPIO34
خرج التحكمGPIO23
GPIO23 → قاعدة الترانزستورعبر مقاومة 1kΩ
GPIO23 LOWالترانزستور متوقف → الجرس صامت
GPIO23 HIGHالترانزستور يعمل → الجرس يشتغل

سبق أن شرحنا استخدام ترانزستور NPN كمفتاح إلكتروني بتفصيل أكبر في الحلقة الخامسة من سلسلة ESP32 من الصفر.

الكود الكامل للمشروع

ضع في المتغير threshold قيمة العتبة التي حصلت عليها أثناء المعايرة. القيمة 3200 في المثال التالي هي قيمة توضيحية فقط ويجب استبدالها بالقيمة المناسبة لدائرتك.

const int ldrPin = 34;
const int buzzerPin = 23;

const int seuil = 3200;

void setup() {

  Serial.begin(115200);

  pinMode(buzzerPin, OUTPUT);
  digitalWrite(buzzerPin, LOW);
}

void loop() {

  int valeurLDR = analogRead(ldrPin);

  Serial.println(valeurLDR);

  if (valeurLDR < seuil) {

    digitalWrite(buzzerPin, HIGH);

    while (true) {
      // Alarme verrouillée jusqu'au redémarrage
    }
  }

  delay(50);
}


شرح الكود

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

نحدد GPIO34 كمنفذ قراءة المقاومة الضوئية، بينما نستخدم GPIO23 للتحكم في الترانزستور المسؤول عن تشغيل الجرس.

تحديد عتبة الكشف

المتغير threshold يحتوي على قيمة العتبة التي حددناها أثناء المعايرة. هذه القيمة تسمح للبرنامج بالتمييز بين وصول شعاع الليزر إلى الحساس وانقطاعه.

تهيئة النظام

داخل setup() نبدأ الاتصال التسلسلي، ثم نحدد منفذ الجرس كمخرج ونرسل إليه LOW حتى يبدأ النظام والإنذار متوقف.

قراءة حساس الضوء

داخل loop() نستخدم analogRead() لقراءة GPIO34 باستمرار، ونرسل القيمة إلى Serial Monitor لمراقبتها أثناء الاختبار.

اكتشاف قطع شعاع الليزر

في تركيب الفيديو تنخفض قراءة الحساس عند قطع الليزر. لذلك نتحقق مما إذا أصبحت القراءة أقل من threshold. عند تحقق الشرط نرسل HIGH إلى GPIO23 فيعمل الترانزستور ويبدأ الجرس بإصدار الإنذار.

لماذا يبقى الإنذار مشتغلًا؟

بعد اكتشاف التسلل يدخل البرنامج في حلقة while (true) لا تنتهي. بذلك يتوقف البرنامج عن العودة إلى قراءة LDR ويبقى GPIO23 في الحالة المرتفعة. حتى إذا عاد شعاع الليزر إلى الحساس، يبقى الجرس مشتغلًا.

إعادة تسليح نظام الإنذار

لإيقاف الإنذار وإعادة النظام إلى وضع المراقبة، نعيد تشغيل ESP32 باستخدام زر EN الموجود على اللوحة. عند إعادة التشغيل تُنفذ setup() من جديد، فيتوقف الجرس ويصبح النظام جاهزًا لاكتشاف محاولة جديدة.

رفع البرنامج وتجربة المشروع

  1. وجّه الليزر نحو المقاومة الضوئية مع الالتزام باحتياطات السلامة.
  2. نفّذ المعايرة وحدد قيمة threshold المناسبة.
  3. ضع قيمة العتبة في البرنامج.
  4. اربط ESP32 بالحاسوب وارفع البرنامج.
  5. افتح Serial Monitor لمراقبة قراءة حساس الضوء.
  6. تأكد أن الليزر يصل إلى LDR وأن الجرس متوقف.
  7. اقطع شعاع الليزر بيدك أو بجسم غير عاكس.
  8. يجب أن يعمل الجرس ويبقى مشتغلًا حتى بعد عودة الليزر.
  9. اضغط زر EN لإعادة تشغيل ESP32 وتسليح النظام من جديد.

مشاكل شائعة وحلولها

المشكلةما الذي يجب التحقق منه؟
الإنذار يعمل دائمًاتحقق من قيمة threshold ومن اتجاه مقسم الجهد وقيم الحساس عند وصول الليزر.
قطع الليزر لا يشغّل الإنذارأعد المعايرة وتأكد من أن القراءة تعبر العتبة عند قطع الشعاع.
قراءة الحساس تتغير كثيرًاتأكد من ثبات الليزر وحاول تقليل تأثير الإضاءة المحيطة على LDR.
GPIO23 يتغير لكن الجرس لا يعملتحقق من توصيل الترانزستور وأطرافه ومقاومة 1kΩ وتغذية الجرس والأرضي المشترك.
الإنذار لا يتوقف بعد عودة الليزرهذا هو السلوك المقصود. اضغط زر EN لإعادة تسليح النظام.

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

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

ماذا تعلمنا؟

  • استخدام المقاومة الضوئية LDR مع ESP32.
  • إنشاء مقسم جهد باستخدام مقاومة 10kΩ.
  • قراءة إشارة تناظرية عبر GPIO34.
  • معايرة الحساس واختيار عتبة الكشف.
  • استخدام ترانزستور NPN كمفتاح إلكتروني للتحكم في الجرس.
  • التحكم في الترانزستور بواسطة GPIO23.
  • اكتشاف انقطاع شعاع الليزر.
  • تثبيت حالة الإنذار حتى إعادة تشغيل ESP32.

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

موضوعات ذات صلة