

لوحة تطوير واي فاي UNO R4 ABX00087
التعرف على طلقة الكريكيت باستخدام Arduino UNO R4 WiFi + ADXL345 + Edge
دفعة
يقدم هذا المستند سير عمل شامل لبناء نظام للتعرف على تسديدات الكريكيت باستخدام Arduino UNO R4 WiFi مع مقياس تسارع ADXL345 وEdge Impulse Studio. يتضمن المشروع جمع بيانات مقياس التسارع، وتدريب نموذج تعلم آلي، ثم إعادة نشر النموذج المُدرّب على Arduino لتصنيف التسديدات في الوقت الفعلي.
لقطات الكريكيت التي تم أخذها في الاعتبار في هذا المشروع:
– غطاء محرك السيارة
– محرك مستقيم
- سحب اللقطة
الخطوة 1: متطلبات الأجهزة
– Arduino UNO R4 WiFi
– مقياس التسارع ADXL345 (I2C)
- أسلاك التوصيل
– لوحة التوصيل (اختياري)
- كابل USB من النوع C
الخطوة 2: متطلبات البرامج
– Arduino IDE (الأحدث)
– حساب Edge Impulse Studio (مجاني)
– أدوات Edge Impulse CLI (يتطلب Node.js)
– مكتبة Adafruit ADXL345
الخطوة 3: توصيل ADXL345
قم بتوصيل مستشعر ADXL345 بجهاز Arduino UNO R4 WiFi على النحو التالي:
VCC → 3.3 فولت
أرضي → أرضي
SDA → SDA (A4)
SCL → SCL (A5)
CS → 3.3 فولت (اختياري، لوضع I2C)
SDO → عائم أو GND
الخطوة 4: جعل مستشعر IDE جاهزًا
كيفية تثبيت مكتبات الاستشعار في Arduino IDE؟
افتح بيئة التطوير المتكاملة Arduino
افتح الأدوات → إدارة المكتبات… وقم بتثبيت: Adafruit ADXL345 Unified Adafruit Unified Sensor
(إذا كان لديك LSM6DSO أو MPU6050 بدلاً من ذلك: قم بتثبيت SparkFun LSM6DSO أو Adafruit LSM6DS أو MPU6050 وفقًا لذلك.)
الخطوة 5: رسم Arduino لجمع البيانات
حمّل هذا الرسم التخطيطي إلى جهاز Arduino UNO R4 WiFi. يُرسل بيانات مقياس التسارع بتنسيق CSV (x، y، z) بتردد حوالي 18 هرتز لـ Edge Impulse.
#يشمل
#يشمل
Adafruit_ADXL345_تسريع موحد =
Adafruit_ADXL345_موحد(12345)؛
إعداد فارغ () {
المسلسل.البداية(115200)؛
إذا لم يتم بدء التسارع () {
Serial.println("لم يتم اكتشاف ADXL345");
بينما (1) ؛
}
مجموعة نطاق التسارع (ADXL345_RANGE_4_G)؛
}
حلقة فارغة () {
أحداث الاستشعار
accel.getEvent(&e);
Serial.print (e.acceleration.x)؛
تسلسل.print(“,”);
تسلسل.print(e.acceleration.y);
تسلسل.print(“,”);
Serial.println(e.acceleration.z);delay(55); // ~18 هرتز
}
إعداد Edge Impulse

الخطوة 6: الاتصال بـ Edge Impulse
- إغلاق شاشة Arduino التسلسلية.
- قم بتشغيل الأمر: edge-impulse-data-forwarder –frequency 18
- أدخل أسماء المحاور: accX، accY، accZ
- قم بتسمية جهازك: Arduino-Cricket-Board
- قم بتأكيد الاتصال في Edge Impulse Studio ضمن "الأجهزة".


الخطوة 7: جمع البيانات
في Edge Impulse Studio → الحصول على البيانات:
– الجهاز: Arduino-Cricket-Board
– المستشعر: مقياس التسارع (3 محاور)
– سampطول الملف: 2000 مللي ثانية (ثانيتين)
– التردد: 18 هرتز
سجل ما لا يقل عن 40 ثانيةamples per class:
– غطاء محرك السيارة
– محرك مستقيم
- سحب اللقطة
جمع البيانات السابقةampليه
غطاء محرك السيارة
الجهاز: Arduino-Cricket-Board
العلامة: غطاء محرك السيارة
المستشعر: مستشعر بثلاثة محاور (accX، accY، accZ)
Sampطول الملف: 10000 مللي ثانية
التردد: 18 هرتز
Exampالبيانات الخام:
accX -0.32
accY 9.61
accZ -0.12
محرك مستقيم
الجهاز: Arduino-Cricket-Board
العلامة: محرك مستقيم
المستشعر: مستشعر بثلاثة محاور (accX، accY، accZ)
Sampطول الملف: 10000 مللي ثانية
التردد: 18 هرتز
Exampالبيانات الخام:
accX 1.24
accY 8.93
accZ -0.42
سحب اللقطة
الجهاز: Arduino-Cricket-Board
العلامة: سحب اللقطة
المستشعر: مستشعر بثلاثة محاور (accX، accY، accZ)
Sampطول الملف: 10000 مللي ثانية
التردد: 18 هرتز
Exampالبيانات الخام:
accX 2.01
accY 7.84
accZ -0.63 
الخطوة 8: تصميم النبضات
افتح إنشاء الدافع:
كتلة الإدخال: بيانات السلسلة الزمنية (3 محاور).
حجم النافذة: 1000 مللي ثانية زيادة النافذة (الخطوة): 200 مللي ثانية تمكين: المحاور، المقدار (اختياري)، التردد 18.
كتلة المعالجة: التحليل الطيفي (أو السمات الطيفية للحركة). حجم النافذة: ١٠٠٠ مللي ثانية. زيادة النافذة (الخطوة): ٢٠٠ مللي ثانية. تمكين: المحاور، المقدار (اختياري)، مع الاحتفاظ بجميع الإعدادات الافتراضية أولاً.
كتلة التعلم: التصنيف (كيراس).
انقر فوق حفظ الدافع. 
إنشاء الميزات:
انتقل إلى التحليل الطيفي، وانقر فوق حفظ المعلمات، ثم إنشاء ميزات لمجموعة التدريب.

