

Placa de desenvolvemento WiFi ABX00087 UNO R4
Recoñecemento de tiros de críquet usando Arduino UNO R4 WiFi + ADXL345 + Edge
Impulso
Este documento proporciona un fluxo de traballo completo para construír un sistema de recoñecemento de golpes de críquet usando Arduino UNO R4 WiFi cun acelerómetro ADXL345 e Edge Impulse Studio. O proxecto implica a recollida de datos do acelerómetro, o adestramento dun modelo de aprendizaxe automática e a implementación do modelo adestrado de volta no Arduino para a clasificación de golpes en tempo real.
Golpes de críquet considerados neste proxecto:
– Cobertura de condución
– Accionamento en liña recta
– Tiro de tracción
Paso 1: Requisitos de hardware
Arduino UNO R4 WiFi
– Acelerómetro ADXL345 (I2C)
– Cables de puente
– Placa de probas (opcional)
- Cable USB tipo C
Paso 2: Requisitos de software
– IDE de Arduino (última versión)
– Conta de Edge Impulse Studio (gratuíta)
– Ferramentas CLI de Edge Impulse (requírese Node.js)
– Biblioteca Adafruit ADXL345
Paso 3: Cableado do ADXL345
Conecta o sensor ADXL345 ao Arduino UNO R4 WiFi do seguinte xeito:
VCC → 3.3 V
GND → GND
SDA → SDA (A4)
SCL → SCL (A5)
CS → 3.3 V (opcional, para o modo I2C)
SDO → flotante ou GND
Paso 4: Preparar o sensor IDE
Como instalar bibliotecas de sensores no IDE de Arduino?
Abrir o IDE de Arduino
Abre Ferramentas → Xestionar bibliotecas… e instala: Adafruit ADXL345 Unified Adafruit Unified Sensor
(Se tes LSM6DSO ou MPU6050 no seu lugar: instala SparkFun LSM6DSO, Adafruit LSM6DS ou MPU6050 segundo corresponda.)
Paso 5: Esbozo de Arduino para a recollida de datos
Sube este bosquexo ao teu Arduino UNO R4 WiFi. Transmite datos do acelerómetro en formato CSV (x, y, z) a ~18 Hz para Edge Impulse.
#incluír
#incluír
Adafruit_ADXL345_Aceleración unificada =
Adafruit_ADXL345_Unified(12345);
void setup() {
Serial.begin(115200);
se (!accel.començar()) {
Serial.println("Non se detectou ADXL345");
mentres (1);
}
acelerar.configurarRango(ADXL345_RANGO_4_G);
}
void loop() {
evento_de_sensores_t e;
acelerar.obterEvento(&e);
Impresión en serie (e.aceleración.x);
Serie.imprimir(",");
Serial.print(e.acceleration.y);
Serie.imprimir(",");
Serial.println(e.acceleration.z);delay(55); // ~18 Hz
}
Configurar o impulso de bordo

Paso 6: Conexión a Edge Impulse
- Pechar o monitor serie de Arduino.
- Executa o comando: edge-impulse-data-forwarder –frequency 18
- Introduza os nomes dos eixes: accX, accY, accZ
- Nomea o teu dispositivo: Arduino-Cricket-Board
- Confirma a conexión en Edge Impulse Studio, en "Dispositivos".


Paso 7: Recollida de datos
En Edge Impulse Studio → Adquisición de datos:
– Dispositivo: Placa de críquet Arduino
– Sensor: Acelerómetro (3 eixes)
– SampDuración: 2000 ms (2 segundos)
– Frecuencia: 18 Hz
Gravar polo menos 40 segundosamppor clase:
– Cobertura de condución
– Accionamento en liña recta
– Tiro de tracción
Recoller datos Examples
Cover Drive
Dispositivo: Placa de críquet Arduino
Sello: Cover Drive
Sensor: Sensor con 3 eixes (accX, accY, accZ)
SampLonxitude: 10000 ms
Frecuencia: 18 Hz
Exampdatos brutos:
accX -0.32
accY 9.61
accZ -0.12
Tracción recta
Dispositivo: Placa de críquet Arduino
Etiqueta: Straight Drive
Sensor: Sensor con 3 eixes (accX, accY, accZ)
SampLonxitude: 10000 ms
Frecuencia: 18 Hz
Exampdatos brutos:
accX 1.24
accY 8.93
accZ -0.42
Tiro de tracción
Dispositivo: Placa de críquet Arduino
Etiqueta: Pull Shot
Sensor: Sensor con 3 eixes (accX, accY, accZ)
Samplonxitude: 10000 ms
Frecuencia: 18 Hz
Exampdatos brutos:
accX 2.01
accY 7.84
accZ -0.63 
Paso 8: Deseño de impulsos
Abrir Crear impulso:
Bloque de entrada: Datos de series temporais (3 eixes).
Tamaño da xanela: 1000 ms Aumento da xanela (paso): 200 ms Activar: Eixes, Magnitude (opcional), frecuencia 18.
Bloque de procesamento: Análise espectral (tamén coñecida como Características espectrais para movemento). Tamaño da xanela: 1000 ms Aumento da xanela (zancada): 200 ms Activar: Eixes, Magnitude (opcional), manter primeiro todos os valores predeterminados.
Bloque de aprendizaxe: Clasificación (Keras).
Fai clic en Gardar impulso. 
Xerar características:
Vaia a Análise espectral, prema en Gardar parámetros e, a seguir, en Xerar características para o conxunto de adestramento.

