القفاز الذكي لراكبي الدراجات





مترجم من موقع Instructables.com ، مؤلف المشروع: Matlek



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





كيف تعمل



يحتوي القفاز على لوحة Arduino تجمع البيانات من الجيروسكوب ومقياس التسارع. يستخدم الكود نموذج tinyML لـ "التعلم الآلي الصغير" ويتعرف على الإيماءات: يتم تحليل كل حركة لليد وتحويلها إلى إشارة (تميل اليد إلى اليسار واليمين والأمام والخلف وما إلى ذلك). يتم إرسال الإشارة عبر Bluetooth (BLE) إلى متحكم آخر متصل به مصفوفة LED (والتي ، على سبيل المثال ، يمكن توصيلها بحقيبة ظهر). وفقًا للإشارة المستقبلة ، تُخرج المصفوفة تسلسلات معينة من الأحرف - حتى يتمكن الدراجون وراكبو الدراجات الآخرون من فهم ما سيفعله راكب الدراجة (على سبيل المثال ، يمكن أن تكون أسهمًا إلى اليسار أو اليمين أو النص).



















أصل المشروع



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



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



لماذا سمارت قفاز؟



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



تأتي كلمة "Smart" من تقنية التعلم الآلي التي استخدمتها في هذا المشروع.



وحي - الهام



المشروع عبارة عن مزيج من مشروعين آخرين. لم أبدأ من الصفر ، لكنني استخدمت أفضل ممارساتهم ، والتي طورتها بعد ذلك. إليك ما استلهمتُ منه عند التطوير:



  • التعرف على الإيماءات باستخدام Arduino Nano 33 BLE SENSE.
  • ليس مشروعًا محددًا ، ولكن مفهوم استخدام مصفوفات LED لراكبي الدراجات. هناك الكثير من هذه المشاريع - بعضها يستخدم حقائب الظهر ذات اللوحات المدمجة ، والبعض الآخر يقدم فقط مصفوفة جاهزة يمكن وضعها في أي مكان. في أي حال ، يتم التحكم في مصفوفات LED هذه بواسطة جهاز تحكم عن بعد بدلاً من التعرف على الإيماءات.


مكونات



للطباعة ثلاثية الأبعاد - طابعة ثلاثية الأبعاد أو الوصول إلى واحدة.



إلكترونيات



  • اردوينو نانو 33 بلي سينس ؛
  • MI آخر مع BLE (Arduino Nano 33 BLE ، Arduino 33 BLE SENSE ، Arduino nano 33 IOT ، ESP32 ، إلخ). قررت استخدام لوحة ESP32.
  • شريط LED (WS2812B). لقد استخدمت 160 مصباح LED لإنشاء مصفوفة 20x8 ؛
  • 4 مستويات عازلة من 3 فولت إلى 5 فولت: 74AHCT125.
  • مكثف 1000 فائق التوهج.
  • مفاتيح SPST ، 3 قطع.
  • لوح الخبز.
  • الأسلاك.
  • البطارية 9 V.
  • بطارية خارجية.




  • 3.
  • -.


1: (, )











بعد قراءة مقال عن Arduino والتعلم الآلي ، قررت أن أجربه أيضًا. نظرًا لوجود العديد من لوحات Arduino Nano الجديدة مؤخرًا ، فقد صنعت لوحة مقارنة لاتخاذ أفضل خيار قبل الشراء.







جميع اللوحات مثيرة للاهتمام ، لكن يمكنني استخدام واحدة فقط للتعرف على الإيماءات - Arduino Nano 33 BLE SENSE. فقط لديها المستشعرات الصحيحة ودعم Tensorflow Lite. نقطة أخرى مثيرة للاهتمام هي أن لوحات Arduino Nano 33 IOT و BLE و BLE SENSE لها تقنية Bluetooth الخاصة بها ، لذلك يمكن استخدام أي منها على مصفوفة LED لتلقي إشارات BLE.



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



هيا نلعب مع BLE



