روبوت السومو

 

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

sumo-mbot

روبوت تفادي السقوط

 

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

 

falling-avoiding-robot

 

 

 

الأدوات المطلوبة:

 

mBot Ranger - Transformable STEM Educational Robot Kit

mBot Ranger Kit

 

وحدة تتبع المسار Line Follower

 

تتكون وحدة تتبع المسار من مستشعرين كل مستشعر يتكون من  مصدر للأشعة تحت حمراء (LED) ومستقبل لهذه الأشعة
فكرة عمل مستشعر تتبع المسار تقوم على إطلاق أشعة تحت حمراء ورصد انعكاسها
عند سير الروبوت على الأسطح البيضاء فإن معظم الأشعة تنعكس من على السطح ويتم رصدها
أما عند سير الروبوت  على الأسطح السوداء فإن اللون الأسود يمتص معظم الأشعة فلا ينعكس إلا مقدار بسيط منها إلى المستشعر

falling-avoiding-robot

 

الأمر البرمجي لقراءة وحدة تتبع المسار

falling-avoiding-robot

يعطي قيم بين 0 – 3 بناء على الحالات التالية

الحالات قيمة القراءة المستشعر الأيمن المستشعر الأيسر
كلا المستشعرين على اللون الأسود 0
المستشعر الأيسر فقط على اللون الأسود 1
المستشعر الأيمن فقط على اللون الأسود 2
كلا المستشعرين على اللون الأبيض 3

 

 

 

 

برمجة الروبوت

 

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

نقوم أولا بإنشاء متغير edge

falling-avoiding-robot

 

نقوم بتعيين قيمة المتغير لتخزين قراءة وحدة تتبع المسار

falling-avoiding-robot

 

نستخدم الجملة الشرطية if else بحيث
إذا كانت قيمة قراءة المستشعر تساوي 3 يتم تنفيذ الأمر التالي وهو التحرك للأمام
عندما تكون القراءة 3 فذلك يعني أن كلا المستشعرين في وحدة تتبع المسار على اللون الأبيض

 

falling-avoiding-robot

 

 عندما يصل الروبوت إلى حافة الطاولة  لن يكون كلا المستشعرين على اللون الأبيض وبالتالي لن تكون قراءة المستشعر تساوي3
فيقوم الروبوت بتنفيذ الأوامر المكتوبة بعد الأمر else
وهي التحرك للخلف لمدة ثانيتين ثم الانعطاف نحو اليمين
نقوم بوضع أمر التأخير الزمني wait بعد أمر التحرك للخلف لكي نسمح للروبوت بالرجوع مسافة كافية حتى يتمكن من الانعطاف
ونضيف wait بعد أمر الانعطاف لليمين لتحديد مقدار الانعطاف ستحتاج إلى تغيير القيمة حسب شكل وحجم الطاولة التي لديك

falling-avoiding-robot

 

 

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

 

falling-avoiding-robot

 

لمعلومات أكثر حول الأوامر البرمجية الأخرى يمكنك العودة إلى درس جولة حول الأوامر البرمجية.

تحدي الروبوت

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

مشروع الاتصال اللاسلكي IR

 

تحتوي لوحة التحكم  mCore على LED (مُرسل IR Emitter) تقوم بإرسال أشعة تحت حمراء تحمل المعلومات المراد إرسالها
وتحتوى اللوحة كذلك على عنصر مستقبل لهذه الأشعة (IR Receiver).
سنقوم في هذا الدرس بعمل اتصال لاسلكي بين لوحتين mCore بحيث يقوم الروبوت الأول بالتوقف عند الحواجز وإرسال أمر إلى الروبوت الآخر بالتوقف أيضًا.

mbot-ir-communication

 

الأدوات المطلوبة:

 

mbot-ir-communication

mBot Kit (عدد 2)

الاتصال عبر الأشعة تحت الحمراء IR Communication

 

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

 

mbot-ir-communication

 

تحتوي مجموعة الأوامر البرمجية لروبوت mBot على أمرين متعلقين بالاتصال اللاسلكي

mbot-ir-communication

الروبوت المُرسل

 

يتم تعيين أحد الروبوتات كمُرسل
وكتابة الرسالة داخل الأمر البرمجي send mBot’s message

mbot-ir-communication

 يكفي أن تحتوي الرسالة على أحد الأحرف ويجب أن تكون قيمة ثابتة حيث لا يمكن للروبوت إرسال قيمة متغيرة (مثل قراءة مستشعر) كما لا يمكن للروبوت المستقبل استخدام القيم المتغيرة لآداء وظائف أخرى

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

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

mbot-ir-communication

نقوم بإنشاء متغير Distance وتعيينه لقؤاءة مستشعر الموجات فوق الصوتية

mbot-ir-communication

نقوم بإضافة شرط (if then)لتحديد المسافة التي يتوقف عندها الروبوت إذا واجه أحد الحواجز
إذا كانت المسافة بين الروبوت والحاجز أقل من 20 يتوقف الروبوت (السرعة صفر) ويرسل رسالة عبر الأشعة تحت الحمراء IR
ويعطي إضاءة LED باللون الأحمر  لتتم معرفة أن الروبوت أرسل رسالة

الكود البرمجي للروبوت المُرسل

 

mbot-ir-communication

 

يجب وضع الأوامر البرمجية المتعلقة بالاتصال اللاسلكي داخل loop ليتم إرسال واستقبال الرسائل في نفس الوقت

ملاحظة: إذا قمت بوضع الأمر البرمجي للإرسال داخل حلقة Repeat لإرسال رسائل متتالية سيتوقف الروبوت الآخر عن الاستجابة بعد فترة ، لتفادي ذلك قم بإضافة تأخير زمني بين إرسال الرسائل باستخدام الأمر wait

mbot-ir-communication

 

الروبوت المستقبل

 

تتغير وظيفة الروبوت المُستقبل عند استلام الرسالة التي يرسلها الروبوت الأول
يجب كتابة الرسالة داخل علامتي تنصيص double quote  ليعمل البرنامج بشكل صحيح

mbot-ir-communication

سنستخدم الجملة الشرطية if ونضع بداخلها مجموعة الأوامر التي يقوم  بها الروبوت المُستقبل عند استلام الرسالة
أي إذا استلم الروبوت الرسالة من الروبوت الأول  (المُرسل) سيتم تنفيذ الأوامر البرمجية المبنية على هذه الرسالة
في هذا المشروع سنقوم ببرمجة الروبوت المُستقبِل على أن يتحرك للأمام إلى أن يستقبل رسالة من الروبوت الأول فيتوقف ويعطي وميض ضوئي أخضر

 

برمجة الروبوت المستقبِل

 

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

mbot-ir-communication

نقوم بإضافة شرط if else
بحيث إذا استقبل الروبوت الرسالة من الروبوت الأول (a) يقوم بتنفيذ الأوامر التالية في الكود
وهي التوقف عن الحركة باستخدام أمر الحركة واختيار السرعة 0

mbot-ir-communication

لإعطاء وميض ضوئي أخضر نقوم بوضع أمر إضاءة LED
واختيارقيمة معينة للون الأخضر
ثم وضع نفس الأمر على وضع الإطفاء (جميع الألوان على القيمة 0)
ووضع أمر التأخير الزمني wait بينهم لنتمكن من ملاحظة الوميض

mbot-ir-communication

بعد الأمر else أي إذا لم يستقبل الروبوت رسالة من الروبوت الأول
يعاود الحركة ويطفئ إضاءة LED

mbot-ir-communication

 

الكود البرمجي للروبوت المستقبِل

 

mbot-ir-communication

 

لمعلومات أكثر حول الأوامر البرمجية الأخرى التي تم استخدامها في الكود راجع درس جولة حول الأوامر البرمجية.

مشروع روبوت تتبع الكائنات

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

 

mbot-object-follower

 

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

الأدوات المطلوبة:

 

mbot-object-follower

 

mBot Kit

أو mBot Ranger Kit

 

مستشعر الموجات فوق الصوتية (Ultrasonic Sensor)

 

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

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

 

mbot-object-follower

 

 

برمجة الروبوت

 

 سنقوم بكتابة برنامج للروبوت بحيث يتحرك للأمام متتبعا للجسم الذي أمامه عند مسافة محددة  وإذا أصبحت المسافة صغيرة جدا يتحرك  الروبوت للخلف متفاديا للاصطدام
في البداية سنقوم بإنشاء متغير باسم Distance وتعيينه لتخزين قراءة مستشعر الموجات فوق الصوتية

 

mbot-object-follower

 

نقوم بتحديد المسافة التي يتتبع خلالها الروبوت الجسم الذي أمامه ويتحرك للأمام
باستخدام الأمر البرمجي if else
إذا كانت المسافة أكبر من 12 سم أو أقل من 30 سم
يتحرك الروبوت للأمام بسرعة 100
وتبقى إضاءة LED مطفأة

 

mbot-object-follower

 

