Arduino 로고Arduino ABX00087 UNO R4 WiFi 개발 보드

ABX00087 UNO R4 WiFi 개발 보드

Arduino UNO R4 WiFi + ADXL345 + Edge를 이용한 크리켓 샷 인식
충동
이 문서는 ADXL345 가속도계와 Edge Impulse Studio를 탑재한 Arduino UNO R4 WiFi를 사용하여 크리켓 슛 인식 시스템을 구축하는 전체 워크플로를 제공합니다. 이 프로젝트는 가속도계 데이터 수집, 머신러닝 모델 학습, 그리고 실시간 슛 분류를 위해 학습된 모델을 Arduino에 다시 배포하는 과정을 포함합니다.
이 프로젝트에서 고려된 크리켓 샷:
– 커버 드라이브
– 스트레이트 드라이브
– 풀샷

1단계: 하드웨어 요구 사항

– 아두이노 우노 R4 와이파이
– ADXL345 가속도계(I2C)
– 점퍼 와이어
– 브레드보드(선택 사항)
– USB Type-C 케이블

2단계: 소프트웨어 요구 사항

– Arduino IDE(최신)
– Edge Impulse Studio 계정(무료)
– Edge Impulse CLI 도구(Node.js 필요)
– Adafruit ADXL345 라이브러리

3단계: ADXL345 배선

다음과 같이 ADXL345 센서를 Arduino UNO R4 WiFi에 연결합니다.
VCC → 3.3V
접지 → 접지
SDA → SDA (A4)
SCL → SCL (A5)
CS → 3.3V(선택 사항, I2C 모드용)
SDO → 플로팅 또는 GNDArduino ABX00087 UNO R4 WiFi 개발 보드 - 이상view

4단계: IDE 센서 준비

Arduino IDE에 센서 라이브러리를 설치하는 방법은?
아두이노 IDE 열기
도구 → 라이브러리 관리…를 열고 Adafruit ADXL345 Unified Adafruit Unified Sensor를 설치합니다.
(LSM6DSO 또는 MPU6050이 있는 경우: SparkFun LSM6DSO, Adafruit LSM6DS 또는 MPU6050을 적절히 설치하세요.)

5단계: 데이터 수집을 위한 Arduino 스케치

