
مرحبا بالجميع !!!
أنا سعيد لأنني أستطيع أن أظهر لك حرفتي الجديدة مرة أخرى.
هذه المرة أضع مصباح اردوينو بالإيماءة.
استغرق هذا المشروع الكثير من الوقت ، وهو ما أفتقده دائمًا.
قمت بتجميع النسخة الأولى من المصباح بسرعة كبيرة وعملت بشكل مثالي بالنسبة لي على اللوح ، لكن عندما نقلته إلى مكان دائم في القضية ، بدأ كل شيء ، وبدأت جميع المشاكل المتعلقة بالتجميد والإيجابيات الخاطئة وغيرها من المشاكل. غوغلينغ على شبكة الإنترنت ، لقد وجدت على مواقع أجنبية العديد من الشكاوى المتعلقة بمشاكل مستشعر APDS9960 ، لكنني لم أجد حلولاً لهذه المشاكل. اضطررت لقضاء بعض الوقت في دراسة ورقة البيانات لهذا المستشعر وفهم عملها. في النهاية ، لقد أتت بثمارها وتمكنت من كتابة كود يعمل بشكل ثابت.
وهكذا ، كل شيء في النظام.
وصف المصباح
التركيز الرئيسي في هذا المصباح لم يكن على التصور ، ولكن على السيطرة على الإيماءات ، جميع الوظائف الأخرى ثانوية.
يتم تشغيل المصباح بالإيماءات إلى اليسار أو اليمين ، ويمكنك أيضًا تشغيله بإيماءة تجاه نفسك ، لكن هذا ليس مناسبًا تمامًا. بعد ذلك ، إيماءات اليسار واليمين ، يمكنك التمرير خلال تأثيرات الإضاءة. إذا بدأت التقليب إلى اليمين ، فسوف يغير المصباح أولاً ألوانه من الأبيض إلى الأحمر ، بما في ذلك جميع الألوان الأساسية والانتقالات بينها.
إذا بدأنا بعد تشغيل المصباح في التقليب إلى اليسار ، فسوف نرى تأثيرات الإضاءة الديناميكية ، مثل "Fire" و "Matrix" و "Lava Lamp" و "Rainbow" و "Confetti" و "Sparks" و "Fiery Lamp". إذا كنت بحاجة إلى العودة إلى مصباح عادي ، فبدلاً من التراجع ، يمكنك إيقاف تشغيل المصباح بإيماءة من نفسك وتشغيل أي من الإيماءات الثلاث.
يتم الإغلاق بواسطة لفتة من نفسك.

يتم تنظيم السطوع من خلال لفتة الاقتراب والابتعاد عن المستشعر. تحتاج أولاً إلى جعل راحة يدك أقرب ما يكون إلى المستشعر ، ثم ارفعه بحدة. سينتقل المصباح إلى وضع ضبط السطوع ، مما يحرك راحة اليد أكثر فأكثر ، تحتاج إلى العثور على السطوع المناسب وقفل يدك لبضع ثوان حتى يتم الحفاظ على قيمة السطوع. عندما يتم الحفاظ على السطوع ، سوف يتيح لك المصباح معرفة ذلك عن طريق إطفاء الضوء بسلاسة ثم تشغيله بمستوى سطوع جديد.
لم أكن أهتم كثيرًا بالتأثيرات المرئية ، لأنني أخطط لعمل نسخة ثانية من المصباح على جهاز التحكم المصغر Wemos D1. الذي أخطط لإحضار كل شيء إلى المثالية. للسبب نفسه ، ما زلت أستخدم سطرًا واحدًا فقط من المصابيح ، يتكون من 4 شرائح ws2812b ، بدلاً من أربعة.
APDS9960 المقاطعات
في الواقع ، ترتبط المشاكل الرئيسية لمصباح LED به. المقاطعات في apds9960 تعيش حياتهم الخاصة ، يمكن أن تعمل من أي شيء ، على سبيل المثال من تدخل EM أو من بالقرب من مستشعر الشخص ، من تموج في التغذية ، وربما من شيء آخر.