تدريب نموذج صغير
انتقل إلى Classifier (Keras) واستخدم تكوينًا مضغوطًا مثل:
الشبكة العصبية: 1-2 طبقة كثيفة (على سبيل المثال، 60 → 30)، ReLU
العصور: 40-60
معدل التعلم: 0.001–0.005
حجم الدفعة: 32
تقسيم البيانات: 80/20 (تدريب/اختبار)
حفظ البيانات وتدريبها
تقييم واختبار النموذج باستخدام مجموعة الامتناع.
فحص مصفوفة الارتباك؛ إذا تداخلت الدائرة والأعلى، فقم بجمع بيانات أكثر تنوعًا أو تعديلها
المعلمات الطيفية (حجم النافذة / مستوى الضوضاء).
الخطوة 9: النشر على Arduino
انتقل إلى النشر:
اختر مكتبة Arduino (مكتبة C++ تعمل أيضًا).
قم بتمكين EON Compiler (إذا كان متاحًا) لتقليص حجم النموذج.
قم بتنزيل ملف .zip، ثم في Arduino IDE: Sketch → Include Library → Add .ZIP Library… يؤدي هذا إلى إضافة exampمثل المخزن المؤقت الثابت والمستمر تحت File → مثالampليه →
اسم مشروعك - Edge Impulse. رسم تخطيطي استدلالي لـ Arduino UNO EK R4 WiFi + ADXL345.
الخطوة 10: رسم استدلالي لـ Arduino
#يشمل
#يشمل
#يشمل // استبدال برأس Edge Impulse
Adafruit_ADXL345_تسريع موحد =
Adafruit_ADXL345_موحد(12345)؛
ثابت bool debug_nn = false؛
إعداد فارغ () {
المسلسل.البداية(115200)؛
بينما (! Serial) {}
إذا لم يتم بدء التسارع () {
Serial.println("خطأ: لم يتم اكتشاف ADXL345");
بينما (1) ؛
}
مجموعة نطاق التسارع (ADXL345_RANGE_4_G)؛
}
حلقة فارغة () {
المخزن المؤقت العائم[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0}؛
لـ (الحجم_t ix = 0؛ ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE؛ ix +=
3) {
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS *
1000);
أحداث الاستشعار
accel.getEvent(&e);
المخزن المؤقت[ix + 0] = e.acceleration.x؛
المخزن المؤقت[ix + 1] = e.acceleration.y؛
المخزن المؤقت[ix + 2] = e.acceleration.z؛
int32_t الانتظار = (int32_t)(العلامة التالية – الميكروثانية) ؛
إذا (انتظر > 0) delayMicroseconds(انتظر)؛
}
إشارة_t إشارة؛
int err = numpy::signal_from_buffer(buffer،
حجم إطار الإدخال DSP_INPUT_EI_CLASSIFIER، &signal);
إذا (err != 0) ارجع؛
نتيجة ei_impulse_result_t = {0}؛
EI_IMPULSE_ERROR res = run_classifier(&signal, &result,
تصحيح_nn)؛
إذا (res != EI_IMPULSE_OK) ارجع؛
لـ (الحجم_t ix = 0؛ ix < EI_CLASSIFIER_LABEL_COUNT؛ ix++) {
ei_printf("%s: %.3f "، النتيجة.التصنيف[ix].العلامة،
النتيجة.التصنيف[ix].القيمة);
}
#إذا كان EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf("الشذوذ: %.3f"، النتيجة.الشذوذ)؛
#نهاية_الحياة
ei_printf("\n");
}
الإخراج السابقampعلى:
نصائح:
حافظ على مزامنة EI_CLASSIFIER_INTERVAL_MS مع تردد مُرسِل البيانات (مثلاً، ١٠٠ هرتز → ١٠ مللي ثانية). تُعيّن مكتبة Edge Impulse هذا الثابت تلقائيًا من نبضتك.
إذا كنت تريد الكشف المستمر (نافذة منزلقة)، فابدأ من النافذة المستمرةampتم تضمين le مع مكتبة EI ويتم التبديل في قراءات ADXL345.
سوف نضيف دروس فيديو قريبًا؛ حتى ذلك الحين، ترقبوا – https://www.youtube.com/@RobuInlabs
وإذا كان لا يزال لديك بعض الشكوك، يمكنك مشاهدة هذا الفيديو من Edged Impulse: https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

المستندات / الموارد
![]() |
لوحة تطوير Arduino ABX00087 UNO R4 WiFi [بي دي اف] دليل المستخدم R4 WiFi، ADXL345، ABX00087 لوحة تطوير UNO R4 WiFi، ABX00087، لوحة تطوير UNO R4 WiFi، لوحة تطوير WiFi، لوحة تطوير، لوحة |
