

Bo mạch phát triển WiFi ABX00087 UNO R4
Nhận dạng cú đánh cricket bằng Arduino UNO R4 WiFi + ADXL345 + Edge
Xung lực
Tài liệu này cung cấp quy trình làm việc hoàn chỉnh để xây dựng hệ thống nhận dạng cú đánh cricket sử dụng Arduino UNO R4 WiFi với cảm biến gia tốc ADXL345 và Edge Impulse Studio. Dự án bao gồm thu thập dữ liệu cảm biến gia tốc, huấn luyện mô hình học máy và triển khai mô hình đã huấn luyện trở lại Arduino để phân loại cú đánh theo thời gian thực.
Các cú đánh cricket được xem xét trong dự án này:
– Cover Drive
– Lái thẳng
– Kéo bắn
Bước 1: Yêu cầu về phần cứng
– Arduino UNO R4 WiFi
– Cảm biến gia tốc ADXL345 (I2C)
– Dây nối
– Bảng mạch (tùy chọn)
- Cáp USB Type-C
Bước 2: Yêu cầu phần mềm
– Arduino IDE (mới nhất)
– Tài khoản Edge Impulse Studio (miễn phí)
– Công cụ CLI Edge Impulse (yêu cầu Node.js)
– Thư viện Adafruit ADXL345
Bước 3: Đấu dây cho ADXL345
Kết nối cảm biến ADXL345 với Arduino UNO R4 WiFi như sau:
VCC → 3.3V
Mặt đất → Mặt đất
SDA → SDA (A4)
SCL → SCL (A5)
CS → 3.3V (tùy chọn, cho chế độ I2C)
SDO → nổi hoặc GND
Bước 4: Chuẩn bị cảm biến IDE
Làm thế nào để cài đặt thư viện cảm biến trong Arduino IDE?
Mở Arduino IDE
Mở Công cụ → Quản lý Thư viện… và cài đặt: Adafruit ADXL345 Unified Adafruit Unified Sensor
(Nếu bạn có LSM6DSO hoặc MPU6050: hãy cài đặt SparkFun LSM6DSO, Adafruit LSM6DS hoặc MPU6050 cho phù hợp.)
Bước 5: Bản phác thảo Arduino để thu thập dữ liệu
Tải bản phác thảo này lên Arduino UNO R4 WiFi của bạn. Nó truyền dữ liệu gia tốc kế ở định dạng CSV (x, y, z) ở tần số ~18 Hz cho Edge Impulse.
#bao gồm
#bao gồm
Adafruit_ADXL345_Unified accel =
Adafruit_ADXL345_Unified(12345);
thiết lập void() {
Serial.bắt đầu(115200);
nếu (!accel.begin()) {
Serial.println(“Không phát hiện thấy ADXL345”);
trong khi (1);
}
tăng tốc. setRange(ADXL345_RANGE_4_G);
}
vòng lặp void() {
sensors_event_t e;
accel.getEvent(&e);
Serial.print (ví dụ: acceleration.x);
Serial.print(“,”);
Serial.print(ví dụ: gia tốc.y);
Serial.print(“,”);
Serial.println(e.acceleration.z);delay(55); // ~18 Hz
}
Thiết lập Edge Impulse

Bước 6: Kết nối với Edge Impulse
- Đóng Arduino Serial Monitor.
- Chạy lệnh: edge-impulse-data-forwarder –frequency 18
- Nhập tên trục: accX, accY, accZ
- Đặt tên cho thiết bị của bạn: Arduino-Cricket-Board
- Xác nhận kết nối trong Edge Impulse Studio tại mục 'Thiết bị'.


Bước 7: Thu thập dữ liệu
Trong Edge Impulse Studio → Thu thập dữ liệu:
– Thiết bị: Arduino-Cricket-Board
– Cảm biến: Gia tốc kế (3 trục)
– Sampđộ dài: 2000 ms (2 giây)
– Tần số: 18 Hz
Ghi lại ít nhất 40 giâyamples mỗi lớp:
– Cover Drive
– Lái thẳng
– Kéo bắn
Thu thập dữ liệu Examptập
Bìa ổ đĩa
Thiết bị: Arduino-Cricket-Board
Nhãn: Cover Drive
Cảm biến: Cảm biến có 3 trục (accX, accY, accZ)
Sampđộ dài: 10000ms
Tần số: 18 Hz
Example Dữ liệu thô:
accX -0.32
accY 9.61
accZ -0.12
Lái xe thẳng
Thiết bị: Arduino-Cricket-Board
Nhãn: Lái thẳng
Cảm biến: Cảm biến có 3 trục (accX, accY, accZ)
Sampđộ dài: 10000ms
Tần số: 18 Hz
Example Dữ liệu thô:
accX 1.24
accY 8.93
accZ -0.42
Kéo bắn
Thiết bị: Arduino-Cricket-Board
Nhãn: Pull Shot
Cảm biến: Cảm biến có 3 trục (accX, accY, accZ)
Sampđộ dài: 10000 ms
Tần số: 18 Hz
Example Dữ liệu thô:
accX 2.01
accY 7.84
accZ -0.63 
Bước 8: Thiết kế xung lực
Mở Tạo xung lực:
Khối đầu vào: Dữ liệu chuỗi thời gian (3 trục).
Kích thước cửa sổ: 1000 ms Tăng cửa sổ (bước tiến): 200 ms Kích hoạt: Trục, Độ lớn (tùy chọn), tần suất 18.
Khối xử lý: Phân tích quang phổ (hay còn gọi là Đặc điểm quang phổ cho chuyển động). Kích thước cửa sổ: 1000 ms Tăng cửa sổ (bước tiến): 200 ms Kích hoạt: Trục, Độ lớn (tùy chọn), giữ nguyên tất cả các giá trị mặc định trước.
Khối học tập: Phân loại (Keras).
Nhấp vào Lưu xung lực. 
Tạo các tính năng:
Vào Phân tích phổ, nhấp vào Lưu tham số, sau đó Tạo tính năng cho bộ đào tạo.

