تُعد دلاء الحلوى وسيلة جيدة لحمل الحلوى، ولكنك غالبًا لا تعرف ما الذي حصلت عليه بالفعل إلا بعد العودة إلى المنزل وإفراغ كل ما بداخلها، فماذا لو كان دلوك قادرًا على التمييز بين الحلويات الجيدة التي تحبها، وبين الحلويات غير المرغوبة التي قد تعطيها لإخوتك الصغار والتي تُعتبر حيلة، ويتفاعل معها في اللحظة نفسها، من خلال هذا المشروع يمكنك صنع أروع دلو حلوى في مجموعتك بكل تأكيد.
إذا سبق لك جمع الحلوى في المناسبات، فأنت تعلم أن بعض المنازل تقدم حلويات رائعة، وبعضها الآخر ليست كذلك، هذا الدلو الذكي قادر على التعرّف على نوع الحلوى التي تتم إضافتها إليه والتفاعل معها.
قمت بأخذ دلو جاهز وقمت بتعديله ليستوعب المكونات الإلكترونية الخاصة بالمشروع، مع الحفاظ على كونه سهل الحمل وقادرًا على تخزين الحلوى، فعند دخول قطعة حلوى من أعلى الدلو، يتم تشغيل مستشعر الحركة، وتقوم الكاميرا المدمجة بالتقاط صورة لها، ثم يتم تمرير هذه الصورة إلى نموذج تعلم آلي مُدرَّب مسبقًا للتعرّف على نوع الحلوى وتحديد ما إذا كانت من النوع المفضل أم خدعة، وبناءً على هذه النتيجة يكون التفاعل إما من خلال أضواء متحركة مع صوت ضحك، أو من خلال صوت مخيف يقول هذه ليست كافية.
يعتمد هذا المشروع على لوحة Raspberry Pi الشهيرة، بالإضافة إلى مجموعة من المكونات الجاهزة مثل كاميرا USB، ومصابيح RGB من نوع ws2801، ومستشعر حركة صغير PIR، وسماعة صغيرة، وجميع هذه المكونات يمكنها العمل باستخدام البطارية طوال ليلة كاملة من التجول لجمع الحلوى، وقد استخدمت منصة Viam لربط المكونات وبرمجتها، وجمع صور الحلوى من الكاميرا، وتدريب نموذج التعلم الآلي، ثم نشر الكود الخاص بالمشروع بعد الانتهاء من تجهيزه.
تابع معنا وتعرّف على كيفية صنع دلو حلوى ذكي ومخصص بطابعك الخاص.
يُعد الشريط اللاصق الكهربائي أداة مفيدة جدًا في هذه المرحلة.
قد يحتوي شريط الإضاءة على طبقة ورقية خلفية يمكن نزعها حتى يتم وضع الغراء الساخن مباشرة على الشريط، مما يساعد على تثبيته داخل بطانة الدلو بشكل جيد، كما أن إضافة بعض الشريط اللاصق الكهربائي كإجراء إضافي يضمن بقاء الشريط في مكانه أثناء متابعة العمل داخل الدلو، احرص على أن يكون الطرف الذي يحتوي على دبابيس التوصيل الذكرية ممتدًا عبر فتحة الوصول السفلية للدلو.
قم بقص فتحة في البطانة على مسافة تقارب ثلث ارتفاع الدلو من الأعلى بحيث تكون مناسبة تمامًا لعدسة الكاميرا، استخدم المزيد من الشريط اللاصق الكهربائي لتثبيت الكاميرا مؤقتًا في مكانها، وذلك قبل تثبيت الجزء الخلفي من الكاميرا بالغراء الساخن على البطانة الخارجية عند إغلاق المشروع بالكامل في خطوة لاحقة، ثم مرّر كابل USB المتصل بلوحة التحكم الخاصة بالكاميرا إلى الأسفل وصولًا إلى الفتحة الموجودة في البطانة السفلية.
بالنسبة لمستشعر الحركة الصغير PIR، قمت بطباعة غلاف مخصص له لإخفائه قليلًا والحفاظ على تركيز المستشعر باتجاه داخل الكيس، يمكن تثبيته في أي مكان حول حافة الدلو، ولكنني وجدت أن وضعه بزاوية تقارب 45 درجة بالنسبة للكاميرا هو الأنسب، حيث يسمح بتفعيله قبل وصول قطعة الحلوى مباشرة إلى مجال رؤية الكاميرا.
قم بتمرير أسلاك التوصيل من مستشعر PIR إلى الفتحة الموجودة في أسفل البطانة الداخلية، ثم قم بلصق الأسلاك الثلاثة معًا، وهي سلك الطاقة وسلك البيانات وسلك الأرضي، وذلك لتسهيل تمريرها عبر البطانة والحفاظ على تنظيمها قبل توصيلها بلوحة Raspberry Pi في خطوة لاحقة.
يجب توصيل السماعة بمنافذ البراغي الموجودة على لوحة مكبر الصوت I2S باستخدام مفك صغير، مع التأكد من شد البراغي جيدًا لضمان ثبات الأسلاك في مكانها، بعد ذلك قم بتوصيل أسلاك Jumper بدبابيس التوصيل السفلية على اللوحة، والتي تشمل ساعة القناة اليمنى واليسرى، وساعة البت (Bit Clock)، ومدخل البيانات، وسلك الأرضي، وسلك الطاقة، ويمكنك وضع هذه المكونات في أي مكان تراه مناسبًا داخل البطانة.
تتميز السماعة بأنها قوية بما يكفي ليُسمع صوتها بوضوح من داخل البطانة، لذلك يمكن وضعها في الأسفل أو تثبيتها في مستوى أعلى باستخدام الشريط اللاصق، فقم بتمرير أسلاك التوصيل عبر الفتحة السفلية للدلو لتوصيلها لاحقًا بلوحة Raspberry Pi، ثم قم بلصق الأسلاك معًا لتسهيل تنظيمها وتمريرها داخل البطانة.
باستخدام مفتاحين من نوع SPDT، قم بتوصيل سلكي Jumper لكل مفتاح، سلك في الطرف الأوسط وسلك آخر في الطرف الأيمن، الطرف الأوسط سيتم توصيله لاحقًا بالبطارية، بينما سيتم توصيل الطرف الأيمن إما بلوحة Raspberry Pi أو بشريط إضاءة RGB.
ثم قم بتثبيت المفاتيح بالقرب من الجيب القماشي الموجود أصلًا داخل الدلو والذي يحتوي على زر تشغيل إضاءة السلسلة الخاصة بالدلو، وهي غير مرتبطة بشريط إضاءة RGB المستخدم في هذا المشروع، عادة ما تكون هناك فتحة جاهزة لتمرير أسلاك المفاتيح إلى أسفل الدلو، وإن لم تكن موجودة يمكنك إنشاء واحدة بسهولة باستخدام مقص أو مشرط حاد.
بعد تثبيت لوحة Raspberry Pi والبطارية في أسفل الكيس، ابدأ بتوصيل أسلاك Jumper الخاصة بجميع المكونات الإلكترونية، ابدأ من أعلى دبابيس لوحة Raspberry Pi، ويمكنك الرجوع إلى مخطط التوصيل الخاص بالأطراف إذا لم تكن معتادًا على ترتيب الأرجل، ثم قم بالتوصيلات التالية:
أما سلك الطرف الأيمن للمفتاح الآخر من نوع SPDT، فيجب توصيله بدبوس الطاقة في شريط إضاءة RGB، مع توصيل سلك الأرضي الخاص بالشريط بسلك الأرضي المشترك للبطارية.
سلك الطرف الأوسط في كلا المفتاحين يجب توصيله بسلك أو موصل الطاقة القادم من البطارية.
بعد الانتهاء من التوصيل، جرّب تحريك المفاتيح للتأكد من وصول الطاقة بشكل صحيح إلى شريط إضاءة RGB ولوحة Raspberry Pi، وإذا لم يحدث أي شيء، أعد المفتاح إلى وضعه الأصلي قبل البدء في فحص الأخطاء أو محاولة استكشاف المشكلة.
بعد تثبيت جميع المكونات الإلكترونية، يمكنك البدء في العمل على الجزء البرمجي من المشروع، على الرغم من أن هذا المشروع يستخدم لوحة Raspberry Pi 4 إلا أن أي حاسوب أحادي اللوحة يدعم منافذ الإدخال والإخراج العامة GPIO مع أطراف PCM أو I2S ويعمل بنظام لينكس بمعمارية 64 بت يمكن أن يؤدي الغرض، وجود اتصال بشبكة لاسلكية Wi-Fi يُعد أمرًا مفيدًا أثناء تطوير البرمجيات وتجربتها، لكنه ليس ضروريًا عند استخدام المشروع بشكل نهائي في الواقع.
تم اختيار نظام DietPi كنظام تشغيل للوحة Raspberry Pi، وذلك لأنه نظام خفيف جدًا ويوفر تجربة ممتازة من خلال سطر الأوامر لإعداد مختلف أجزاء النظام، كما أنه يدعم عددًا كبيرًا من الحواسيب أحادية اللوحة، مما يجعل خطوات الإعداد متشابهة إلى حد كبير.
اتبع توثيق DietPi الرسمي لنسخ النظام على بطاقة SD وتثبيته على اللوحة، وفي مستودع GitHub الخاص بهذا المشروع، تم تضمين ملف إعداد نموذجي باسم dietpi.txt للمساعدة في عملية التثبيت التلقائي الأساسية عند أول تشغيل للحاسوب الأحادي اللوحة، يساهم هذا الملف في تثبيت البرامج المطلوبة مثل Python3، ومكتبة RPI-GPIO، وخدمة OpenSSH، بالإضافة إلى الاتصال بشبكة Wi-Fi وتعيين عنوان IP ثابت لتسهيل الوصول إلى الجهاز، بعد أن تتمكن من الاتصال باللوحة عبر SSH وتسجيل الدخول إلى DietPi، انتقل إلى الخطوة التالية.
تُستخدم منصة Viam في هذا المشروع لتسهيل إعداد جميع المكونات الإلكترونية، وتدريب نموذج التعلم الآلي، ومراقبة المشروع لاكتشاف أي مشكلات أثناء العمل، يمكنك ربط لوحة Raspberry Pi بمنصة Viam من خلال تثبيت viam-server على الجهاز باتباع تعليمات Viam الرسمية، وبعد الانتهاء من جميع الخطوات المطلوبة، يجب أن تكون قد أنشأت روبوتًا جديدًا داخل تطبيق Viam، وستتمكن من رؤيته يعمل بشكل مباشر.
قمت بتسمية الروبوت الخاص بي باسم candy-bucket، ولكن يمكنك اختيار أي اسم يناسبك.
من خلال تبويب Config داخل تطبيق Viam، يمكنك إضافة المكونات التي تمثل العتاد الإلكتروني المتصل داخل دلو الحلوى، ونبدأ أولًا بالحاسوب أحادي اللوحة.
قمت بتسمية اللوحة باسم pi لأنها لوحة Raspberry Pi، ولكن يمكنك اختيار أي اسم آخر، يعتمد الكود الموجود في مستودع GitHub المرتبط بالمشروع على متغيرات بيئة موجودة في ملف .env، ويتم استخدامها لضبط البرنامج وفق الأسماء التي يتم تحديدها داخل تطبيق Viam، كما قمت بإعداد إشارة مقاطعة رقمية لمستشعر الحركة Mini PIR باسم motion، وذلك لإبلاغ الكود عند حدوث أي حركة، وتُعد هذه الطريقة أكثر كفاءة وموثوقية من فحص حالة الدبوس بشكل مستمر لمعرفة ما إذا تغير أم لا، احرص دائمًا على الضغط على زر Save config بعد إجراء أي تعديل على المكونات.
بعد ذلك ننتقل إلى إعداد الكاميرا.
نظرًا لأن مكون Arducam يتصل عبر USB، فإنه يتعامل مع لوحة Raspberry Pi مثل كاميرا ويب عادية، فقمت بتسمية هذا المكون باسم arducam، ويقوم viam-server تلقائيًا باكتشاف مسار الفيديو الخاص بالجهاز المتصل، لذلك لا حاجة إلى أي إعدادات إضافية.
أما آخر إعداد للمكونات فهو شريط إضاءة RGB.
يتم تفعيل هذا المكون من خلال مورد برمجي مخصص Modular Resource قمت بإنشائه ونشره في سجل Viam، وذلك لتمكين الأجهزة التي تعمل عبر Viam من التحكم في إضاءة RGB، ويتطلب هذا المكون ثلاث خصائص إعداد أساسية، وهي عدد مصابيح LED في الشريط، ودبوس GPIO الخاص بإشارة الساعة، ودبوس GPIO الخاص بإشارة البيانات، وعلى الرغم من أن أرقام الدبابيس الفعلية على الجهاز هي 23 و19 على التوالي، إلا أن أرقام GPIO المقابلة لها هي 11 و10 عند الرجوع إلى مخطط التوصيل.
بعد الضغط على Save config، يجب أن تتمكن من الانتقال إلى تبويب Control لمشاهدة عناصر التحكم الخاصة باللوحة والكاميرا.
إذا قمت بتحريك يدك أمام مستشعر الحركة عدة مرات ستلاحظ أن القيمة الموجودة بجانب اسم motion في المقاطعة الرقمية تبدأ في الازدياد.
وهنا يمكنك مشاهدة بث مباشر من الكاميرا المثبتة داخل دلو الحلوى كما هو موضح.
وبعد التأكد من أن جميع هذه المكونات تعمل بشكل صحيح يمكنك الانتقال إلى الخطوة التالية لإعداد الخدمات الخاصة بالصوت، وجمع البيانات، والتعلم الآلي.
الخدمات هي حزم برمجية مدمجة تسهّل إضافة قدرات متقدمة إلى جهازك الذكي، ويمكن إعدادها من خلال تبويب Services الموجود بجوار تبويب Components داخل تطبيق Viam.
أول خدمة يتم إعدادها هي مورد audioout المخصص لتشغيل الملفات الصوتية عبر مكبر الصوت I2S والسماعة.
لا تتطلب هذه الخدمة أي إعدادات داخل تطبيق Viam، وبدلًا من ذلك سيتم استخدام أداة سطر الأوامر dietpi-config لإعداد جهاز الصوت rpi-dac على اللوحة في خطوة لاحقة.
الخدمة التالية والأخيرة في هذه المرحلة هي خدمة التقاط البيانات، والتي تساعد في جمع الصور اللازمة لتدريب نموذج التعلم الآلي.
يجب أن تكون خاصية الالتقاط والمزامنة مفعّلة افتراضيًا، وإن لم تكن كذلك قم بتفعيلها يدويًا، يمكنك تعيين فترة زمنية قصيرة مثل 0.1 للحصول على نتائج شبه فورية أثناء جمع الصور من الكاميرا، والتي ستقوم بإعدادها في الخطوة التالية، تأكد من الضغط على Save config قبل الانتقال مرة أخرى إلى تبويب Components.
داخل تبويب Components قم بإعداد التقاط البيانات للمكون arducam بحيث يتم التقاط صورة بصيغة JPEG كل نصف ثانية، وبعد الضغط على Save config، يمكنك فتح قسم Data داخل التطبيق لمشاهدة الصور وهي تتم مزامنتها مع سحابة Viam، وقد تحتاج إلى تحديث الصفحة من وقت لآخر لرؤية الصور الجديدة.
الآن يمكنك البدء في وضع أنواع مختلفة من الحلوى أمام الكاميرا ومن زوايا واتجاهات متعددة، وذلك للحصول على مجموعة بيانات متنوعة تساعد في تدريب نموذج التعلم الآلي بشكل أفضل، وجدت أنه من المفيد تفعيل وضع Picture-in-Picture من العرض المباشر للكاميرا داخل تبويب Control في نافذة أخرى أثناء متابعة مزامنة البيانات في قسم Data.
لم أقم فعليًا بجمع أكثر من 31000 صورة كما قد يوحي بذلك المثال المعروض في لقطة الشاشة، حيث إنه يعرض عدد الصور عبر جميع مشاريعي، ولكنني قمت بجمع بضع مئات من الصور، تم استخدام معظمها في تدريب النموذج.
بعد الانتهاء من جمع جميع الصور المطلوبة، تأكد من تعطيل خاصية التقاط البيانات في إعدادات مكون الكاميرا، ثم اضغط على Save config.
قد يبدو هذا الجزء مرهقًا بعض الشيء في البداية، ولكن مع الوقت ستجد لنفسك وتيرة عمل مناسبة، بل وقد تبدأ في الاستمتاع بإدخال آرائك الشخصية أثناء تدريب نموذج التعرّف على الحلوى.
ستقوم برسم مربعات تحديد Bounding Boxes ووضع تسميات عليها فوق صور الحلوى التي تريد استخدامها لتدريب النموذج، وقم بإنشاء تسميتين جديدتين باسم trick و treat، ولكل نوع من الحلوى اختر التسمية المناسبة ثم ارسم مربعًا يحيط بالأجزاء التي تميز هذا النوع بشكل فريد، يجب أن يكون هناك ما لا يقل عن 10 صور معنونة لكل تسمية حتى يتمكن النموذج من التعلم، وكلما زاد عدد الصور المستخدمة في العينة أصبح النموذج أكثر ذكاءً ودقة في التعرّف.
بعد أن تصبح جاهزًا لبدء تدريب النموذج، اختر التسميتين trick و treat من حقل تصفية Bounding box labels الموجود في الجهة اليسرى من الصفحة، ثم اضغط على زر Search لعرض جميع الصور التي تم وضع تسميات عليها، وبعد ذلك اضغط على زر Train model الموجود في أعلى يمين الصفحة لفتح نموذج الإعداد الخاص بالتدريب، حيث ستقوم بتحديد معلومات النموذج ونوعه والتسميات المستخدمة.
ثم اختر اسمًا مناسبًا للنموذج كما تشاء، وحدد نوع النموذج Object detection، ثم اختر تسميتي trick و treat لاستخدامهما في التدريب، وبعدها اضغط على زر Train model الموجود أسفل الحقول لبدء عملية التدريب، وسيتم نقلك إلى صفحة Models حيث ستشاهد اسم النموذج الجديد تحت قسم Training، وتستغرق عملية التدريب حوالي 10 دقائق، وبعد اكتمالها سيظهر النموذج النهائي ضمن قسم Models في الصفحة.
بعد الانتهاء من تدريب النموذج بنجاح، يمكنك نشره على لوحة Raspberry Pi من خلال إعداد خدمة نموذج التعلّم الآلي ML Model ضمن تبويب Services في إعدادات الجهاز.
سيكون الإعداد الافتراضي مضبوطًا على Path to existing model on robot، لذلك قم بتغيير الخيار إلى Deploy model on robot، ثم اختر النموذج الذي قمت بتدريبه حديثًا من قائمة Models، وسيتم تعيين عدد الخيوط Threads افتراضيًا إلى 1، وهو مناسب في معظم الحالات، وقد قمت شخصيًا بتعيينه إلى 2 لتحسين الأداء مقابل زيادة بسيطة في استهلاك المعالج، ويمكنك التجربة وضبط الإعداد بما يناسبك.
لاستخدام النموذج في التعرّف على الحلوى عبر الكاميرا، ستحتاج إلى إعداد خدمة الرؤية Vision Service لاكتشاف الأجسام.
الإعداد الوحيد المطلوب هنا هو اختيار خدمة نموذج التعلّم الآلي ML Model وربطها بخدمة الرؤية، وبعد حفظ هذا الإعداد الجديد يمكنك معاينة التطبيق العملي من خلال إعداد مكوّن Transform Camera ضمن تبويب Components.
بعد حفظ هذا الإعداد يمكنك الانتقال إلى تبويب Control، وستلاحظ توفر كاميرا باسم candy-camera، قم بإمساك بعض قطع الحلوى أمام الكاميرا المثبتة داخل الدلو وشاهد كيف يقوم النظام بالتعرّف عليها.
إذا كنت راضيًا عن أداء النموذج، يمكنك الانتقال إلى الخطوة التالية، أما إذا رغبت في زيادة دقة التعرّف ورفع مستوى الثقة، فيمكنك إضافة المزيد من الصور المعنونة إلى مجموعة التدريب، ثم تدريب إصدار جديد من النموذج ليتم نشره تلقائيًا على لوحة Raspberry Pi.
أثناء اتصالك بلوحة Raspberry Pi عبر SSH، يمكنك إعداد الجهاز لاستخدام وحدة الصوت المناسبة لتشغيل مكبر الصوت I2S والسماعة، وذلك باستخدام أداة سطر الأوامر dietpi-config.
بعد اختيار rpi-dac، ثم الضغط على Ok، ثم الخروج من الواجهة بالضغط على Exit حتى تغادر أداة dietpi-config بالكامل، سيُطلب منك إعادة تشغيل اللوحة بسبب تغييرات تعريف الصوت، اضغط على Ok ليتم إعادة تشغيل الجهاز، وستفقد اتصال SSH مؤقتًا إلى أن تعود اللوحة للعمل مرة أخرى.
بعد إعادة الاتصال عبر SSH، يمكنك اختبار إعدادات الصوت باستخدام أداة speaker-test من سطر الأوامر:
speaker-test -c2من المفترض أن تسمع أصوات تشويش متقطعة تصدر من السماعة، مع ظهور معلومات التفاعل في نافذة سطر الأوامر.
قمت بكتابة كود باستخدام حزمة Python SDK الخاصة بمنصة Viam ليعمل على لوحة Raspberry Pi، ويقوم هذا الكود بالمهام التالية:
الأولى: تقوم بالتقاط صورة عند تفعيل مستشعر الحركة وإضافتها إلى قائمة انتظار.
الثانية: تنتظر ظهور الصور في قائمة الانتظار، ثم تستخدم خدمة الرؤية لاكتشاف نوع الحلوى وتفعيل الإضاءة والأصوات المناسبة بناءً على ما إذا كانت Trick أو Treat.
يحتوي المستودع البرمجي على ملفات المؤثرات الصوتية الخالية من حقوق الملكية، بالإضافة إلى كود المشروع وملفات الإعداد اللازمة.
لتشغيل الكود تلقائيًا عند بدء تشغيل viam-server، سنقوم بإعداد عملية تقوم بتنفيذ ملف run.sh الموجود في المستودع.
قم باستنساخ المستودع إلى الجهاز أثناء اتصالك عبر SSH داخل مجلد باسم robot:
git clone https://github.com/HipsterBrown/viam-candy-bucket.git robotإذا نسيت إضافة كلمة robot في نهاية الأمر، فسيتم إنشاء مجلد باسم viam-candy-bucket، وهو سيعمل أيضًا ولكن يجب تذكر هذا الاسم لاحقًا عند إعداد العملية داخل تطبيق Viam، داخل المجلد، قم بإعادة تسمية ملف .env.example إلى .env، ثم قم بتعبئة القيم المطلوبة لكل متغير باستخدام محرر نصوص مثل nano أو vi.
mv .env.example .env && vi .envيمكنك العثور على موقع الروبوت والمفتاح السري Secret من خلال تبويب Code sample داخل تطبيق Viam.
بعد ذلك، انتقل إلى تطبيق Viam وقم بإعداد عملية جديدة:
قمت بتسمية العملية main، وحددت الملف التنفيذي على أنه /usr/bin/bash لأنه سيتم تشغيل سكربت Bash، مع تحديد الوسيط run.sh، وتعيين مسار العمل ليطابق مسار المجلد الذي تم استنساخ الكود إليه على الجهاز.
بعد الضغط على Save config، تحقق من السجلات Logs للتأكد من بدء العملية الجديدة، وستلاحظ أن دلو الحلوى الذكي يبدأ في العمل تدريجيًا.
وعندما تكون مستعدًا للانطلاق في جولة جمع الحلوى، كل ما عليك فعله هو تشغيل المفتاحين الموجودين داخل الدلو، وخلال دقيقة أو دقيقتين سيكون النظام جاهزًا بالكامل للعمل.
بعد إتمام هذا المشروع بنجاح، يمكنك تطويره وتحسينه بعدة طرق، من بينها:
أخيراً، إذا قمت بإنشاء دلو حلوى ذكي خاص بك، فلا تتردد في مشاركته عبر التعليقات لمشاركة تجربتك مع باقي صناع المشاريع والهواة.
تسجيل الدخول مطلوب
يجب عليك تسجيل الدخول لإضافة تعليق.
تسجيل الدخول