نقوم بوضع شرط آخر تحديد المسافة التي يتحرك فيها الروبوت للخلف Backward وهنا قمنا بتحديد إذا كانت أقل من 12 سم

 

mbot-object-follower

 

داخل أمر التكرار Repeat كما نلاحظ في الصورة السابقة

قمنا باختيار الأمر البرمجي الذي يتحكم بإضاءة LED لإصدار وميض ضوئي
قمنا باختيارشدة إضاءة اللون الأحمر 150 ثم أضفنا أمر التأخير الزمني wait لجعل الإضاءة تفتح وتغلق كل  0.2ثانية

 أضفنا كذلك أمر برمجي يقوم بتشغيل تنبيه صوتي بنغمة معينة

 

mbot-object-follower

 

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

 

mbot-object-follower

 

لمعلومات أكثر حول الأوامر البرمجية الأخرى يمكنك مراجعة درس جولة حول الأامر البرمجية.

 

 

 

توصيل مؤقت الساعة الحقيقي RTC على الراسبيري باي

فى هذا الدرس سنتعلم كيفية توصيل مؤقت الساعة الحقيقي Real Time Clock – RTC على الراسبيري باي عن طريق بروتوكول I2C، حيث سيمكننا ذلك من جعل توقيت الراسبري باي يعمل بإستمرار حتى مع قطع التيار الكهربي عنها.

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

Raspberry_Pi_RTC_2

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

Raspberry Pi

راسبيري باي

Raspberry_Pi_RTC

مؤقت ساعة حقيقي Real Time Colck – RTC

Raspberry_Pi_RTC_Wires

أسلاك توصيل Female / Female jumper

 

توصيل الدائرة

نقوم بتوصيل الدائرة كما فى الصورة التالية مع ملاحظة أن هذا الموديول يعتمد على الشريحة DS3231 وهي تعمل على جهد 3.3 فولت، لذلك هي مناسبة لتعمل على الراسبري باي مباشرة بدون أي مكونات أخرى.

Raspberry_Pi_RTC_1

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

في البداية نقوم بفتح الـ Terminal الخاص بالراسبري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه الـ SSH الخاصة بها من جهاز آخر مربوط معها علي نفس الشبكة كما تم شرحه في الدرس الخامس.

فى البداية نقوم بتحديث نظام تشغيل الراسبيري باي.

sudo apt-get update
sudo apt-get –y upgrade

ثم نقوم بالتعديل في أحد ملفات النظام كالتالي.

sudo nano /etc/modules

قم بإضافة السطر التالي (rtc-ds1307) داخل ملف modules الذى قمنا بفتحه بمحرك النصوص Nano، ثم نقوم بالضغط على Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.

Raspberry_Pi_RTC_4

نقوم بإعادة تشغيل الراسبري باي كالتالي.

sudo reboot

نقوم بتشغيل الراسبري باي وكتابة الأمر التالي، إذا كنت تستخدم راسبيرى باى ذات الإصدار Rev 1، ستحتاج لتغيير الرقم 1 فى آخر الأمر وإستبدالة بـ 0.

sudo i2cdetect -y 1

سوف تشاهد التالي بعد كتابة الأمر.

Raspberry_Pi_RTC_5

فى هذه التجربة يكون 0x68 هو عنوان الـ RTC Module .

ثم نقوم بالتعديل فى أحد ملفات النظام مرة أخرى كالتالي.

sudo nano /etc/rc.local

قم بإضافة السطرين التاليين داخل ملف rc.local الذي قمنا بفتحه بمحرك النصوص Nano.

echo ds1307 ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock –s
Raspberry_Pi_RTC_6

ثم نقوم بالضغط على Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.

لاحظ أنه يجب تغيير العنوان 0x68 للعنوان الذي سيظهر لك من الخطوة السابقة، وكذلك إذا كنت تستخدم راسبيري باي Rev1 نقم بتغيير i2c-1 إلى i2c-0.

نقوم بإعادة تشغيل الراسبيري باي مرة أخرى.

sudo reboot

بعد إعادة التشغيل إذا قمت بكتابة أمر i2cdetect ستلاحظ أن عنوان الموديول قد تغير إلى UU، وهذا دليل على أن الموديول يعمل جيداً.

sudo i2cdetect -y 1
Raspberry_Pi_RTC_7

الآن نقوم بضبط إعدادات الوقت والتاريخ من خلال الأمر التالي.

sudo raspi-config

نقوم بإختيار Internationalisation Options ثم Change Timezone  وتختار بعد المنطقة والدولة التى تقيم بها.

Raspberry_Pi_RTC_8

 

Raspberry_Pi_RTC_9

 

Raspberry_Pi_RTC_10

يمكنك قراءة وقت وتاريخ الراسبيري باي بالأمر التالي.

date

إذا أردىت تغير الوقت والتاريخ لأي سبب فبإمكانك ذلك من خلال الأمر التالي وكتابة الوقت والتاريخ الذي تريده بين علامات التنصيص.

sudo date -s “16 APR 2017 23 : 00 : 00”

وبمجرد تغيره يجب عليك كتابته على الـ RTC Module كالتالي.

sudo hwclock –w

وللتأكد يمكنك قراءة الوقت والتاريخ من الموديول مرة أخرى كالتالي.

sudo hwclock –r

يمكنك قراءة وقت الراسبيري باي وكذلك وقت الـ RTC Module سوياً لتتأكد من أنهم نفس التوقيت كالتالي.

sudo date; sudo hwclock –r
Raspberry_Pi_RTC_11

 

إستخدام الراسبيري باي كجهاز إرسال موجات FM

فى هذا الدرس سنتعلم كيفية إسخدام الراسبيرى باى كجهاز راديو لإرسال الأصوات عن طريق موجات ال FM ويتم ذلك عن طريق ال hardware  المدمج فى الراسبيرى باى الذى يقوم بتوليد spread-spectrum clock من خلال أحد أطراف ال GPIO وهو GPIO4 وكل ما تحتاج إضافته هو سلك لهذا الطرف كي يحدث التذبذب حولة وتنتشر الموجات لمسافة كبيره تصل إلى 100 متر ومن الممكن أن لا تستخدم هذا الهوائي ولكن مدى الراديو سيقل إلى 10 cm فقط.

raspberry_pi_fm_radio

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

Raspberry Pi

راسبيرى باى

raspberry_pi_fm_radio_1

سلك توصيل طوله أكبر من 75 cm

raspberry_pi_fm_radio_1

سلك توصيل Female jumper

raspberry_pi_fm_radio_3

قطعة Heat Shrink

raspberry_pi_fm_radio_5

مكواة لحام

raspberry_pi_fm_radio_6

قصدير لحام

توصيل الدائرة

نقوم بقياس 75 cm  من كابل التوصيل (من الممكن أن يقل الكابل عن هذا الطول ولكن كلما قل طوله كلما قلت المساحة المغطاه لبث الراديو)، ونقوم بلحامه فى طرف واحد من سلك التوصيل ال Female  بإستخدام مكواة اللحام كالتالي ويكون مجال بث هذا الهوائي حوالي 100 متر .

raspberry_pi_fm_radio_7

 

raspberry_pi_fm_radio_8

 

نقوم بإستخدام قطعة ال heat shrink لتغطية مكان اللحام ثم نقوم بتسخينها بإستخدام قداحة حتى تنكمش على السلك لتقوم بحمايته كالتالي :

raspberry_pi_fm_radio_9
raspberry_pi_fm_radio_10

 

نقوم بتوصيل الكابل السابق الإعداد فى الطرف رقم 7 من ارجل التوصيل GPIO وهو GPIO4.

 

raspberry_pi_fm_radio_11

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

فى البداية نقوم بفتح ال Terminal  الخاص ب الراسبيري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه ال SSH الخاصة بها من جهاز آخر مربوط معها على نفس الشبكة كما تم شرحة فى الدرس الخامس.

 نقوم بكتابة الأمر التالي وهو يقوم بتزيل مالفات PiFm الخاصة بتحويل الراسبيري باي لجهاز إرسال وهي تكون مضغوطة في ملف من النوع tar.

wget http://omattos.com/pifm.tar.gz

نقوم بفك ضغط الملفات التي تم إنزالها عن طريق الأمر التالي.

tar -xvf pifm.tar.gz

نقوم بالـتأكد أنه تم فك ضغط كل الملفات التي تقوم بتشغيل الراديو عن طريق الأمر ls الذي يعرض محتويات المجلد المتواجدين فيه.

raspberry-pi-fm-radio-12

نقوم بكتابة الأمر التالى الذي بدورة يقوم بتشغيل الراديو على تردد ال FM الذى نكتبة فى نهاية الأمر فقد أستخدمت تردد 93.7 MHz  وهو تردد لا ينتمي لأى قناه إذاعية وكذلك قمت بإختار التسجيل المرفق مع الملفات المسمي sound.wav ولكنك تستطيع تغيره إلى أى تسجيل تفضلة على أى يكون إمتداده .wav وليس .mp3 ويكون أيضاً 16-bit mono

sudo ./pifm sound.wav 93.7