이 스케치를 Arduino UNO R4 WiFi에 업로드하세요. Edge Impulse를 위해 가속도계 데이터를 CSV 형식(x,y,z)으로 ~18Hz로 스트리밍합니다.
#포함하다
#포함하다
Adafruit_ADXL345_통합 가속 =
Adafruit_ADXL345_통합(12345);
무효 설정() {
직렬.시작(115200);
if (!accel.begin()) {
Serial.println("ADXL345가 감지되지 않았습니다");
동안 (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
void 루프() {
센서_이벤트_t e;
accel.getEvent(&e);
직렬.인쇄(e.가속.x);
직렬.print(“,”);
Serial.print(e.가속도.y);
직렬.print(“,”);
Serial.println(e.acceleration.z);delay(55); // ~18Hz
}

Edge Impulse 설정

Arduino ABX00087 UNO R4 WiFi 개발 보드 - 설정

6단계: Edge Impulse에 연결

  1. Arduino 시리얼 모니터를 닫습니다.
  2. 다음 명령을 실행하세요: edge-impulse-data-forwarder –frequency 18
  3. 축 이름을 입력하세요: accX, accY, accZ
  4. 장치 이름을 Arduino-Cricket-Board로 지정하세요.
  5. Edge Impulse Studio의 '장치'에서 연결을 확인하세요.

Arduino ABX00087 UNO R4 WiFi 개발 보드 - Edge Impulse에 연결Arduino ABX00087 UNO R4 WiFi 개발 보드 - Edge Impulse 1에 연결

7단계: 데이터 수집

Edge Impulse Studio에서 → 데이터 수집:
– 장치: Arduino-Cricket-Board
– 센서: 가속도계(3축)
– 씨amp길이: 2000ms(2초)
– 주파수 : 18Hz
최소 40초 이상 기록하세요amp학급당:
– 커버 드라이브
– 스트레이트 드라이브
– 풀샷Arduino ABX00087 UNO R4 WiFi 개발 보드 - 데이터 수집데이터 수집 Examp레
커버 드라이브
장치: Arduino-Cricket-Board
레이블: 커버 드라이브
센서: 3축(accX, accY, accZ)을 가진 센서
Samp길이: 10000ms
주파수 : 18Hz
Examp원시 데이터:
accX -0.32
accY 9.61
accZ -0.12
스트레이트 드라이브
장치: Arduino-Cricket-Board
레이블: 스트레이트 드라이브
센서: 3축(accX, accY, accZ)을 가진 센서
Samp길이: 10000ms
주파수 : 18Hz
Examp원시 데이터:
accX 1.24
accY 8.93
accZ -0.42
풀샷
장치: Arduino-Cricket-Board
레이블: 풀샷
센서: 3축(accX, accY, accZ)을 가진 센서
Samp길이: 10000ms
주파수 : 18Hz
Examp원시 데이터:
accX 2.01
accY 7.84
accZ -0.63 Arduino ABX00087 UNO R4 WiFi 개발 보드 - 데이터 수집 1

8단계: 임펄스 설계

열기 충동을 생성하세요:
입력 블록: 시계열 데이터(3축).
창 크기: 1000ms 창 증가(스트라이드): 200ms 활성화: 축, 크기(선택 사항), 주파수 18.
처리 블록: 스펙트럼 분석(움직임에 대한 스펙트럼 특징이라고도 함). 윈도우 크기: 1000ms 윈도우 증가(스트라이드): 200ms 활성화: 축, 크기(선택 사항), 모든 기본값을 우선적으로 유지합니다.
학습 블록: 분류(Keras).
저장을 클릭합니다. Arduino ABX00087 UNO R4 WiFi 개발 보드 - Impulse Design

기능 생성:
스펙트럼 분석으로 가서 매개변수 저장을 클릭한 다음, 훈련 세트에 대한 기능 생성을 클릭합니다.

Arduino ABX00087 UNO R4 WiFi 개발 보드 - 교육 세트

작은 모델을 훈련시키다
Classifier(Keras)로 가서 다음과 같은 간단한 구성을 사용하세요.
신경망: 1~2개의 밀집층(예: 60 → 30), ReLU
시대: 40–60
학습률: 0.001–0.005
배치 크기: 32
데이터 분할: 80/20(훈련/테스트)
데이터 저장 및 학습Arduino ABX00087 UNO R4 WiFi 개발 보드 - 데이터 저장 및 학습

홀드아웃 세트를 사용하여 모델 테스트를 평가하고 확인합니다.
혼동 행렬을 검사합니다. 원과 위쪽이 겹치면 더 다양한 데이터를 수집하거나 조정합니다.
스펙트럼 매개변수(창 크기/잡음 플로어).

9단계: Arduino에 배포

배포로 이동:
Arduino 라이브러리를 선택하세요(C++ 라이브러리도 가능합니다).
EON 컴파일러를 활성화하여(사용 가능한 경우) 모델 크기를 줄입니다. Arduino ABX00087 UNO R4 WiFi 개발 보드 - Arduino 배포.zip을 다운로드한 다음 Arduino IDE에서 스케치 → 라이브러리 포함 → .ZIP 라이브러리 추가… 이렇게 하면 ex가 추가됩니다.ampStatic 버퍼와 Continuous 버퍼가 유사합니다. File → 예amp레 →
프로젝트 이름 – Edge Impulse. Arduino UNO EK R4 WiFi + ADXL345용 추론 스케치입니다.

10단계: Arduino 추론 스케치

#포함하다
#포함하다
#포함하다 // Edge Impulse 헤더로 교체
Adafruit_ADXL345_통합 가속 =
Adafruit_ADXL345_통합(12345);
정적 bool debug_nn = false;
무효 설정() {
직렬.시작(115200);
while (!Serial) {}
if (!accel.begin()) {
Serial.println("오류: ADXL345가 감지되지 않았습니다");
동안 (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
void 루프() {
부동 소수점 버퍼[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
(size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=
3) {
uint64_t 다음_틱 = 마이크로() + (EI_CLASSIFIER_INTERVAL_MS *
1000) )
센서_이벤트_t e;
accel.getEvent(&e);
버퍼[ix + 0] = e.가속도.x;
버퍼[ix + 1] = e.가속도.y;
버퍼[ix + 2] = e.가속도.z;
int32_t 대기 = (int32_t)(다음_틱 – 마이크로());
(대기 > 0) 지연 마이크로초(대기);
}
signal_t ​​신호;
int err = numpy::signal_from_buffer(버퍼,
EI_CLASSIFIER_DSP_입력_프레임_크기, &신호);
if (err != 0)을 반환합니다.

ei_impulse_result_t 결과 = {0};
EI_IMPULSE_ERROR res = run_classifier(&신호, &결과,
디버그_nn);
if (res != EI_IMPULSE_OK)를 반환합니다.

(size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf("%s: %.3f ", 결과.분류[ix].레이블,
결과.분류[ix].값);
}
#EI_CLASSIFIER_ANOMALY == 1인 경우
ei_printf("이상: %.3f", result.anomaly);
#끝
ei_printf(“\n”);
}

예 출력amp르 :

Arduino ABX00087 UNO R4 WiFi 개발 보드 - Arduino 추론 스케치팁:
EI_CLASSIFIER_INTERVAL_MS를 데이터 포워더 주파수와 동기화하세요(예: 100Hz → 10ms). Edge Impulse 라이브러리는 임펄스에서 이 상수를 자동으로 설정합니다.
연속 감지(슬라이딩 윈도우)를 원하시면 Continuous ex에서 시작하세요.ampEI 라이브러리에 포함되어 있으며 ADXL345 읽기에서 교체되었습니다.
곧 비디오 튜토리얼을 추가할 예정입니다. 그때까지 계속 지켜봐 주세요. https://www.youtube.com/@RobuInlabs
아직도 의심이 남는다면 Edged Impulse의 이 영상을 확인해보세요. https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

Arduino 로고

문서 / 리소스

Arduino ABX00087 UNO R4 WiFi 개발 보드 [PDF 파일] 사용자 가이드
R4 WiFi, ADXL345, ABX00087 UNO R4 WiFi 개발 보드, ABX00087, UNO R4 WiFi 개발 보드, WiFi 개발 보드, 개발 보드, 보드

참고문헌

댓글을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 항목은 표시되어 있습니다. *