نظام الحماية ضد السرقة

في هذا المشروع سنتعلم كيفية استخدام حساس الحركة PIR Sensor مع الاردوينو لعمل نظام انذار ضد السرقة.

Anti-Thief System: نظام انذار باستخدام PIR Sensor مع الاردوينو

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

arduino uno r3

Arduino Uno

PIR Sensor

 

Buzzer

 

LED

 

220 Ω resistor

220 Ohm Resistor

 

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

تحديد مستوى الماء

1× سلك الاردوينو

تحديد مستوى الماء

حزمة أسلاك توصيل (ذكر – أنثى)

حساس الحركة PIR Sensor

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

Anti-Theft System: نظام انذار باستخدام PIR Sensor مع الاردوينو

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

عناصر الحساس :

Anti-Theft System: نظام انذار باستخدام PIR Sensor مع الاردوينو

يتم توصيله إلى الأردوينو كما هو موضح بالجدول :

الطرف (بداية من اليسار) التوصيل
1 GND
2 Output To Arduino
3 VCC

توصيل الدارة

قم بتوصيل الدارة كما هو موضح بالصورة التالية :

Anti-Theft System: نظام انذار باستخدام PIR Sensor مع الاردوينو

سنقوم بكتابه برنامج، بحيث يقوم الحساس بإلتقاط ما إذا كان هناك حركة ام لا، , وعند الكشف عن وجود حركة يقوم بإرسال اشارة إلى الأردوينو الذي يقوم بدوره بتشغيل الـ Buzzer وإضاءة الـ LED للتنبيه.

Anti-Theft System: نظام انذار باستخدام PIR Sensor مع الاردوينو

 

الكود البرمجي

// led
#define LED 13
// pir
#define INPUT 2
// buzzer
#define SPEAKER 10

int pirFlag = 0;
int val = 0;


void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(INPUT, INPUT);
  pinMode(SPEAKER, OUTPUT);
  Serial.begin(9600);
}


void loop()
{
  val = digitalRead(INPUT);
  // test this val
  if (val == HIGH){
    digitalWrite(LED, HIGH);
    tone(SPEAKER, 160, 300);
    delay(300);
    if (pirFlag == 0){
	Serial.println("Motion detected!");
	pirFlag = 1;
    }
  }	
  else{
    digitalWrite(LED, LOW);
    noTone(SPEAKER);
    if (pirFlag == 1){
	Serial.println("Motion ended!");
	pirFlag = 0;
    }
  }
}

شرح الكود :

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

سيتم استخدام المتغير pirFlag لتسجيل حالة الحساس. نقوم بوضع قيمة ابتدائية للحالة وهي 0. والمتغير val يستخدم لتسجيل الإشارة القادمة من الحساس إلى الأردوينو حسب وجود حركة ام لا.

// led
#define LED 13
// pir
#define INPUT 2
// buzzer
#define SPEAKER 10

int pirFlag = 0;
int val = 0;

في الدالة ()setup، قمنا بضبط المنافذ المستخدمة إما مدخله أو مخرجة. يتم ضبط الـ LED والـ Buzzer كمخرج، والمنفذ الموصل مع الـحساس كمدخل.

ويتم تفعيل الاتصال التسلسلي من أجل الطباعة على الشاشة التسلسلية Serial Monitor عند الكشف عن وجود حركة.

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(INPUT, INPUT);
  pinMode(SPEAKER, OUTPUT);
  Serial.begin(9600);
}

في دالة الـ ()loop، نقوم بقراءة الإشارات القادمة من الحساس واختبارها. إذا كانت الإشارة High اي انه تم الكشف عن وجود حركة، نقوم بتشغيل ال LED والـ Buzzer . ثم نقوم بتحقق من الحالة المسجله في المتغير PirFlag إذا كانت 0 نقوم بطباعة رسالة تدل على وجود حركة على الشاشة التسلسلية وتغير قيمة المتغير pirFlag إلى 1 .

val = digitalRead(INPUT);
  // test this val
  if (val == HIGH){
    digitalWrite(LED, HIGH);
    tone(SPEAKER, 160, 300);
    delay(300);
    if (pirFlag == 0){
	Serial.println("Motion detected!");
	pirFlag = 1;
    }
  }	

