Introdução ao Kit de Sensor de Detecção de Queda mmWave de 60GHz com XIAO ESP32C6 (MR60FDA2)

Apresentamos nossos avançados Módulos de Sensor mmWave para XIAO, projetados para fornecer soluções de monitoramento de ponta tanto para detecção de quedas quanto para monitoramento de batimentos cardíacos. Alimentados pelo robusto microcontrolador XIAO ESP32 com conectividade Wi-Fi e Bluetooth integrada, esses módulos oferecem capacidades de detecção precisas e confiáveis. Seja para monitorar quedas em tempo real ou rastrear batimentos cardíacos com alta sensibilidade, nossos módulos são equipados com tecnologia de última geração, incluindo LEDs RGB personalizáveis e detecção de luz ambiente. Com opções de expansão fáceis por meio das portas Grove GPIO, esses módulos versáteis são perfeitos para uma ampla gama de aplicações, desde integração em casas inteligentes até monitoramento de saúde.
Recursos
- Wi-Fi e Bluetooth Ativados: Ambos os módulos são alimentados pelo XIAO ESP32 com firmware ESPHome pré-gravado, garantindo configuração e personalização rápidas.
- Módulo de Detecção de Queda:
- Detecção de Queda Precisa: Cobre uma área de 3x3x3 metros com um ângulo de detecção de 100° x 40°.
- Detecção de Presença Estática: Monitora indivíduos parados a até 6 metros de distância.
- Sensoriamento Ambiental:
- Sensor de Luz BH1750: Mede a luz ambiente de 1 a 65.535 lux.
- LED RGB WS2812: LED personalizável para feedback visual e projetos DIY.
- Conectividade Expansível: Inclui portas Grove GPIO para adicionar sensores e módulos adicionais.
Especificações
| Parâmetros Gerais | |
|---|---|
| Firmware mmWave | Monitoramento de Detecção de Queda |
| Faixa de Detecção | Detecção de Presença Humana Estática: até 6 metros Detecção de Queda: - faixa de 3x3x3 metros - Campo de Visão (FoV) Horizontal de 120° - FoV Vertical de 100° |
| MCU | Seeed Studio XIAO ESP32C6 |
| LED | LED RGB WS2812 |
| Botão | Reset |
| Sensor de Luz | BH1750 Faixa: 1 a 65.535 lux com medições ajustáveis até 100.000 lux |
| Conectividade | 1 Porta GPIO (D0, D10) |
| Espaçamento do Header de Pinos | 2,54 mm |
| Fonte de Alimentação | Entrada 5V/1A |
| Consumo de Energia | 0,5 W: Modo de Espera 0,8 W: Modo de Ativação 1,4 W: funcionando com status do Grove Relay |
Aplicações
- Sistemas de Segurança
- Monitoramento de Saúde
- Automação Residencial Inteligente
- Cuidados com Idosos
Visão Geral do Hardware

Primeiros Passos
Método de instalação e faixa de detecção
Altura de montagem superior suspensa de 2,2–3,0 m, raio máximo de detecção de 2 m; o lado com o sensor mmWave precisa estar alinhado com a direção de detecção.


Use este módulo em um espaço aberto e evite os seguintes cenários dentro da faixa de detecção para impedir interferências com o módulo:
- Múltiplos radares instalados muito próximos
- Vento que movimenta cortinas e balança plantas
- Fluxo de água e película de água
- Grandes áreas metálicas e reflexos de espelhos
- Detecção através de vidro e tábuas finas de madeira
- Local de instalação sujeito a vibrações
- Uso de fontes de alimentação de baixa qualidade
Preparação de Software (Arduino)
Por padrão, o MR60BHA2 vem pré-montado com o XIAO ESP32C6, mas é compatível com vários outros microcontroladores para comunicação e integração.
Se esta é a sua primeira vez usando o Arduino com a série XIAO, siga o guia de configuração apropriado para sua placa:
- XIAO ESP32S3: Consulte o Guia de Introdução ao XIAO ESP32S3.
- XIAO ESP32C3: Siga o guia Introdução ao Seeed Studio XIAO ESP32C3.
- XIAO ESP32C6: Siga o guia Introdução ao Seeed Studio XIAO ESP32C6.
Depois que sua placa estiver configurada, prossiga com as seguintes etapas:
- Baixe a Biblioteca Seeed mmWave:
- Baixe a biblioteca Seeed mmWave do GitHub.
- Instale a Biblioteca na Arduino IDE:
- Abra a Arduino IDE.
- Navegue até Sketch > Include Library > Add .ZIP Library....
- Selecione o arquivo
.zipbaixado para instalar a biblioteca.
- Conecte Sua Placa XIAO:
- Conecte sua placa XIAO ao computador via USB.
- Na Arduino IDE, vá em Tools > Board e selecione o modelo da sua placa XIAO.
- Escolha a porta correta em Tools > Port.
- Carregue um Sketch de Exemplo:
- Vá em File > Examples > Seeed Arduino mmWave.
- Selecione o exemplo relevante para Detecção de Queda.
- Revise o código e faça os ajustes necessários.
- Envie o Sketch:
- Clique em Upload para gravar o código na sua placa XIAO.
- Abra o Serial Monitor na Arduino IDE para visualizar os dados do sensor em tempo real.
Uso
Esta seção fornece trechos de código de exemplo para ajudar você a começar rapidamente a usar a Biblioteca Seeed Arduino mmWave com várias funcionalidades, incluindo detecção de quedas, controle de LED RGB e detecção de luz.
Módulo de Queda
Este exemplo mostra como usar o sensor MR60FDA2 para detecção de quedas.
#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);
}
A saída será a seguinte no Monitor Serial do Arduino:

