خلال هذا المشروع، ستتعرف على كيفية استخدام الـ Node-RED للتواصل مع منافذ GPIO الخاصة بالـ Raspberry Pi.
سنقوم بإنشاء تدفق Node-RED للتحكم في LED.

تعلم كيفية انشاء تدفق Node-RED للتحكم بإيقاف وتشغيل الـ LED
تعلم كيفية بث فيديو مباشر على صفحة الويب بإستخدام الراسبيري باي.
فى هذا الدرس سنتعلم كيفية تشغيل الراسبيري باي عن طريق البطاريات دون الحاجة إلى ...
كيفية توصيل مؤقت الساعة الحقيقي (RTC) على الراسبيري باي، سيمكننا من جعل توقيت الراسبيري ...
كيفية توصيل حساس تحديد المسافات Ultrasonic Module بالراسبيري باي.
كيفية توصيل شاشة OLED يتم توصيلها على الراسبري باي عن طريق بروتوكول I2C.
فى هذا الدرس سنتعلم كيفية جعل برامج البايثون تعمل بشكل تلقائي أو فى وقت محدد.
كيفية إسخدام الراسبيري باي كجهاز راديو لإرسال الأصوات عن طريق موجات FM.
فى هذا الدرس سنتعلم كيفية زيادة السرعة Overclocking للراسبري باي.
فى هذا الدرس سنتعلم كيفية عمل زر لإغلاق الراسبرى باى بشكل آمن بدون الإضطرار لإغلاقها ...
جميع دروس ومشاريع راسبيري باي
خلال هذا المشروع، ستتعرف على كيفية استخدام الـ Node-RED للتواصل مع منافذ GPIO الخاصة بالـ Raspberry Pi.
سنقوم بإنشاء تدفق Node-RED للتحكم في LED.
في هذا المشروع، سنتعلم كيفية التحكم بالراسبيري باي من خلال واجهة الويب. وهذا سوف يسمح لك للتحكم بالمحركات والإضاءة وغيرها من القطع الإلكترونية عبر شبكة الإنترنت. سنقوم خلال هذا المشروع بالتحكم والسيطرة على الروبوت عن طريق الويب.
كاميرا للراسبري باي (raspberry pi camera module) أو USB webcam
اسلاك توصيل أنثى/أنثى (Jumper Wires Female/Female)
اسلاك توصيل أنثى/ذكر (Jumper Wires Female/male)
راسبيري باي (Raspberry Pi 3 Model B)
الروبوت هو جهاز كهروميكانيكي قادر على التفاعل بطرية أو بأخرى مع بيئته، و اتخاذ قرارات مستقلة أو إجراءات من أجل تحقيق مهمة محددة.
يتكون الروبوت من العناصر التالية:
1- الهيكل.
2- المشغل الميكانيكي .
3- وحدة التحكم.
4-المدخلات/ الحساسات.
5- امدادات الطاقة.
في الخطوات التالية سنذكر بعض العناصر المذكورة اعلاه، بحث يمكن أن نفهمها بسهولة.
الهيكل (Structure / Chassis) :
يتألف الهيكل من المكونات الفزيائية. الروبوت يتكون من مكون او اكثر من المكونات الفزيائية التي تتحرك لتنفيذ مهام معينة. وفي حالتنا هيكل السيارة و العجلات تمثل هيكل الروبوت
المشغل الميكانيكي Actuator :
المحرك هو جهاز يقوم بتحويل الطاقة (في مجال الروبوت، تكون الطاقة الكهربائية) الى طاقة حركية. تنتج معظم المحركات إما الحركة الدورانية أو الخطية.
في حالتنا المحرك هو(DC Gear motor) وهو بالاساس عبارة عن محرك DC مركب مع علبة تروس (gear) تعمل على تقليل سرعة المحرك و زيادة عزم الدورات .
قطع اربع قطع من الأسلاك (الحمراء و السوداء) مع طول حوالي 5-6 انش. قم بتجريد السلك من العازل في كل نهاية ، ثم قم بلحم الأسلاك على المحركات.
يمكنك التحقق من قطبية المحركات من خلال توصيلها إلى بطارية. اذا كانت تدور في الاتجاه إلى الأمام (السلك الاحمر مع القطب الموجب و الأسود مع القطب السالب) هذا يدل على ان التوصيل تم بشكل صحيح.
تركيب المحرك :
لاحظ أن الأسلاك على كل محرك تشير الى إتجاه مركز الهيكل.
قم بضم اثنان من الأسلاك الحمراء و اثنان من الاسلاك السوداء معا على كل جانب من جوانب الهيكل. بعد الانضمام، سيكون لديك اثنان من النهايات على الجانب الايمن و اثنان على الجانب الأيسر.
تثبيت السقف العلوي:
بعد تركيب الأربع محركات في الطابق السفلي، قم بتركيب السقف العلوي. ثم قم بسحب نهايات الاسلاك نحو السطح العلوي.
هناك حاجة إلى المتحكم لتحريك الروبوت من مكان إلى أخر. المتحكم له القدرة على تنفيذ برنامج و يكون مسؤولا عن جميع العمليات الحسابية، واتخاذ القرارات، و الاتصال . في هذا المشروع سيتم استخدام متحكم الراسبيري باي كـوحدة تحكم.
لا يمكن توصيل المحركات مباشرة مع الراسبيري باي، لأن المحركات تحتاج تيار عالي لا يستطيع الراسبيري باي إعطاءه. لهذا السبب سيتم استخدام Dual H-bridge كدائرة بين الراسبيري باي والمحركات.
H-Bridge، يقوم بتحريك محرك الـ DC بإتجاه الامام و الخلف. وهو يتكون من اربع مفاتيح الكترونية S1,S2,S3,S4 (Transistors / MOSFETS / IGBT).
الية العمل: انظر للصورة اعلاه لفهم ألية العمل للـ H-Bridge . المفاتيح في نفس الجهة إما (S1,S2) أو (S3,S4)لا يتم إغلاقهم بنفس الوقت , سيتم حدوث ماس كهربائي .
H-bridge توفر لك دائرة متكاملة، أو يمكنك أن تقوم ببناء الدائرة بنفسك عن طريق إستخدام اربع Transistor او MOSFETs. في هذا المشروع سيتم استخدام L298 H-bridge Module الذي يمكن من خلاله التحكم في سرعة واتجاه المحركات.
وصف مداخل و مخراج الـ L298H-bridge Module :
أولا: نقوم بتوصيل الأسلاك ذات اللون الأحمر معا والأسلاك ذات اللون الأسود معا لكل من الجهة اليمنى واليسرى.
اتبع الجداول التالية ليتم توصيل باقي القطع :
L298H-bridge | أسلاك المحركات |
OUT 1 | الأسلاك ذات اللون الأسود على جهة اليسار (-) |
OUT 2 | الأسلاك ذات اللون الأحمر على جهة اليسار (+) |
OUT 3 | الأسلاك ذات اللون الأسود على جهة اليمين (-) |
OUT 4 | الأسلاك ذات اللون الأحمر على جهة اليمين (+) |
L298H-bridge | البطاريات |
12 V | السلك ذو اللون الأحمر للبطارية (+) |
GND | السلك ذو اللون الأسود للبطارية مع GND على الراسبيري باي |
L298H-bridge | الراسبيري باي (WiringPi Pin) |
IN 1 | GPIO 0 |
IN 2 | GPIO 7 |
IN 3 | GPIO 3 |
IN 4 | GPIO 2 |
GND | GND |
مكتبة 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
الآن يجب أن تكون قادر على إستخدام الأداة، قم بكتابة الأمر التالي على نافذة الـ 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/
سنقوم بإنشاء صفحة ويب على شبكة النت ، حيث انها ستكون متوافقه مع جميع الأجهزة ، و ستكون بحاجة لمعرفة اربع لغات : CSS,HTML (نمط الصفحة)، PHP (للتفاعل مع الخادم )، JavaScript (التفاعلات مع المستخدم) . نحن بحاجة لتثبيت خادم الويب على الراسبيري باي. في حالتنا نحن لسنا بحاجة إلى قاعدة بيانات MySQL ، فقط بحاجة إلى خادم HTTP و PHP.
أولا قم بعمل تحديث للراسبيري باي :
sudo apt-get update
أولا قم بتثبيت حزمة apache2 ، من خلال الأمر التالي :
sudo apt-get install apache2 -y
الان قم بالتحقق ما اذا كان الخادم (Server) يعمل، قم بكتابة العنوان IP الخاص بالراسبيري باي على متصفح الويب. اذا كان يعمل ستظهر رسالة “It works!” كما هو موضح بالصورة أدناه.
إذا لم يتم مثل ما سبق، قم بالتحقق من العنوان IP الخاص بالراسبيري باي من خلال الأمر التالي :
ifconfig
أو قم بمحاولة إعادة تثبيت Apache أو إعادة تشغيل الراسبيري باي.
للسماح للـ apache بمعالجة ملفات PHP، انت بحاجة إلى تثبيت PHP5 ووحدة PHP5 للـApache. قم بتتبع الخطوات التالية ليتم التثبيت :
sudo apt-get install php libapache2-mod-php -y
الملف الخاص بواجهة المستخدم :
قم بالدخول إلى ملف /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 .
أولا، انت بحاجة إلى تفعيل بث فيديو مباشر عبر صفحة ويب. قم بتتبع خطوات درس بث فيديو مباشر عبر شبكة الإنترنت .
تتألف واجهة التحكم من فيديو الكاميرا التي تم تفعيله بالخطوة السابقة، واربع مفاتيح تحكم للسيطرة على محرك السيارة.
سيتم إنشاء واجهة الصفحة بإستخدام لغةHTML، و لتفاعلات الخادم يتم إنشاء صفحة PHP، و JAVAScript لإدارة التفاعل مع المستخدم و الرسوم المتحركة للصفحة. ويمكنك استخدام CSS لتخطيط و تنسيق الصفحة مثل الخلفية أو مفاتيح التحكم .
اولا نحن بحاجة لملف “camera.php” لإنشاء الواجهة ولتفاعل الخادم . هذه الصفحة هي الصفحة الرئيسية التي تحتوي على مفاتيح التحكم بالمحركات، كما تحتوي على بث الفيديو المباشر.
ملف Camera.php :
يتم استخدام لغة الـ HTML لتصميم واجهة المستخدم :
أولا : يتم إدراج فيديو البث عن طريق الأمر التالي، كما يتم تحديد الـ src URL (عنوان الويب ) الخاص بالبث المباشر
<img height="480" width = "640" src="http://YourIPAddress:8081" />
ثم نقوم بإدراج اربعة مفاتيح تحكم بإستخدام الأمر التالي :
<button id="myP" onmousedown="mouseDown(02)" onmouseup="mouseUp(02)">Backward</button> <button id="myP" onmousedown="mouseDown(03)" onmouseup="mouseUp(03)">Turn right</button> <button id="myP" onmousedown="mouseDown(37)" onmouseup="mouseUp(37)">Forward</button> <button id="myP" onmousedown="mouseDown(27)" onmouseup="mouseUp(27)">Turn left</button>
بعد ذلك، بإستخدام لغة الـ PHP نقوم بضبط إعدادات GPIO المستخدمة على الراسبيري باي كمخرج، وإعطاء الـ Pins المستخدمة القيم الإبتدائية :
system("gpio mode 0 out"); system("gpio write 0 0"); system("gpio mode 2 out"); system("gpio write 2 0"); system("gpio mode 3 out"); system("gpio write 3 0"); system("gpio mode 7 out"); system("gpio write 7 0");
لجعل هذه المفاتيح الأربعة تعمل مع المحركات (على سبيل المثال عند الضغط على مفتاح الرجوع للخلف يتم اشارات إلى المحركات من شأنها تحريك الروبوت للخلف)، لعمل ذلك يتم إنشاء ملفات أخرى :
– ملف camera.js يحتوي هذا الملف على الدالتين mouse_up و mouse_down للتحكم بمنافذ الراسبيري باي.
– ملف camera_rotate.php يتلقى المحتوى من camera.js، وبعد ذلك يتم تطبيق الإشارات على الـ GPIO المستخدمة في المشروع عن طريق إرسال إشارات إلى المحركات للتحكم بها إما 0v أو 5v.
يمكنك تنزيل ملفات صفحة الويب لهذا المشروع من هنا. يجب حفظ جميع الملفات في /var/www/html على الراسبيري باي.
الآن قم بالإنتقال إلى شبكة الإنترنت والدخول إلى YourRaspiIPAddress/camera.php ، ستتمكن من رؤية بث الكاميرا، وسيتحرك الروبوت عند الضغط على أحد المفاتيح.
خلال هذا المشروع، سنتعلم كيفية بث فيديو مباشر على صفحة الويب بإستخدام الراسبيري باي. يمكن دمج هذا المشروع مع العديد من المشاريع كمشروع الروبوت لمشاهدة كل ما يشاهده الروبوت عبر شبكة الإنترنت أو مع أنظمة المراقبة أو مع أي تطبيق آخر يحتاج إلى كاميرا.
كاميرا للراسبري باي (raspberry pi camera module) أو USB webcam
راسبيري باي (Raspberry Pi 3 Model B)
أولا، سوف تحتاج إلى تثبيت نظام الراسبيان على الراسبيري باي. إذا لم تكن قد فعلت ذلك قم بالإطلاع على درس تهيئة بطاقة الذاكرة.
في هذا المشروع سنقوم باستخدام حزمة الحركة (Motion) .
للبدء، سنقوم بإستخدام الـ Termial لتحديث الراسبيري باي إلى أحدث إصدار.
sudo apt-get update
sudo apt-get upgrade
إعتمادا على إصدار الـ Raspbian الذي تستخدمه سوف تحتاج إلى القيام ببعض الخطوات المختلفة.
نبدأ بإزالة المكتبات التي قد تتعارض مع الحزم الأحدث. قد تكون موجودة أو غير موجودة على نسختك من الراسبيان.
sudo apt-get remove libavcodec-extra-56 libavformat56 libavresample2 libavutil54
قم بتنزيل وتثبيت الحزم التالية عن طريق إدخال الأوامر التالية على الـ Terminal
wget https://github.com/ccrisan/motioneye/wiki/precompiled/ffmpeg_3.1.1-1_armhf.deb
sudo dpkg -i ffmpeg_3.1.1-1_armhf.deb
الآن نحن بحاجة إلى تثبيت الحزم التالية :
sudo apt-get install curl libssl-dev libcurl4-openssl-dev libjpeg-dev libx264-142 libavcodec56 libavformat56 libmysqlclient18 libswscale3 libpq5
بعد تثبيت تلك الحزم، يمكننا الآن الحصول على أحدث نسخة من برنامج Motion وتثبيته. للقيام بذلك قم بتشغيل الأوامر التالية:
wget https://github.com/Motion-Project/motion/releases/download/release-4.0.1/pi_jessie_motion_4.0.1-1_armhf.deb sudo dpkg -i pi_jessie_motion_4.0.1-1_armhf.deb
أولا قم بتثبيت الحزم التالية. الأمر التالي يعمل على الإصدارين من Raspbian Stretch .
sudo apt-get install libmariadbclient18 libpq5 libavcodec57 libavformat57 libavutil55 libswscale4
بعد ذلك، قم بتنزيل ملف motion deb من GitHub وتثبيته بإستخدام dpkg.
sudo wget https://github.com/Motion-Project/motion/releases/download/release-4.0.1/pi_stretch_motion_4.0.1-1_armhf.deb
sudo dpkg -i pi_stretch_motion_4.0.1-1_armhf.deb
هذا كل ماعليك القيام به للإنتقال إلى إعداد motion بحيث يتم تشغيلها على الراسبيري باي الخاص بك.
الآن نحن بحاجة إلى إجراء بعض التعديلات على ملف motion.conf ، قم بفتح الملف عبر الأمر التالي :
sudo nano /etc/motion/motion.conf
قم بالبحث عن الأسطر التالية، ثم قم بتغييرها إلى ما يلي :
daemon on stream_localhost off output_pictures off ffmpeg_output_movies off stream_maxrate 100 framerate 100 width 640 height 480
الآن نحن بحاجة إلى إعداد الـ daemon، أولا نحن بحاجة إلى تحرير ملف الـ Motion.
sudo nano /etc/default/motion
ابحث عن السطر التالي وقم بتغييره إلى ما يلي :
start_motion_daemon=yes
بمجرد الإنتهاء من ذلك، قم بحفظ الملف والخروج منه عن طريق الضعط على ctrl+x ثم Y
تأكد الآن من توصيل الكاميرا، وتشغيلها عبر الأمر التالي:
sudo service motion start
إذا كنت بحاجة إلى إيقاف البث، ببساطة قم بتشغيل الأمر التالي:
sudo service motion stop
الآن يمكنك مشاهدة البث المباشر عبر صفحة الويب بإستخدام عنوان الـ IP Address الخاص بالراسبيري باي. قم بفتح المتصفح واستخدام IP address للراسبيري باي كما يلي :
YourIPAddress:8081
إذا لم يتم تحميل صفحة الويب حاول إعادة تشغيل الخدمة عبر الأمر التالي :
sudo service motion restart
إذا كنت تستخدم كاميرا الراسبيري باي، ستحتاج إلى القياب ببعض الخطوات الإضافية المذكورة بالقسم القادم.
إذا كنت ترغب في استخدام وحدة كاميرا الراسبيري باي سوف تحتاج إلى القيام ببعض الخطوات الإضافية لإعدادها.
أولا قم بتوصيل الكاميرا إلى لوحة الراسبيري باي بالطريقة الصحيحة كما هو موضح بالصورة التالية :
لجعل كاميرا الراسبيري باي تعمل، ستحتاج للقيام ببعض الخطوات الإضافية.
تأكد من تفعيل كاميرا الراسبيري باي. بعد توصيل الكاميرا إلى لوحة الراسبيري باي ، من قائمة البدء ثم preferences قم بفتح Raspberry Pi Configuration Tool
تأكد من أن الكاميرا مفعلة كما هو موضح بالصوة أدناه :
إذا لم تكن مفعلة قم بتفعيلها عن طريق اختيار (Enable) ، ثم قم بإعادة تشغيل نظام الراسبيري باي.
الآن قم بفتح ملف modules عن طريق إدخال الأمر التالي عبر الـ Terminal.
sudo nano /etc/modules
قم بإدخال السطر التالي في الجزء السفلي من الملف إذا لم يكن موجودا بالفعل، وبمجرد الإنتهاء قم بحفظ والخروج من الملف عبر الضغط على ctrl+x ثم y .
bcm2835-v4l2
الآن قم بإعادة تشغيل الراسبيري باي. بعد ذلك، يجب أن تكون قادر على الوصول إلى صفحة الويب التي تعرض البث المباشر عبر عنوان IP الخاص بالراسبيري باي
YourIPAddress:8081
هنا خادم كاميرا الراسبيري باي يمكن الوصول إليها داخل الشبكة المحلية. إذا كنت ترغب في السماح بالوصول الخارجي إليها قم بتباع التعليمات الموجودة في القسم التالي .
من أجل تمكين الوصول الخارجي إلى خادم الراسبيري باي، سوف تحتاج إلى تغيير بعض الإعدادات في جهاز الـ Router . ومع ذلك تم تصميم أجهزة الـ routers بشكل مختلف لذلك قد تحتاج إلى البحث عن التعليمات الخاصة بجهاز الـ router الخاص بك.
ملاحظة: فتح منفذ (Port) على شبكة الإنترنت يمكن أن يتسبب في مخاطر أمنية .
– أولا ، انتقل إلى صفحة router adimn (بالعادة يكون العنوان 192.168.1.1 أو 192.168.1.254)
– بعد ذلك، قم بإدخال اسم المستخدم وكلمة المرور. الإفتراضي تكون admin , adimn.
– ثم قم بالذهاب إلى Advanced ، ثم Nat ، ثم قم بالضغط على Port Mapping .
– هنا قم بإدخال التالي :
Protocol : TCP/UDP ■
External start port: 8081 ■
External end port: 8081 ■
(Internal host: (Address of your Pi ■
Internal port: 8081 ■
Enable: Enable ■
يجب أن تكون الآن قادر على الإتصال ببث الـ webcam على الراسبيري باي من خارج الشبكة. قد تحتاج إلى إعادة تشغيل الـ Router لتصبح التغييرات مفعلة.
– تحقق من إعدادات جهاز router الخاص بك وتأكد من صحتها.
– تحقق من عنوان الـ IP انه لم يتغير . يمكنك إعداد Dynamic dns لمواجهة هذا.
– إعادة تشغيل الـ router .
في هذا الدرس سنتعلم كيفية تشغيل الراسبيري باي عن طريق البطاريات. حيث أن ذلك من الطرق المفيدة لكي تجعل الراسبيري باي خاصتك تعمل بدون التوصيل بمصدر طاقة ثابت.
أسلاك توصيل Female / Male jumper
جهاز قياس فولت وتيار متعدد Multimeter
نقوم بتوصيل طرفى حامل البطاريات على المدخلين IN+ و IN- لمحول الفولت DC-DC Converter بحيث يتم توصيل السلك الأحمر بـ IN+ و السلك الأسود بـ IN- كالصورة التالية.
نقوم بلحام طرفى توصيل Pin Header Male فى طرفى المخرج من محول الفولت DC-DC Converter كالتالي.
نقوم بتركيب البطاريات الأربعة من المقاس AA فى أماكنهم، ثم تشغيل مفتاح التشغيل الملحق بحامل البطاريات.
الآن نقوم بضبط الفولت الخارج من الـ DC-DC Converter عن طريق قياس هذا الفولت بمقاس الفولت والتيار المتعدد Multimeter وذلك بضبطه على قياس الفولت المستمر DC ونقيس طرفى المخرج، ثم نقوم بظبط المكثف المتغير بإستخدام أى مفك رفيع حتى يصبح الفولت الخارج 5 فولت كالتالي.
نقوم بالتوصيل بين طرفى التوصيل Pin Header والراسبيري باي عن طريق أسلاك التوصيل Female / Female بحيث يتم توصيل السلك الأحمر بالـ 5 فولت والسلك الأسود بالـ GND كالتالي.
فى هذا الدرس سنتعلم كيفية توصيل مؤقت الساعة الحقيقي Real Time Clock – RTC على الراسبيري باي عن طريق بروتوكول I2C، حيث سيمكننا ذلك من جعل توقيت الراسبري باي يعمل بإستمرار حتى مع قطع التيار الكهربي عنها.
فمؤقت الساعة الحقيقي RTC هو عنصر فى غاية الأهمية لأي مشروع تحكم خاصة لو كان المشروع يقوم بتخزين معلومات وقياسات معتمدة على الوقت والتاريخ، فهذا الموديول يجعل الوقت والتاريخ يعملان بإستمرار وذلك بسبب البطارية طويلة المدى المدمجة فيه.
مؤقت ساعة حقيقي Real Time Colck – RTC
أسلاك توصيل Female / Female jumper
نقوم بتوصيل الدائرة كما فى الصورة التالية مع ملاحظة أن هذا الموديول يعتمد على الشريحة DS3231 وهي تعمل على جهد 3.3 فولت، لذلك هي مناسبة لتعمل على الراسبري باي مباشرة بدون أي مكونات أخرى.
في البداية نقوم بفتح الـ Terminal الخاص بالراسبري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه الـ SSH الخاصة بها من جهاز آخر مربوط معها علي نفس الشبكة كما تم شرحه في الدرس الخامس.
فى البداية نقوم بتحديث نظام تشغيل الراسبيري باي.
sudo apt-get update sudo apt-get –y upgrade
ثم نقوم بالتعديل في أحد ملفات النظام كالتالي.
sudo nano /etc/modules
قم بإضافة السطر التالي (rtc-ds1307) داخل ملف modules الذى قمنا بفتحه بمحرك النصوص Nano، ثم نقوم بالضغط على Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.
نقوم بإعادة تشغيل الراسبري باي كالتالي.
sudo reboot
نقوم بتشغيل الراسبري باي وكتابة الأمر التالي، إذا كنت تستخدم راسبيرى باى ذات الإصدار Rev 1، ستحتاج لتغيير الرقم 1 فى آخر الأمر وإستبدالة بـ 0.
sudo i2cdetect -y 1
سوف تشاهد التالي بعد كتابة الأمر.
فى هذه التجربة يكون 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
ثم نقوم بالضغط على Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.
لاحظ أنه يجب تغيير العنوان 0x68 للعنوان الذي سيظهر لك من الخطوة السابقة، وكذلك إذا كنت تستخدم راسبيري باي Rev1 نقم بتغيير i2c-1 إلى i2c-0.
نقوم بإعادة تشغيل الراسبيري باي مرة أخرى.
sudo reboot
بعد إعادة التشغيل إذا قمت بكتابة أمر i2cdetect ستلاحظ أن عنوان الموديول قد تغير إلى UU، وهذا دليل على أن الموديول يعمل جيداً.
sudo i2cdetect -y 1
الآن نقوم بضبط إعدادات الوقت والتاريخ من خلال الأمر التالي.
sudo raspi-config
نقوم بإختيار Internationalisation Options ثم Change Timezone وتختار بعد المنطقة والدولة التى تقيم بها.
يمكنك قراءة وقت وتاريخ الراسبيري باي بالأمر التالي.
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
في هذا الدرس سنتعلم كيفية توصيل حساس تحديد المسافات Ultrasonic Module بالراسبيري باي، حيث سيمكِنك هذا الحساس من تصميم الروبوتات التى تتفادى العوائق من حولها حتى وهي تتحرك في الظلام.
فيعتمد هذا الحساس على إرسال موجات فوق سمعية وإستقبالها مرة أخرى ويمكن من خلال حساب فرق الزمن بين الموجة المرسلة والموجة المستقبلة من تحديد مواقع العوائق وهذه الطريقة هي نفس طريقة الرؤية لدى الخفافيش فهي لا تملك أعين ولكنها تستطيع الطيران بسهولة وتفادي العوائق.
حساس تحديد المسافات Ultrasonic Module
أسلاك توصيل Female / Female jumper
أسلاك توصيل Female / Male jumper
مقاومة 1.2 كيلو أوم
نقوم بتوصيل الدائرة كما في الصورة التالية مع ملاحظة أن هذا الموديول يعمل على فرق جهد 5 فولت ، لذلك علينا أن نكُون دائرة لتقسيم الجهد بالمقاومات حتى نستطيع إستقبال الإشارات القادمة من الحساس بدون أي تأثير على الراسبيري باي.
توصيل هذه الدائرة سهل وبسيط ولكن الأساس بها مراعاة أن حساس الـ ultrasonic يعمل على 5 فولت وأن الراسبيري باي تعمل على 3 فولت، فيجب علينا تقسيم الفولت الخارج من الحساس لكي يصل للراسبيري باي كفولت منخض ولا يحرق الدائرة، كل ذلك يتم بإستخدام مقاومتين أحدهما كبيرة 2.2 كيلوأوم والأخري صغيرة 1.2 كيلوأوم كالتالي.
فى البداية نقوم بفتح الـ Terminal الخاص ب الراسبيري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه الـ SSH الخاصة بها من جهاز آخر مربوط معها علي نفس الشبكة كما تم شرحه في الدرس الخامس.
الأساس في هذا الكود هو المعادلة الحسابية التي يعمل عليها الحساس حيث أن السرعة التي يتحرك بها أي جسم تساوي المسافة التي تحركها مقسومة على الزمن الذي احتاجه لقطع هذه المسافة.
ومنها نحصل على معادلة المسافة والتى تقسم على 2 وذلك حيث أن الصوت المرسل من حساس الـ Ultrasonic يتحرك مرتين مره ذهاباً حتى يصطدم بالجسم الذي أمامه ويعود مرة أخرى للحساس.
فى البداية نقوم بفتح ملف بايثون ونسميه ultrasonic.py
sudo nano ultrasonic.py
ثم نقوم بكتابة الكود التالي بداخله.
import RPi.GPIO as GPIO #Import GPIO library import time #Import time library GPIO.setmode(GPIO.BCM) #Set GPIO pin numbering TRIG = 4 #Associate pin 4 to TRIG ECHO = 17 #Associate pin 17 to ECHO print "Distance measurement in progress" GPIO.setup(TRIG,GPIO.OUT) #Set pin as GPIO out GPIO.setup(ECHO,GPIO.IN) #Set pin as GPIO in while True: GPIO.output(TRIG, False) #Set TRIG as LOW print "Waitng For Sensor To Settle" time.sleep(2) #Delay of 2 seconds GPIO.output(TRIG, True) #Set TRIG as HIGH time.sleep(0.00001) #Delay of 0.00001 seconds GPIO.output(TRIG, False) #Set TRIG as LOW while GPIO.input(ECHO)==0: #Check whether the ECHO is LOW pulse_start = time.time() #Saves the last known time of LOW pulse while GPIO.input(ECHO)==1: #Check whether the ECHO is HIGH pulse_end = time.time() #Saves the last known time of HIGH pulse pulse_duration = pulse_end - pulse_start #Get pulse duration to a variable distance = pulse_duration * 17150 #Multiply pulse duration by 17150 to get distance distance = round(distance, 2) #Round to two decimal points if distance > 2 and distance < 400: #Check whether the distance is within range print "Distance:",distance,"cm" #Print distance print "Out Of Range" #display out of range
ثم نقوم بتشغل البرنامج عن طريق الأمر التالي.
sudo python ultrasonic.py
نلاحظ أن البرنامج يعمل ويقوم بعرض المسافة بين حساس الـ ultrasonic والكائن الذى أمام، قم بتغيير المسافة بين الحساس والكائن الذى أمامة ستلاحظ أن المسافة تتغير بالفعل.
أما عن شرح الكود الذي استخدمناه فهو في غاية السهولة حيث يتم إرسال نبضة للرجل Trig مع الأخذ فى الإعتبار مقدار الوقت بين high و الـ low وهو 10 ميكرو ثانية كالتالي.
GPIO.output(TRIG, True) #Set TRIG as HIGH time.sleep(0.00001) #Delay of 0.00001 seconds GPIO.output(TRIG, False) #Set TRIG as LOW
يقوم الحساس بالانتظار حتى تأتي النبضة وتستقبل من خلال الرجل echo فبمجرد إرسال النبضة يقوم بحساب بداية الوقت ثم بمجرد وصول النبضة للحساس يقوم بحساب نهاية الوقت ثم بطرحهم من بعضهم يحصل على الوقت المستغرق لترسل النبضة ثم تستقبل.
while GPIO.input(ECHO)==0: #Check whether the ECHO is LOW pulse_start = time.time() #Saves the last known time of LOW pulse while GPIO.input(ECHO)==1: #Check whether the ECHO is HIGH pulse_end = time.time() #Saves the last known time of HIGH pulse pulse_duration = pulse_end - pulse_start #Get pulse duration to a variable
بمعلومية سرعة الصوت فى الهواء والتى تساوي 343 متر فى الثانية أي تساوي 34300 سنتى متر في الثانية، نقوم بالتعويض في المعادلة لتصبح الصيغة النهاية هي حاصل ضرب الزمن فى 17150، ثم نقوم بالتقريب لأقرب رقمين عشريين.
distance = pulse_duration * 17150 #Multiply pulse duration by 17150 to get distance distance = round(distance, 2) #Round to two decimal points
مع الأخذ في الأعتبار بأن هذا الحساس لا يستطيع الأحساس بالمسافات الأقل من 2 سنتى متر ولا أكثر من 4 أمتار، لذلك يتم إضافة الدالة الشرطية التالية.
if distance > 2 and distance < 400: #Check whether the distance is within range print "Distance:",distance,"cm" #Print distance else: print "Out Of Range" #display out of range
فى هذا الدرس سنتعلم كيفية توصيل شاشة OLED عدد نقاطها هو 182×64 ويتم توصيلها على الراسبري باي عن طريق بروتوكول I2C، حيث سيمكننا ذلك من عرض ما نريد وقراءة قيمة أي مستشعر مباشرة على شاشة صغيرة بدون الاضطرار لتوصيل شاشة كبيرة للراسبيري باي ومن أهم مميزات هذه الشاشة هي صغر الحجم ودرجة الوضوح العالية للصورة وإنخفاض إستهلاك الطاقة بدرجة كبيرة.
المكونات المطلوبة
أسلاك توصيل Female / Female jumper
توصيل الدائرة
نقوم بتوصيل الدائرة كما في الصورة التالية ومن الممكن أن نقوم بتوصيلها بإستخدام لوحة التجارب الـ breadboard
الكود البرمجي
فى البداية نقوم بفتح الـ Terminal الخاص بالراسبري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه الـ SSH الخاصة بها من جهاز آخر مربوط معها علي نفس الشبكة كما تم شرحه في الدرس الخامس
في البداية نقوم بتحديث نظام تشغيل الراسبرى باى وتنصيب مكتبة GPIO الخاصة بالتحكم في أطراف الإدخال والإخراج.
sudo apt-get update sudo apt-get install build-essential python-dev python-pip sudo pip install RPi.GPIO
ثم نقوم بتنصيب مكتبات إضافية لتعمل الشاشة على الراسبري باي.
sudo apt-get install python-imaging python-smbus
ثم نقوم بتحميل ملفات مكتبة SSD1306 للتحكم فى الـOLED والمعدة مسبقاً من Adafruit من خلال الأوامر التالية.
sudo apt-get install git git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
نقوم بتغيير المسار إلى الملف الذي قمنا بتنزيلة ونقوم بعمل تنصيب للمكتبة من خلال الأوامر التالية.
cd Adafruit_Python_SSD1306 sudo python setup.py install
بمجرد الإنتهاء من تنصيب المكتبة تصبح جاهزة مباشرة لإستدعائها من خلال أي برنامج Python عن طريق كتابة الأمر التالي في ملف الـ Python.
import Adafruit_SSD1306
سنقوم الآن بالذهاب لملف examples داخل مكتبة الـ OLED لنشغل أحد الأمثلة حتى نتأكد من أن الشاشة تعمل بنجاح وذلك كالتالي.
cd examples sudo python shapes.py
سنلاحظ أن الشاشة تعمل وتعرض مجموعة من الأشكال المختلفة وكذلك كلمة Hello World كالتالي.
يجب ملاحظة أن هذه المكتبة تدعم برتوكول I2C وكذلك SPI وكذلك عدد مختلف من مقاسات الشاشات، فكل ما عليك أن تقوم بتحدد البروتوكول الذي تعمل علية شاشتك وفي هذه الحالة I2C ومقاس الشاشة 128×64، فنقوم بفتح ملف shapes.py من خلال برنامج nano.
sudo nano shapes.py
# 128x32 display with hardware I2C: disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST) # 128x64 display with hardware I2C: # disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) # Alternatively you can specify an explicit I2C bus number, for example # with the 128x32 display you would use: # disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2) # 128x32 display with hardware SPI: # disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000)) # 128x64 display with hardware SPI: # disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
كل ما عليك هو أن تقوم بإزالة علامة # من أمام البروتوكل والمقاس المناسب لشاشتك ووضعها قبل كل المقاسات الأخرى، وفى حالة الشاشة المستخدمة هنا
# 128x64 display with hardware I2C: # disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
بإمكانك قراءة المزيد ومراجعة الكود المكتوب فى برنامج py فهو سهل وبسيط حيث يقوم برسم مجموعة من الخطوط عن طريق الأمر draw وكذلك طباعة كلمة Hello World مثل التالي.
draw.ellipse draw.rectangle draw.polygon draw.line draw.text((x, top), 'Hello', font=font, fill=255)
هناك مجموعة من الأمثلة فى ملف examples أحدها يسمى py وهو يقوم بعرض صورة قطة على الشاشة وأخر إسمه animated.py يمكنك من تحريك نص على الشاشة، يمكنك بسهولة قراءة الكود المكتوب والتعديل فيه ليناسب إحتياجاتك.
فى هذا الدرس سنتعلم كيفية توصيل شاشة LCD عدد أحرفها هو 16 حرف طولى وعدد أسطرها هو سطرين، حيث سيمكننا ذلك من عرض ما نريد وقراءته قيمة أى حساسات مباشرة على شاشة صغيرة بدون الإضطرار لتوصيل شاشة كبيرة للراسبيري باي أو إستخدام جهاز حاسب آخر لعرض ما نريد.
المكونات المطلوبة
أسلاك توصيل Female / Female jumper
أسلاك توصيل Female / Male jumper
توصيل الدائرة
نقوم بلحام الـ Pin Header المرفق مع الشاشة كالتالى.
نقوم بتوصيل الدائرة كما فى الصورة التالية ومن الممكن أن نقوم بتوصيلها بإستخدام لوحة التجارب الـ breadboard
الكود البرمجي
في البداية نقوم بفتح الـ Terminal الخاص ب الراسبري باي وكتابة الأوامر التالية أو نقوم بفتح نافذة الـ SSH الخاصة بها من جهاز آخر مربوط معها على نفس الشبكة كما تم شرحه في الدرس الخامس.
في البداية يجب ان نقوم بتحميل ملفات مكتبة التحكم فى الـ LCD والمعدة مسبقاً من Adafruit من خلال الأمر التالي.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
نقوم بتغيير المسار إلى الملف الذى قمنا بتنزيلة ونقوم بعمل تنصيب للمكتبة من خلال الأوامر التالية.
cd ./Adafruit_Python_CharLCD sudo python setup.py install
بمجرد الإنتهاء من تنصيب المكتبة تصبح جاهزة مباشرة لإستدعائها من خلال أى برنامج Python عن طريق كتابة الأمر التالي فى ملف الـ Python
import Adafruit_CharLCD as LCD
سنقوم الآن بكتابة كود بسيط لتوضيح كيفية إستخدام المكتبة والتحكم فى الشاشة، عن طريق سطر أوامر لينكس Terminal نقوم بكتابة الأمر التالي لفتح ملف جديد وكتابة كود بلغة الـ Python به.
sudo nano ~/Adafruit_Python_CharLCD/Adafruit_CharLCD/GeeksValley_LCD.py
ثم نقوم بكتابة الكود التالي بداخله والذي يقوم بإختبار مجموعة من الأوامر الأساسية فى إستخدام الـ LCD
#!/usr/bin/python # Example using a character LCD connected to a Raspberry Pi import time import Adafruit_CharLCD as LCD # Raspberry Pi pin setup lcd_rs = 27 lcd_en = 22 lcd_d4 = 25 lcd_d5 = 24 lcd_d6 = 23 lcd_d7 = 18 lcd_backlight = 2 # Define LCD column and row size for 16x2 LCD. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) lcd.message('Hello\nworld!') # Wait 5 seconds time.sleep(5.0) lcd.clear() text = raw_input("Type Something to be displayed: ") lcd.message(text) # Wait 5 seconds time.sleep(5.0) lcd.clear() lcd.message('Goodbye\nWorld!') time.sleep(5.0) lcd.clear()
البرنامج السابق هو برنامج بسيط جداً حيث تم تعريف الأرجل التى تم توصيل الـ LCD بها ويمكنك تغير هذه الأرجل كما تشاء، ثم تم تعريف عدد الأسطر والصفوف فى الشاشة، ثم بعد ذلك تم تمرير هذه المتغيرات للمكتبة عن طريق الأمر LCD.Adafruit_CharLCD.
يقوم البرنامج السابق بمجرد تشغيله بعرض كلمة Hello World لمدة 5 ثوانى .
بعد ذلك يقوم البرنامج بطباعة جملة Goodbye World على الشاشة لمدة خمس ثوانى أخرى.
ثم بعد ذلك يقوم البرنامج بمسح الشاشة وتركها خالية.
هناك الكتير من الأوامر الخاصة بهذه المكتبة وهذه المجموعة من أهمها.
home()– يقوم هذا الأمر بتحريك نقطة الكتابة لأول الشاشة
clear()– يقوم بمسح كل ما هو مكتوب على الشاشة
set_cursor(col, row)– يقوم هذا الأمر بتحديد نقطة الكتابة على الشاشة وذلك بتحديد رقم العمود col وكذلك رقم السطر row
show_cursor(show)– يقوم بعرض نقطة الكتابة على الشاشة
blink(blink)– يقوم بومض نقطة الكتابة على الشاشة
move_left()or move_right() – يقوم بتحريك نقطة الكتابة على الشاشة يميناً ويساراً
set_right_to_left()or set_left_to_right() – يقوم بتغيير إتجاه الكتابة من اليمين لليسار ومن اليسار لليمين
message(text)– ببساطة نقوم بكتابة النص المراد عرضه على الشاشة
فى هذا الدرس سنتعلم كيفية جعل برامج البايثون تعمل بشكل تلقائي أو فى وقت محدد على الراسبيري باي بإستخدام طريقة Crontab وهذه تعتبر من أهم الخطوات لكى تصبح الراسبيري باي منصة مستقلة لمشاريع الأنظمة المدمجة.
فى البداية نقوم بفتح ال Terminal الخاص ب الراسبيري باي وكتابة الأوامر التالىة أو نقوم بفتح نافذه ال SSH الخاصة بها من جهاز آخر مربوط معها على نفس الشبكة كما تم شرحة فى الدرس الخامس.
نقوم بفتح محرر النصوص Nano ويقوم بإنشاء ملف البرنامج الذى نريد تشغيلة مع فتح الراسبري باي وليكن اسمه print.py
nano print.py
نقوم بكتابة الكود بداخلة بلغة البايثون python وللتوضيح سأقوم بكتابة برنامج يقوم بطباعة كلمة Hello World! ويقوم بطباعة الوقت والتاريخ الحالى.
#!/bin/python import datetime print “Hello World!” print datetime.datetime.now()
ثم نقوم بالضغط علي Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.
نقوم بإنشاء directory جديد لنضع الكود بداخلة ونسمية launcher ونوجه الـ terminal لهذا المسار الجديد ونقوم بإنشاء برنامج shell script.
mkdir launcher cd launcher nano launcher.sh
فى هذا البرنامج نكتب الكود التالى الذى يقوم بتوجيه الـ terminal إلى مكان تواجد كود البايثون المراد تنفيذه وكذلك بدأ تشغيله.
#!/bin/bash cd / cd home/pi sudo python print.py
ثم نقوم بالضغط علي Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.
نحتاج الآن أن نجعل هذا البرنامج excutable كالتالي.
chmod 755 launcher.sh
نقوم بإنشاء directory جديد بإسم logs فى الـ home وهو لكى يقوم الـ crontab بكتابة أى رسائل أخطاء هناك.
cd mkdir logs
الـ crontab هو عبارة عن deamon يعمل فى خلفية نظام الـ Linux وهو يتيح لنا تنفيذ برامج فى أوقات محددة.
نقوم بكتابة الأمر التالى لكي يفتح نافذة الـ crontab
sudo crontab -e
نقوم بكتابة الأمر التالي والذى يقوم بتشغيل الـ script مع كل Reboot للراسبري باي وسوف تلاحظ أنه أمر بسيط جداً فقط نقوم بكتابة @ ثم متى نريد تنفيذ هذا الأمر ثم مسار الملف المراد تنفيذه وهنا كي يتضح المثال سنقوم بعمل حفظ لناتج تنفيذ الأمر فى file بإسم cronlog فى directory الـ logs الذى قمنا بإنشائه مسبقاً عن طريق (<<) وهى تقوم بالإستمرار فى الحفظ فى نفس الملف ثم نقوم بعمل redirection للـ standard error فى الـ standard out عن طريق كتابة 2>&1.
@reboot sh /home/pi/launcher/launcher.sh >>/home/pi/logs/cronlog 2>&1
نقوم بعمل أعادة تشغيل للراسبري باى عن طريق الأمر التالي.
sudo reboot
إذا قمنا الآن بفتح الـفايل cronlog سنجد أنه قد طبع بداخلة كلمة Hello World! ومن بعدها التاريخ والوقت ، وفى كل مرة نعيد تشغيل الجهاز فيها سيقوم بنفس الكتابة مجدداً مما يعنى أن الـ crontab يعمل جيداً.
الآن إذا أردت تنفيذ أمر معين فى وقت محدد كل ما عليك هو إتباع الـ format التالي فى الأمر.
MIN HOUR DOM MON DOW CMD
الخانة | الوصف | القيم المتاحة |
MIN | الدقائق | 0 to 59 |
HOUR | الساعات | 0 to 23 |
DOM | يوم فى الشهر | 1 to 31 |
MON | الشهر | 1 to 12 |
DOW | يوم فى الأسبوع | 0 to 6 |
CMD | الأمر المراد تنفيذه | – |
وإذا أرت التكرار بشكل منتظم قم بإستبدل الخانة المراد التكرار فيها بـ * بدلاً من القيمة.
فمثلا إذا أردت تنفيذ البرنامج السابق فى وقت محدد وكتبت التالى فى الـ crontab.
30 08 10 06 * /home/pi/launcher/launcher.sh
فهذا يعنى التالى :
30 => 30 دقيقة
08 => الساعة الثامنة صباحاً
10 => اليوم العاشر من الشهر
06 => شهر يونيو
* => أى يوم من أيام الأسبوع
مثلاً أيضاً أذا أردت تنفيذ برنامج كل دقيقة فما عليك إلا الكود التالي.
* * * * * /home/pi/launcher/launcher.sh
أما إستخدام @ يكون كالتالي:
الأمر | يساوى | المعنى |
@yearly | 0 0 1 1 * | كل عام |
@daily | 0 0 * * * | كل يوم |
@hourly | 0 * * * * | كل ساعة |
@reboot | – | مع كل إعادة تشغيل |
فى هذا الدرس سنتعلم كيفية إسخدام الراسبيرى باى كجهاز راديو لإرسال الأصوات عن طريق موجات ال FM ويتم ذلك عن طريق ال hardware المدمج فى الراسبيرى باى الذى يقوم بتوليد spread-spectrum clock من خلال أحد أطراف ال GPIO وهو GPIO4 وكل ما تحتاج إضافته هو سلك لهذا الطرف كي يحدث التذبذب حولة وتنتشر الموجات لمسافة كبيره تصل إلى 100 متر ومن الممكن أن لا تستخدم هذا الهوائي ولكن مدى الراديو سيقل إلى 10 cm فقط.
سلك توصيل طوله أكبر من 75 cm
قطعة Heat Shrink
توصيل الدائرة
نقوم بقياس 75 cm من كابل التوصيل (من الممكن أن يقل الكابل عن هذا الطول ولكن كلما قل طوله كلما قلت المساحة المغطاه لبث الراديو)، ونقوم بلحامه فى طرف واحد من سلك التوصيل ال Female بإستخدام مكواة اللحام كالتالي ويكون مجال بث هذا الهوائي حوالي 100 متر .
نقوم بإستخدام قطعة ال heat shrink لتغطية مكان اللحام ثم نقوم بتسخينها بإستخدام قداحة حتى تنكمش على السلك لتقوم بحمايته كالتالي :
نقوم بتوصيل الكابل السابق الإعداد فى الطرف رقم 7 من ارجل التوصيل GPIO وهو GPIO4.
الكود البرمجى
فى البداية نقوم بفتح ال Terminal الخاص ب الراسبيري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه ال SSH الخاصة بها من جهاز آخر مربوط معها على نفس الشبكة كما تم شرحة فى الدرس الخامس.
نقوم بكتابة الأمر التالي وهو يقوم بتزيل مالفات PiFm الخاصة بتحويل الراسبيري باي لجهاز إرسال وهي تكون مضغوطة في ملف من النوع tar.
wget http://omattos.com/pifm.tar.gz
نقوم بفك ضغط الملفات التي تم إنزالها عن طريق الأمر التالي.
tar -xvf pifm.tar.gz
نقوم بالـتأكد أنه تم فك ضغط كل الملفات التي تقوم بتشغيل الراديو عن طريق الأمر ls الذي يعرض محتويات المجلد المتواجدين فيه.
نقوم بكتابة الأمر التالى الذي بدورة يقوم بتشغيل الراديو على تردد ال FM الذى نكتبة فى نهاية الأمر فقد أستخدمت تردد 93.7 MHz وهو تردد لا ينتمي لأى قناه إذاعية وكذلك قمت بإختار التسجيل المرفق مع الملفات المسمي sound.wav ولكنك تستطيع تغيره إلى أى تسجيل تفضلة على أى يكون إمتداده .wav وليس .mp3 ويكون أيضاً 16-bit mono
sudo ./pifm sound.wav 93.7
إذا أرت فى أى وقت وقف الصوت ما عليك سوى الضغط على ctrl + c فيتوقف الصوت المرسل تماماً.
الآن ما عليك سوى أن تستخدم أى جهاز راديو وليكن الراديو المدمج فى هاتفك المحمول وتختار التردد الذى قمت بكتابته فى الأمر السابق وهو 7 MHz، فسوف تستمع للمقطوعة التى قمت بتشغيلها من الراسبيري باي.
فى هذا الدرس سنتعلم كيفية زيادة السرعة Overclocking للراسبيري باي مع الأخذ فى الإعتبار أن درجة الحرارة لن تزيد عن 50 أو 60 درجة مئوية.
في البداية يجب أن تلاحظ أن كسر السرعة فى الراسبيري باي كان يؤدى إلى فقد الضمان قبل عام 2012 حيث أن مؤسسة راسبري فاونديشن لم تكن تدعم كسر السرعة وذلك لخطورته على حرق اللوحة بسبب زيادة درجة الحرارة عليها بشكل كبير، ولكنها بعد ذلك قامت بدعم كسر السرعة في نظام راسبيان بما يحافظ على اللوحات ولا يعرضها للخطر وذلك فى كل الإصدارات من راسبري باي 1 و B+ و 2 ماعدا راسبري باي 3 حيث أن تعطى أداء يقارب أقصى إمكانيات ممكنة فى اللوحة فلا داعي لكسر السرعة.
بإمكانك بسهولة تغير تفعيل كسر السرعة من قائمة خصائص الراسبيري باي Raspi-config كالتالي فبإمكانك الإختيار من مجموعة من الإعدادات المعدة مسبقاً التي بإمكانها أن تصل الراسبيري باي حتى تردد 1000 ميجاهرتز.
أو من خلال سطر أوامر لينكس وذلك بالتعديل على ملف 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
فى هذا الدرس سنتعلم كيفية عمل زر لإغلاق الراسبرى باى بشكل آمن بدون الإضطرار لإغلاقها من خلال أمر الإغلاق ولا فصل مصدر الطاقة عنها.
نقوم بقص سلك التوصيل لنصفين متساويين فى الطول ثم نقوم بقطع جزء من الغلاف البلاستيكي الحامي للسلك حتى يظهر جزء مناسب من السلك فنستطيع لحامه فى زر الضغط.
نقوم بلحام طرفيى السلكين فى طرفى رز الضغط كالتالي.
إذا كان زر الضغط من ذوى الأربعة أطراف فعليك ملاحظة الصورة التالية وأن تقوم بلحام طرفى الأسلاك فى النقطتين A,B أو C,D.
كل ما عليك فعله الآن هو إختيار أحد أرجل التوصيل GPIO المناسبة والتى ستختلف طبقاً لنوع الراسبرى باى المستخدمة، في حالتي هذه أستخدم راسبرى باى موديل B+ فقمت بإختيار أقرب رجل توصيل لأحد رجول الأرضي GND وكانت هى الرجل GPIO7نا للا وبإمكانك إختيار ما تريد.
نقوم بتوصيل الزر السابق الإعداد فى الطرفين رقم 26 و رقم 25 من أرجل التوصيل GPIO كالتالي
فى البداية نقوم بفتح ال Terminal الخاص ب الراسبري باي وكتابة الأوامر التالية أو نقوم بفتح نافذه الـ SSH الخاصة بها من جهاز آخر مربوط معها على نفس الشبكة كما تم شرحة فى الدرس الخامس.
نقوم بكتابة الأمر التالي الذى يقوم بفتح محرر النصوص الشهير Nano ويقوم بإنشاء ملف اسمه off_button_pi.py لكتابة الكود بداخلة بلغة البايثون python.
nano off_button_pi.py
نقوم بكتابة الكود التالي بداخل الملف السابق
ثم نقوم بالضغط على Ctrl+O ثم enter ثم ctrl+X وذلك لحفظ الملف السابق.
وكما نلاحظ الكود بسيط جداً يعتمد على إستدعاء مكتبتين رئيسيتين وهما GPIO وهى للتعامل مع أرجل التوصيل وجعل الرجل الموصلة على زر الضغط تعمل كطرف إدخال، وكذلك لتشغيل الـ Pull Up Resistor الداخلية فى الراسبرى باى فيمكننا بذلك جعل رجل التوصيل موصلة دائماً على فولت Highوعند الضغط فقط على الزر تصبح موصلة بـ Low
ومكتبة os وهى الأهم هنا حيث تمكننا من التعامل مع نظام التشغيل وارسال أوامر له عن طريق كود البايثون فنستخدمها داخل أمر try الذى يتنظر أن يتم الضغط على الزرعن طريق أمر GPIO.wait_for_edge ليقوم بعد ذلك بإرسال الأمر sudo shutdown -h now ليغلق الراسبرى باى بطريقة سليمة.
إذا كنت تريد تغيير رجل التوصيل GPIO كل ماعليك هو تغيّر رقمها فى الملف السابق gpio_pin_number لتصبح تساوى رقم الـ GPIO الأخرى التى تريد إستخدامها.
يبقى لنا خطوة واحده وهى أن نجعل هذا البرنامج يعمل تلقائياً عند فتح الراسبرى باى وذلك بفتح الملف rc.local بمحرر النصوص Nano مع كتابة sudo قبل الأمر وذلك ليعطى للمستخدم صلاحيات الـ super user فيمكنك تعديل هذا الملف.
sudo nano /etc/rc.local
نقوم بإضافة مسار الملف الذى قمنا بإنشائه فى آخر rc.local قبل exit 0 مع كتابة اسم اللغة المستخدمة فى كتابة البرنامج قبل المسار وهى python كالتالى.
ثم نقوم بالضغط على Ctrl+O ثم enter ثم Ctrl+X وذلك لحفظ الملف السابق.
كل ما تبقى عليك هو عمل reboot للراسبرى باى هكذا.
sudo reboot
تستطيع الآن الضغط على زر الإغلاق وهو سيقوم بطريقة سليمة وصحيحة بإغلاق الراسبرى باى.