في حال كانت الإشاءة القادمة من الحساس LOW اي انه لم يتم الكشف عن وجود حركة، نقوم بإيقاف تشغيل الـ LED و الـ Buzzer . والتحقق من الحالة المسجله لدى الـ pirFlag إذا كانت 1 اي انه كانت هناك حركة وتوقفت فنقوم بالطباعة على الشاشة التسلسلية رساله تدل على وقف الحركة، وتغير قيمة المتغير pirFlag إلى 0 .

  else{
    digitalWrite(LED, LOW);
    noTone(SPEAKER);
    if (pirFlag == 1){
	Serial.println("Motion ended!");
	pirFlag = 0;
    }
  }

تستخدم الدالة tone() لتوليد اشارات يكمننا من سماعها عن طريق سماعه او Buzzer

tone(SPEAKER, 160, 300);

noTone(SPEAKER);
tone(المدة الزمنية , التردد ,اسم الرجل)
noTone(اسم الرجل)

 




التحكم التلقائي بالضوء

مقدمة

في هذا الدرس ستتعلم برمجة الأردوينو لتتمكن من التحكم التلقائي بالضوء بحيث تعمل مصابيح المحيط عند تواجد أشخاص ضمن المحيط وذلك عن طريق استخدام حساس الحركة (PIR Sensor) للكشف عن أي حركة في المحيط، وسيتم تشغيل المصابيح باستخدام المرحل (Relay) الذي يتحكم بمرور التيار الكهربائي.

التحكم التلقائي بالضوء

المواد والأدوات

المرحل (Relay)

X1 المرحل (5V Relay Module)

pir motion sensor - حساس الحركة

X1 حساس الحركة  (pir motion sensor)

small size breadboard 170 colors

X1  لوح تجارب صغير (small size breadboard)

اردوينو

X1أردوينو أونو

سلك اردوينو
X1 سلك الأردوينو
Female-Male Jumper Wires

 اسلاك توصيل أنثى/ذكر (Jumper Wires Female/male)

Jumper Wires Male/Male

 اسلاك توصيل ذكر/ذكر (Jumper Wires Male Male)

automatic-room-lights

Light Bulb Socket (غير متوفر بالمتجر)

لمبة 12 فولت

X1 لمبة 12 فولت (غير متوفر بالمتجر)*

X1 محول طاقة 12 فولت**

X1 وصلة تيار ثابت انثى

 

*يمكن استخدام 220 فولت (نحن لا نفضل ذلك)
** عند استخدام 220 فولت لن تحتاج لهذا المنتج

في المشاريع او التطبيقات العملية قد نود أن نتحكم بأحمال ذات قدرات عالية High Power باستخدام المتحكم الاصغر Microcontroller . فمثلاً أن نتحكم بإنارة مصباح يعمل على تيار متردد (AC) او تشغيل محركات كهربائية حثية مثل مضخات المياه.

من خلال الاردوينو ,لا يمكننا تشغيل اي حمل ذو استهلاك كبير للطاقة (220v,110v) لأن اقصى جهد يمكن توليده من الاردوينو هو 5 فولت فقط. احد الاجهزة التي لا يمكن للاكترونيات الاستغناء عنها والتي تلعب دور كبير في التحكم بالدرات الكهربائية هو المرحٌل -الريلي-(Relay) .

المرحٌلRelay

الوظيفة الأولية للمرحل هي فصل دوائر التحكم عن دوائر القدرة، لقيادة تيار مرتفع انطلاقا من إشارة تحكم ضعيفة نسبيا. وبالتالي عن طريق تطبيق تيار صغير يمكننا تشغيل المرحل للسماح بتدفق التيار الأكبر.

فالمرحل يعمل كعنصر وصل/فصل (ON-OFF switch) لتوصيل التيار الكهربائي للأحمال او فصلها.

automatic-room-lights

في هذا المشروع ,سنقوم باستخدام HL-52S  ريلي , يحتوي على ثلاث اقطاب يتم وصلها بمصدر الطاقة ذات الفولتية العالية. القطب الاوسط  يشير الحرف C الى كلمة Common  والتي تعني مشترك, يشير ان هذا القطب اما ان يكون موصولاً بالقطب (NC) تشير الى Normally Closed  والتي تعني مغلق عادةً او (NO) تشير الى  Normally Open والتي تعني مفتوح عادةً ،فلذلك سمي بالقطب المشترك.

automatic-room-lights

وعلى الجانب الآخر لدينا مجموعتين من الدبابيس، اول مجموعة تحتوي على 4 دبابيس، دبوس GND الأرض و دبوس الـ Vcc لتزويد الريلي بالطاقة ومدخلين IN1 ,IN2 . والمجموعة الثانية عبارة عن 3 دبابيس، Jumper  بين الـ JD-Vccو VCC  و دبوس الارض GND