إذا أرت فى أى وقت وقف الصوت ما عليك سوى الضغط على ctrl + c فيتوقف الصوت المرسل تماماً.

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

raspberry-pi-fm-radio-13

كيفية زيادة سرعة الراسبيري باي؟

فى هذا الدرس سنتعلم كيفية زيادة السرعة Overclocking للراسبيري باي مع الأخذ فى الإعتبار أن درجة الحرارة لن تزيد عن 50 أو 60 درجة مئوية.

raspberry_pi_overclock_1

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

DSC00009

راسبيرى باى

raspberry-pi-overclock-2

مشتت حرارى

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

في البداية يجب أن تلاحظ أن كسر السرعة فى الراسبيري باي كان يؤدى إلى فقد الضمان قبل عام 2012 حيث أن مؤسسة راسبري فاونديشن لم تكن تدعم كسر السرعة وذلك لخطورته على حرق اللوحة بسبب زيادة درجة الحرارة عليها بشكل كبير، ولكنها بعد ذلك قامت بدعم كسر السرعة في نظام راسبيان بما يحافظ على اللوحات ولا يعرضها للخطر وذلك فى كل الإصدارات من راسبري باي 1 و B+ و 2 ماعدا راسبري باي 3 حيث أن تعطى أداء يقارب أقصى إمكانيات ممكنة فى اللوحة فلا داعي لكسر السرعة.

بإمكانك بسهولة تغير تفعيل كسر السرعة من قائمة خصائص الراسبيري باي Raspi-config كالتالي فبإمكانك الإختيار من مجموعة من الإعدادات المعدة مسبقاً التي بإمكانها أن تصل الراسبيري باي حتى تردد 1000 ميجاهرتز.

raspberry_pi_overclock_3

 

raspberry_pi_overclock_4

أو من خلال سطر أوامر لينكس وذلك بالتعديل على ملف txt كالتالى فنقوم بكتابة الأمر التالي في سطر أوامر النظام Terminal.

sudo nano /boot/config.txt

سوف تلاحظ وجود كثر من الأختيارات بإمكانك تخطي الكثير منهم والتالي هو قائمة بأهم ما يمكن التحكم به.

Frequency Overclocking
arm_freq – تردد البروسيسور والقيمة الأولية لها هي 700
gpu_freq – تردد كارت الشاشة الخاص باللوحة والقيمة الأولية لها هي 250
sdram_freq – تردد الرامات والقيمة الأولية لها هي 500
core_freq – تردد ال core الخاص بكارت الشاشة وهو له تأثير على أداء البروسيسور حيث أنه يتم التحكم به من خلال الـ L2 cache
h264_freq – تردد دائرة فك تشفير الفيديو
isp_freq – تردد دائرة التحكم فى الكاميرا
v3d_freq – تردد عرض الفيديو  3D
Voltage Overclocking
over_voltage – مقدار فرق الجهد الذي سيصل له البروسيسور وكذلك كارت الشاشة وأقل قيمة له هي (-16) و أقصى قيمة له هي (8) والقيمة الأولية له هي (0)

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

arm_freq=900
gpu_freq=300
core_freq=250
h264_freq=250
isp_freq=250
v3d_freq=250
sdram_freq=450
over_voltage=6

 

نظام التحكم ومراقبة الإضاءه عن بعد

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

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

b5

القطع المطلوبة :

الأدوات التي تحتاجها لهذا المشروع :

5mm Red LED

العدد :8

220 Ω resistor

مقاومة 220 اوم

العدد :8

Full size breadboard 830

  لوح تجارب كبير (Full size breadboard)

Raspberry Pi 3 Model B

Jumper Wires Male/Male

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

Female-Male Jumper Wires

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

5V 2A Switching Power Supply MicroUSB Cable

Power Supply

Samsung 8Gb Class 6 Microsd Memory Card 2

Samsung 8Gb Class 6 Microsd Memory Card

نظرة عامة :

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

remote-control-raspberry-pi-leds

يمكنك من خلال هذا النظام التحكم بالتوصيلات الكهربائية (Powerstrip  )، التحكم تدفئة أو تبريد المنزل، التحكم في تشغيل و اطفاء الالات الكهربائية.

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

في جزء التوصيل الإلكتروني سيتم توصيل 8  LEDs فقط.الجزء المختلف في التوصيل هو إختيار المنفذ لكل LEDs . في الواقع ، سوف نستخدم في نظام التحكم ومراقبة الإضاءه  مكتبة تدعا wiringPi و أرقام المنافذ في هذه المكتبية ليست هي نفس التي على الراسبيري باي.سيتم تسمية المنافذ على الراسبيري باي اعتمادا على مكتبة wiringPi كما هو موضح بالجدول التالي :

remote-control-raspberry-pi-leds

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

remote-control-raspberry-pi-leds

 يتم توصيل  الطرف السالب للـ LEDs بمقاومة 220 اوم و الطرف الموجب حسب الجدول التالي:

remote-control-raspberry-pi-leds

تثبيت و إستخدام المكتبة Wiring Pi :

مكتبة Wiring Pi هي مكتبة الوصول إلى GPIO  على لوحة الراسبيري باي . و انها تسمح لك التحكم بمداخل و مخارج الراسبيري باي من خلال bash script   او مباشر من خلال سطر أوامر.
تحقق أولا ما اذا كانت مكتبة wiringPi مثبتة مسبقا ام لا ، من خلال نافذة الـ  terminal قم بتشغل الامر التالي:

gpio -v

 اذا لم تقم بتثبيت GIT،  يمكنك تثبيتها من خلال الأمر التالي :

sudo apt-get install git-core

اذا تم ظهور رسالة خطأ هنا ، تأكد من تحديث الراسبيري باي إلى أخر اصدار من Raspbian :

sudo apt-get update
sudo apt-get upgrade

للحصول على WiringPi باستخدام GIT، قم بكتابة الأمر التالي:

cd
git clone git://git.drogon.net/wiringPi
cd ~/wiringPi
git pull origin

سوف تجلب النسخة المحدثة ثم يمكنك إعادة تشغيل البرنامج من خلال الأمر أدناه .
لبناء/ تثبيت البرنامج :

cd ~/wiringPi
./build

الكتابة و القراءة من المنافذ عن طريق استخدام أوامر المكتبة wiringPi :

الأن يجب أن تكون قادر على إستخدام الأداة، قم بكتابة الأمر التالي على نافذة الـ Terminal :

gpio mode 0 out

اذا لم يتم ظهور شي أو رسالة خطأ فقد تم التثبيت للمكتبة بشكل صحيح. في حال تم ظهور رسالة الخطأ “command not found error” أو شي من هذا القبيل، تأكد من تثبيت و بناء المكتبة. للقيام بتشغيل و إطفاء الـ Wiring pin 0 )LED) ، تحتاج اولا إلى تعيين الدبوس كمخرج من خلال الأمر التالي :

gpio mode 0 out

“0”هي رقم المنفذ wiring، و “OUT”  لتعيين المنفذ كمخرج . سيتم تشغيل الـ LED  من خلال الأمر التالي :

gpio write 0 1

“0” للدلاله على رقم المنفذ ، و “1”  لوضع الدبوس في حالة التشغيل الـ LED( للتشغيل 1 و إطفاءه 0) . و لإيقاف تشغيلك ببساطة استخدم الأمر :

gpio write 0 0

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

gpio read 0

“0” لتعيين رقم المنفذ Wiring. هذا الأمر يقوم بترجيع  قيمة 1 اذا كان الضوء في حالة التشغيل و قيمة 0 اذا كان الضوء في حالة الإيقاف.

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

http://wiringpi.com/reference/

https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/

نظام التحكم ومراقبة الإضاءه عن بعد مع SSH  هو جميل ولكن الواجهة ليست سهلة الاستعمال  و كتابة الأوامر في كل مرة أمر طويل و مزعج. هذا هو السبب في أننا بحاجة إلى واجهة رسومية لمشروعنا.كما أن برمجة تطبيق لكل نظام تشغيل (IOS, Android, Windows phone ,Mac, Linux, Windows ,….) ستكون طويلة جدا و يتطلب أن تكون على معرفه  بعدة لغات مختلفة.

هذا هو السبب لإنشاء صفحة ويب على شبكة النت ، حيث انها ستكون متوافقه مع جميع الأجهزة ، و ستكون بحاجة لمعرفة اربع لغات : CSS,HTML (نمط الصفحة)، PHP (للتفاعل مع الخادم )،  JavaScript (التفاعلات مع المستخدم) . نحن بحاجة لتثبيت خادم الويب على الراسبيري باي. في حالتنا نحن لسنا بحاجة إلى قاعدة بيانات MySQL ، فقط بحاجة إلى خادم HTTP و PHP.

 تثبيت خادم الويب(Web Server) :

أولا قم بعمل تحديث للراسبيري باي :

sudo apt-get update

قم بتثبيت الخادم (Apache HTTP server ) وPHP من خلال الأمر التالي :

