Skip to main content

Comenzando con el Kit Sensor mmWave de Respiración y Latido Cardíaco de 60GHz con XIAO ESP32C6 (MR60BHA2)


Presentamos nuestros avanzados módulos de sensor mmWave para XIAO, diseñados para ofrecer soluciones de monitoreo de última generación tanto para la detección de caídas como para el monitoreo de latido cardíaco. Impulsados por el robusto microcontrolador XIAO ESP32 con conectividad Wi-Fi y Bluetooth integrada, estos módulos ofrecen capacidades de detección precisas y confiables. Ya sea para monitorear caídas en tiempo real o rastrear los latidos con sensibilidad, nuestros módulos están equipados con tecnología de vanguardia, incluyendo LEDs RGB personalizables y sensores de luz ambiental. Con opciones de expansión fáciles 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 integrados: Ambos módulos utilizan XIAO ESP32 con firmware ESPHome preinstalado para una configuración y personalización rápidas.
  • Módulo de detección de latido cardíaco:
    • Monitoreo sensible: Detecta latidos cardíacos hasta a 1.5 metros.
    • Detección de presencia estática: Monitorea personas inmóviles hasta 6 metros.
  • Sensado ambiental:
    • Sensor de luz BH1750: Mide 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 agregar sensores y módulos adicionales.

Especificaciones

Parámetros Generales
Firmware mmWaveDetección de Respiración y Latidos
Rango de DetecciónPresencia Humana Estática: hasta 6 m
Respiración y Latido: hasta 1.5 m
MCUSeeed Studio XIAO ESP32C6
LEDWS2812 RGB LED
BotónReset
Sensor de LuzBH1750: 1–65,535 lux (ajustable hasta 100,000 lux)
Conectividad1 Puerto GPIO (D0, D10)
Espaciado de pines2.54 mm
AlimentaciónEntrada 5V/1A
Consumo de energía0.5W: Modo Espera
0.8W: Modo Activación
1.4W: trabajando con relevador Grove

Aplicaciones

  • Sistemas de Seguridad
  • Monitoreo de Salud
  • Automatización del Hogar Inteligente
  • Cuidado de Personas Mayores

Descripción del Hardware

hardware overview


Primeros Pasos

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

Método 1. Instalación lateral. Se recomienda que la altura del radar coincida con el pecho de la persona medida, y que la distancia entre el módulo y el pecho sea ≤ 1.5 m.

Método 2. Instalación inclinada. Para detección durante el sueño, el radar debe instalarse a 1 m de altura sobre la cabecera, inclinado 45° hacia el centro de la cama. La distancia entre el radar y el pecho debe ser ≤ 1.5 m, alineando la dirección del radar con el punto principal de detección.

note

Por favor, utiliza este módulo en un espacio abierto, evitando los siguientes escenarios dentro del rango de detección para prevenir interferencias:

  • Múltiples radares demasiado cerca
  • Movimiento de cortinas o plantas por viento
  • Flujo o película de agua
  • Áreas grandes de metal o espejos
  • Detección a través de vidrio o madera delgada
  • Instalaciones propensas a vibraciones
  • Uso de fuentes de poder de baja calidad

Preparación de Software (Arduino)

Atención

El MR60BHA2 viene preensamblado con el XIAO ESP32C6, pero también es compatible con otros microcontroladores.

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

Una vez configurado tu XIAO, sigue estos pasos:

  1. Descargar la librería Seeed mmWave:

  1. Instalar la librería en Arduino IDE:

    • Abre Arduino IDE.
    • Ve a Sketch > Include Library > Add .ZIP Library....
    • Selecciona el archivo .zip descargado.
  2. Conectar la placa XIAO:

    • Conecta tu XIAO por USB.
    • En el IDE, ve a Tools > Board y selecciona tu modelo XIAO.
    • Selecciona el puerto correcto en Tools > Port.
  3. Cargar un ejemplo:

    • Ve a File > Examples > Seeed Arduino mmWave.
    • Selecciona el ejemplo correspondiente a detección de latidos.
    • Revisa el código y haz los ajustes necesarios.
  4. Subir el Sketch:

    • Haz clic en Upload.
    • Abre el Monitor Serial para ver los datos en tiempo real.

Uso

Esta sección proporciona ejemplos de código para comenzar rápidamente con la librería Seeed Arduino mmWave, incluyendo monitoreo de respiración, control del LED RGB y sensado de luz.

Módulo de Respiración

Este ejemplo demuestra cómo usar el sensor MR60BHA2 para monitorear respiración y latidos.

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

// Set up serial communication depending on the board type
#ifdef ESP32
# include <HardwareSerial.h>
HardwareSerial mmWaveSerial(0);
#else
# define mmWaveSerial Serial1
#endif

SEEED_MR60BHA2 mmWave;

void setup() {
Serial.begin(115200);
mmWave.begin(&mmWaveSerial);
}