automatic-room-lights

تحذير: يجب وضع الـ Relay على لوح عازل وعدم لمسه من اسفل اللوح الملحوم عليه لأنها قد تكون موصله للتيار الكهربائي بعد وصله بالجهد العالي.

 

انتبه:

قبل ان نبدأ بتوصيل الدائرة، ينبغي تحذيرك ، أن هذا المشروع يتطلب توصيل تيار متردد (AC – 220V) ،هذا التيار خطير و يجب التعامل معه بحذر شديد. لا تقم بالتوصيل مالم تكن على دراية كاملة بما تفعل او اطلب مساعدة من شخص ذو خبرة في هذا المجال.
اذا استخدم بطريقة غير صحيحة  او غير سليمة يمكن ان يؤدي إلى إصابات خطيرة أو وفاة. لذلك يجب الحذر جدا من ما تقومون به لأننا لا نتحمل اي مسؤولية من اي اجراءات تقوم به.

automatic-room-lights

تصميم لوحة التجارب:

قم بتوصيل الدائرة الكهربائية على لوحة التجارب كما هو موضح بالصورة:

قم بتوصيل سلك الطاقة الموجبة الخاص بالريلي بمنفذ ال 5v على لوحة التجارب،  وسلك الطاقة السالبة بمنفذ ال Gnd المتواجد على لوحة التجارب. قم بتوصيل سلك الاشارة (IN1) بمنفذ رقم 10 على لوحة الاردوينو.
يمكنك العودة الى الدرس الثامن عشر لمعرفة  طريقة التوصيل المتعلق في مستشعر الحركة (PIR Sensor) ،  قم بتوصيل سلك الاشارة  (Signal) للمستشعر بمنفذ رقم 9 على لوحة الاردوينو.

اذا كانت الإضاءة 12 فولت استخدم المحول اذا كانت الاضاءة 220 يمكن توصله مباشرة بدون محول

تنبيه :
– قد تختلف طرق توصيل مستشعر الحركة بلوحة الارديونو بناءً على نوع المستشعر، الرجاء تفقد أستمارة البينات لمستشعرك قبل توصيله.
– قد تختلف طرق توصيل الريلي بلوحة الاردوينو بناءً على نوع الريلي، الرجاء تفقد وصف البينات للريلي الخاص بك قبل توصيله.
– اذا كنت تملك نوع اخر من انواع الريلي الذي لا يكون ملحوم على دارة، فاللأسف لا يمكنك توصيله بشكل مباشر بالارديونو.
– اي توصيل  خاطئ قد يؤدي الى تلف المتحكم الدقيق للوحة الاردوينو.

البرمجة:

يقوم الاردوينو بإنتظار إشارة من مستشعر الحركةMotion PIR sensor ، وفور حصولة على اشارة من المسشتعر تشير لوجود تحرك، يقوم بتفعيل الـ Relay  لفتح الإضاءة.

قم بتوصيل الاردوينو بالكمبيوتر، وقم بتحميل البرمجة التالي على الاردوينو:

int Relay=10;
int inputPin = 9; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
 
void setup() {
 pinMode(inputPin, INPUT); // declare sensor as input
 pinMode(Relay,OUTPUT);
 
 Serial.begin(9600);
}
 
void loop(){
 val = digitalRead(inputPin); // read input value
 // Serial.println(val);
 if (val == HIGH) { 
 digitalWrite(Relay,LOW); 
 Serial.println(val);// check if the input is HIGH
 if (pirState == LOW) {
 Serial.println("Motion detected!");
 pirState = HIGH;
 }
 delay(2000);
 } else {
 digitalWrite(Relay,HIGH);
 if (pirState == HIGH){
 Serial.println("Motion ended!");
 pirState = LOW;
 }
 delay(2000);
 }
}

لمحة سريعة عن الكود:

لفتح و اغلاق انارة AC يجب تفعيل الـ Relayعن طريق مدخل IN1 . يعمل مدخل IN1 في الـ Relay عكسيا، فيتم تفعيل المرحل (Relay) عند ادخال قيمة (LOW) الى مدخل (IN1)( حسب طريقة صنع الدارة على اللوحة الصغيرة التي يلحم عليها الريلي) .

 digitalWrite(Relay,LOW);

يمكنك العودة الى الدرس الثامن عشر لمعرفة شرح الكود المتعلق بحساس الحركة (Motion Sensor).