Piscar LED RGB
Este exemplo demonstra como controlar um LED RGB usando a biblioteca NeoPixel.
- Passo 1. Baixe a biblioteca
Adafruit_NeoPixel
Navegue até Sketch > Include Liarbry > Manage Libraries..., e pesquise por Adafruit_NeoPixel, instale a versão mais recente.
- Passo 2. Copie o seguinte código para um novo 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);
}
}
- Passo 3. Selecione a placa correta e o número da porta para fazer o upload do programa.
Quando o programa for carregado com sucesso, você verá o LED RGB no lado direito dos módulos de sensor mmWave piscando.

Sensor de Luz (BH1750)
Este exemplo mostra como ler valores de intensidade de luz usando o sensor BH1750.
- Passo 1. Baixe a biblioteca
hp_BH1750
Navegue até Sketch > Include Liarbry > Manage Libraries..., e pesquise por hp_BH1750, instale a versão mais recente.
- Passo 2. Copie o seguinte código para um novo 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();
}
}
- Passo 3. Selecione a placa correta e o número da porta para fazer o upload do programa.
A saída será a seguinte no Monitor Serial do Arduino:

API do módulo de detecção de queda
Este exemplo usa a classe SEEED_MR60FDA2 para se comunicar com o sensor MR60FDA2 para detecção de quedas. Aqui está o que cada função principal faz:
-
mmWave.begin(&mmWaveSerial):- Inicializa o sensor para comunicação, configurando a conexão serial entre a placa XIAO e o sensor MR60FDA2.
-
mmWave.setInstallationHeight(float height):- Define a altura de instalação do radar, o que é crucial para a detecção precisa de quedas. O parâmetro
heightespecifica a altura (em metros) na qual o sensor é instalado, o parâmetro de configuração de inicialização é2.2 m, com um intervalo válido normalmente entre 1 e 5 metros.
- Define a altura de instalação do radar, o que é crucial para a detecção precisa de quedas. O parâmetro
-
mmWave.setThreshold(float threshold):- Define o limite de detecção de queda. O limite de queda padrão do radar é
0.6 m. Esse valor determina a sensibilidade do radar em termos de detecção de quedas com base na altura e na distância em relação ao sensor.
- Define o limite de detecção de queda. O limite de queda padrão do radar é
-
mmWave.setSensitivity(uint32_t sensitivity):- Ajusta a sensibilidade do radar para detecção de quedas. O valor inicial de sensibilidade é
3, que representa uma média de 3 quadros de dados. E o valor normalmente varia de 3 a 10, com valores mais altos tornando o sensor mais responsivo a possíveis quedas.
- Ajusta a sensibilidade do radar para detecção de quedas. O valor inicial de sensibilidade é
-
mmWave.getRadarParameters(float &height, float &threshold, uint32_t &sensitivity):- Obtém os parâmetros atuais de configuração do radar, incluindo altura de instalação, limite de detecção de queda e configurações de sensibilidade. Esses parâmetros são retornados por meio das variáveis de referência.
-
mmWave.getHuman():- Verifica se uma presença humana é detectada pelo radar. Retorna
truese um humano for detectado, efalsecaso contrário.
- Verifica se uma presença humana é detectada pelo radar. Retorna
-
mmWave.getFall():- Determina se uma queda foi detectada. Esta função retorna
truese uma queda for detectada efalsese não for.
- Determina se uma queda foi detectada. Esta função retorna
Atualização de firmware do módulo
Modificar o firmware do radar é uma operação arriscada, portanto, certifique-se de ler esta seção com atenção antes de seguir cada passo cuidadosamente. Esteja ciente de que, se um passo não for executado corretamente, o radar poderá ficar inutilizável (bricked).
Observação especial, se você comprou o Radar MR60BHA2, não faça o flash do firmware ilegalmente da maneira a seguir, isso certamente deixará seu dispositivo inutilizável!!!!
Primeiro, conecte os módulos XIAO ESP32C6 e MR60FDA2 juntos. Em seguida, use o código a seguir para programar o 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
}
}
A função do código acima é transmitir transparentemente a porta serial do módulo para a porta serial USB do XIAO, de modo a atualizar o firmware do módulo através do XIAO.
Por favor, conecte o XIAO ao seu PC durante o processo de atualização.

