

ABX00087 UNO R4 WiFi развојна плоча
Препознавање на удари од крикет со 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.3V
GND → GND
СДА → СДА (A4)
SCL → SCL (A5)
CS → 3.3V (опционално, за I2C режим)
SDO → лебдечки или GND
Чекор 4: Подгответе го IDE сензорот
Како да инсталирате библиотеки на сензори во Arduino IDE?
Отвори Arduino IDE
Отворете Алатки → Управување со библиотеки… и инсталирајте: Adafruit ADXL345 Unified Adafruit Unified Sensor
(Ако наместо тоа имате LSM6DSO или MPU6050: инсталирајте SparkFun LSM6DSO, Adafruit LSM6DS или MPU6050 соодветно.)
Чекор 5: Скица на Arduino за собирање податоци
Поставете ја оваа скица на вашиот Arduino UNO R4 WiFi. Таа ги стримува податоците од акцелерометарот во CSV формат (x,y,z) на ~18 Hz за Edge Impulse.
#вклучи
#вклучи
Adafruit_ADXL345_Unified забрзување =
Adafruit_ADXL345_Unified(12345);
празнина поставка() {
Serial.begin(115200);
ако (!accel.begin()) {
Serial.println(“Не е откриен ADXL345”);
додека (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
празнина јамка() {
сензори_настан_t e;
accel.getEvent(&e);
Serial.print (e.acceleration.x);
Serial.print(“, „,“);
Serial.print(e.acceleration.y);
Serial.print(“, „,“);
Serial.println(e.acceleration.z);delay(55); // ~18 Hz
}
Поставување на 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 → Собирање податоци:
– Уред: Ардуино-Крикет-Табла
– Сензор: Акцелерометар (3 оски)
– Сampдолжина на сликата: 2000 ms (2 секунди)
– Фреквенција: 18 Hz
Снимајте најмалку 40 секундиampпомалку по час:
– Покривен погон
– Прав погон
– Повлечете го ударот
Собирање податоци на пр.ampлес
Покријте го Drive
Уред: Ардуино-Крикет-Табла
Ознака: Покривен диск
Сензор: Сензор со 3 оски (accX, accY, accZ)
Sampдолжина на сликата: 10000ms
Фреквенција: 18 Hz
ExampСуровите податоци:
accX -0.32
accY 9.61
accZ -0.12
Правен погон
Уред: Ардуино-Крикет-Табла
Ознака: Прав погон
Сензор: Сензор со 3 оски (accX, accY, accZ)
Sampдолжина на сликата: 10000ms
Фреквенција: 18 Hz
ExampСуровите податоци:
accX 1.24
accY 8.93
accZ -0.42
Повлечете го ударот
Уред: Ардуино-Крикет-Табла
Ознака: Повлечете го ударот
Сензор: Сензор со 3 оски (accX, accY, accZ)
Sampдолжина на ле: 10000 ms
Фреквенција: 18 Hz
ExampСуровите податоци:
accX 2.01
accY 7.84
accZ -0.63 
Чекор 8: Импулсен дизајн
Отвори Креирај импулс:
Влезен блок: Податоци од временски серии (3 оски).
Големина на прозорец: 1000 ms Зголемување на прозорецот (чекор): 200 ms Овозможи: Оски, Магнитуда (опционално), фреквенција 18.
Блок за обработка: Спектрална анализа (позната и како Спектрални карактеристики за движење). Големина на прозорец: 1000 ms Зголемување на прозорецот (чекор): 200 ms Овозможи: Оски, Магнитуда (опционално), задржи ги сите стандардни вредности прво.
Блок за учење: Класификација (Керас).
Кликнете на Зачувај импулс. 
Генерирај карактеристики:
Одете во Спектрална анализа, кликнете на Зачувај параметри, потоа Генерирај карактеристики за множеството за обука.

Обучете мал модел
Одете во Класификатор (Keras) и користете компактна конфигурација како:
Нервна мрежа: 1–2 густи слоеви (на пр., 60 → 30), ReLU
Епохи: 40–60
Стапка на учење: 0.001–0.005
Големина на серија: 32
Поделба на податоци: 80/20 (обука/тест)
Зачувајте ги и обучете ги податоците
Оценете и проверете го тестирањето на моделот со множеството holdout.
Проверете ја матрицата за конфузија; ако кругот и нагоре се преклопуваат, соберете поразновидни податоци или изменете
Спектрални параметри (големина на прозорецот / под на бучава).
Чекор 9: Распоредување на Arduino
Одете на Распоредување:
Изберете ја библиотеката Arduino (библиотеката C++ исто така работи).
Овозможете го компајлерот EON (доколку е достапен) за да ја намали големината на моделот.
Преземете го .zip, потоа во Arduino IDE: Sketch → Include Library → Add .ZIP Library… Ова додава ексampпомалку како статички бафер и континуиран под File → Прamples →
Име на вашиот проект – 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};
за (големина_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=
3) {
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS *
1000);
сензори_настан_t e;
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) delayMicroseconds(чекај);
}
сигнал_т сигнал;
int err = numpy::signal_from_buffer(бафер,
EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &сигнал);
ако (err != 0) врати;
ei_impulse_result_t резултат = {0};
EI_IMPULSE_ERROR res = run_classifier(&сигнал, &резултат,
debug_nn);
ако (res != EI_IMPULSE_OK) врати;
за (големина_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(“%s: %.3f “, резултат.класификација[ix].ознака,
резултат.класификација[ix].вредност);
}
#ако EI_CLASSIFER_HAS_ANOMALY == 1
ei_printf(“аномалија: %.3f”, резултат.аномалија);
#крај
ei_printf(“\n”);
}
Излез прampле:
Совети:
Одржувајте го EI_CLASSIFIER_INTERVAL_MS синхронизирано со фреквенцијата на вашиот пренасочувач на податоци (на пр., 100 Hz → 10 ms). Библиотеката Edge Impulse ја поставува оваа константа автоматски од вашиот импулс.
Ако сакате континуирано откривање (лизгачки прозорец), започнете од Континуиранотоample вклучено во библиотеката EI и замена во читањата на ADXL345.
Наскоро ќе додадеме видео упатства; дотогаш, следете не – https://www.youtube.com/@RobuInlabs
И ако сè уште имате некои сомнежи, можете да го погледнете ова видео од Edged Impulse: https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

Документи / ресурси
![]() |
Arduino ABX00087 UNO R4 WiFi развојна плочка [pdf] Упатство за корисникот R4 WiFi, ADXL345, ABX00087 UNO R4 WiFi развојна плочка, ABX00087, UNO R4 WiFi развојна плочка, WiFi развојна плочка, развојна плочка, плочка |
