Skip to main content

Comenzando con el Kit de Sensor de Detección de Caídas mmWave 60GHz con XIAO ESP32C6 (MR60FDA2)


Presentamos nuestros avanzados Módulos de Sensor mmWave para XIAO, diseñados para proporcionar soluciones de monitoreo de vanguardia tanto para la detección de caídas como para el monitoreo de ritmo cardíaco. Impulsados por el robusto microcontrolador XIAO ESP32 con conectividad Wi-Fi y Bluetooth incorporada, estos módulos ofrecen capacidades de detección precisas y confiables. Ya sea que necesites monitorear caídas en tiempo real o rastrear latidos del corazón con sensibilidad, nuestros módulos están equipados con tecnología de última generación, incluidos LEDs RGB personalizables y detección de luz ambiental. Con opciones fáciles de expansión mediante puertos Grove GPIO, estos versátiles módulos son perfectos para una amplia gama de aplicaciones, desde integración en hogares inteligentes hasta monitoreo de salud.

Características

  • Wi-Fi y Bluetooth habilitados: Ambos módulos funcionan con XIAO ESP32 con firmware ESPHome preinstalado para una configuración y personalización rápidas.
  • Módulo de Detección de Caídas:
    • Detección precisa de caídas: Cubre un área de 3x3x3 metros con un ángulo de detección de 100° x 40°.
    • Detección de presencia estática: Monitorea personas estáticas hasta 6 metros de distancia.
  • Sensores Ambientales:
    • Sensor de luz BH1750: Mide la luz ambiental desde 1 hasta 65,535 lux.
    • LED RGB WS2812: LED personalizable para retroalimentación visual y proyectos DIY.
  • Conectividad Expandible: Incluye puertos Grove GPIO para añadir sensores y módulos adicionales.

Especificaciones

Parámetros Generales
Firmware mmWaveMonitor de Detección de Caídas
Rango de DetecciónDetección de presencia humana estática: hasta 6 metros
Detección de caídas:
- Rango de 3x3x3 metros
- Campo de visión horizontal (FoV) de 120°
- FoV vertical de 100°
MCUSeeed Studio XIAO ESP32C6
LEDLED RGB WS2812
BotónReposo
Sensor de LuzBH1750 Rango: 1 a 65,535 lux con mediciones ajustables hasta 100,000 lux
Conectividad1 Puerto GPIO (D0, D10)
Espaciado de Pines2.54mm
Fuente de AlimentaciónEntrada 5V/1A
Consumo de energía0.5w: Modo de espera
0.8w: Modo activado
1.4w: Funciona con estado de relé Grove

Aplicaciones

  • Sistemas de seguridad
  • Monitoreo de salud
  • Automatización del hogar inteligente
  • Cuidado de personas mayores

Visión General del Hardware


Primeros Pasos

Método de instalación y rango de detección

Altura de instalación superior de 2.2-3.0m, radio máximo de detección de 2m, el lado con el sensor mmWave debe alinearse con la dirección de detección.

note

Por favor utiliza este módulo en un espacio abierto y evita las siguientes situaciones dentro del rango de detección para prevenir interferencias con el módulo:

  • Múltiples radares instalados muy cerca
  • Viento que mueve cortinas y plantas
  • Flujo de agua y películas de agua
  • Grandes áreas de metal y reflejos de espejos
  • Detección a través de vidrio y tablones de madera delgados
  • Lugar de instalación propenso a vibraciones
  • Uso de fuentes de alimentación de baja calidad

Preparación del Software (Arduino)

Atención

Por defecto, el MR60BHA2 viene preensamblado con el XIAO ESP32C6, pero es compatible con varios otros microcontroladores para comunicación e integración.

Si es tu primera vez usando Arduino con la serie XIAO, sigue la guía adecuada para tu placa:

Una vez que tu placa esté lista, sigue estos pasos:

  1. Descarga la Librería Seeed mmWave:
  1. Instala la Librería en Arduino IDE:
    • Abre el Arduino IDE.
    • Ve a Sketch > Incluir Librería > Añadir Librería .ZIP....
    • Selecciona el archivo .zip descargado para instalar la librería.
  2. Conecta tu Placa XIAO:
    • Conecta tu placa XIAO a la computadora mediante USB.
    • En el Arduino IDE, ve a Herramientas > Placa y selecciona tu modelo de placa XIAO.
    • Elige el puerto correcto en Herramientas > Puerto.
  3. Carga un Ejemplo:
    • Ve a Archivo > Ejemplos > Seeed Arduino mmWave.
    • Selecciona el ejemplo relevante para Detección de Caídas.
    • Revisa el código y realiza ajustes si es necesario.
  4. Sube el Código:
    • Haz clic en Subir para cargar el código a tu placa XIAO.
    • Abre el Monitor Serial en el Arduino IDE para ver los datos del sensor en tiempo real.