sudo apt-get install php libapache2-mod-php -y

الان قم بالتحقق ما اذا كان الخادم (Server) يعمل، قم بكتابة العنوان IP الخاص بالراسبيري باي على متصفح الويب. اذا كان يعمل ستظهر رسالة “It works!” كما هو موضح بالصورة أدناه.

remote-control-raspberry-pi-leds

إذا لم يتم مثل ما سبق، قم بالتحقق من العنوان IP الخاص بالراسبيري باي من خلال الأمر التالي :

ifconfig

أو قم بمحاولة إعادة تثبيت Apache  أو إعادة تشغيل الراسبيري باي.

الملف  الخاص بواجهة المستخدم :

قم بالدخول إلى ملف /var/www/html/ عبر نافذة الـTerminal من خلال الأمر التالي :

cd /var/www/html

قم بعرض الملفات الموجودة على هذا الملف بإستخدام الامر التالي:

ls

سيظهر لك ملف واحد يسمى “index.html”  هذا الملف يتوافق مع صفحة “It works!”. يمكنك حذفه ليتم إنشاء الصفحة الخاصة بهاذا المشروع. قم بحذف الملف بإستخدام الأمر التالي :

sudo rm index.html

و إنشاء ملف أخر يسمى “index.php”  :

sudo nano index.php

ثم قم بكتابة النص التالي داخل الملف:

<?php
phpinfo();
?>

بعد حفظ الملف ، قم بعمل تحديث للمتصفح الخاص بك. يجب أن تشاهد صفحة طويلة مع الكثير من المعلومات حول الخادم و PHP .

إنشاء واجهة المستخدم :

يمكننا التحكم بالراسبيري باي من خلال  PHP script ولكن لن يكون هناك واجهة لتفعال المستخدم ، و بالتالي فإننا لن نتمكن من إيقاف و تشغيل الـ LED.
واجهة المستخدم تتألف من صور عبارة عن أزرار تشغيل و إيقاف. الأخضر للدلالة على التشغيل و الأحمر للدلالة على اللإيقاف . كل صورة/ زر يتم ربطه مع LED خاص به . لذلك اذا تم النقر على أحد الصور/الأزرار ، سيتم تشغيل أو إيقاف الـ LED المرتبط به و سيتم تغيير الصورة من زر أحمر إلى أخضر او العكس .

remote-control-raspberry-pi-leds

سيتم إنشاء واجهة الصفحة بإستخدام لغةHTML، و لتفاعلات الخادم وتوليد الصفحة لغة PHP، و JAVAScript  لإدارة التفاعل مع المستخدم و الرسوم المتحركة للصفحة. ويمكنك استخدام CSS لتخطيط و تنسيق الصفحة مثل الخلفية .

remote-control-raspberry-pi-leds

اولا نحن بحاجة لملف “index.php” لإنشاء الواجهة ولتفاعل الخادم . هذه الصفحة هي الصفحة الرئيسية التي تحتوي على 8 ازرار.

التحكم بالإضاءة من خلال ملف PHP :

تنفيذ التطبيق مع كود PHP يمكن القيام به بكتابة دالتين مختلفين :exec و system  .أولا الدالة “system” ، تأخذ هذا الامر متغيرين :

system ( string $command, int $return_var )

المتغير الأول هو الأمر الذي سيتم تنفيذه، و المتغير الثاني هو الحاله المستردة من تنفيذ الأمر. والمتغير الثاني لا يكون إلزاميا.وهكذا يمكنك إستخدامه إذا كنت بحاجة إلى تنفيذ الأوامر”gpio mode 0 out” او “gpio write 0 1” مثال :

<?php
system ( "gpio mode 0 out" );
system ( "gpio write 0 1" );
?>

ثم الدالة “exec”،  هذة الدالة تقوم بالضبط بنفس العمل للدالة “system” ولكن تقوم بقراءة و تخزين ما طبعه الامر. حيث انه يأخذ ثلاث متغيرات :

 exec ( string $command, array $output, int $return_var )

الإختلاف بالمتغيرات هو مصفوفة $output . سيتم تخزين ما يتم قراءته خلال الأمر في هذه مصفوفة.وهكذا، يمكنك استخدام هذه الدالة إذا كنت بحاجة إلى قراءة أحد المنافذ مثل الأمر “gpio read 0” وتخزين القيم التي تم استجاعها. مثال:

<?php
exec ( "gpio read 0", $status );
print_r ( $status );
?>

سنقوم بهذا المشروع بالتحكم بالمصابيح المربوطة على المنافذ من 0 على 7، يتم إنشاء الثمانية أزرار لأول مره في For loop بإستخدام :

exec ( "gpio read ".$i, $output );

قم بفتح ملف index.php ، ثم قم بكتابة الكود التالي في الملف و قم بحفظه:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Raspberry Pi Gpio</title>
    <div id="rectangle" style="width:100%;left:0;height:70px; background:#f88238;"></div>
</head>

<body style="background-color: black;margin:0 auto ; align:middle;">
<!-- On/Off button's picture -->
<?php
  $val_array = array(0,0,0,0,0,0,0,0);
  //this php script generate the first page in function of the file
  for ( $i= 0; $i<8; $i++) {
     //set the pin's mode to output and read them
     system("gpio mode ".$i." out");
     exec ("gpio read ".$i, $val_array[$i], $return );
  }
  //for loop to read the value
  $i =0;
  for ($i = 0; $i < 8; $i++) {
     //if off
     if ($val_array[$i][0] == 0 ) {
     echo ("<img id='button_".$i."' src='data/img/red/red_".$i.".jpg' onclick='change_pin (".$i.");'/>");
    }
    //if on
    if ($val_array[$i][0] == 1 ) {
       echo ("<img id='button_".$i."' src='data/img/green/green_".$i.".jpg' onclick='change_pin (".$i.");'/>");
      }
  }
?>

<!-- javascript -->
<script src="script.js"></script>
</body>
</html>

 نحن بحاجة إلى التحقق ما اذا تم النقر على أحد الأزرار من قبل المستخدم . حيث ان JavaScript تفيد لهذا الغرض، سيتم وضعها في ملف منفصل يسمى “script.js” ولكنها لا تزال مدرجة في ملف”index.php“
Scrip هو مجرد إضافة مستمع (listener) إلى كل من الثمانية أزرار، في كل مرة يتم الضغط على هذه الأزرار ، سيتم استخدام دالة لسؤال ملف gpio.php عن حالة الإضاءة و تستقبل التحديثات كإجابة. و أخير ستقوم الـ javaScript  بتغير صورة الأزرار إلى الأحمر للدلالة على الإيقاف أو إلى أخضر في حالة تشغيل الإضاءة.
و في الملف الأخير ،gpio.php .  يحتوي على كود PHP لتشغيل و إيقاف الإضاءة اعتمادا على ما يتم ارسالة من الـ javaScript .

يمكنك تحميل برمجة كامل المشروع من خلال الرابط المباشر على الموقع هنـا . يمكنك تحميل الملف على الراسبيري باي على ملف /var/www/html/ ثم قم بفتح عنوان IP الخاص بالراسبيري باي على متصفح ويب.

التحكم باللوحة الإعلانية عن بعد

لوحة الإعلانات اللاسلكية هو إنتقاء جيد لهذا المشروع، بدلا من أن تكون مجرد لوحة إعلانية بسيطة. أولا يجب أن نفهم الغرض من هذا المشروع، في هذا النظام يمكننا عرض رسالة أو شعار لبعض أجهزة العرض مثل شاشات الكريستال السائل (LCD)، وهذه الرسالة يمكن بسهولة وضعها و تغييرها من أي مكان في العالم، عن طريق إستخدام الانترنت لإرسال الرسالة لاسلكيا من متصفح ويب إلى شاشة الـ (LCD) المتصلة بلوحة الراسبيري باي.لذالك يمكنك إرسال الرسالة بإستخدام الحاسوب، الهاتف الذكي أو tablet .

web-controlled-iot-notice-board-using-raspberry-pi

القطع المطلوبة :

في نظام التحكم بشاشات الإعلانات، سنقوم بإنشاء خادم الويب المحلي ( local web server)،  والذي يمكنه أن يكون (A global server) على شبكة الإنترنت. في الراسبيري باي ، سيتم إستخدام شاشة العرض LCD 16×2 لعرض الرسالة و Flask لإستقبال الرسالة عبر الشبكة. كلما يتلقى الراسبيري باي أي رسالة لاسلكية من صفحة ويب ، فإنه يعرض هذه الرسالة على شاشة الكريستال السائل (LCD).

الأدوات التي تحتاجها لهذا المشروع :

HD44780

LCD 16×2 شاشة

potentiometer 10k

Potentiometer 10K Ω

220 Ω resistor

مقاومة 220 اوم

Half-size Breadboard

لوح تجارب حجم متوسط (Half size breadboard )

Raspberry Pi 3 Model B

Jumper Wires Male/Male

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

Female-Male Jumper Wires

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

5V 2A Switching Power Supply MicroUSB Cable