Adestra un modelo pequeno
Vai a Clasificador (Keras) e usa unha configuración compacta como:
Rede neuronal: 1–2 capas densas (por exemplo, 60 → 30), ReLU
Épocas: 40–60
Taxa de aprendizaxe: 0.001–0.005
Tamaño do lote: 32
División de datos: 80/20 (adestramento/proba)
Gardar e adestrar os datos
Avaliar e comprobar as probas do modelo co conxunto de excepcións.
Inspecciona a matriz de confusión; se o círculo e a parte superior se solapan, recompila datos máis diversos ou axústaos.
Parámetros espectrais (tamaño da xanela / ruído de fondo).
Paso 9: Implementación en Arduino
Ir a Implementación:
Escolle a biblioteca de Arduino (a biblioteca de C++ tamén funciona).
Activa o compilador EON (se está dispoñible) para reducir o tamaño do modelo.
Descarga o ficheiro .zip e despois no IDE de Arduino: Sketch → Include Library → Add .ZIP Library… Isto engade exampficheiros como o búfer estático e o continuo en File → Examples →
Nome do teu proxecto: Edge Impulse. Esquema de inferencia para Arduino UNO EK R4 WiFi + ADXL345.
Paso 10: Esbozo de inferencia de Arduino
#incluír
#incluír
#incluír // Substituír pola cabeceira Edge Impulse
Adafruit_ADXL345_Aceleración unificada =
Adafruit_ADXL345_Unified(12345);
estático bool debug_nn = falso;
void setup() {
Serial.begin(115200);
mentres (!Serial) {}
se (!accel.començar()) {
Serial.println("ERRO: ADXL345 non detectado");
mentres (1);
}
acelerar.configurarRango(ADXL345_RANGO_4_G);
}
void loop() {
búfer flotante[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
para (tamaño_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=
3) {
uint64_t seguinte_marca = micros() + (EI_CLASIFICADOR_INTERVALO_MS *
1000);
evento_de_sensores_t e;
acelerar.obterEvento(&e);
buffer[ix + 0] = e.aceleración.x;
buffer[ix + 1] = e.aceleración.y;
buffer[ix + 2] = e.aceleración.z;
int32_t agardar = (int32_t)(seguinte_marca – micros());
se (espera > 0) demoraMicrosegundos(espera);
}
sinal_t sinal;
int err = numpy::signal_from_buffer(buffer,
EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
se (erro != 0) devolve;
resultado de ei_impulse_result_t = {0};
EI_IMPULSE_ERROR res = executar_clasificador(&sinal, &resultado,
depuración_nn);
se (res != EI_IMPULSE_OK) devolve;
para (tamaño_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf("%s: %.3f", resultado.clasificación[ix].etiqueta,
resultado.clasificación[ix].valor);
}
#se EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf("anomalía: %.3f", resultado.anomalía);
#endif
ei_printf("\n");
}
Saída exampLe:
Consellos:
Manteña EI_CLASSIFIER_INTERVAL_MS sincronizado coa frecuencia do reenviador de datos (por exemplo, 100 Hz → 10 ms). A biblioteca Edge Impulse define esta constante automaticamente a partir do seu impulso.
Se queres unha detección continua (xanela deslizante), comeza desde a opción de detección continua.ample incluído coa biblioteca EI e intercambia as lecturas ADXL345.
En breve engadiremos tutoriais en vídeo; ata entón, estade atentos... https://www.youtube.com/@RobuInlabs
E se aínda tes algunha dúbida, podes ver este vídeo de Edged Impulse: https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

Documentos/Recursos
![]() |
Placa de desenvolvemento WiFi Arduino ABX00087 UNO R4 [pdfGuía do usuario R4 WiFi, ADXL345, ABX00087 UNO R4 Placa de desenvolvemento WiFi, ABX00087, UNO R4 Placa de desenvolvemento WiFi, Placa de desenvolvemento, Placa |