Uso

Esta sección proporciona fragmentos de código de ejemplo para ayudarte a comenzar rápidamente a usar la Librería Seeed Arduino mmWave con varias funcionalidades, incluyendo detección de caídas, control de LED RGB y detección de luz.

Módulo de caída

Este ejemplo muestra como usar el sensor MR60FDA2 como para detección de caídas.

#include <Adafruit_NeoPixel.h>
#include <Arduino.h>
#include <hp_BH1750.h> //inlude the library
#include "Seeed_Arduino_mmWave.h"

#ifdef ESP32
# include <HardwareSerial.h>
HardwareSerial mmwaveSerial(0);
#else
# define mmwaveSerial Serial1
#endif

#define LIGHT_GPIO D0

/****** instance ******/

hp_BH1750 BH1750; // create the sensor object

SEEED_MR60FDA2 mmWave;

Adafruit_NeoPixel pixels =
Adafruit_NeoPixel(1, /* pixelPin */ D1, NEO_GRB + NEO_KHZ800);

/****** funtions ******/

void relay_init();
void relay_on();
void relay_off();

/****** variables ******/
uint32_t sensitivity = 15;
float height = 2.8, threshold = 1.0;
float rect_XL, rect_XR, rect_ZF, rect_ZB;

const uint8_t dark_lux = 10;

void setup() {
bool result;
Serial.begin(115200);
mmWave.begin(&mmwaveSerial);
/* init relay device*/
relay_init();

/* init RGB LED */
pixels.begin();
pixels.clear();
pixels.setBrightness(8);
pixels.show();
pixels.setPixelColor(0, pixels.Color(125, 125, 125));
/* init built-in light ambient light sensor */
BH1750.begin(BH1750_TO_GROUND); // will be false no sensor found
// | already connected to I2C
BH1750.calibrateTiming();
BH1750.start(BH1750_QUALITY_HIGH2,
254); // start the first measurement in setup
/* set mmwave-fall parameters */
mmWave.setUserLog(0);

/** set the height of the installation **/
if (mmWave.setInstallationHeight(height)) {
Serial.printf("setInstallationHeight success: %.2f\n", height);
} else {
Serial.println("setInstallationHeight failed");
}

/** Set threshold **/
if (mmWave.setThreshold(threshold)) {
Serial.printf("setThreshold success: %.2f\n", threshold);
} else {
Serial.println("setThreshold failed");
}

/** Set sensitivity **/
if (mmWave.setSensitivity(sensitivity)) {
Serial.printf("setSensitivity success %d\n", sensitivity);
} else {
Serial.println("setSensitivity failed");
}

/** get new parameters of mmwave **/
if (mmWave.getRadarParameters(height, threshold, sensitivity, rect_XL,
rect_XR, rect_ZF, rect_ZB)) {
Serial.printf("height: %.2f\tthreshold: %.2f\tsensitivity: %d\n", height,
threshold, sensitivity);
Serial.printf(
"rect_XL: %.2f\trect_XR: %.2f\trect_ZF: %.2f\trect_ZB: %.2f\n", rect_XL,
rect_XR, rect_ZF, rect_ZB);
} else {
Serial.println("getRadarParameters failed");
}
}

typedef enum {
EXIST_PEOPLE,
NO_PEOPLE,
PEOPLE_FALL,
} MMWAVE_STATUS;

MMWAVE_STATUS status = NO_PEOPLE, last_status = NO_PEOPLE;
float lux = 100;
void loop() {
/* get status */
if (mmWave.update(100)) {
bool is_human, is_fall;
// Get the human detection status
if (mmWave.getHuman(is_human)) {
// Get the fall detection status
if (mmWave.getFall(is_fall)) {
// Determine the status based on human and fall detection
if (!is_human && !is_fall) {
status = NO_PEOPLE; // No human and no fall detected
} else if (is_fall) {
status = PEOPLE_FALL; // Fall detected
} else {
status = EXIST_PEOPLE; // Human detected without fall
}
}
}
// Get the human detection status
if (!mmWave.getHuman(is_human) && !mmWave.getFall(is_fall)) {
status = NO_PEOPLE; // No human and no fall detected
} else if (is_fall) {
status = PEOPLE_FALL; // Fall detected
} else {
status = EXIST_PEOPLE; // Human detected without fall
}
}

switch (status) {
case NO_PEOPLE:
Serial.printf("Waiting for people");
break;
case EXIST_PEOPLE:
Serial.printf("PEOPLE !!!");
break;
case PEOPLE_FALL:
Serial.printf("FALL !!!");
break;
default:
break;
}
Serial.print("\n");

/* change interactive Light*/
if (status != last_status) { // switching LED
switch (status) {
case NO_PEOPLE:
pixels.setPixelColor(0, pixels.Color(0, 0, 255)); // BLUE
break;
case EXIST_PEOPLE:
pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // GREEN
break;
case PEOPLE_FALL:
pixels.setPixelColor(0, pixels.Color(255, 0, 0)); // RED
break;
default:
break;
}
pixels.show();
last_status = status;
}

/* update lux value */
if (BH1750.hasValue() == true) {
lux = BH1750.getLux();
BH1750.start(BH1750_QUALITY_HIGH2, 254);
}

Serial.print("LUX: ");
Serial.print(lux);
Serial.print("\t");

if ((status == EXIST_PEOPLE || status == PEOPLE_FALL) && lux < dark_lux) {
relay_on();
} else {
relay_off();
}
}

