تصميم وبرمجة جهاز ذكي لإنترنت الأشياء | الوحدة السابعة | الدرس الثاني

تصميم وبرمجة جهاز ذكي لإنترنت الأشياء هو عنوان الدرس الثاني من الوحدة السابعة التي تحمل اسم ” الرسائل في إنترنت الأشياء” في القسم الثاني من مقرر “إنترنت الأشياء 2-1”.
ستتعرف في هذا الموضوع على كيفية تصميم وبرمجة جهاز ذكي لإنترنت الأشياء، وذلك بالتعرُّف على مكوّنات وأدوات المشروع، وإنشاء نموذج أوَّلي باستخدام الأردينو، والتعرُّف على كيفية الاتّصال بوسيط EMQX مع MQTTX، بالإضافة إلى برمجة الأردينو للمشروع.
لذا قم بقراءة نواتج التعلُّم بعناية، ثم أعد قراءتها وتأكد من تحصيل محتوياتها بعد انتهائك من دراسة الموضوع.
أهداف التعلُّم
- معرفة مكونّات وأدوات مشروع إدارة النفايات الذكية.
- إنشاء النموذج الأوّلي باستخدام الأردوينو لمشروع إدارة النفايات.
- كيفية تكوين الاتّصال بوسيط EMQX مع MQTTX.
- برمجة الأردوينو لتصميم جهاز ذكي لإنترنت الأشياء.
هيا لنبدأ!
إدارة النفايات الذكية (Smart Waste Management)
نظرًا للاكتظاظ السكاني قد لا يتم جمع ومعالجة كميات كبيرة جدًا من النفايات والمخلفات بكفاءة؛ مما يتسبب في زيادة كبيرة من كمية النفايات في عدة أماكن.
تحدث هذه المشكلة بسبب تجاوز سعة حاويات القمامة دون ازالتها في الوقت المناسب.
كيف يمكن حل هذه المشكلة باستخدام تقنيات انترنت الأشياء؟
باستخدام حاوية النفايات الذكية:
- يمكن أن يتم إرسال رسائل تنبيهية لإعلام مركبات جمع النفايات بهذه الحاويات.
- وأيضًا من خلال تحليل البيانات الملائمة يمكن استنباط الأفكار حول كيفية تعبئة حاويات النفايات لتحسين العملية برمتها بشكل أكثر كفاءة .
- سنُنشئ نموذجًا أوليًا لحاوية قمامة.
- تحسب متوسط عدد المرات المطلوبة لتصل إلى سعتها الكاملة.
- سيتم إرسال رسالة إلى وسيط MQTT كل مرة يتم فيها استخدام الحاوية .
- عند امتلاء الحاوية يتم ارسال رسالة اخرى إلى متحكم النظام الذي ينتج التقارير.
سنستخدم في هذا المشروع:
- متحكم أردوينو يمثل حاوية ذكية.
- سنقوم ببرمجته باستخدام بروتوكول Firmata وبايثون.
- سنستخدم منصة MQTT لتوزيع الرسائل.
مكونات وأدوات المشروع (Components & Tools for Project)
- الترانزستور الضوئي (Phototransistor)
هو مكون كهربائي يعمل عند تعرضه للضوء حيث تتدفق كمية متناسبة من التيار العكسي عند سقوط الضوء على المستشعر.
تستخدم أجهزة الترانزستورات على نطاق واسع لاكتشاف وتحويل نبضات الاضاءة إلى اشارات كهربائية.
- مستشعر الإمالة (Tilt Sensor)
يتم استخدام مستشعر الامالة لقياس درجة الميل على عدة محاور تقوم مستشعرات الإمالة بتقييم وضع الميل بالنسبة للجاذبية وتستخدم في تطبيقات مختلفة حيث تجعل اكتشاف الميل أو الاتجاه أمرًا ميسورًا.
النموذج الأولي باستخدام الأردوينو (Arduino Prototype)
- سيراقب متحكم الأردوينو حالة الحاوية.
- يجمع بيانات الأحداث المختلفة ويرسلها من خلال بروتوكول Firmata.
- سيتم استخدام مستشعر الإمالة لتسجيل استخدام الحاوية في كل مرة .
- محاكاة حركة غطاء الحاوية.
- سيعمل الترانزستور الضوئي كمستشعر عند الوصول إلى حد معين مما يعني أن الحاوية مليئة بالنفايات.
سنحتاج إلى المكونات التالية:
- لوحة أردوينو أونو Arduino Uno R3) R3).
- لوحة توصيل الدوائر الصغيرة Breadboard Small.
- ترانزستور ضوئي Phototransistor.
- مستشعر إمالة Tilt Sensor.
- مقاومتان 1 كيلو أوم (Two Transistor 1KΩ).
الاتصال بوسيط EMQX العام (Connecting to the EMQX Public Broker)
- سنحتاج إلى تثبيت التطبيق المكتبي MQTTX Client.
- اختبار الاتصال مع وسيط EMQX العام.
لتثبيت موقع Agent MQTTX:
- قم بزيارة موقع الويب: http://mqttx.app/.
- تنزيل أحدث إصدار.
- قم بتشغيل المثبت لإكمال عملية التثبيت.
سنقوم الآن بفتح البرنامج العميل، وإنشاء اتصال جديد مع وسيط MQTTX.
تكوين الاتصال بوسيط EMQX مع MQTTX:
- اضغط على زر البحث في نظام التشغيل. واكتب MQTTX
- افتح تطبيق MQTTX client.
- اضغط على new connection (اتصال جديد). لإنشاء اتصال جديد.
- اكتب اسمًا للاتصال على سبيل المثال desktop_connection.
- اضغط على زر connect (الاتصال).
دائرة الأردوينو (Arduino Circuit)
سنبدأ في إنشاء دائرة الأردوينو عن طريق إضافة المكونات المطلوبة داخل مساحة عمل دوائر تينكركاد.
لتثبيت المكونات:
- ابحث عن Arduino Uno R3 من مكتبة Components واسحبها وأفلتها في مساحة العمل.
- ابحث عن Breadboard Small (لوحة توصيل الدوائر الصغيرة) من مكتبة Components (المكونات) واسحبها وأفلتها في مساحة العمل.
- ابحث عن Phototransistor (مستشعر الإضاءة (الترانزستور الضوئي)) من مكتبة Components (المكونات) واسحبه وأفلته في مساحة العمل.
- ابحث عن Tilt Sensor a-pin (مستشعر الإمالة ب 4 أطراف) من مكتبة Components (المكونات) واسحبه وأفلته في مساحة العمل.
- ابحث عن Resistor من مكتبة Components(المكونات) واسحب اثنين منها وأفلتهما في مساحة العمل.
توصيل الترانزستور الضوئي:
- قم بتوصيل طرف Emitter (الباعث) الخاص بالترانزستور الضوئي بالطرف التناظري A0 في الأردوينو وغير لون السلك إلى الأصفر.
- قم بتوصيل الطرف الثاني للمقاومة الواحدة مع الصف نفسه الذي تم توصيل باعث الترانزستور الضوئي به. ثم وصل الطرف الأول من المقاومة بالعمود السالب من لوحة الدوائر الصغيرة.
- قم بتوصيل طرف 5V للوحة الأردوينو أونو R3 بالعمود الموجب من لوحة التجارب وغير لون السلك إلى اللون الأحمر.
- قم بتوصيل GND للوحة الأردوينو أونو بالعمود السالب للوحة التجارب وغير لون السلك إلى اللون الأسود.
- قم بتوصيل طرف المجمع الخاص بالترانزستور الضوئي بالعمود الموجب في لوحة التوصيل.
لتوصيل مستشعر الإمالة:
- قم بتوصيل الطرف الثاني للمقاومة الأخرى بالطرف الثاني لمستشعر الإمالة.
- قم بتوصيل الطرف الثاني من مستشعر الإمالة بالطرف الرقمي 3 للوحة الأردوينو وغير لون السلك إلى الأخضر Green.
- قم بتوصيل الطرف الرابع من مستشعر الإمالة بالعمود الموجب من لوحة الدوائر الصغيرة وغير لون السلك إلى Red.
- قم بتوصيل الطرف الأول من المقاومة بالعمود السالب من لوحة الدوائر الصغيرة وغير لون السلك إلى الأسود .Black
الشكل أعلاه يوضح آلية توصيل لمستشعر الإمالة.
الدائرة بشكلها النهائي (Complete Circuit)
صورة الدائرة الفعلية (Physical Circuit)
تمثِّل هذه الصورة الشكل الذي ستبدو عليه الدائرة.
بإمكانك مراجعة موضوع محتوى “تصميم وبرمجة جهاز ذكي لإنترنت الأشياء” من بدايته وحتى نهاية هذا القسم، من خلال الرابط التالي:
برمجة الأردوينو (Programming the Arduino)
ستبدأ بتحميل بروتوكول Standard Firmata من خلال بيئة العمل Arduino IDE لإعداد قناة اتصال بين الأردوينو والبرنامج الذي ستقوم بكتابته بلغة Python.
افتح PyCharm وقم بتثبيت حزمة paho.mqtt.client من خلال نظام إدارة الحزم pip.
لمعرفة المزيد من المعلومات عن PyCharm، قم بالاطّلاع على الرابط التالي:
في PyCharm، افتح الواجهة الطرفية Terminal في مجلد عملك واستخدام الأمر التالي:
قم بإنشاء ملف بايثون جديد باسم mqtt_Arduino.py .
في بداية المقطع البرمجي، قم باستيراد الحزم التالية:
- datetime: إنشاء طوابع زمنية للرسائل التي نرسلها.
- time: التحكم في سير البرنامج.
- json: العمل مع كائنات JSON.
- pyfirmata: التواصل مع لوحة الأردوينو من خلال بروتوكول Firmata.
- mqtt.client: إنشاء عملاء للتواصل مع وسطاء MQTT..
قم بإنشاء المتغيرات التالية التي سيتم استخدامها لعميل MQTT الذي ستنشئه.
- CLIENT_ID: سيكون اسم العميل.
- MQTT_BROKER: عنوان الوسيط العام الذي توفره EMQX الذي ستتصل به.
- TOPIC: اسم الموضوع الذي سيشترك في العميل.
- PORT: منفذ الخادم الافتراضي للاتصال بالوسيط.
- FLAG_CONNECTED: يستخدم كمتغير إشارة في دالة معالج الأحداث لاحقًا.
الآن قم بإضافة الأسطر التالية، والتي مهمتها الاتصال بالأردوينو باستخدام بروتوكول Firmata وكذلك تكوين الأطراف الخاصة بمستشعر الإضاءة ومستشعر الإمالة المستخدمين للحصول على بيانات.
أنشئ المتغيرات التالية:
- can_full: هو وسم يحدد ما اذا كانت حاوية القمامة قد تم ملؤها أم لا.
- garbage_drops: هو عدد لتتبع مرات الاستخدام لتعبئة الحاوية بالكامل.
بعد ذلك، قم بإنشاء الدالة التالية التي تعيد تعيين متغيري:
- can_full.
- .garbage_drops
في كل مرة تكون فيها الحاوية ممتلئة وترسل رسالة إلى العميل حول هذا الموضوع.
بإمكانك مراجعة موضوع محتوى “تصميم وبرمجة جهاز ذكي لإنترنت الأشياء” بدايةً من عنوان قسم “برمجة الأردوينو” حتى نهاية هذا القسم، من خلال الرابط التالي:
كتابة البرنامج بلغة python
قم بإنشاء الدالة التالية لإرسال رسالة للعميل تفيد بأنه تم استخدام الحاوية.
ستقوم أولًا بإنشاء متغير باسم timestamp لتسجيل الوقت.
وإنشاء كائن قاموس Dictionary بالخصائص التالية:
- .timestamp
- can_full.
- garbage_drops.
ستقوم بتحويل هذا القاموس إلى كائن JSON ثم نشره إلى موضوع المشترك waste/drops من خلال العميل.
قم بإنشاء دالة معالج الأحداث التالية.
مهمتها: ستطبع رسالة تأكيد إلى الواجهة الطرفية Terminal حول نجاح الاتصال بالعميل أو فشله.
وسيطات الدالة هي وسيطات افتراضية تستخدم لربط هذه الدالة لمعالج الأحداث المناسب الذي توفره المكتبة paho.mqtt.client.
ستقوم في الجزء الرئيس من البرنامج بتهيئة عمل MQTT، وربط معالج الأحداث on_connect بالدالة المذكورة أعلاه، ثم الاتصال بوسيط MQTT المحدد والاشتراك في الموضوع المحدد.
قم بإنشاء التكرار الرئيس للبرنامج، إذا كانت قيمة LIGHT_VALUE أقل من 0.200 فستعتبر الحاوية ممتلئة.
البرنامج بشكله النهائي (Complete Code)
اختبار الوسيط (Testing the Broker)
- تعد EMQX وسيط عام لاختبار وتطوير تطبيقات .MQTT
- تساعد EMQX في تطوير النماذج الأولية لتطبيقات إنترنت الأشياء دون الحاجة إلى وضع البنى التحتية وتطوير الوسيط.
- ستستخدم عميل MQTTX CLIENT لتحقق نشر الرسائل.
- ثم ستنشئ مقطعاً برمجياً آخر في بايثون يستقبل الرسائل المنشورة.
- يُنشئ تقارير عن الحاوية ويحلل البيانات الموجودة في تلك التقرير.
- بعد تحميل standard firmata مخطط إلى الأردوينو.
- نفّذ تعليمات بايثون وحرّك لوحة التجارب لتفعيل مستشعر الإمالة.
- في كل مرة يتم تفعيل المستشعر بها، سيتم زيادة عدد النفايات والذي يشير إلى عدد المرات التي تم بها فتح الحاوية افتراضيًا.
- عند تفعيل مستشعر الإمالة مع تغطية مستشعر الإضاءة، سينشر البرنامج رسالة مفادها أن الحاوية ممتلئة ويعيد ضبط عداد النفايات.
ستقوم في الدرس التالي بتحليل البيانات بناء على الرسائل المنشورة.
- لاختبار نشر رسائلك بصورة صحيحة، سنستخدم العميل المكتبي MQTT Agent قبل تنفيذ مقاطع بايثون البرمجية.
- سنستخدم عميل MQTTXللاشتراك في موضوع .waste/drops
- سينتظر العميل الآن استلام الرسائل التي يتم نشرها من خلال برنامج بايثون ويتم توزيعها من خلال وسيط EMQX العام.
استخدام MQTTX للاشتراك في موضوع محدد:
- في قائمة connections (اتصالات) في تبويبة desktop_connection (سطح المكتب). اضغط على زر Network_Subscription (اشتراك جديد).
- في مربع نص (Topic) الموضوع. اكتب “waste/drops”.
- اضغط على زر confirm (تأكيد).
عرض الرسائل من خلال عميل MQTTX (Viewing Messages through the MQTTX Client)
بعد تنفيذ المقاطع البرمجية في بايثون، وبدء تشر الرسائل سيتم استقبال الرسائل من خلال العميل المكتبي MQTTX.
بإمكانك مراجعة موضوع محتوى “تصميم وبرمجة جهاز ذكي لإنترنت الأشياء” بدايةً من عنوان “كتابة البرنامج بلغة python” وحتى نهاية الموضوع، من خلال الرابط التالي:
اختبر تحصيلك لمحتوى الموضوع من خلال الرابط التالي:
الواجب الإلكتروني
إلى هنا يكون قد انتهي موضوع “تصميم وبرمجة جهاز ذكي لإنترنت الأشياء”، لا تنسوا مراجعة نواتج التعلُّم أعلى المقال، وانتظرونا في الموضوع القادم!