Power Supply

Samsung 8Gb Class 6 Microsd Memory Card 2

Samsung 8Gb Class 6 Microsd Memory Card

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

نحن بحاجة فقط لتوصيل شاشة العرض (LCD) مع لوحة الراسبيري باي عن طريق إستخدام بعض الاسلاك على لوحة التجارب.

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

web-controlled-iot-notice-board-using-raspberry-pi

توصيل  شاشة الـ LCD :

راسبيري باي LCD شاشة
GND Vss
5v VDD
GND RW
GPIO7 RS pin
GPIO8 Enable pin
GPIO25 D4 pin
GPIO24 D5 pin
GPIO23 D6 pin
GPIO18 D7 pin

إنشاء صفحة ويب :

في هذا المشروع، العنصر الرئيسي هو الراسبيري باي، و التي تمثل قلب هذا المشروع،وتستخدم للتحكم على العمليات المرتبطة بهذا المشروع. مثل : التحكم بشاشة العرض (LCD)، وتلقي الرسائل من الخادم (Server) .

web-controlled-iot-notice-board-using-raspberry-pi

سيتم إنشاء خادم ويب (Web Server)، الذي يوفر وسيلة لإرسال “الرسالة المراد إعلانها” الى الراسبيري باي بإستخدام Flask في متصفح الويب. Flask  هو  إطار عمل مُصغّر/صغير (Micro-Framework) وقوي فى نفس الوقت لتطوير برامج الويب عبر لغة بايثون Python، يتوفّر على عدد لا بأس به من الدوال المُساعدة، مُناسب لتطوير تطبيقات صغيرة ومُتوسّطة (مُدونة، منتدى، موقع شخصي… ).

قم بإنشاء ملف  webapp ليتم حفظ الملفات المتعلق بهذا المشروع داخله عن طريق كتابة الأمر التالي على نافة Terminal :

mkdir webapp

في هذا المشروع سوف نقوم بإنشاء صفحة ويب مع مربع نص (TextBox) و زر إرسال (Submit button)، حيث يمكننا أن ندخل “رسالة الاعلان” في مربع نص ثم رفعها إلى الخادم (Server) عن طريق النقر على زر إرسال. يتم تطوير هذا التطبيق على شبكة الإنترنت باستخدام لغة HTML. الكود البرمجي لصفحة الويب هذه سيتم شرحه و عرضه في الخطوات التالية.

لإنشاء صفحة ويب :

أولا: قم بإنشاء ملف templates في الملف webapp  عن طريق إدخال  الأمر التالي في Terminal:

cd /home/pi/webapp
mkdir templates

تحتاج إلى كتابة  كود HTML في محرر نص (text editor) و حفظ الملف مع تمديد  (.HTML)
قم بفتح محرر نص (Text Editor) تحت قائمة Accessories  في القائمة الرئيسية :

web-controlled-iot-notice-board-using-raspberry-pi

قم بكتابة كود  HTML التالي :

<h1>Web Control Notice Board</h1>
</div>

<div data-role="content">

<form method="post" action="change">
<label for="slider-1">Notice Message:</label>
<input type="text" name="lcd" id="lcd" />
<br />

<input type="submit" value="Submit" />
</form>

{% if value %}
<p> Notice Submitted Successfully: {{ value }}</p>
{% endif %}

</div>
web-controlled-iot-notice-board-using-raspberry-pi

قم بحفظ الملف بتمديد(.HTML) مثل (index.html) في ملف templates ، الذي تم إنشاءه داخل ملف webapp.

لمحة عن الكود :
صفحة الويب يتم إنشاءها بلغة HTML ، والتي تحتوي على مربع نص :

 <input type="text" name="lcd" id="lcd" />

وزر إرسال  (Submit button) :

 <input type="submit" value="Submit" />

مع عنوان للصفحه :

<h1>Web Control Notice Board</h1>

عند النقر على زر إرسال سيتم إستخدام POST method  لتنفيذ الكود. ثم نقوم بعرض الرسالة التي تم إرسالها إلى الراسبيري باي عن طريق الخادم (Server).

{% if value %}
<p>Notice Submitted Successfully: {{ value }}</p>
{% endif %}

فهي تقوم بالتحقق ما اذا كانت هناك نص في مربع النص ثم تقوم بطباعة النص على صفحة الويب نفسها، بحيث يمكن للمستخدم أيضا رؤية الرسالة المرسلة.

أولا قم بتثبيت حزمة Flask. وتأكد من أنك متصل بالانترنت، إما عن طريق  Ethernet Cable أو عن طريق WIFI   قبل أن تبدأ.

قم بكتابة الأمر التالي على نافذة Terminal  لتثبيت الـ Flask :

sudo apt-get install python3-flask

جزء البرمجة في هذا المشروع يلعب دورا هاما للغاية لأداء جميع العمليات. أولا وقبل كل شي نحن بحاجة إلى درج المكتبات المطلوبة لـ  Flask .ثم تهيئة المتغييرات و تحديد Pins  لشاشة الكريستال السائل  (LCD) .

from flask import Flask
from flask import render_template, request
import RPi.GPIO as GPIO
import time
app = Flask(__name__)

# Define GPIO to LCD mapping
LCD_RS = 7
LCD_E = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18

لبرمجة شاشة الكريستال السائل (LCD) ، يتم إنشاء الدالة ()lcd_init لتهيئة شاشة LCD.

def lcd_init():
# Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

 و الداله  ()lcd_byte لإرسال الأوامر إلى الشاشة، , و الداله  ()lcd_string لإرسال البيانات المراد عرضها على الشاشة إلى الـ LCD .

def lcd_string(message,line):
# Send string to display
  message = message.ljust(LCD_WIDTH," ")
  lcd_byte(line, LCD_CMD)
  for i in range(LCD_WIDTH):
     lcd_byte(ord(message),LCD_CHR)

 و فيما يلي هذا الجزء من البرنامج يستخدم لإرسال رسالة من متصفح ويب إلى الراسبيري باي بإستخدام Flask .

@app.route("/")
def index():
   return render_template('index.html')
@app.route("/change", methods=['POST'])
def change():
  if request.method == 'POST':
    # Getting the value from the webpage
    data1 = request.form['lcd']
    print ("---Message is", data1)
    lcd_string(data1,LCD_LINE_1)
  return render_template('index.html', value=data1)
if __name__ == "__main__":
  app.debug = True
  app.run('192.168.1.19', port=8080,debug=True)

قم بكتابة الكود البرمجي كاملا  كالتالي :

#import
from flask import Flask
from flask import render_template, request
import RPi.GPIO as GPIO
import time
app = Flask(__name__)

# Define GPIO to LCD mapping
LCD_RS = 7
LCD_E  = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18


# Define some device constants
LCD_WIDTH = 16    # Maximum characters per line
LCD_CHR = True
LCD_CMD = False

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line

# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)       # Use BCM GPIO numbers
GPIO.setup(LCD_E, GPIO.OUT)  # E
GPIO.setup(LCD_RS, GPIO.OUT) # RS
GPIO.setup(LCD_D4, GPIO.OUT) # DB4
GPIO.setup(LCD_D5, GPIO.OUT) # DB5
GPIO.setup(LCD_D6, GPIO.OUT) # DB6
GPIO.setup(LCD_D7, GPIO.OUT) # DB7


def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  # Send byte to data pins
  # bits = data
  # mode = True  for character
  #        False for command

  GPIO.output(LCD_RS, mode) # RS

  # High bits
  GPIO.output(LCD_D4, False)
  GPIO.output(LCD_D5, False)
  GPIO.output(LCD_D6, False)
  GPIO.output(LCD_D7, False)
  if bits&0x10==0x10:
    GPIO.output(LCD_D4, True)
  if bits&0x20==0x20:
    GPIO.output(LCD_D5, True)
  if bits&0x40==0x40:
    GPIO.output(LCD_D6, True)
  if bits&0x80==0x80:
    GPIO.output(LCD_D7, True)

  # Toggle 'Enable' pin
  lcd_toggle_enable()

  # Low bits
  GPIO.output(LCD_D4, False)
  GPIO.output(LCD_D5, False)
  GPIO.output(LCD_D6, False)
  GPIO.output(LCD_D7, False)
  if bits&0x01==0x01:
    GPIO.output(LCD_D4, True)
  if bits&0x02==0x02:
    GPIO.output(LCD_D5, True)
  if bits&0x04==0x04:
    GPIO.output(LCD_D6, True)
  if bits&0x08==0x08:
    GPIO.output(LCD_D7, True)

  # Toggle 'Enable' pin
  lcd_toggle_enable()

def lcd_toggle_enable():
  # Toggle enable
  time.sleep(E_DELAY)
  GPIO.output(LCD_E, True)
  time.sleep(E_PULSE)
  GPIO.output(LCD_E, False)
  time.sleep(E_DELAY)

def lcd_string(message,line):
  # Send string to display
  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message),LCD_CHR)