void relay_init() {
pinMode(LIGHT_GPIO, OUTPUT);
}
void relay_on() {
digitalWrite(LIGHT_GPIO, HIGH);
}
void relay_off() {
digitalWrite(LIGHT_GPIO, LOW);
}

El resultado será el siguiente en el Monitor Serial de Arduino:

Parpadeo del LED RGB

Este ejemplo muestra cómo controlar un LED RGB usando la librería NeoPixel.

  • Paso 1. Descargar la librería Adafruit_NeoPixel

Ve a Sketch > Incluir Librería > Administrar Bibliotecas..., busca Adafruit_NeoPixel e instala la versión más reciente.

  • Paso 2. Copia el siguiente código en un nuevo sketch:
#include <Adafruit_NeoPixel.h>
#include <Arduino.h>

const int pixelPin = D1;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, pixelPin, NEO_GRB + NEO_KHZ800);

void setup() {
Serial.begin(115200);
pixels.begin();
pixels.clear();
pixels.show();
}

void loop() {
for (int i = 0; i < 10; i++) {
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
pixels.show();
delay(100);
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.show();
delay(100);
}

for (int i = 255; i >= 0; i--) {
pixels.setPixelColor(0, pixels.Color(i, 0, 0));
pixels.show();
delay(10);
}
}
  • Paso 3. Selecciona la placa correcta y el número de puerto para subir el programa.

Una vez que el programa se haya cargado correctamente, verás que el LED RGB en el lado derecho de los módulos del sensor mmWave parpadea.

Sensor de Luz (BH1750)

Este ejemplo muestra cómo leer valores de intensidad luminosa utilizando el sensor BH1750.

  • Paso 1. Descarga la librería hp_BH1750

Ve a Sketch > Incluir Librería > Administrar Bibliotecas..., busca hp_BH1750 e instala la versión más reciente.

  • Paso 2. Copia el siguiente código en un nuevo sketch:
#include <Arduino.h>
#include <hp_BH1750.h>

hp_BH1750 BH1750;

void setup() {
Serial.begin(9600);

bool avail = BH1750.begin(BH1750_TO_GROUND);

if (!avail) {
Serial.println("No BH1750 sensor found!");
while (true) {}
}

Serial.printf("conversion time: %dms\n", BH1750.getMtregTime());
BH1750.start();
}

void loop() {
if (BH1750.hasValue()) {
float lux = BH1750.getLux();
Serial.println(lux);

BH1750.start();
}
}
  • Paso 3. Selecciona la placa correcta y el número de puerto para subir el programa.

El resultado que verás en el Monitor Serial de Arduino será similar al siguiente:

API del Módulo de Detección de Caídas

Este ejemplo utiliza la clase SEEED_MR60FDA2 para interactuar con el sensor MR60FDA2 para detección de caídas. A continuación se explica la función de cada método clave:

  • mmWave.begin(&mmWaveSerial):
    Inicializa el sensor para la comunicación, configurando la conexión serial entre la placa XIAO y el sensor MR60FDA2.

  • mmWave.setInstallationHeight(float height):
    Establece la altura de instalación del radar, importante para una detección precisa de caídas. El parámetro height indica la altura en metros donde está instalado el sensor. El valor inicial típico es 2.2 m, con un rango válido entre 1 y 5 metros.

  • mmWave.setThreshold(float threshold):
    Ajusta el umbral de detección de caídas. El valor por defecto es 0.6 m. Este valor determina la sensibilidad del radar para detectar caídas en función de la altura y la distancia al sensor.

  • mmWave.setSensitivity(uint32_t sensitivity):
    Modifica la sensibilidad del radar para la detección de caídas. El valor inicial es 3, que corresponde al promedio de 3 cuadros de datos. El rango típico es de 3 a 10, donde valores más altos hacen al sensor más sensible a posibles caídas.

  • mmWave.getRadarParameters(float &height, float &threshold, uint32_t &sensitivity):
    Obtiene los parámetros de configuración actuales del radar, incluyendo altura de instalación, umbral de caída y sensibilidad. Los valores se retornan mediante las variables por referencia.

  • mmWave.getHuman():
    Verifica si se detecta presencia humana por el radar. Devuelve true si se detecta una persona, y false si no.

  • mmWave.getFall():
    Determina si se ha detectado una caída. Retorna true si se detecta una caída, y false en caso contrario.