أولاً ، حاولت حل المشكلة مع التغييرات في الأجهزة. لم يساعد ترشيح الطاقة ، حتى مع وجود بطارية 18650 ، في الاستمرار في تحسس المستشعر. حاولت التبديل المقاوم تحميل إشارة INT إلى + 5V وهذا أيضا لم يحقق النجاح.
عندما جاءت الدراسة ، جاء فهم لماذا حدثت انقطاعات خاطئة. المشكلة الرئيسية هي انعكاسات عشوائية من إشارة الأشعة تحت الحمراء. توصي الشركة المصنعة بتغطية المجس وكل شيء حوله بطبقة مطاطية سوداء. ليس لدي مثل هذا الطلاء ولم أكن عناء به. على الرغم من أن هذا بالتأكيد قد يقلل بشكل طفيف من عدد الإيجابيات الخاطئة.
كتبت رمزًا يرشح جميع المشغلات العشوائية ، لكن واجهت مشكلة أخرى. بعد بدء المقاطعة ، يتم نقل معلومات الإيماءة عبر ناقل I2C ليس على الفور ، لكن مع تأخير معين. وإذا كانت وحدة تزويد الطاقة بسبب عنوان شريط LED صاخبة ، فسيكون وقت الإرسال ، مع مراعاة هذا التداخل ، مختلفًا دائمًا. اضطررت إلى أخذ هذه الحقيقة في الاعتبار وإعادة كتابة التعليمات البرمجية لتحديد الإيماءات بطريقة جديدة.
تعريف لفتة
إذا كان الرمز لا يستخدم المقاطعة من المستشعر ، فلا توجد مشاكل في تعريف الإيماءة. ولكن في هذه الحالة ، تضيع المهام المتعددة. إذا كان للمصباح تأثير ديناميكي على ، فإنه يتطلب وفقًا لذلك رمزًا دوريًا قابلاً للتنفيذ باستمرار ، وستكون هناك حاجة إلى المقاطعات لإزالة وحدة التحكم من الدورة.
من أجل تحسين استقرار التعرف على الإيماءات ، كان من الضروري أيضًا تقليل حساسية جهاز الاستقبال في المكتبة. للقيام بذلك ، استبدل السطر الموجود في ملف SparkFun_APDS9960.h:
if (! setLEDBoost (LED_BOOST_300))في
if (! setLEDBoost (LED_BOOST_150))إذا قمت بتنزيل المكتبة من هذه المقالة ، فإنك لا تحتاج إلى القيام بأي شيء ، فقد تم بالفعل إصلاح كل شيء هناك.
اخترت أيضًا تجريبيًا لمصباح LED 50 مللي أمبير ، حيث يتم تحديد الإيماءات بشكل أكثر ثباتًا ولا توجد حاجة لفرض مؤشر LED بالأشعة تحت الحمراء مع تيار 100 مللي أمبير.
كما أنني ارتكبت خطأً بوضع المتحكم في أسفل المصباح ، ومستشعر الإيماءة في الغطاء العلوي. لهذا السبب ، لتوصيل اردوينو و apds9960 ، اضطررت إلى استخدام أسلاك بطول 30 سم ، مما أضاف أيضًا عدم استقرار إضافي للمستشعر. نتيجة لذلك ، هزمت كل هذه المشاكل برمجيًا.
مخطط