lcd_init()
lcd_string("Rasbperry Pi",LCD_LINE_1)

    
@app.route("/")
def index():
    return render_template('index.html')
@app.route("/change", methods=['POST'])
def change():
 if request.method == 'POST':
    # Getting the value from the webpage
   data1 = request.form['lcd']
   print ("---Message is", data1)
   lcd_string(data1,LCD_LINE_1)

 return render_template('index.html', value=data1)
if __name__ == "__main__":
    app.debug = True
    app.run('192.168.1.19', port=8080,debug=True)

قم بحفظ ملف الكود app.py داخل ملف webapp الذي تم إنشاءه مسبقا. flask  سوف يقوم بالبحث عن index.html في ملف templates، الموجود على نفس الملف الذي يحتوي ملف الكود app.py .
بعد ذلك يمكنك تشغيل برنامج البايثون ولكن قبل ذلك تحتاج إلى استبدال عنوان IP في برنامج مع عنوان IP للراسبيري باي الخاصه بك.يمكنك التحقق من عنوان IP عن طريق كتابة الامر التالي على نافذة terminal :

Ifconfig

بعد تشغيل كود البايثون ثم بفتح http://IP_address_of_your_Pi:8080 في متصفح الويب و ادخل الرسالة ثم انقر فوق زر الارسال .

النظام الأمني للمنزل للحماية من اللصوص

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

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

wraspberry-pi-iot-intruder-alert-system

القطع المطلوبة :

في هذا المشروع، سيتم إنشاء نظام الحماية للمنزل بإستخدام مستشعر الحركة (PIR sensor) و كاميرا الراسبيري باي. في هذا النظام سيتم الكشف عن الدخلاء ، و سرعان ما يتم تنبيه المستخدم عن طريق إرسال بريد إلكتروني له .وتحتوي هذة الرسالة على صورة الدخيل التي يتم إلتقاطها بكاميرا الراسبيري باي. يمكنك تركيب هذا النظام عند الباب الرئيسي للمنزل أو مكتبك ومراقبته في أي مكان بالعالم باستخدام البريد الخاص بك عبر الانترنت.

الأدوات التي تحتاجها لهذا المشروع :

pir motion sensor

حساس الحركة (PIR motion sensor)

raspberry-pi-iot-intruder-alert-system

 كاميرا للراسبري باي (raspberry pi camera module)

led 5mm red

 LED 5mm red

220 Ω resistor

مقاومة 220 اوم

small size breadboard 170 colors

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

 راسبيري باي (Raspberry Pi 3 Model B)

Jumper Wires Female Female

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

Female-Male Jumper Wires

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

5V 2A Switching Power Supply MicroUSB Cable

Power Supply

شرح العمل :

عمل هذا المشروع هو بسيط جدا. سيتم إستخدام مستشعر الحركة (PIR sensor)  للكشف عن وجود أي شخص و تستخدم كاميرا الراسبيري باي لإلتقاط الصور عندما يتم الكشف عن الشخص.

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

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

wraspberry-pi-iot-intruder-alert-system

يمكنك ضبط نطاق الكشف أو المسافة لهذا النظام من خلال المقاومات المتغيرة لمستشعر الحركة.

raspberry-pi-iot-intruder-alert-system

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

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

raspberry-pi-iot-intruder-alert-system

في نظام الكشف عن الدخيل/ المتسلل ، نحن بحاجة إلى توصيل كاميرا الراسبيري باي و حساس الحركة إلى لوحة الراسبيري باي. قم بتوصيل الكاميرا في المدخل المخصص للكاميرا (Camera slot) على الراسيبيري باي.

wraspberry-pi-iot-intruder-alert-system

وقم بتوصيل حساس الحركة مع منفذ GPIO18، و LED  يتم توصيل  الطرف السالب بمقاومة 220 اوم و الطرف الموجب مع منفذ GPIO 17، ثم قم بتوصيل طرف المقاومة الاخر بالطرف السالب (GND) على لوحة الراسبيري باي .

يمكنك العودة على الدرس الثاني عشر للإطلاع على كيفة توصيل حساس الحركة.

إعداد الراسبيري باي :

نحن نستخدم لغة البايثون (Python) لعملية البرمجة. قبل برمجة الكود، أنت بحاجة إلى إعداد لوحة الراسبيري باي. يجب عليك العودة سلسلة تعلم الراسبيري باي لتنزيل و إعداد نظام التشغيل (Raspbian Jessie OS ) .

رازبيري باي-الدرس الأول– تهيئة بطاقة الذاكرة
رازبيري باي-الدرس الثاني– اعداد نظام التشغيل للمره الأولى
رازبيري باي-الدرس الرابع– اعداد GPIO

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

الاتصال بالشبكة :

يتم توفير إعدادات شبكة الإتصال في واجهة المستخدم لإصدارRaspbian   الحالي. الإتصال بالشبكة يمكن إجراءه عبر أيقونة الشبكة في أقصى الطرف الأيمن من شريط القوائم . قم بالضغط على أيقونة الشبكة سيتم ظهور قائمة شبكات الإنترنت المتاحة، كما هو مبين بالصورة أدناه. إذا لم يتم العثور على شبكات ، سوف تظهر الرسالة “No APs found – scanning… ”   قم بالانتظار بضع ثواني دون إغلاق القائمة، لتجد الشبكة.

raspberry-pi-iot-intruder-alert-system

انقر فوق الشبكة التي تريد الاتصال بها. سيظهر لك مربع يطلب منك إدخال مفتاح الشبكة :

wraspberry-pi-iot-intruder-alert-system

إدخل المفتاح واضغط موافق ، ثم انتظر بضع ثوان.

تفعيل كاميرا الراسبيري باي :

بعد توصيل الكاميرا إلى لوحة الراسبيري باي  ،  من قائمة البدء ثم preferences  قم بفتح Raspberry Pi Configuration Tool

wraspberry-pi-iot-intruder-alert-system

تأكد من أن الكاميرا مفعلة كما هو موضح بالصوة أدناه :

wraspberry-pi-iot-intruder-alert-system

إذا لم تكن مفعلة قم بتفعيلها عن طريق اختيار (Enable) ،   ثم قم بإعادة تشغيل نظام الراسبيري باي.

اعداد البريد الإلكتروني :

الآن بعد إعداد كاميرا الراسبيري باي ، سوف نقوم بتثبيت برنامج لإرسال البريد. هنا نحن نستخدم ssmtp وهو حل سهل وجيد لإرسال البريد باستخدام سطر الأوامر أو بإستخدام لغة البايثون.نحن بحاجة إلى تثبيت اثنين من المكتبات لإرسال الرسائل باستخدام SMTP :

sudo apt-get install ssmtp
sudo apt-get install mailutils

قم بكتابة الأوامر اعلاه على نافذة الـ Terminal .

بعد تثبيت المكتبات، انت بحاجة إلى فتح ssmtp.conf و تعديل على اعدادات هذا الملف كما هو مبين في الصورة أدناه ثم قم بحفظ الملف.

sudo nano /etc/ssmtp/ssmtp.conf
root=YourEmailAddress
mailhub=smtp.gmail.com:587
hostname=raspberrypi
AuthUser=YourEmailAddress
AuthPass=YourEmailPassword
FromLineOverride=YES
UseSTARTTLS=YES
UseTLS=YES
wraspberry-pi-iot-intruder-alert-system

يمكننا أيضا التحقق من الإعدادات عن طريق إرسال بريد . قم بكتابة الأمر أدناه ، إذا كان كنت الإعدادات صحيحة سيتم ارسال بريد على عنوان البريد الإلكتروني المذكور :

echo "Hello saddam" | mail -s "Testing..." someone@gmail.com

البرمجة :

قم بتشغيل الكود أدناه ليتم البدء بتفعيل نظام أمن المنزل :

import RPi.GPIO as gpio
from picamera import PiCamera
import time
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
from email.mime.image import MIMEImage
 
fromaddr = "YourEmail@gmail.com"  # change the email address accordingly
toaddr = "Someone@gmail.com"

mail = MIMEMultipart()
 
mail['From'] = fromaddr
mail['To'] = toaddr
mail['Subject'] = "Attachment"
body = "Please find the attachment"
led=17
pir=18
HIGH=1
LOW=0
gpio.setwarnings(False)
gpio.setmode(gpio.BCM)
gpio.setup(led, gpio.OUT)            # initialize GPIO Pin as outputs
gpio.setup(pir, gpio.IN)            # initialize GPIO Pin as input
data=""
def sendMail(data):
    mail.attach(MIMEText(body, 'plain'))
    print data
    dat='%s.jpg'%data
    print dat
    attachment = open(dat, 'rb')
    image=MIMEImage(attachment.read())
    attachment.close()
    mail.attach(image)
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(fromaddr, "your password")   # change the email password accordingly
    text = mail.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()
def capture_image():
    data= time.strftime("%d_%b_%Y|%H:%M:%S")
    camera.start_preview()
    time.sleep(5)
    print data
    camera.capture('%s.jpg'%data)
    camera.stop_preview()
    time.sleep(1)
    sendMail(data)