في هذا المشروع ، يعد اتصال Bluetooth أمرًا بالغ الأهمية لأن هذه هي الطريقة التي يتم بها إرسال الإشارة من أجهزة الاستشعار إلى مجموعة LED. قبل ذلك ، لم أقم بتوصيل لوحين من Arduino عبر BLE. لذلك تدربت على الأمثلة التالية من مكتبة ArduinoBLE :



  • رسم LedControl المستخدم مع لوحة Arduino Nano 33 BLE Sense وزر بمقاوم سحب متصل بالطرف 2. يستقصي المثال الأجهزة الطرفية لـ BLE حتى يجد خدمة باستخدام UUID 19b10000-e8f2-537e-4f6c-d104768a1214. بعد اكتشافه وإنشاء اتصال ، سوف يتحكم عن بعد في مؤشر BLE LED المحيطي بالضغط على زر.
  • رسم تخطيطي لـ LED و Arduino Nano 33 IoT.


لسوء الحظ ، واجهت الكثير من المشاكل مع رسم تخطيطي للوحات LED - 3 "معطلة" أثناء تحميلها. ليس لدي أي فكرة عن المشكلة ، لكنني قررت استبدال لوحة Arduino بـ MI آخر بـ BLE - لوحة ESP32. مع اللوحة الجديدة ، استخدمت ما يلي:



  • BLE_write Sketch من مكتبة BLE ESP32 ARDUINO. لقد أضفت بعض التغييرات لجعلها تعمل مع لوحة Arduino Nano 33 BLE SENSE. في الخطوة 10 ، يمكنك مقارنة الرسم التخطيطي BLE_write ورسم المصفوفة Smartglove_BLE_LED الذي كتبته وحملته.


هيا نلعب مع مصابيح RGB LED المدمجة



هل تعلم أن لوحة Arduino Nano 33 BLE SENSE تحتوي على مصابيح RGB LED مدمجة؟ في هذا المشروع ، ستكون مفيدة للتحقق من التشغيل الصحيح للتعرف على الإيماءات. يجب أن نتحقق من إرسال الإشارة إلى مصفوفة LED - ومع ذلك ، نظرًا لأن اللوحة على الأرجح خلف راكب الدراجة ، سيكون من الصعب عليه فهم أن التعرف على الإيماءات قد نجح وأنه تم إرسال الإشارة.



لم يكن هناك شيء معقد هنا ، لقد قمت فقط بتعديل مثال Blink قليلاً . يوضح الرمز أن مؤشر LED الأحمر موجود على الرقم 22 ، والأخضر على السن 23 ، والأزرق على السن 24. تقوم إشارة الإدخال LOW بتشغيل مؤشر LED ، بينما يتم إيقاف تشغيلها.



const int LED_BUILTIN_RED = 22;
const int LED_BUILTIN_GREEN = 23;
const int LED_BUILTIN_BLUE = 24;

//  setup        
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN_RED, OUTPUT);
  pinMode(LED_BUILTIN_GREEN, OUTPUT);
  pinMode(LED_BUILTIN_BLUE, OUTPUT);
}

//  loop  
void loop() {
  digitalWrite(LED_BUILTIN_RED, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_RED, HIGH);    //  LED,    LOW
  delay(1000);                       //   

digitalWrite(LED_BUILTIN_GREEN, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_GREEN, HIGH);    //  LED,    LOW
  delay(1000);   //  
  
  digitalWrite(LED_BUILTIN_BLUE, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_BLUE, HIGH);    //  LED,    LOW
  delay(1000);                       //  
}


هيا نلعب مع التعرف على الإيماءات و tinyML



أخيرًا ، درست البرنامج التعليمي حول استخدام التعلم الآلي على Arduino ، ومارسته مع مثال على التعرف على الإيماءات. المثال مقسم إلى ثلاثة أجزاء رئيسية:



  • التعرف على البيانات باستخدام برنامج IMU_Capture ( واستشعار Arduino Nano 33 BLE) ؛
  • تدريب نموذجي على البيانات المسجلة على google colab (على جهاز كمبيوتر) ؛
  • استخدام نموذج Arduino مدرب مع IMU_Classifier للتعرف على الأنماط (مرة أخرى على لوحة Arduino).


الخطوة 2: قفاز 1/6 (إلكترونيات)























من الخطوات من 2 إلى 7 ، أقدم نفس الرسم التخطيطي ، مع الإشارة إلى الخطوات الواردة فيه حتى يسهل عليك فهم عملية صنع القفاز.



الدائرة الإلكترونية للقفاز بسيطة للغاية:



  • لوحة اردوينو.
  • بطارية 9 فولت (أستخدم بطارية قابلة لإعادة الشحن).
  • مفتاح SPST.


الخطوة 3: قفاز 2/6 - الجسم











































العلبة بسيطة وتتكون من جزأين فقط ، مطبوعة على طابعة ثلاثية الأبعاد:



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