Você verá os dados originais enviados pelo módulo.
Em seguida, você precisa baixar e descompactar a ferramenta OTA e o firmware aqui.
- Ferramenta de atualização de firmware MR60FDA2: MR60FDA2_OTA.zip
- Firmware MR60FDA2 v4.0.18: MR60FDA2_eeprom_v4.0.18.bin
- Verifique e conecte-se à porta serial (defina a taxa de baud para 115200)

- Clique em "REQUEST UPDATE" para entrar no modo de atualização:



- Se "C" ou "43" for impresso, significa que o módulo entrou no modo de atualização.

- Selecione o firmware a ser atualizado. Após a seleção, ele entrará automaticamente no estado de atualização.
Após a conclusão da atualização, ele pulará automaticamente para o modo normal. Se não pular, desligue e reinicie, e então use a ferramenta OTA para visualizar os dados da porta serial.


- Após a conclusão da atualização, você pode usar a ferramenta OTA para ler a versão e os dados brutos.

- Você precisa regravar o firmware do XIAO ESP32C6 após a conclusão da atualização.
Se, nas etapas acima, você tiver operado de forma incorreta, causando uma anomalia e não conseguir tentar gravar o firmware novamente, e o radar não estiver funcionando corretamente, então o radar pode ter sido “bricado” devido a firmware corrompido. A única maneira de tentar recuperar o dispositivo é consultar os arquivos e a documentação here. No entanto, por favor, entenda que não fornecemos suporte técnico e assistência para dispositivos “bricados” devido a operação incorreta.
Aberto para Customização
Quer criar um kit sob medida para se adequar às suas aplicações exclusivas?
Para mais informações sobre geração de dados de nuvem de pontos 3D e configuração de zonas de interferência ao personalizar módulos mmWave. A Seeed oferece serviços completos de P&D, customização e fabricação para um desenvolvimento rápido, do conceito à produção. Entre em contato conosco em [email protected] para saber mais.
O firmware e os algoritmos do radar não são open source, e parâmetros complexos do radar, como configurações de altura de queda, configurações de posição de montagem, etc., exigem serviços personalizados, que podem envolver taxas de customização adicionais e MOQs.
Recursos
- STL: Case 3D mmWave
- Repositório GitHub: Acesse toda a base de código e documentação na página Seeed mmWave Library no GitHub.
- Documentação ESPHome: Para mais customização e integração, consulte a documentação do ESPHome.
- Ferramenta de atualização de firmware MR60FDA2: MR60FDA2_OTA.zip
- Firmware MR60FDA2 v4.0.18: MR60FDA2_eeprom_v4.0.18.bin
- Software GUI MR60FDA2: Seeed_Studio_mmWave_Sensor_MR60FDA2_GUI.zip
- mmWave Sensor SCH V1.0: mmWave_Sensor_SCH_V1.0.pdf
- Especificação Técnica do Módulo MR60FDA2: MR60FDA2_Fall_Detection_Module_Datasheet.pdf
- Manual de Interface Tiny Frame MR60FDA2: Seeed_Studio_TinyFrame_Interface_Fall_detection_V1.1.pdf
- Método de Recuperação de Firmware do Radar via Jlink: Radar_Firmware_Recovery_Method-Jlink.zip
Suporte Técnico & Discussão de Produto
Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja o mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.