gpio.output(led , 0)
camera =PiCamera()
camera.rotation=180
camera.awb_mode= 'auto'
camera.brightness=55
while 1:
    if gpio.input(pir)==1:
        gpio.output(led, HIGH)
        capture_image()
        while(gpio.input(pir)==1):
            time.sleep(1)
        
    else:
        gpio.output(led, LOW)
        time.sleep(0.01)

شرح الكود البرمجي :

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

import RPi.GPIO as gpio
from picamera import PiCamera
import time
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
from email.mime.image import MIMEImage

بعد ذلك، قمنا بتهيئة البريد و تحديد عنوان البريد الإلكتروني و الرسائل :

fromaddr = "YourEmail@gmail.com"
toaddr = "Someone@gmail.com"
mail = MIMEMultipart()
mail['From'] = fromaddr
mail['To'] = toaddr
mail['Subject'] = "Attachment"
body = "Please find the attachment"

ثم قمنا بإنشاء الدالة (sendMail(data لإرسال البريد :

def sendMail(data):
    mail.attach(MIMEText(body, 'plain'))
    print data
    dat='%s.jpg'%data
    print dat
    attachment = open(dat, 'rb')
    image=MIMEImage(attachment.read())
    attachment.close()
    mail.attach(image)
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(fromaddr, "your password")
    text = mail.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()

قم بالتعديل على الكود أعلاه بوضع بوضع كلمة المرور الخاصة بالإيميل المرسل  .

    server.login(fromaddr, "your password")

يتم إنشاء الدالة ()capture_image  لإلتقاط صورة الدخيل و حفظها بإسم يحتوي على الوقت و التاريخ .

def capture_image():
    data= time.strftime("%d_%b_%Y|%H:%M:%S")
    camera.start_preview()
    time.sleep(5)
    print data
    camera.capture('%s.jpg'%data)
    camera.stop_preview()
    time.sleep(1)
    sendMail(data)

يتم تهيئة Picamera   مع بعض الإعدادات الخاصة به :

camera = PiCamera()
camera.rotation=180
camera.awb_mode= 'auto'
camera.brightness=55

و في النهاية ، سيتم قراءة حساس الحركة و عندما نتلقى إشارة High  من الحساس ستقوم الراسبيري باي بإستدعاء الدالة ()capture_image   لإلتقاط صورة الدخيل/ المتسلل وإرسال رسالة تنبيه مع صورة المتسلل كمرفق. وقد تم إستدعاء الدالة  ()sendmail  داخل الدالة ()capture_image لإرسال البريد.

while 1:
    if gpio.input(pir)==1:
        gpio.output(led, HIGH)
        capture_image()
        while(gpio.input(pir)==1):
            time.sleep(1)
        
    else:
        gpio.output(led, LOW)
        time.sleep(0.01)

هذا كيف يعمل الراسبيري باي كنظام أمن وحماية، يمكنك أيضا إستخدام مستشعر المواجات فوق الصوتية (Ultrasonic  sensor ) أو مستشعر الأشعة التحت حمراء (IR sensor ) للكشف عن وجود لص أو دخيل .

التحكم بالاردوينو من خلال windows 10

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

windows-remote-arduino-experience

القطع المطلوبة:

الأدوات التي تحتاجها لهذا المشروع :

(Bluetooth Module(HC-06

Diffused RGB 5mm LED

RGB 5mm LED

220 Ω resistor

مقاومة 220 اوم

potentiometer 10k

Potentiometer 10K Ω

Half-size Breadboard

 لوح تجارب حجم متوسط (Half size breadboard)

arduino uno r3

Arduino Uno R3

Female-Male Jumper Wires

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

Jumper Wires Male/Male

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

ما هو Windows Remote Arduino وماذا يمكنك أن تفعل من خلاله؟

windows Remote Arduino  هي مكتبة ويندوز مفتوحة المصدر التي تسمح لأي جهاز ويندوز 10 -سواء كان هاتف ويندوز أو جهاز كمبيوتر أو حتى راسبيري باي 2 – التحكم بالاردوينو عن بعد.
تمكن المكتبة للمطورين من دمج أجهزة الاستشعار الخاصة بالاردوينو في مشاريع windows  الخاصة بهم . يمكنك العثور على المكتبة الخاصة لـ Windowd Remote Arduino  على الصفحة هنـا.

Windows Remote Arduino قادرة على التحكم بالوظائف التالية للأردوينو:
1- المداخل و المخارج الرقمية و التناظرية.
– الكتابة الرقمية.
– قراءة رقمية.
– الكتابة التناظرية (PWM).
– قراءة تناظرية.
– تعيين Pin Mode.
– تلقي الإشارات في حالة تم تغيير قيم الـ pins .
2- إرسال و إستقبال البيانات بين جهازين عبر I2C .

windows-remote-arduino-experience

للمستخدمين المتقدمين، تتيح Windows Remote Arduino  أوامر مخصصة عبر Firmata SysEx – يمكن الإطلاع على مزيد من المعلومات هنـا.

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

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

windows-remote-arduino-experience

يمكنك الاطلاع على الدرس الرابع لمعرفة طريقة توصيل الـ RGB LED.

لتبدأ التحكم بالأردوينو بإستخدام التطبيق Windows Arduino Experience ، قم بإتباع الخطوات الثلاثة :
1- تهيئة الاردوينو.
2- تهيئة جهاز Windows 10.
3- إجراء عملية الإتصال و التحكم .

تهيئة الأردوينو:

قم بتنزيل مكتبة “Arduino Firmata ” قم بإتباع الخطوات التالية :
إذهب إلى الشيفرة البرمجية (Sketch menu) / إدراج مكتبة (Include Library)  /  إدارة المكتبات (Manage Library)  ثم قم بالبحث عن “ “Firmataو قم بتنزيل أخر إصدار للمكتبة.
الآن قم بفتح   “StandardFirmata”من ملف (File) / أمثلة StandardFirmata / Firmata /  Examples   .

قم بالعديل baud rate على الكود

Firmata.begin(9600);

ثم قم برفع الكود على الأردوينو.

تهيئة جهاز الويندوز :

لتنزيل تطبيق Windows Remote Arduino Experience من هنـا.

قم بتفعيل البلوتوث على جهازك ثم قم بالاقتران الى البلوتوث عن طريق ادخال كلمة المرور الافتراضية  1234 او   0000.

windows-remote-arduino-experience

إجراء عملية الإ تصال و التحكم :

قم بفتح تطبيق windows ، بمجرد اختيار الاعدادات الصحيحة ، قم بإختيار البلوتوث HC-06 ثم انقر فوق  “Connect” للإتصال بالاردوينو عن بعد.

windows-remote-arduino-experience

قم بالتحكم بالـ RGB LED من خلال نافذة PWM :

windows-remote-arduino-experience

كما يمكنك قراءة القيم التناظرية للمقاومة المتغيرة عبر النافذة Analog :

windows-remote-arduino-experience

التحكم بالروبوت عبر الهاتف الذكي

   التحكم بالسيارات عن بعد  بالتأكيد هي متعة. في هذا البرنامج التعليمي, سنقوم ببناء سيارة الروبوت و التحكم بها عن طريق الهاتف الذكي بإستخدام تقنية البلوتوث .

bluetooth-controlled-robot-car

القطع المطلوبة:

الأدوات التي تحتاجها لهذا المشروع :

4WD Robot Chassis kit

L298 Motor driver

L298 H bridge Module

serial port bluetooth module hc-06

وحدة البلوتوث (HC-06)

battery holder

حامل البطارية

arduino uno r3

Arduino Uno R3

Jumper Wires Male/Male

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

Female-Male Jumper Wires

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

 

ما هو الروبوت ؟

الروبوت هو جهاز كهروميكانيكي قادر على التفاعل بطرية أو بأخرى مع بيئته، و اتخاذ قرارات مستقلة أو إجراءات من أجل تحقيق مهنمة محددة.
يتكون الروبوت من العناصر التالية:
1- الهيكل.
2- المشغل الميكانيكي .
3- وحدة التحكم.
4-المدخلات/ الحساسات.
5- امدادات الطاقة.
في الخطوات التالية سنذكر كل عنصر من العناصر المذكورة اعلاه، بحث يمكن أن نفهمها بسهولة.

الهيكل (Structure / Chassis) :

smartphone-controlled-arduino-robot

يتألف الهيكل من المكونات الفزيائية. الروبوت يتكون من مكون او اكثر من المكونات الفزيائية التي تتحركة لتنفيذ مهام معينة. وفي حالتنا هيكل السيارة و العجلات تمثل هيكل الروبوت

المشغل الميكانيكي Actuator :

smartphone-controlled-arduino-robot

المحرك هو جهاز يقوم بتحويل الطاقة (في مجال الروبوت، تكون الطاقة الكهربائية) الى طاقة حركية. تنتج معظم المحركات إما الحركة الدورانية أو الخطية.
في حالتنا المحرك هو(DC Gear motor)  وهو بالاساس عبارة عن محرك  DC مركب مع علبة تروس (gear) تعمل على تقليل سرعة المحرك و زيادة عزم الدورات .

إعداد أطراف المحركات :

قطع اربع قطع من أسلاك (الحمراء و السوداء) مع طول حوالي 5-6 انش. قم بتجريد السلك من العازل في كل نهاية , ثم قم بلحم الأسلاك على المحركات.

smartphone-controlled-arduino-robot

يمكنك التحقق من قطبية المحركات من خلال توصيلها إلى بطارية. اذا كانت تدور في الاتجاه إلى الأمام (السلك الاحمر مع القطب الموجب و الأسود مع القطب السالب) هذا يدل على ان التوصيل تم بشكل صحيح.

تركيب المحرك :

smartphone-controlled-arduino-robot

لاحظ أن الأسلاك على كل محرك تشير الى إتجاه مركز الهيكل.

smartphone-controlled-arduino-robot

قم بضم اثنان من الأسلاك الحمراء و اثنان من الاسلاك السوداء معا على كل جانب من جوانب الهيكل. بعد الانضمام, سيكون لديك اثنان من النهايات على الجانب الايمن و اثنان على الجانب الأيسر.

تثبيت السقف العلوي:

بعد تركيب الاربع محركات في الطابق السفلي، قم بتركيب السقف العلوي. ثم قم بسحب نهايات الاسلاك نحو السطح العلوي.

smartphone-controlled-arduino-robot

هناك حاجة إلى المتحكم (العقل) لتحريك الروبوت من مكان إلى أخر. المتحكم له القدرة على تنفيذ برنامج و يكون مسؤولا عن جميع العمليات الحسابية، واتخاذ القرارات، و الاتصال . في هذا المشروع سيتم استخدام متحكمArduino  كـوحدة تحكم.

يمكنك استخدام وحدة التحكم لدوران المحركات في إتجاه واحد. ولكن اذا كنت تريد أن تكون  قادر على التحكم في المحرك بإتجاهات مختلفة (الأمام ،الخلف، يمين، ويسار) مع لوحة التحكم, فإنك بحاجة إلى مزيد من الدوائر . انت بحاجة إلى H-Bridge.

 L298  H Bridge Module

smartphone-controlled-arduino-robot

H-Bridge، يقوم بتحريك محرك الـ DC بإتجاه الامام و الخلف. وهو يتكون من اربع مفاتيح الكترونية S1,S2,S3,S4  (Transistors / MOSFETS / IGBT).

smartphone-controlled-arduino-robot

الية العمل: انظر للصورة اعلاه لفهم ألية العمل للـ H-Bridge . المفاتيح في نفس الجهة إما (S1,S2) أو  (S3,S4)لا يتم إغلاقهم بنفس الوقت , سيتم حدوث ماس كهربائي .
H-bridge توفر لك دائرة متكاملة، أو يمكنك أن تقوم ببناء الدائرة بنفسك عن طريق إستخدام اربع Transistor او MOSFETs. في هذا المشروع سيتم استخدام  L298 H-bridge Module الذي يمكن من خلاله التحكم في سرعة واتجاه المحركات.

وصف مداخل و مخراج الـ L298H-bridge Module : 

smartphone-controlled-arduino-robot

توصيل الأسلاك الكهربائية

قم بتوصيل الأسلاك الحمراء للمحركين على كل جهة معا و الأسلاك السوداء معا.

smartphone-controlled-arduino-robot

MOTOR A هو المسؤول عن المحركات على الجانب الأيمن, وفي المقابل يتم ربط المحركات على الجانب الايسر للـ MOTOR B.

اتبع التعليمات التالية ليتم توصيل كل شي :

smartphone-controlled-arduino-robot
يمكنك العودة لمشروع نظام التحكم في الإضاءة عبر البلوتوث للإطلاع على الشرح المتعلق بوحدة البلوتوث .

برمجة الأردوينو

في الكود البرمجي سنقوم بمراجعة البيانات الواردة وتنفيذ عملية المقارنة ، اذا كانت البيانات المستقبلة من الهاتف الذكي F يتم تحريك الروبوت للأمام و إذا كانت B يتم تحريكه للخلف و اذا كانت R  يتم تغير حركة لليمين و L  للتحرك لليسار. ويتم إيقافة إذا كانت البيانات المستقبلة 0 .

قم برفع البرنامج التالي إلى متحكم الأردوينو:

char data = 0;            //Variable for storing received data
#define right1 7 //IN1
#define right2 8
#define rightE 9
#define left1 6
#define left2 5
#define leftE 10

void Forward(); 
void Backward(); 
void Left(); 
void Right(); 
void Stop1(); 

void setup()
{
   Serial.begin(9600);   //Sets the baud for serial data transmission                               
   pinMode(left1, OUTPUT); 
   pinMode(left2, OUTPUT); 
   pinMode(leftE, OUTPUT); 
   pinMode(right1, OUTPUT);
   pinMode(right2, OUTPUT);
   pinMode(rightE, OUTPUT);
   delay(1000);
}
void loop()
{
   if(Serial.available() > 0)      
   {
     data = Serial.read();        //Read the incoming data & store into data    
      switch (data){
        case 'F':
            Forward();
            break; 
        case 'B':
            Backward();
            break; 
        case 'L':
           Left();           
           break; 
        case 'R':
           Right(); 
           break; 
        case '0':
           Stop1();
           break; 
      }
  } 
}
void Forward(){
  digitalWrite(right1,1); 
  digitalWrite(right2,0); 
  analogWrite(rightE, 255);      
  digitalWrite(left1,1); 
  digitalWrite(left2,0); 
  analogWrite(leftE, 255);                                                                                                                                                                                                                                                        
}
void Backward(){
  digitalWrite(right1,0); 
  digitalWrite(right2,1); 
  analogWrite(rightE, 255); 
  digitalWrite(left1,0); 
  digitalWrite(left2,1); 
  analogWrite(leftE, 255); 
}
void Left(){
  digitalWrite(right1,1); 
  digitalWrite(right2,0); 
  analogWrite(rightE, 255); 
  digitalWrite(left1,0); 
  digitalWrite(left2,1); 
  analogWrite(leftE, 255); 
  
}
void Right(){
  digitalWrite(right1,0); 
  digitalWrite(right2,1); 
  analogWrite(rightE, 255); 
  digitalWrite(left1,1); 
  digitalWrite(left2,0); 
  analogWrite(leftE, 255); 
}
void Stop1(){
  digitalWrite(left1,0); 
  digitalWrite(left2,0); 
  analogWrite(leftE, 0); 
  digitalWrite(right1,0); 
  digitalWrite(right2,0); 
  analogWrite(rightE, 0); 
}

 شرح الكود :

أولا لفعم الية العمل قم بالاطلاع على الجدول التالي. هو مفيد جدا أثناء كتابة التعليمات البرمجي :

smartphone-controlled-arduino-robot

في قسم الـ Loop يتم قراءة البيانات التي تم إرسالها من قبل الهاتف الذكي ثم يتم التحقق منها. فمثلا إذا كانت حرف “F” يتم إستدعاء الدالة Forward()ليتم تحريك الروبوت إلى الأمام ،وإذا كات حرف “B” يتم إستدعاء الدالة backward() ليتم تحريك الروبوت للخلف.

data = Serial.read();        //Read the incoming data & store into data    
      switch (data){
        case 'F':
            Forward();
            break; 
        case 'B':
            Backward();
            break; 
        case 'L':
           Left();           
           break; 
        case 'R':
           Right(); 
           break; 
        case '0':
           Stop1();
           break; 
      }

نقوم بإنشاء الدالة Forward() , Backward() , Right(),Left() لتحكم في إتجاهات الروبوت.
و الدالة Stop1() لإيقاف حركة الروبوت

void Stop1(){
  digitalWrite(left1,0); 
  digitalWrite(left2,0); 
  analogWrite(leftE, 0); 
  digitalWrite(right1,0); 
  digitalWrite(right2,0); 
  analogWrite(rightE, 0); 
}

تطبيق الاندرويد

في هذا المشروع لن يتم تغطية طريقة برمجة تطبيق الاندرويد , يمكنك تحميل البرنامج من هنا

كيف يمكن استخدام التطبيق؟
1- قم بتنزيل البرنامج من هنا
2- قم بإقتران جهازك مع البلوتوث   HC-06:
– تشغيل البلوتوث HC-06.
– تفحص الجهاز المتوفر .
-يتم الاقتران الى البلوتوث عن طريق ادخال كلمة المرور الافتراضية  1234 او   0000.
3- قم بفتح التطبيق , ثم قم بالضغط على زر الاجهزة المقترنة  ثم قم بإختيار وحدة البلوتوث الخاصة بك (HC-06) .

smartphone-controlled-arduino-robot

قم بالضغط على الأسهم لتغير حركة الروبوت و على زر Stop لإيقاف الحركة .

smartphone-controlled-arduino-robot