أرفقه بيدي بشريط من الفيلكرو.



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



الملفات



content.instructables.com/ORIG/FS2/L3M3/K9N93ZYW/FS2L3M3K9N93ZYW.stl



content.instructables.com/ORIG/F72/21NG/K9N93ZZG/F7221NGK9N93ZZG.stl



content.instructables.com/NORIG9SZFD3. stl



الخطوة 4: القفاز 3/6: تسجيل البيانات































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



لقد سجلت الإيماءات التالية:



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


وبطبيعة الحال ، يمكنك تسجيل إيماءاتك.



لتسجيل البيانات ، كتبت برنامجًا يقوم بتبديل الألوان على مؤشر LED بعد كل 20 ضربة. لقد ساعدني ذلك في فهم متى انتقل إلى لفتة أخرى. لقد قمت بتوصيل Arduino بجهاز الكمبيوتر الخاص بي ، وفتحت برنامج تتبع المنفذ ، ووضعت الكمبيوتر المحمول في حقيبتي.



بعد تسجيل جميع الإيماءات ، انتقلت إلى المرحلة الأخيرة - قمت بنسخ إخراج البيانات إلى البرنامج وحفظها بتنسيق csv.



content.instructables.com/ORIG/FC7/B0JT/K9UEA78V/FC7B0JTK9UEA78V.ino



الخطوة 5: القفاز 4/6: التدريب















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



على موقع Google Colab ، استخدم الرابط الموجود في قسم "تحميل البيانات" لتحميل بياناتك.



في قسم "بيانات الرسم البياني (اختياري)" ، أضف اسم أحد الملفات.



filename = "Arm_left.csv"



ثم صحح هذا السطر لإخراج بيانات الجيروسكوب فقط:



#index = range(1, len(df['aX']) + 1)
index = range(1, len(df['gX']) + 1)


علّق على الأسطر التالية - لا نستخدم بيانات مقياس التسارع:



#plt.plot(index, df['aX'], 'g.', label='x', linestyle='solid', marker=',')
#plt.plot(index, df['aY'], 'b.', label='y', linestyle='solid', marker=',')
#plt.plot(index, df['aZ'], 'r.', label='z', linestyle='solid', marker=',')
#plt.title("Acceleration")
#plt.xlabel("Sample #")
#plt.ylabel("Acceleration (G)")
#plt.legend()
#plt.show()


في قسم "تحليل البيانات وتحضيرها" ، أضف جميع أسماء الملفات:



#GESTURES = ["punch", "flex",]
GESTURES = ["Arm_left", "Brake", "Hand_back-tilt", "Hand_front-tilt", "Hand_left-tilt", "Hand_right-tilt"]


قم بتغيير عدد العينات بإيماءة واحدة إذا قمت بتغييرها في كود Arduino:



#SAMPLES_PER_GESTURE = 119
SAMPLES_PER_GESTURE = 64


يبقى فقط التعليق على التسارع:



# normalize the input data, between 0 to 1:
# - acceleration is between: -4 to +4
# - gyroscope is between: -2000 to +2000
      tensor += [
          #(df['aX'][index] + 4) / 8,
          #(df['aY'][index] + 4) / 8,
          #(df['aZ'][index] + 4) / 8,
          (df['gX'][index] + 2000) / 4000,
          (df['gY'][index] + 2000) / 4000,
          (df['gZ'][index] + 2000) / 4000
      ]


بعد استعراض البرنامج بأكمله ، يمكنك تنزيل النموذج المدرب.



الملفات



content.instructables.com/ORIG/F7A/GLEK/K9UEA8Z5/F7AGLEKK9UEA8Z5.csv



content.instructables.com/ORIG/FV1/853G/K9UEA8Z6/FV1853GK9UEA8Z6.csv



content.instructables.com/ORIG8/FQKD9. csv



content.instructables.com/ORIG/F7N/P7AG/K9UEA8Z9/F7NP7AGK9UEA8Z9.csv



content.instructables.com/ORIG/FD4/WZRM/K9UEA8ZA/FD4WZRMK9UEA8ZA.csv



content.in7EA8Fstru2.com .csv



الخطوة 6: القفاز 5/6:







كود اردوينو كود القفاز الذكي النهائي الخاص بي عبارة عن مزيج من البرامج التالية:



  • مثال "LED" من مكتبة "ArduinoBLE" (الطرفية> LED).
  • "IMU_Classifier" من هنا .


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