void loop() {
if (mmWave.update(100)) {
float total_phase, breath_phase, heart_phase;
if (mmWave.getHeartBreathPhases(total_phase, breath_phase, heart_phase)) {
Serial.printf("total_phase: %.2f\t", total_phase);
Serial.printf("breath_phase: %.2f\t", breath_phase);
Serial.printf("heart_phase: %.2f\n", heart_phase);
}

float breath_rate;
if (mmWave.getBreathRate(breath_rate)) {
Serial.printf("breath_rate: %.2f\n", breath_rate);
}

float heart_rate;
if (mmWave.getHeartRate(heart_rate)) {
Serial.printf("heart_rate: %.2f\n", heart_rate);
}

float distance;
if (mmWave.getDistance(distance)) {
Serial.printf("distance: %.2f\n", distance);
}
}
}

La salida será la siguiente en el Monitor Serial de Arduino:

Si los datos devueltos no son 0, esto indica la existencia de un ser vivo dentro del rango de detección.

Detección Humana

Este ejemplo demuestra cómo usar el sensor MR60BHA2 para la detección de personas.

caution

Asegúrate de haber actualizado el firmware del módulo MR60BHA2 a la versión más reciente.
El firmware más reciente añade funciones de detección de presencia humana y objetos humanos.

#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
# define mmWaveSerial Serial1
#endif

SEEED_MR60BHA2 mmWave;

void setup() {
Serial.begin(115200);
mmWave.begin(&mmWaveSerial);
}

void loop() {
if (mmWave.update(100)) {
if (mmWave.isHumanDetected()) {
Serial.printf("-----Human Detected-----\n");
}

PeopleCounting target_info;
if (mmWave.getPeopleCountingTartgetInfo(target_info)) {
Serial.printf("-----Got Target Info-----\n");
Serial.printf("Number of targets: %zu\n", target_info.targets.size());

for (size_t i = 0; i < target_info.targets.size(); i++) {
const auto& target = target_info.targets[i];
Serial.printf("Target %zu:\n", i + 1);
Serial.printf(" x_point: %.2f\n", target.x_point);
Serial.printf(" y_point: %.2f\n", target.y_point);
Serial.printf(" dop_index: %d\n", target.dop_index);
Serial.printf(" cluster_index: %d\n", target.cluster_index);
Serial.printf(" move_speed: %.2f cm/s\n", target.dop_index * RANGE_STEP);
}
}
// delay(500);
}
}

La salida será la siguiente en el Monitor Serial de Arduino:

note

La respiración y el ritmo cardíaco pueden detectarse dentro de un rango de 1.5 metros, y la presencia puede detectarse dentro de un rango de 1.5 a 6 metros.
Cuando hay personas dentro del rango de 1.5 m, el módulo entrará en modo de detección de respiración y latido cardíaco.
En este modo, la sensibilidad de la función de detección de personas puede disminuir.

Parpadeo del LED RGB

Este ejemplo demuestra cómo controlar un LED RGB utilizando la librería NeoPixel.

  • Paso 1. Descarga la librería Adafruit_NeoPixel

Ve a Sketch > Include Library > Manage Libraries..., 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 y el puerto correctos para cargar el programa.

Una vez que el programa se haya cargado correctamente, verás que el LED RGB en el lado derecho del módulo sensor mmWave está parpadeando.

Sensor de Luz (BH1750)

Este ejemplo muestra cómo leer valores de intensidad lumínica utilizando el sensor BH1750.

  • Paso 1. Descarga la librería hp_BH1750

Ve a Sketch > Include Library > Manage Libraries..., 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();
}
}
  • Step 3. Select the correct board and port number to upload the program.

The output will be as follows on Arduino Serial Monitor:

API del Módulo de Respiración

