مقدمة
في هذا الدرس ستتعلم استخدام مستشعر الحركة ‘Motion PIR sesnor’ وجعل الاردوينو يتمكن من ارسال بريد إلكتروني حالما يستشعر الحركة عبر برنامج كتب بالبايثون Python بكمبيوترك.
يقوم متحكم الأردوينو بإنتظار إشارة من مستشعر الحركة ‘Motion PIR sensor’، وفور حصولة على اشارة من المسشتعر تشير لوجود تحرك، يقوم متحكم الاردوينو بإرسال الأمر لجهاز الكمبيوتر عبر منفذ USB لإرسال البريد الإلكتروني.
المواد والأدوات
لتنفيذ هذا المشروع عليك توفي القطع التالية، كما يجب توفير جهاز كمبيوتر أو لابتوب متصل بالإنترنت (حتى يمكنك ارسال البريد الإلكتروني)
1× لوحة التجارب (Half-size Breadboard)
1× اردوينو اونو
1× سلك اردوينو
تنصيب Python و PySerial
اذا كنت تستخدم نظام تشغيل لينكس أو ماك ، فإن الـPython موجود مسبقاً .واذا كنت تسخدم الويندوز فإنه يتوجب عليك تحميله وتنصيبه .
كما يجب عليك (في كل نظم التشغيل) تحميل وتنصيب مكتبة PySerial للسماح بالتواصل مع الأردوينو.
تحميل وتنصيب Python على الويندوز
لتحميل Python على الويندوز، عليك تحميله من http://www.python.org/getit/
ننصح استخدام النسخة Python 2 وذلك لتوافقها بشكل أفضل.
بعد تنصيب البايثون على جهازك ، علينا اجراء التعديلات ليتم السماح بتنفيذ اوامره في شاشة الأوامر ‘Command Prompt’، يهمنا ذلك لنتمكن من تحميل وتنصيب PySerial>
علينا اضافة مترجم اوامر البايثون إلى امتدادات الأوامر – PATH environment variable
لفعل ذلك ، عليك الذهاب للوحة تحكم الويندوز والعثور على ‘System Properties control’.
ثم الضغط على ‘Environment Variables’ ، ثم اختيار ‘Path’ ، باسفل قائمة (System Variables) قم بالضغط على ‘Edit’، وبنهاية ‘Variable Value’ وبدون أي عديل على النص الموجود ،قم باضافة النص ‘C:\Python27;’ (أومكان الملف الذي قمت بتحديده للبايثون)
لاتنسى إضافة ‘ ; ‘ قبل اضافة النص.
للتأكد من نجاح العملية ، قم بفتح شاشة الأوامر (Dos Prompt) وادخل الأمر ‘python’ ، من المفترض مشاهدة النتيجة التالية:
تنصيب PySerial
مهما اختلف نظام التشغيل الموجود على جهازك (لينكس ، ماك ، ويندوز ) ، قم بتحميل باقة .tar.gz لـPySerial 2.7 من
https://pypi.python.org/pypi/pyserial
هذا سيعطيك ملف اسمه: pyserial-2.7.tar.gz
اذا كنت تستخدم الويندوز، عليك فك ضغط الملف عبر اداة (http://www.7-zip.org/) 7-zip
اذا كنت تستخدم لينكس أو مالك ، قم بفتح شاشة terminal واذهب لمجلد الملف pyserial-2.7.tar.gz وقم بتنفيذ الأمر التالي للقيام بفك الضغط
$ tar -xzf pyserial-2.6.tar.gz
الأمر التالي يتم تنفيذه مهما كان نظام التشغل الذي تستخدمه ، اذهب لمجلد pyserial2.7 ثم نفذ الأمر:
sudo python setup.py install
توصيل الدائرة
كما تلاحظ الشي الوحيد الذي تقوم بتوصيله هنا هو مستشعر الحركة ‘PIR sensor’ مع الاردوينو ، فيمكنك ربطه مباشره بالاردوينو عوضاُ عن استخدام لوح التجارب اذا رغبت ولكن احرص على ثبات اسلاك التوصيل.
الكود البرمجي
متحكم الأردوينو سيتمكن من ارسال بريد الكتروني عبر الاتصال التسلسلي ‘Serial Connection’ المتصل بالكمبيوتر عبر منفذ USB كلما تم استشعار حركة .
ولكن هذا يعني انه قد يقوم بإرسال أكثر من بريد الكتروني نظراً لتكرار الحركة اما المستشعر. لذلك سيقوم متحكم الإردوينو بإرسال رسالة مختلفة اذا سبق وارسل ايميل الكتروني خلال دقيقه.
int pirPin = 7; int minSecsBetweenEmails = 60; // 1 min long lastSend = -minSecsBetweenEmails * 1000l; void setup() { pinMode(pirPin, INPUT); Serial.begin(9600); } void loop() { long now = millis(); if (digitalRead(pirPin) == HIGH) { if (now > (lastSend + minSecsBetweenEmails * 1000l)) { Serial.println("MOVEMENT"); lastSend = now; } else { Serial.println("Too soon"); } } delay(500); }
يمكنك تغيير القيمه المسجله في ‘minSecsBetweenEmails’ لأي قيمه تجدها مناسبة.
هنا وضعنا القيمه لتكون 60 ثانية ، حتى لا يتم ارسال الايميلات الالكترونية لمدة دقيقه .
نستخدم المتغير ‘lastSend’ لننتبع متى تم ارسال آخر ايميل الكتروني.
تم تعريف الرقم “بالسالب” والمأخوذ من متغير ‘minSecsBetweenEmails’ ، وتم فعل ذلك حتى نضمن أن يتم تفعيل مستشعر الحركة بشكل مباشر بعد تشغيل متحكم الأردوينو مباشرة.
داخل دالة loop ، دالة ‘millis()’ استخدمت للحصول على عدد أجزاء الثانية منذ بداية تشغيل الأردوينو حتى يتم المقارنة ببينها وبين المره الأخيرة التي تم تسجيل الاستشعار ، حيث سيتم ارسال رسالة “Movement ” اي “حركة” اذا كانت المده قد تجاوزت أكثر من 60 ثانية ، والا فسوف يتم ارسال الرسالة “Toosoon” اي “من المبكر جداً”
قبل ربط المشروع ببرنامج Python قم بتجربة الكود وذلك عبر فتح شاشة الاتصال التسلسلي Serial Monitor في برنامج الاردوينو ‘Arduino IDE’.
والآن عليك عمل برنامج بلغة البايثون. لفعل ذلك ، قم بنسخ الكود التالي ووضعه بملف نصي وقم بتسميته بـ ‘movement.py’ .
يمكنك فعل ذلك في نظام التشغيل لينكس أو ماك عبر استخدام محرر ‘nano’، اما بالنسبة للويندوز فيفضل استخدام محرر البايثون في ‘IDLE’ والذي ستجده في شاشة ابدأ بعد تنصيبه.
import time import serial import smtplib TO = 'email@gmail.com' GMAIL_USER = 'email@gmail.com' GMAIL_PASS = 'yourPasswordHere' SUBJECT = 'Intrusion!!' TEXT = 'Your PIR sensor detected movement' ser = serial.Serial('COM4', 9600) def send_email(): print("Sending Email") smtpserver = smtplib.SMTP("smtp.gmail.com",587) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS) header = 'To:' + TO + '\n' + 'From: ' + GMAIL_USER header = header + '\n' + 'Subject:' + SUBJECT + '\n' print header msg = header + '\n' + TEXT + ' \n\n' smtpserver.sendmail(GMAIL_USER, TO, msg) smtpserver.close() while True: message = ser.readline() print(message) if message[0] == 'M' : send_email() time.sleep(0.5)
قبل تجربة البرنامج ، هنالك بعض الاعدادات التي يجب تعديلها .
قمنا بوضع اعدادت حساب بريد Gmail ، لذا ان لم ليكن لديك حساب على Gmail ، فقم بتسجيله .
قم بوضع البريد الإلكتروني الذي تغب باستلام الاشعارات عليه في خانة ‘To’.
قم بوضع بريدك(حساب Gmail) في قيمة متغير ‘GMAIL_USER’
قم بوضع كلمة المرور للبريد في قيمة متغير ‘GMAIL_PASS’
كما يمكنك تعديل عنوان البريد ونص الرسالة التي يتم ارسالها.
كما يجب عليك اعداد منفذ الاتصال Serial Port للأردوينو عبر تعديل السطر التالي:
ser = serial.Serial('COM4', 9600)
في نظام الويندوز سيكون مثل ‘COM4’ ، وفي نظام لينكس أو ماك ستكون مثل ‘/dev/tty.usbmodem621’. يمكنك معرفة ذلك عبر فتح برنامج Arduino IDE ومشاهدة يمين الجزء الأسفل .
بعد تعديل الاعدادات، يمكنك تنفيذ البرنامج عبر كتابة الأمر التالي في شاشة الأوامر
python movement.py
عند استشعار حركة ، يفترض ان تشاهد تتبع كالتالي ، وخلال فترة قصيرة سيتم ارسال بريد الكتروني وسيصلك على الايميل الذي ادخلته .
لاحظ رسائل ‘Too Soon’ والتي ترسل اذا تم استشعار حركة خلال 60 ثانية من ارسال الايميل الأخير ( حتى لا يتم ارسال ايميلات الكترونية كثيره )
أنشطة أخرى
والآن وقد تعلمت كيفية ارسال بريد الكتروني واستخدام مستشعر الحركة، يمكنك استخدام انواع اخرى من المستشعرات وارسال القراءات عبر البريد الإلكتروني (مثل ارسال درجة الحرارة والرطوبة )