أضف النموذج الخاص بك إلى الكود ويمكنك اختباره!



الملفات



content.instructables.com/ORIG/F9N/4SBK/K9UEA98M/F9N4SBKK9UEA98M.h



content.instructables.com/ORIG/FKZ/ODO9/KB52VXZK/FKZODO9KB52VXZK.ino



الخطوة 7: القفاز 6/6: الاختبارات



















كما ترى من الفيديو ، يضيء مؤشر LED بشكل مختلف حسب الإيماءة التي تم التعرف عليها:





الخطوة 8: 1/4 مصفوفة LED: الإلكترونيات























كما ذكرت ، عند تحميل رسم تخطيطي من مكتبة ArduinoBLE لمصباح LED على Arduino Nano 33 BLE SENSE ، واجهت بعض المشاكل. لذلك قررت استخدام ESP32 بدلاً من هذه اللوحة. لذلك ، في الصور أعلاه ، يمكنك رؤية كلا المجالين.



نظرًا لأن كل من لوحات Arduino Nano 33 BLE SENSE و ESP32 تعمل بمنطق 3.3 فولت ، فقد أضفت مخزنًا مؤقتًا من 4 مستويات من 3 فولت إلى 5 فولت (74AHCT125) على النحو الموصى به في التعليمات من Adafruit .



أضفت أيضًا مكثفًا 100 فائق التوهج لحماية مؤشر LED من ارتفاع الجهد المفاجئ.



قمت بتجميع الدائرة بأكملها على لوح التجارب.



يمكن ملاحظة أنني استخدمت كلا موصلي مصدر الطاقة الخارجي ، لأنني كنت خائفًا من أن مصفوفة LED ستحتاج إلى الكثير من التيار. لذلك ، يتم تشغيل المصفوفة و MI من موصلات مختلفة لمصدر طاقة خارجي.



الخطوة 9: صفيف LED 2/4: الجسم























































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



لقد استخدمت Velcro مرة أخرى لإرفاق اللوحة.



الملفات



content.instructables.com/ORIG/FH6/TB4H/K9N93ZZJ/FH6TB4HK9N93ZZJ.stl



content.instructables.com/ORIG/FK3/BZPC/K9N93ZZK/FK3BZPCK9N93ZZK.stl



content.instruct stl



content.instructables.com/ORIG/F38/BF1P/K9N93ZZM/F38BF1PK9N93ZZM.stl



content.instructables.com/ORIG/FJC/DQMY/K9N93ZZN/FJCDQMYK9N93ZZN.stl



content.inelqvf9qfr / .stl



content.instructables.com/ORIG/FJE/C5FG/K9N93ZZR/FJEC5FGK9N93ZZR.stl



content.instructables.com/ORIG/F55/1X43/K9N93ZZS/F551X43K9N93ZZS.stl



الخطوة 10: 3/4 مصفوفة LED: كود اردوينو



























الكود الناتج هو خليط من الأكواد التالية (وتعديلها):

  • BLE_ اكتب مثالاً من مكتبة BLE ESP32 ARDUINO.
  • مثال على MatrixGFXDemo64 من مكتبة FastLED NeoMatrix.




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



content.instructables.com/ORIG/FIR/RETZ/KB52VXP4/FIRRETZKB52VXP4.ino



الخطوة 11: مصفوفة LED 4/4: الاختبار











حان الوقت للتحقق من كل شيء! بعد التعرف على كل إيماءة ، يتم إرسال إشارة إلى مصفوفة LED ، وتعرض نمطًا معينًا. يمكن ملاحظة أن مصابيح LED الموجودة على القفاز تضيء وفقًا للإشارة المعروفة.







الخطوة 12: الاختبارات النهائية والاستنتاج











هكذا تبدو حية:







أنا سعيد جدًا بالجهاز الناتج. بفضل المشروع ، أشعر بثقة أكبر في استخدام tinyML و BLE. منذ ذلك الحين ، اشتريت Arduino Nano 33 IOT آخر ، وأنا الآن منخرط في مشروع مثير جدًا للاهتمام ، وسوف أكتب عنه لاحقًا. ما الذي يمكنني تغييره في الإصدار الثاني من الجهاز الذي وصفته:



  • «». , . - - , . .
  • . , USB . , . .
  • . , . , ( 20 ). – , .


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



أنظر أيضا:






All Articles