

Мадэльная плата ABX00087 UNO R4 WiFi
Распазнаванне кідкоў у крыкет з дапамогай Arduino UNO R4 WiFi + ADXL345 + Edge
Імпульс
У гэтым дакуменце прадстаўлены поўны працоўны працэс для стварэння сістэмы распазнавання ўдараў па крыкеце з выкарыстаннем Arduino UNO R4 WiFi з акселерометрам ADXL345 і Edge Impulse Studio. Праект уключае збор дадзеных акселерометра, навучанне мадэлі машыннага навучання і разгортванне навучанай мадэлі назад у Arduino для класіфікацыі ўдараў у рэжыме рэальнага часу.
У гэтым праекце разглядаліся наступныя ўдары па крыкету:
– Вокладка дыска
– Прамы прывад
– Цягні стрэл
Крок 1: Патрабаванні да абсталявання
– Arduino UNO R4 Wi-Fi
– Акселерометр ADXL345 (I2C)
– Перамычкі
– Макетная плата (па жаданні)
– Кабель USB Type-C
Крок 2: Патрабаванні да праграмнага забеспячэння
– Arduino IDE (апошняя версія)
– Акаўнт Edge Impulse Studio (бясплатны)
– Інструменты каманднага радка Edge Impulse (патрабуецца Node.js)
– Бібліятэка Adafruit ADXL345
Крок 3: Падключэнне ADXL345
Падключыце датчык ADXL345 да Arduino UNO R4 WiFi наступным чынам:
VCC → 3.3 В
GND → GND
ПДД → ПДД (А4)
СЦЛ → СЦЛ (А5)
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_Unified паскарэнне =
Adafruit_ADXL345_Unified(12345);
несапраўдная ўстаноўка() {
Serial.begin(115200);
калі (!accel.begin()) {
Serial.println(“ADXL345 не выяўлены”);
пакуль (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
несапраўдны цыкл() {
падзеі_датчыкаў;
accel.getEvent(&e);
Серыйны.друк (e.acceleration.x);
Серыйны.друк(",");
Серыйны.друк(e.acceleration.y);
Серыйны.друк(",");
Serial.println(e.acceleration.z); затрымка(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
– Датчык: акселерометр (3 восі)
– Сampпрацягласць файла: 2000 мс (2 секунды)
– Частата: 18 Гц
Запішыце не менш за 40 секундampколькасць у класе:
– Вокладка дыска
– Прамы прывад
– Цягні стрэл
Збор дадзеных Exampлес
Вокладка Drive
Прылада: Arduino-Cricket-Board
Лэйбл: Cover Drive
Датчык: Датчык з 3 восямі (accX, accY, accZ)
Sampдаўжыня файла: 10000 мс
Частата: 18 Гц
ExampНеапрацаваныя дадзеныя:
accX -0.32
рахунак 9.61
accZ -0.12
Прамы прывад
Прылада: Arduino-Cricket-Board
Пазнака: Straight Drive
Датчык: Датчык з 3 восямі (accX, accY, accZ)
Sampдаўжыня файла: 10000 мс
Частата: 18 Гц
ExampНеапрацаваныя дадзеныя:
accX 1.24
рахунак 8.93
accZ -0.42
Цягні стрэл
Прылада: Arduino-Cricket-Board
Пазнака: Pull Shot
Датчык: Датчык з 3 восямі (accX, accY, accZ)
Sampдаўжыня файла: 10000 мс
Частата: 18 Гц
ExampНеапрацаваныя дадзеныя:
accX 2.01
рахунак 7.84
accZ -0.63 
Крок 8: Імпульсны дызайн
Адкрыць Стварыць імпульс:
Уваходны блок: Дадзеныя часовых шэрагаў (3 восі).
Памер акна: 1000 мс Павелічэнне акна (крок): 200 мс Уключэнне: восі, велічыня (неабавязкова), частата 18.
Блок апрацоўкі: Спектральны аналіз (г.зн. Спектральныя асаблівасці для руху). Памер акна: 1000 мс Павелічэнне акна (крок): 200 мс Уключэнне: Восі, Велічыня (неабавязкова), пакінуць усе значэнні па змаўчанні першымі.
Навучальны блок: Класіфікацыя (Keras).
Націсніце «Захаваць імпульс». 
Генерацыя функцый:
Перайдзіце ў раздзел «Спектральны аналіз», націсніце «Захаваць параметры», а затым «Згенераваць прыкметы для навучальнага набору».

Навучанне невялікай мадэлі
Перайдзіце ў класіфікатар (Keras) і выкарыстоўвайце кампактную канфігурацыю, напрыклад:
Нейронная сетка: 1–2 шчыльныя пласты (напрыклад, 60 → 30), ReLU
Эпохі: 40–60 гг.
Хуткасць навучання: 0.001–0.005
Памер партыі: 32
Падзел дадзеных: 80/20 (навучанне/тэст)
Захоўвайце і навучайце дадзеныя
Ацаніце і праверце тэставанне мадэлі з усталяваным затрымкай.
Праверце матрыцу блытаніны; калі круг і ўверх перакрываюцца, збярыце больш разнастайныя дадзеныя або ўдакладніце іх
Спектральныя параметры (памер акна / узровень шуму).
Крок 9: Разгортванне на Arduino
Перайдзіце да разгортвання:
Выберыце бібліятэку Arduino (бібліятэка C++ таксама працуе).
Уключыце кампілятар EON (калі даступны), каб паменшыць памер мадэлі.
Спампуйце .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_Unified паскарэнне =
Adafruit_ADXL345_Unified(12345);
статычны bool debug_nn = false;
несапраўдная ўстаноўка() {
Serial.begin(115200);
пакуль (!Серыйны) {}
калі (!accel.begin()) {
Serial.println(“ПАМЫЛКА: ADXL345 не выяўлены”);
пакуль (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
несапраўдны цыкл() {
буфер з плаваючай колькасцю[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
для (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=
3) {
uint64_t next_tick = мікрасхемы() + (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)(next_tick – мікрасекунд());
калі (чаканне > 0) затрымкаМікрасеконды(чаканне);
}
сігнал_t сігнал;
int err = numpy::signal_from_buffer(буфер,
EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &сігнал);
калі (памылка != 0) вярнуць;
Вынік ei_impulse_result_t = {0};
EI_IMPULSE_ERROR res = run_classifier(&сігнал, &вынік,
debug_nn);
калі (res != EI_IMPULSE_OK) вярнуць;
для (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(“%s: %.3f “, вынік.класіфікацыя[ix].метка,
вынік.класіфікацыя[ix].значэнне);
}
#калі EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf(“анамалія: %.3f”, вынік.анамалія);
#endif
ei_printf(“\n”);
}
Выхад прampль:
Парады:
Сінхранізуйце EI_CLASSIFIER_INTERVAL_MS з частатой вашага перасылальніка дадзеных (напрыклад, 100 Гц → 10 мс). Бібліятэка Edge Impulse аўтаматычна ўсталёўвае гэту канстанту з вашага імпульсу.
Калі вам патрэбна бесперапыннае выяўленне (слізгальнае акно), пачніце з рэжыму бесперапыннага выяўленняampуключаны ў бібліятэку EI і падключаецца да чытанняў ADXL345.
Неўзабаве мы дадамо відэаўрокі; а пакуль што сачыце за навінамі – https://www.youtube.com/@RobuInlabs
А калі ў вас усё яшчэ ёсць сумневы, вы можаце паглядзець гэта відэа ад Edged Impulse: https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

Дакументы / Рэсурсы
![]() |
Мадэльная плата Arduino ABX00087 UNO R4 Wi-Fi [pdfКіраўніцтва карыстальніка R4 WiFi, ADXL345, ABX00087 Мадэль UNO R4 WiFi, ABX00087, Мадэль UNO R4 WiFi, Мадэль WiFi, Мадэль, Мадэль |