Đào tạo một mô hình nhỏ
Vào Classifier (Keras) và sử dụng cấu hình nhỏ gọn như sau:
Mạng nơ-ron: 1–2 lớp dày đặc (ví dụ: 60 → 30), ReLU
Kỷ nguyên: 40–60
Tỷ lệ học tập: 0.001–0.005
Kích thước lô: 32
Phân chia dữ liệu: 80/20 (đào tạo/kiểm tra)
Lưu và đào tạo dữ liệu
Đánh giá và kiểm tra thử nghiệm mô hình với tập dữ liệu giữ lại.
Kiểm tra ma trận nhầm lẫn; nếu vòng tròn và phía trên chồng lên nhau, hãy thu thập dữ liệu đa dạng hơn hoặc điều chỉnh
Các thông số quang phổ (kích thước cửa sổ / độ nhiễu nền).
Bước 9: Triển khai lên Arduino
Đi tới Triển khai:
Chọn thư viện Arduino (thư viện C++ cũng được).
Bật EON Compiler (nếu có) để thu nhỏ kích thước mô hình.
Tải xuống .zip, sau đó trong Arduino IDE: Sketch → Include Library → Add .ZIP Library… Thao tác này sẽ thêm exampnhư bộ đệm tĩnh và bộ đệm liên tục File → Ví dụamples →
Tên dự án của bạn – Edge Impulse. Bản phác thảo suy luận cho Arduino UNO EK R4 WiFi + ADXL345.
Bước 10: Phác thảo suy luận Arduino
#bao gồm
#bao gồm
#bao gồm // Thay thế bằng tiêu đề Edge Impulse
Adafruit_ADXL345_Unified accel =
Adafruit_ADXL345_Unified(12345);
bool tĩnh debug_nn = false;
thiết lập void() {
Serial.bắt đầu(115200);
trong khi (!Serial) {}
nếu (!accel.begin()) {
Serial.println(“LỖI: Không phát hiện thấy ADXL345”);
trong khi (1);
}
tăng tốc. setRange(ADXL345_RANGE_4_G);
}
vòng lặp void() {
bộ đệm float[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
đối với (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=
3) {
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS *
1000);
sensors_event_t e;
accel.getEvent(&e);
buffer[ix + 0] = e.acceleration.x;
buffer[ix + 1] = e.acceleration.y;
buffer[ix + 2] = e.acceleration.z;
int32_t chờ = (int32_t)(next_tick – micros());
nếu (chờ > 0) delayMicroseconds(chờ);
}
tín hiệu_t tín hiệu;
int err = numpy::signal_from_buffer(buffer,
EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
nếu (err != 0) trả về;
ei_impulse_result_t kết quả = {0};
EI_IMPULSE_ERROR res = run_classifier(&signal, &result,
gỡ lỗi_nn);
nếu (res != EI_IMPULSE_OK) trả về;
đối với (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(“%s: %.3f “, result.classification[ix].label,
result.classification[ix].value);
}
#if EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf(“dị thường: %.3f”, result.anomaly);
#kết thúc nếu
ei_printf(“\n”);
}
Đầu ra cũamplê:
Mẹo:
Giữ EI_CLASSIFIER_INTERVAL_MS đồng bộ với tần số chuyển tiếp dữ liệu của bạn (ví dụ: 100 Hz → 10 ms). Thư viện Edge Impulse sẽ tự động thiết lập hằng số này dựa trên xung nhịp của bạn.
Nếu bạn muốn phát hiện liên tục (cửa sổ trượt), hãy bắt đầu từ chế độ phát hiện liên tụcampđược bao gồm trong thư viện EI và hoán đổi trong các lần đọc ADXL345.
Chúng tôi sẽ sớm thêm các video hướng dẫn; trong thời gian chờ đợi, hãy theo dõi – https://www.youtube.com/@RobuInlabs
Và nếu bạn vẫn còn thắc mắc, bạn có thể xem video này của Edged Impulse: https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

Tài liệu / Tài nguyên
![]() |
Bo mạch phát triển WiFi Arduino ABX00087 UNO R4 [tập tin pdf] Hướng dẫn sử dụng R4 WiFi, ADXL345, ABX00087 Bo mạch phát triển UNO R4 WiFi, ABX00087, Bo mạch phát triển UNO R4 WiFi, Bo mạch phát triển WiFi, Bo mạch phát triển, Bo mạch |