Este ejemplo utiliza la clase SEEED_MR60BHA2 para comunicarse con el sensor MR60BHA2 para monitoreo de latido y respiración. A continuación se describen las funciones principales:

  • mmWave.begin(&mmWaveSerial):

    • Inicializa el sensor para la comunicación utilizando la interfaz serial especificada. Establece la conexión entre la placa XIAO y el sensor MR60BHA2.
  • mmWave.update(100):

    • Actualiza los datos del sensor. El parámetro 100 es un valor de tiempo de espera en milisegundos, indicando cuánto esperar por nuevos datos del sensor. Si se reciben datos dentro de ese tiempo, la función devuelve true.
  • mmWave.getHeartBreathPhases(float &total_phase, float &breath_phase, float &heart_phase):

    • Recupera la información de fase relacionada con las actividades de respiración y latido.
    • total_phase representa el desplazamiento de fase total, mientras que breath_phase y heart_phase corresponden específicamente a respiración y latido, respectivamente.
  • mmWave.getBreathRate(float &rate):

    • Obtiene la tasa de respiración detectada por el sensor. El valor se devuelve en la variable de referencia rate.
  • mmWave.getHeartRate(float &rate):

    • Obtiene la tasa de latido cardíaco detectada por el sensor. El valor se devuelve en la variable de referencia rate.
  • mmWave.getDistance(float &distance):

    • Obtiene la distancia desde el sensor hasta el objeto detectado (por ejemplo, cuerpo humano). Esta función es útil para entender el alcance de la señal detectada.
  • mmWave.getPeopleCountingPointCloud(PeopleCounting& point_cloud):

    • Recupera información sobre las nubes de puntos. Solo se encarga de recibir el tipo de mensaje; es normal que no se reciban datos siempre.
    • La estructura PeopleCounting contiene un vector de objetivos detectados. Cada objetivo incluye los siguientes atributos:
      • x_point: Coordenada X del objetivo (en metros).
      • y_point: Coordenada Y del objetivo (en metros).
      • dop_index: Índice Doppler, representa la velocidad del objetivo.
        • La velocidad real (en cm/s) puede calcularse como: dop_index * RANGE_STEP, donde RANGE_STEP es la resolución de velocidad.
      • cluster_index: ID del clúster, usado para identificar objetivos individuales en la escena.
  • mmWave.getPeopleCountingTartgetInfo(PeopleCounting& target_info):

    • Recupera información sobre los objetivos detectados.
    • La estructura PeopleCounting contiene un vector de objetivos detectados. Cada objetivo incluye los mismos atributos que en la función anterior:
      • x_point: Coordenada X del objetivo (en metros).
      • y_point: Coordenada Y del objetivo (en metros).
      • dop_index: Índice Doppler, representa la velocidad del objetivo.
        • La velocidad real (en cm/s) puede calcularse como: dop_index * RANGE_STEP.
      • cluster_index: ID del clúster del objetivo.
  • mmWave.isHumanDetected():

    • Devuelve true si se detecta una persona.

Actualización de Firmware del Módulo

caution

Modificar el firmware del radar es una operación riesgosa, así que asegúrate de leer esta sección cuidadosamente y seguir cada paso con atención. Ten en cuenta que, si algún paso se realiza incorrectamente, el radar puede quedar inutilizable o dañado permanentemente.

Nota especial: si adquiriste el radar de caídas MR60FDA2, por favor NO flashes el firmware por este medio. ¡Hacerlo dañará tu dispositivo irreversiblemente!

Primero, conecta los módulos XIAO ESP32C6 y MR60BHA2. Luego utiliza el siguiente código para programar el 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 actualizar el firmware del módulo a través de XIAO.
Por favor, conecte el XIAO a su PC durante el proceso de actualización.

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

Luego necesitas descargar y descomprimir la herramienta OTA y el firmware aquí.

note

El firmware 1.6.5 tiene la siguiente actualización:

  1. Se corrigió el problema de que a veces no se detectaban la respiración y la frecuencia cardíaca cuando el cuerpo humano estaba en reposo.
Haz clic aquí para ver la versión antigua
note

El firmware 1.6.4 tiene las siguientes actualizaciones:

  1. Optimización en la detección de respiración y frecuencia cardíaca, corrigiendo el error donde pequeños movimientos corporales causaban pérdida de datos.
  2. Mejora en la función de detección de presencia 3D: respiración y frecuencia cardíaca se pueden detectar hasta 1.5 metros, y la presencia hasta un rango de 1.5 a 6 metros.
  3. Se añadió una función de detección de personas, capaz de detectar hasta tres individuos en un rango de 6 metros.
  1. Verifica y conecta al puerto serial (configura la tasa de baudios a 115200)

  1. Haz clic en "REQUEST UPDATE" para entrar en modo de actualización:

  1. Si se imprime "C" o "43", significa que el módulo ha entrado en modo de actualización.

  1. Selecciona el firmware a actualizar. Después de la selección, entrará automáticamente en estado de actualización.

Al finalizar la actualización, saltará automáticamente al modo normal. Si no lo hace, apaga y reinicia, y luego usa la herramienta OTA para ver los datos del puerto serial.

  1. Al completar la actualización, puedes usar la herramienta OTA para leer la versión y los datos en bruto.

  1. Necesitas reprogramar el firmware del XIAO ESP32C6 después de completar la actualización.
tip

Si en los pasos anteriores has operado incorrectamente causando una anomalía y no has podido volver a grabar el firmware, y el radar no funciona correctamente, es posible que el radar haya quedado brickeado debido a un firmware corrupto.
La única forma de intentar recuperar el dispositivo es referirse a los archivos y documentación aquí. Sin embargo, ten en cuenta que no ofrecemos soporte técnico ni asistencia para dispositivos brickeados por operación incorrecta.

Personalización

¿Quieres adaptar el kit a tus aplicaciones únicas?

Para más información sobre generación de datos 3D en nube de puntos 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 concepto hasta producción. Contáctanos en [email protected] para más información.

Recursos

Soporte Técnico y Discusión de Producto

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte soporte para que tu experiencia sea lo más fluida posible. Ofrecemos varios canales de comunicación para diferentes preferencias y necesidades.

Loading Comments...