podometre.ino

M5StickC Plus2 (M5Stack) — kit vestible "stick" con ESP32-PICO-V3-02 (SKU K016-P2) · Archivo : podometre.ino · Lenguaje : Arduino · Uso : Détecter les chocs et compter les pas

La norma de la aceleración se desvía de 1 g en cada golpe: un flanco en esa señal, espaciado al menos 300 ms, cuenta pasos en la muñeca. El podómetro más simple que funciona, sin librería dedicada.

Hardware necesario

Un M5StickC Plus2 (ESP32-PICO-V3-02, pantalla de 135×240, botones A/B/C, zumbador pasivo en G2, IR + LED rojo en G19, IMU MPU6886, micrófono, batería de 200 mAh). Ninguno.

Cableado

Sin cableado. Lleve el stick en la muñeca (correa o pulsera) para una señal limpia.

Funcionamiento

El paso altos implícito (|a| - 1 g) aísla impactos; el umbral de 0,35 g y el refractario de 300 ms evitan el doble conteo. El pitido del zumbador confirma cada paso. En el Arduino IDE (paquete esp32), placa « M5StickCPlus2 »; biblioteca « M5StickCPlus2 » o M5Unified. En la v2 sin PMIC, mantenga el botón C más de 2 s para encender; HOLD (G4) mantiene la alimentación.

Para ir más lejos

Pantalla de estadísticas (pasos/min, distancia estimada), o total diario persistido en NVS cada hora.

podometre.ino

// Detecteur de « tap » sur MPU6886 : compteur de pas au poignet.
#include <M5Unified.h>

int pas = 0;
float energiePrec = 0;
unsigned long dernierPas = 0;

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  M5.Display.setRotation(1);
  M5.Display.setTextSize(3);
}

void loop() {
  M5.update();
  M5.Imu.update();
  auto a = M5.Imu.getAccel();
  float norme = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z);   // en g
  float energie = fabsf(norme - 1.0f);                      // ecart a la gravite

  unsigned long t = millis();
  if (energie > 0.35f && energiePrec <= 0.35f && t - dernierPas > 300) {
    pas++;
    dernierPas = t;
    M5.Spk.tone(1200, 30);
  }
  energiePrec = energie;

  M5.Display.setCursor(10, 40);
  M5.Display.printf("%4d pas\n", pas);
  M5.Display.setTextSize(1);
  M5.Display.printf("|a|=%.2f g", norme);
  if (M5.BtnB.wasPressed()) pas = 0;      // B = remise a zero
  delay(20);
}

← Volver a la ficha