لتشغيل الجهاز ، أستخدم شاحنًا من هاتفي الذكي ، بجهد خرج يبلغ 5 فولت وتيار 2A. لكن في الواقع ، لا يستهلك المصباح الذي يعمل بالضوء الأبيض عند أقصى سطوع أعلى من 1.3 A. لذلك ، فإن أي مصدر طاقة بتيار خرج لا يقل عن 1.3 A مناسب.
يمكن استبدال مثبت التيار المستمر المصغر DC-dc بأي محول جهد آخر للتنحي ، مع تيار إخراج لا يقل عن 150 مللي أمبير.
في الرسم البياني أدناه ، لا أستخدم محول مستوى المنطق ، لكن هذا قراري الشخصي. وبالتالي ، أنا لا أقبل المسؤولية مقدمًا في حالة فشل مستشعر APDS9960 ، إذا فشلت ، في الاتصال دون محول مستوى TTL.
بدلاً من Arduino Nano ، يمكنك استخدام وحدة التحكم Arduino UNO أو نسختها.
تأكد من التحقق من وجود وصلات العبور على جهاز استشعار الإيماءات ، حيث تم وضع علامة باللون الأحمر في الصورة أدناه. في حالات غيابهم ، يجب وضع مكواة لحام على مسارات التلامس هذه ، وتطبيقها وتسخينها حتى تتشكل قطرة موحدة. الآن الصينيين يزودون هذه المجسات دون لاعبيها. بدون هذه لاعبا ، ليست مضمونة تشغيل الاستشعار.

المكونات المستخدمة
اردوينو نانو - 1 قطعة.
لفتة الاستشعار APDS9960 - 1 جهاز كمبيوتر.
شرائط LED ws2812b - 4 قطع.
Mini360 محول تنحى - 1 جهاز كمبيوتر.
ربط الأسلاك - 1 مجموعة.
كود البرنامج لاردوينو
ينقسم الرمز إلى قسمين. يوجد في الجزء الأول الكود الرئيسي الذي يعمل مع المستشعر ، وفي الجزء الثاني الكود لجميع تأثيرات الإضاءة.
يمكنك إضافة أي تأثير بنفسك عن طريق القياس مع الكود الخاص بي ، ولكن الأهم من ذلك ، لا تنس إضافة وظيفة للخروج من الإيماءة من التأثير المحلق. للقيام بذلك ، أضف السطر التالي في نهاية الحلقة
إذا (check_int ()) return؛وصف الوظائف الرئيسية للبرنامج
يعالج processGesture () المقاطعات من مستشعر الإيماءات.
يعالج processProxim () المقاطعات من مستشعر القرب.
gesture_int () - معالج المقاطعة من جهاز استشعار الإيماءات.
near_int () - معالج المقاطعة من مستشعر القرب.
وصف الثوابت
APDS9960_INT - إدخال المقاطعة الخارجية. ليس لدى Arduino Nano و UNO سوى اثنين من هذه المدخلات ، 2 و 3.
رقم التعريف الشخصي - هنا تحتاج إلى تحديد الإخراج إلى قطاع الصمام. يمكنك تحديد أي دبوس رقمي متصل به الأشرطة ws2812b.
NUM_PIX - نوضح هنا عدد مؤشرات LED للعناوين في الشريط المستخدم.
النطاق - الحد الأقصى للخطأ هو من 0 إلى 10. إذا ، عند ضبط السطوع ، يتم تثبيت يد أعلى المستشعر لمدة ثانيتين ، ثم ينبغي حفظ القراءات ، ولكن إذا لم يتم حفظ القراءات ، فقم بزيادة حد الخطأ تدريجياً.
قم بتنزيل مكتبة APDS9960تحميل رسم مصباحفيديو يوضح تشغيل المصباح
النتائج
المصباح مباشرة تبدو أفضل مما كانت عليه في الفيديو. الآن يطلب من كل من رآه مني أن يجمع نفس الشيء لهم. في الوقت الحالي ، لا أحب طريقة عمل ضبط السطوع ، لكنني أعمل على ذلك. لا أعدك بذلك قريبًا ، ولكن الإصدار التالي من المصباح قيد التطوير بالفعل.
شكرا لقراءة المقال حتى النهاية! إذا كان لا يزال لديك أسئلة ، يمكنك طرحها في التعليقات الموجودة تحت المقالة.
PS
فكرة مصباح مستوحاة
هناأخذت الآثار الرئيسية
هنا