Actualización del Firmware del Módulo

caution

Modificar el firmware del radar es una operación delicada, por lo que se recomienda leer esta sección cuidadosamente y seguir cada paso con atención. Si algún paso no se realiza correctamente, el radar puede quedar inutilizable (brickeado).

Nota especial: si adquiriste el radar MR60BHA2, ¡no intentes flashear el firmware con los métodos aquí descritos! Esto seguramente dañará tu dispositivo irreversiblemente.

Primero, conecta los módulos XIAO ESP32C6 y MR60FDA2. Luego, utiliza el siguiente código para programar la placa XIAO:

#include <Arduino.h>
#include "Seeed_Arduino_mmWave.h"

// If the board is an ESP32, include the HardwareSerial library and create a
// HardwareSerial object for the mmWave serial communication
#ifdef ESP32
# include <HardwareSerial.h>
HardwareSerial mmWaveSerial(0);
#else
// Otherwise, define mmWaveSerial as Serial1
# define mmWaveSerial Serial1
#endif

void setup() {
// Initialize the serial communication for debugging
Serial.begin(115200);
while (!Serial) {
; // Wait for Serial to initialize
}

// Initialize the mmWaveSerial communication
mmWaveSerial.begin(115200);
}

void loop() {
// Check if there is data available from mmWaveSerial
while (mmWaveSerial.available() > 0) {
char receivedChar = mmWaveSerial.read();
Serial.write(receivedChar); // Forward data to Serial
}

// Check if there is data available from Serial
while (Serial.available() > 0) {
char receivedChar = Serial.read();
mmWaveSerial.write(receivedChar); // Forward data to mmWaveSerial
}
}
tip

La función del código anterior es transmitir de forma transparente el puerto serial del módulo al puerto serial USB del XIAO, para así actualizar el firmware del módulo a través del XIAO.
Por favor, conecta el XIAO a tu PC durante el proceso de actualización.

Verás los datos originales enviados por el módulo.

Luego, descarga y descomprime la herramienta OTA y el firmware desde los enlaces a continuación:

  1. Verifica y conecta al puerto serial (configura la velocidad en 115200 baudios):
  1. Haz clic en REQUEST UPDATE para entrar en modo de actualización:
  1. Si aparece "C" o "43", significa que el módulo ha entrado en modo de actualización.
  1. Selecciona el firmware a actualizar. Tras la selección, el proceso de actualización iniciará automáticamente.

Al terminar, el módulo regresará automáticamente a modo normal. Si no lo hace, apaga y reinicia el dispositivo y usa la herramienta OTA para verificar los datos del puerto serial.

  1. Tras completar la actualización, puedes usar la herramienta OTA para leer la versión y los datos en bruto.
  1. Es necesario volver a flashear el firmware del XIAO ESP32C6 una vez terminada la actualización.
tip

Si durante estos pasos se produjo algún error y no puedes volver a flashear el firmware, y el radar no funciona correctamente, puede que el dispositivo haya quedado brickeado por firmware corrupto.
La única forma de intentar recuperarlo es consultar los archivos y documentación disponibles aquí.
Ten en cuenta que no ofrecemos soporte técnico para dispositivos dañados por operaciones incorrectas.

Personalización

¿Quieres adaptar el kit para tus aplicaciones únicas?

Para más información sobre generación de datos en nube 3D y configuración de zonas de interferencia al personalizar módulos mmWave, Seeed ofrece servicios integrales de I+D y fabricación para un desarrollo rápido desde la idea hasta la producción.
Contáctanos en [email protected] para más detalles.

Recursos

Soporte Técnico y Foro de Productos

Gracias por elegir nuestros productos. Estamos aquí para brindarte soporte y asegurar que tu experiencia sea lo más satisfactoria posible. Ofrecemos varios canales de comunicación para atender tus distintas necesidades y preferencias.

Loading Comments...