From fd2a8a9fc123198d92de391e2f4faafee7780a7e Mon Sep 17 00:00:00 2001 From: nfs0619 <1447996181@qq.com> Date: Fri, 12 Jul 2024 15:25:20 +0800 Subject: [PATCH 1/3] Add the Grove section to the Wiki Chinese documentation. --- sidebars.js | 216 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 200 insertions(+), 16 deletions(-) diff --git a/sidebars.js b/sidebars.js index 1103dffb72ca4..4025309eb0eed 100644 --- a/sidebars.js +++ b/sidebars.js @@ -4557,24 +4557,208 @@ const sidebars = { // ], CNSidebar: [ 'zh-CN/CN_Getting_Started', - { - type: 'category', - label: 'Grove Vision AI V2', - collapsed: true, - collapsible: true, - link: { - type: "doc", - id: "zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-Grove-vision-ai-v2" - }, - items: [ - 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-Grove-vision-ai-v2-software-supported', - 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-grove-vision-ai-v2-ha', - 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-Grove-vision-ai-v2-camera-supported', - 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-grove-vision-ai-v2-himax-sdk', - 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-grove-vision-ai-v2-sensecap-app', - ], + type: 'doc', + id: 'zh-CN/Sensor/SeeedStudio_XIAO/CN_SeeedStudio_XIAO_Series_Introduction', + label: 'Grove', + className: 'sideboard_calss', }, + { + type: 'category', + label: 'Grove 传感器', + collapsed: true, + collapsible: true, + items: [ + { + type: 'category', + label: 'AI驱动', + collapsed: true, + collapsible: true, + items: [ + { + type: 'category', + label: 'Grove Vision AI V2', + collapsed: true, + collapsible: true, + link: { + type: "doc", + id: "zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-Grove-vision-ai-v2" + }, + items: [ + 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-Grove-vision-ai-v2-software-supported', + 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-grove-vision-ai-v2-ha', + 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-Grove-vision-ai-v2-camera-supported', + 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-grove-vision-ai-v2-himax-sdk', + 'zh-CN/Sensor/Grove/Grove_Sensors/AI-powered/Grove-vision-ai-v2/cn-grove-vision-ai-v2-sensecap-app', + ], + }, + ], + }, + 'zh-CN/Sensor/Grove/Grove_Sensors/cn-Grove-Air_Quality_Sensor_v1.3', + 'zh-CN/Sensor/Grove/Grove_Sensors/cn-Grove-Light_Sensor', + 'zh-CN/Sensor/Grove/Grove_Sensors/cn-Grove-Red_LED', + 'zh-CN/Sensor/Grove/Grove_Sensors/cn-Grove-Slide_Potentiometer', + 'zh-CN/Sensor/Grove/Grove_Sensors/cn-Grove-Sound_Sensor', + 'zh-CN/Sensor/Grove/Grove_Sensors/cn-Grove-Temperature_and_Humidity_Sensor_Pro', + ], + }, + { + type: 'category', + label: 'Grove 配件', + collapsed: true, + collapsible: true, + link: { + type: "doc", + id: "zh-CN/Sensor/Grove/Grove_Accessories/cn-Grove_Accessories_Intro" + }, + items: [ + { + type: 'category', + label: '显示', + collapsed: true, + collapsible: true, + items: [ + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-0.54_inch_Red_Dual_Alphanumeric_Display', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-0.54_inch_Red_Quad_Alphanumeric_Display', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-1.2_inch_IPS_Display', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-4-Digit_Display', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-16x2_LCD_Series', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-LCD_RGB_Backlight', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-OLED_Display_0.96inch', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-OLED_Display_1.12inch', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-OLED-Display-0.66-SSD1306_v1.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-OLED-Display-0.96-SSD1315', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-OLED-Display-1.12-SH1107_V3.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-OLED-Yellow&Blue-Display-0.96-SSD1315_V1.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-Serial_LCD_V1.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-Triple_Color_E-Ink_Display_1_54', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-Triple_Color_E-Ink_Display_2_13', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-I2C_LCD', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-BlinkM', + 'zh-CN/Sensor/Grove/Grove_Accessories/Display/cn-Grove-Serial_Camera_Kit', + ], + }, + { + type: 'category', + label: '驱动器', + collapsed: true, + collapsible: true, + items: [ + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-2-Coil_Latching_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Buzzer', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Passive-Buzzer', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Chainable_RGB_LED', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Dry-Reed_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-EL_Driver', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Haptic_Motor', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-I2C_Motor_Driver', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-I2C_Motor_Driver_V1.2', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-I2C_Motor_Driver_V1.3', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-I2C-Motor-Driver-L298P', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Infrared_Emitter', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-LED_Matrix_Driver_v1.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-MP3_v2.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-MP3-v3', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-mp3-v4', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Mini_Fan', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Mini_I2C_Motor_Driver_v1.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove_Recorder', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Recorder_v3.0', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-4-Channel_SPDT_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-2-Channel_SPDT_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Solid_State_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Solid_State_Relay_V2', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-2-Channel_Solid_State_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-4-Channel_Solid_State_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-8-Channel_Solid_State_Relay', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Optocoupler_Relay-M281', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Serial_MP3_Player', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Servo', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Speaker', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Speaker-Plus', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Variable_Color_LED', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Vibration_Motor', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Water_Atomization', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-16-Channel_PWM_Driver-PCA9685', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-I2C_Motor_Driver-TB6612FNG', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Hall_Sensor', + 'zh-CN/Sensor/Grove/Grove_Accessories/Actuator/cn-Grove-Voltage_Divider', + ], + }, + + { + type: 'category', + label: '时钟', + items: [ + 'zh-CN/Sensor/Grove/Grove_Accessories/Time/cn-Grove-RTC', + 'zh-CN/Sensor/Grove/Grove_Accessories/Time/cn-Grove_High_Precision_RTC', + ], + }, + + { + type: 'category', + label: '电流', + items: [ + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-10A_DC_Current_Sensor-ACS725', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-5A_DC_AC_Current_Sensor-ACS70331', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-2.5A-DC-Current-Sensor-ACS70331', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-Electricity_Sensor', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-Coulomb_Counter_3.3V_to_5V-LTC2941', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-MOSFET', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-SPDT_Relay_30A', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-Screw_Terminal', + 'zh-CN/Sensor/Grove/Grove_Accessories/Current/cn-Grove-Electromagnet', + ], + }, + + { + type: 'category', + label: '开关 & 按钮', + items: [ + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-6-Position_DIP_Switch', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Button', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Switch-P', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-LED_Button', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Dual-Button', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-5-Way_Switch', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Mech_Keycap', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Thumb_Joystick', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Magnetic_Switch', + 'zh-CN/Sensor/Grove/Grove_Accessories/Switch&Button/cn-Grove-Joint_v2.0', + ], + }, + + { + type: 'category', + label: '输入输出', + items: [ + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-Differential_Amplifier_v1.2', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-I2C_Hub', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-I2C-Hub-6Port', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-8-Channel-I2C-Multiplexer-I2C-Hub-TCA9548A', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-AND', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-OR', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-DC_Jack_Power', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-Qwiic-Hub', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-NunChuck', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-PS_2_Adapter', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-Mini_Camera', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-Serial_Camera', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-16-bit-ADC-ADS1115', + 'zh-CN/Sensor/Grove/Grove_Accessories/Input_Output/cn-Grove-NOT', + ], + }, + + { + type: 'category', + label: '包装', + items: ['zh-CN/Sensor/Grove/Grove_Accessories/Case/cn-Grove-Wrapper'], + }, + + ], + }, + { type: 'doc', From 1edb65c906f697a73f728c11d0a1c3855ff631f9 Mon Sep 17 00:00:00 2001 From: nfs0619 <1447996181@qq.com> Date: Mon, 15 Jul 2024 16:05:28 +0800 Subject: [PATCH 2/3] To supplement and modify the Chinese Wiki. --- .../mmWave_radar_sensor/Radar_MR24HPB1.md | 1 - .../mmwave-for-xiao_arduino.md | 14 +- .../mmWave_radar_sensor/cn-Radar_MR24BSD1.md | 707 +++++++++ .../mmWave_radar_sensor/cn-Radar_MR24FDB1.md | 568 +++++++ .../mmWave_radar_sensor/cn-Radar_MR24HPB1.md | 510 ++++++ .../mmWave_radar_sensor/cn-Radar_MR24HPC1.md | 1045 +++++++++++++ .../mmWave_radar_sensor/cn-Radar_MR60BHA1.md | 1370 +++++++++++++++++ .../mmWave_radar_sensor/cn-Radar_MR60FDA1.md | 998 ++++++++++++ .../cn-mmwave_radar_Intro.md | 56 + .../cn-mmwave-for-xiao-connect-to-HA.md | 136 ++ .../mmwave-for-XIAO/cn-mmwave-for-xiao.md | 275 ++++ .../cn-mmwave-for-xiao_arduino.md | 563 +++++++ ...mmWave_Kit_And_Grove_Connect_To_ESPHome.md | 356 +++++ .../mmwave-kit/cn-mmwave_human_kit.md | 507 ++++++ sidebars.js | 37 + 15 files changed, 7135 insertions(+), 8 deletions(-) create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24BSD1.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24FDB1.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPB1.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPC1.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60BHA1.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60FDA1.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/cn-mmwave_radar_Intro.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao-connect-to-HA.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao_arduino.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmWave_Kit_And_Grove_Connect_To_ESPHome.md create mode 100644 docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmwave_human_kit.md diff --git a/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md b/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md index 65dc9e549f55a..18eb76fc32fb3 100644 --- a/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md +++ b/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md @@ -111,7 +111,6 @@ Before we get started developing a sketch, let's look at the available functions **Return value:** 2 Byte integer type check digit. - **Return value:** None - `void SerialInit()` —— Set the radar serial port baud rate to 9600. If it is a Seeeduino board, set the soft serial port to RX: 2, TX: 3. **Input parameters:** None diff --git a/docs/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/mmwave-for-xiao_arduino.md b/docs/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/mmwave-for-xiao_arduino.md index 5ced5e6bc3b9a..d2e1a77b2b68e 100644 --- a/docs/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/mmwave-for-xiao_arduino.md +++ b/docs/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/mmwave-for-xiao_arduino.md @@ -176,7 +176,7 @@ Before we get started developing a sketch, let's look at the available functions - **movePower**: The energy value that triggers the motion threshold. - **staticPower**: The energy value that triggers the resting threshold. - - **Ruturn**: + - **Return**: - Success 0x00 or Error 0x01. - `RadarStatus getConfig()` —— Reads the parameter values of the setting sensor. @@ -191,27 +191,27 @@ Before we get started developing a sketch, let's look at the available functions - **Input Parameters**: - **resolution**: 1 is 0.25M, 0 is 0.75M. Default 0.75M. - - **Ruturn**: + - **Return**: - Success 0x00 or Error 0x01. - `RadarStatus getResolution()` —— Get distance to door resolution, 1 is 0.25M, 0 is 0.75M. Default 0.75M. - - **Ruturn**: + - **Return**: - **radarStatus.resolution**: 1 is 0.25M, 0 is 0.75M. Default 0.75M. - `AskStatus rebootRadar()` —— Reboot radar command. - - **Ruturn**: + - **Return**: - Success 0x00 or Error 0x01. - `AskStatus refactoryRadar()` —— Restore the radar to factory settings. - - **Ruturn**: + - **Return**: - Success 0x00 or Error 0x01. - `AskStatus enableEngineeringModel()` —— Enables sensor engineering mode output. - - **Ruturn**: + - **Return**: - Success 0x00 or Error 0x01. - `AskStatus disableEngineeringModel()` —— Exit engineering mode output. - - **Ruturn**: + - **Return**: - Success 0x00 or Error 0x01. diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24BSD1.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24BSD1.md new file mode 100644 index 0000000000000..f8df46edd000c --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24BSD1.md @@ -0,0 +1,707 @@ +--- +description: 24GHz mmWave Sleep Breathing Monitoring +title: 24GHz 毫米波传感器 - 睡眠呼吸监测 +keywords: +- mmWave_radar_sensor +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/Radar_MR24BSD1 +last_update: + date: 03/22/2024 + author: AnXiaodie +--- + +# 24GHz 毫米波传感器 - 睡眠呼吸监测(MR24BSD1) + +
+ +
+ 立即获取 🖱️ + +
+ +## 简介 + +MR24BSD1 24GHz雷达模块采用多普勒检测理论,实现人体睡眠质量监测,提供完全私密且安全的感应环境,独立于其他噪声影响。它是智能家居应用中一种有用的、保护隐私、安全的传感器雷达系统,如睡眠安全报警、睡眠呼吸检测等。 + +### 应用领域 + +- 智能家居 +- 智能酒店 +- 人体睡眠质量监测 + +### 特点 + +- 启用理论:基于24GHz毫米波多普勒雷达技术实现检测 +- 生命体征检测:同时感应移动和静止的人,检测呼吸睡眠以监测人体睡眠质量 +- 完美的隐私保护:采用毫米波监测技术,提供无需身份识别的监控能力 +- 健康友好的工作状态:输出功率低,对人体无害 +- 高稳定性:独立于温度、湿度、噪声、气流、灰尘、光线等环境影响因素 +- 高灵活性雷达:支持二次开发,适应各种场景应用 + +### 规格参数 + +| 操作参数 | 最小值 | 典型值 | 最大值 | 单位 | +| ------------------------ | ------ | ------ | ------ | ---- | +| Operating voltage (VCC) | 4.5 | 5.0 | 6 | V | +| 工作电压(VCC) | 90 | 93 | 100 | mA | +| 操作输入/输出电流(IIO) | - | 8 | 20 | mA | +| 工作温度(TOP) | -20 | - | +60 | ℃ | +| 储存温度(TST) | -40 | - | +80 | ℃ | + +## 硬件概览 + +在开始之前,了解产品的一些基本参数是非常关键的。下面的表格提供了关于睡眠呼吸监测雷达特性的信息。 + +
+ +:::note注意 + 我们有一些关于硬件的更新。 +::: + +1. 有一个用于RC滤波的电阻。由于在我们的测试中模块并未使用它,因此已经将其移除。 + +
+ +2.由于我们从模块中移除了LED,因此这里的限流电阻也被取消了。 + +
+ +## 入门指南 + +## Arduino库概览 + +:::tip提示 +如果您是第一次使用Arduino,我们强烈建议您参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +本示例中使用的库代码可以通过点击下面的图标进行下载。 + +

+ +### 功能 +在我们开始开发草图之前,让我们先看一下库中可用的函数。 + + - `void recvRadarBytes()` —— 这个函数获取雷达返回的当前帧的长度。帧根据这个长度存储在一个数组中。 + **输入参数:** 无 + **返回值:** 无 + - `void Bodysign_judgment(byte inf[], float Move_min, float Move_max)` —— 雷达返回的数据包含大量的物理数据。用户可以根据函数提供的信号数据和解码算法灵活地调整检测到的运动信息。判断的内容将通过串口输出。**输入参数:** + - `byte inf[]` —— 雷达发送的数据帧。 + - `float Move_min` —— 确定用户处于静止或无人状态的阈值。 + - `float Move_max` —— 确定用户处于静止状态或有人处于运动状态的阈值。 + + **返回值:** 无 + + 关于信号参数的描述:理论上,信号参数的计算值范围从**0到100**。当计算值为**0**时,表示周围环境中**无人**。当计算值为**1**时,表示检测到环境被占用且处于**静止状态**。计算值为**2到100**表示检测到周围环境被占用且**活跃**。 + +- `void Situation_judgment(byte inf[])` —— 这个函数根据雷达内部的算法检测人体是否正在接近或远离雷达所在的位置,并确定人体的运动状态。这些信息将通过串口输出。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + + **返回值:** 无 + +- `void Sleep_inf(byte inf[])` —— 这个函数完成雷达返回的睡眠信息的解码,并通过串口打印雷达检测的结果。睡眠信息包括:呼吸频率、呼吸状况、场景判断、睡眠状况和质量以及睡眠时长等。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + + **返回值:** 无 + +- `unsigned short int us_CalculateCrc16(unsigned char *lpuc_Frame, unsigned short int lus_Len)` —— 这个函数用于生成CRC16校验和。 + **输入参数:** + + - `unsigned char *lpuc_Frame` —— 您想要发送给雷达的数据帧(不包括最后的2字节校验和帧)。 + + - `unsigned short int lus_Len` —— 您想要发送给雷达的数据帧的长度。 + + **返回值:** 2字节整数类型的校验位。 + +- `void SleepTimeCalculate(unsigned char sleeptime[])` —— 这个函数用于将雷达返回的数据帧解析为睡眠时间。睡眠时间通过串口打印出来。 + **输入参数:** + + - `unsigned char sleeptime[]` —— 雷达返回的4字节睡眠时长数据。 + + **返回值:** 无 + +- `void SerialInit()` —— 将雷达串口波特率设置为9600。如果使用的是Seeeduino板子,则将软串口设置为RX: 2, TX: 3。 +**输入参数:** 无 +**返回值:** 无 + +### 默认变量 + +```c +#define MESSAGE_HEAD 0x55 //数据帧头 +#define ACTIVE_REPORT 0x04 //主动报告 + +#define REPORT_RADAR 0x03 //报告雷达信息 +#define REPORT_OTHER 0x05 //报告其他信息 + +#define HEARTBEAT 0x01 //心跳包 +#define ABNOEMAL 0x02 //异常复位 +#define ENVIRONMENT 0x05 //环境 +#define BODYSIGN 0x06 //物理参数 +#define CLOSE_AWAY 0x07 //方法 + +#define CA_BE 0x01 //接近离开报头帧 +#define CA_CLOSE 0x02 //有人靠近 +#define CA_AWAY 0x03 //有人保持距离 +#define SOMEBODY_BE 0x01 //运动状态报头帧 +#define SOMEBODY_MOVE 0x01 //有人移动 +#define SOMEBODY_STOP 0x00 //有人停下 +#define NOBODY 0x00 //无人 + +#define SLEEP_INF 0x05 //睡眠雷达数据报头帧 +#define BREATH 0x01 //呼吸参数 +#define SCENARIO 0x03 //场景评估 +#define SLEEP_TIME 0x04 //时长参数 +#define SLEEP_QUALITY 0x05 //睡眠质量 + +#define BREATH_RATE 0x01 //呼吸频率 +#define CHECK_SIGN 0x04 //检测信号 + +#define BREATH_HOLD 0x01 //呼吸暂停异常 +#define BREATH_NULL 0x02 //无 +#define BREATH_NORMAL 0x03 //正常呼吸 + +#define BREATH_MOVE 0x04 //运动异常 +#define BREATH_RAPID 0x05 //急性呼吸异常 + +#define CLOSE_AWAY_BED 0x07 //起床与就寝判断 +#define SLEEP_STATE 0x08 //睡眠状态判断 + +#define AWAY_BED 0x00 //离开床铺 +#define CLOSE_BED 0x01 //上床 + +#define AWAKE 0x00 //睡眠状态:清醒 +#define LIGHT_SLEEP 0x01 //睡眠状态:浅睡 +#define DEEP_SLEEP 0x02 //睡眠状态:熟睡 +#define SLEEP_NULL 0x03 //没睡 + +#define AWAKE_TIME 0x01 //清醒时间 +#define LIGHT_SLEEP_TIME 0x02 //浅睡时间 +#define DEEP_SLEEP_TIME 0x03 //熟睡时间 + +#define SLEEP_SCORE 0x01 //睡眠质量分数 + +const byte MsgLen = 12; //数据帧最大长度值 +byte dataLen = 12; //实际数据帧长度 +byte Msg[12]; //设置一个固定数组来接收第一组数据 +boolean newData = false; //控制接收新一组数据 +``` + +### 安装 + +**第一步**。 您需要安装Arduino软件。 + +

+ +**第二步**。 启动Arduino应用程序。 + +
+ +**第三步**。 选择您的开发板型号并将其添加到Arduino IDE中。 + +- 如果您想在后续步骤中使用**Seeeduino V4.2**,请参考[这个教程](https://wiki.seeedstudio.com/Seeed_Arduino_Boards/)来完成添加。 +- 如果您想在后续步骤中使用**Seeeduino XIAO**,请参考[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)来完成添加。 +- 如果您想在后续步骤中使用**XIAO RP2040**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)来完成添加。 +- 如果您想在后续步骤中使用**XIAO BLE**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)来完成添加。 + +**第四步**。 安装Arduino代码库。 + +首先,从[GitHub](https://github.com/limengdu/Seeed_24GHz_SleepBreathingRadar)获取代码库,并将其下载到您的本地计算机上。 + +既然您已经下载了zip格式的库,请打开您的Arduino IDE,点击**Sketch(草图) > Include Library(包含库) > Add .ZIP Library(添加.ZIP库)**。选择您刚刚下载的zip文件,如果库安装正确,您会在通知窗口中看到**Library added to your libraries(库已添加到您的库中)**。这意味着库已成功安装。 + +
+ +## Arduino 示例 + +既然我们已经安装了库并了解了基本功能,让我们运行一些针对XIAO BLE的示例,看看它的表现如何。 + +### 所需材料 + +在完成以下示例之前,您需要准备以下材料。 + +| | | | +|:--------------:|:--------------:|:--------------:| +|
|
|
| +|[**24GHz毫米波雷达传感器**](https://www.seeedstudio.com/24GHz-mmWave-Radar-Sensor-Sleep-Breathing-Monitoring-Module-p-5304.html?queryID=c2e8ac7c8c6fb3833f49a1a3b5083a04&objectID=5304&indexName=bazaar_retailer_products)|[**Seeed XIAO BLE nRF52840 感知板**](https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html?queryID=4bbd8c09f20216aa26f6b5a9040504d0&objectID=5253&indexName=bazaar_retailer_products)|**2mm到2.54mm间距的扁平电缆**| + +**第一步**。通过主板将设备连接到计算机。接线图如下所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + 主板
5V-->5V
GND-->GND
RX-->D6
TX-->D7
+ +
+ +**第二步**。在Arduino IDE左上角菜单栏中,选择**工具**,选择您正在使用的开发板类型,并选择相应的串口。 + +:::tip提示 +如果您使用的是**MacOS**,设备的串口名称通常以**/dev/cu.usbmodem xxx**开头,以设备名称结尾。如果您使用的是**Windows**,设备的串口名称通常以**COM**开头,同样以设备名称结尾。 +::: + +
+ +在这个示例中,我们将展示雷达如何与我们热门产品XIAO BLE配合使用。 + +### 示例1:解码内置雷达算法数据输出环境状态 + +雷达拥有一套完整的内置算法,可以直接输出雷达判断得到的环境条件。这个示例将描述如何通过代码直接通过串口打印出雷达检测到的环境条件。 + +这个示例的代码如下。 + +
+ +```c++ +//Human_State_Data_Decoding_Example.ino + +#include + +SleepBreathingRadar radar; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + radar.recvRadarBytes(); //接收雷达数据并开始处理 + if (radar.newData == true) { //数据已接收并传输至新的列表dataMsg[]中 + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; //将报头帧作为数组的第一个元素添加 + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; //Frame-by-frame transfer + radar.newData = false; //已保存一套完整的数据帧 + + //radar.ShowData(dataMsg); //串口打印出一组接收到的数据帧 + radar.Situation_judgment(dataMsg); //使用雷达内置算法输出人体运动状态 + } +} +``` + +在`setup()`代码中,我们开启了XIAO BLE上的**串口**和**Serial1端口**。串口用于数据打印,而Serial1则用于XIAO BLE与雷达之间的通信。根据雷达的波特率,我们将两个串口的波特率都设置为9600。当准备就绪时,串口监视器将打印**Ready**。 + +```c +radar.recvRadarBytes(); +if (radar.newData == true) { + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; + frame as the first element of the array + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; + radar.newData = false; +} +``` + +在循环中,我们首先使用`recvRadarBytes()`函数将雷达发送的数据存储在一个固定长度的数组`Msg[12]`中。由于雷达数据的复杂性,单个固定长度的数组不足以满足我们的数据处理任务,因此我们需要一个可以根据当前数据帧长度调整大小的数组来存储数据集。这就是数组`dataMsg[dataLen]`发挥作用的地方,其中`dataLen`是当前数据帧的实际长度。 + +```c +radar.Situation_judgment(dataMsg); +``` + +当dataMsg列表完全获取后,它将被用作`Situation_judgment()`函数的参数,以完成环境监测数据的输出,并且输出结果将直接打印在串口监视器上。 + +上传程序。将您的串口监视器设置为9600波特率,应该会显示结果。输出应该类似于下面的图像。 + +
+ +:::tip提示 +如果您在打开串口监视器后没有看到数据,这可能是正常的。这部分雷达数据的获取取决于雷达监测范围内人体运动的变化。只有当范围内的人体运动发生变化时,雷达才会发送数据,也只有在此时数据才会被打印出来。 +::: + + If you want to see what data is returned by radar, you can uncomment `radar.ShowData(dataMsg);`, which will output the complete set of received data frames through the serial monitor. + +### 示例2:使用特征参数分析获取人体运动信息 + +在雷达返回的大量数据中,物理数据信息占据了大部分。有时,过度依赖雷达自身的算法在某些场景下可能无法得到令人满意的结果。这时,我们可以选择使用雷达返回的信息,根据实际应用场景进行适当的调整。 + +这个示例的代码如下。 + +
+ +```c++ +//Physical_Parameters_Example.ino + +#include + +SleepBreathingRadar radar; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + radar.recvRadarBytes(); //接收雷达数据并开始处理 + if (radar.newData == true) { //数据已接收并传输至新的列表dataMsg[]中 + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; //将报头帧作为数组的第一个元素添加 + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; //Frame-by-frame transfer + radar.newData = false; //已保存一套完整的数据帧 + + //radar.ShowData(dataMsg); //串口打印出一组接收到的数据帧 + radar.Bodysign_judgment(dataMsg, 1, 15); //使用符号参数输出人体运动信息 + } +} +``` + +```c +radar.Bodysign_judgment(dataMsg, 1, 15); +``` + +一旦获得dataMsg数组,我们可以将该数组的数据作为第一个参数传递给`Bodysign_judgment()`函数,该函数解析体征参数。 + +`Bodysign_judgment()`函数的第二个和第三个参数分别是判断无人和静止人体的临界值,以及静止人体和运动人体的临界值。 + +(1, 15)表示当体征的计算值小于1时,输出环境中无人;当体征值大于等于1且小于15时,输出当前环境中有静止不动的人;当体征值大于等于35时,输出环境中有人正在移动。 + +上传程序。将您的串口监视器设置为9600波特率,应该会显示结果。输出应该类似于下面的图像。 + +
+ +:::tip提示 +输出数据帧后面的值表示计算得到的体征值。 +::: + +### 示例3 获取睡眠检测数据 + +睡眠检测作为24GHz呼吸睡眠雷达的一个特殊功能,我们可以通过以下代码示例完成检测数据的输出。 + +这个示例的代码如下。 + +
+ +```c++ +//Sleep_Breathing_Data_Decoding.ino + +#include + +SleepBreathingRadar radar; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + radar.recvRadarBytes(); //接收雷达数据并开始处理 + if (radar.newData == true) { //数据已接收并传输到新列表dataMsg[]中 + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; //将报头帧作为数组的第一个元素添加进去 + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; //逐帧传输 + radar.newData = false; //一套完整的数据帧已保存 + + //雷达.显示数据(数据消息); //串口打印出一组接收到的数据帧 + radar.Sleep_inf(dataMsg); //睡眠信息输出 + } +} +``` + +```c +radar.Sleep_inf(dataMsg); +``` + +当dataMsg列表完全获取后,它将被用作`Sleep_inf()`函数的参数,以完成睡眠监测数据的输出,并且输出结果将直接打印在串口监视器上。 + +上传程序。将您的串口监视器设置为9600波特率,应该会显示结果。输出应该类似于下面的图像。 + +
+ +### 示例4 向雷达发送数据 + +雷达为我们提供了大量的接口来获取信息和设置雷达的灵敏度或场景。这个例程将指导用户如何使用用户手册向雷达发送数据消息,以调整雷达的参数或获取所需的数据信息。 + +**步骤1.** 根据所需的查询获取数据帧。 + +在资源区域下载[用户手册](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-Sleep-monitorng-user-manual.pdf),在**第8.2章**中,找到你需要查询或设置的帧的内容,并整理它们。 + +在这个示例中,假设你想查找雷达设备的ID,你应该能够获得所需的功能码、地址码1和地址码2。 + +
+ +**步骤2.** 在Arduino IDE中打开示例代码。 + +
+ +这个示例的代码如下。 + +```c +//CRC_Checksum_Generation.ino + +#include + +SleepBreathingRadar radar; +char buff[30]; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + //请根据数据手册填写您想要设置的数据帧(不包括2字节的校验和帧)。 + unsigned char data[] = {0x55, 0x08, 0x00, 0x05, 0x01, 0x04, 0x03}; + + unsigned int length = sizeof(data)/sizeof(unsigned char); + unsigned char datas[length + 2]; + for (int n = 0; n < length; n++)datas[n] = data[n]; + unsigned short int crc_data = radar.us_CalculateCrc16(data, length); + sprintf(buff, "The CRC16 values is: %04x", crc_data); + Serial.println(buff); + datas[length] = (crc_data & 0xff00) >> 8; + datas[length+1] = crc_data & 0xff; + Serial.print("The datas send to the radar: "); + for (int n = 0; n < length + 2; n++){ + char buffsend[1]; + sprintf(buffsend, "0x%02x ", datas[n]); + Serial.print(buffsend); + } + Serial.println(); + delay(6000); +} +``` + +**步骤3.** 修改数据帧的内容以生成发送给雷达的完整数据帧。 + +我们需要修改的是循环中的`data[]`数组。 + +```c +//请根据数据手册填写您想要设置的数据帧(不包括2字节的校验和帧) +unsigned char data[] = {0x55, 0x08, 0x00, 0x05, 0x01, 0x04, 0x03}; +``` + +我们需要修改的地方是第二个元素,以及倒数第四个元素到最后一个元素。头部帧0x55是固定的,不需要修改。第二个帧是长度帧,请根据你发送的数据的长度进行修改。第三个帧固定为0x00。第四个帧是功能码,第五个帧是地址码1,以此类推。 + +:::tip提示 +关于长度帧的计算方法:
+长度 = 数据长度 + 功能码 + 地址码1 + 地址码2 + 数据 + 校验和。(头部帧不计入) +有关帧格式和规则的更多信息,请参阅[用户手册](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-Sleep-monitorng-user-manual.pdf)的第8章。 +::: + +上传程序。将您的串口监视器设置为9600波特率,应该会显示结果。输出应该类似于下面的图像。 +
+ +需要发送给雷达的完整数据将在串口监视器中显示。 + +**其他方法** + +如果你不想使用任何主设备来生成完整的数据帧,你也可以将下面的代码粘贴到可以运行C程序的编辑器中。按照上述步骤,用你帧的内容填充数组数据。 + +```c +#include +const unsigned char cuc_CRCHi[256]= { + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40 +}; +const unsigned char cuc_CRCLo[256]= { + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, + 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, + 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, + 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, + 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, + 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, + 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, + 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, + 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, + 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, + 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, + 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, + 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, + 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, + 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, + 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, + 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, + 0x41, 0x81, 0x80, 0x40 +}; + +static unsigned short int us_CalculateCrc16(unsigned char *lpuc_Frame, unsigned short int lus_Len){ + unsigned char luc_CRCHi = 0xFF; + unsigned char luc_CRCLo = 0xFF; + int li_Index=0; + while(lus_Len--){ + li_Index = luc_CRCLo ^ *( lpuc_Frame++); + luc_CRCLo = (unsigned char)( luc_CRCHi ^ cuc_CRCHi[li_Index]); + luc_CRCHi = cuc_CRCLo[li_Index]; + } + return (unsigned short int )(luc_CRCLo << 8 | luc_CRCHi); +} +int main() { + //请根据数据手册填写您想要设置的数据帧(不包括2字节校验和帧) + unsigned char data[] = {0x55, 0x07, 0x00, 0x01, 0x01, 0x01}; + unsigned short int crc_data = 0x0000; + unsigned int length = sizeof(data)/sizeof(unsigned char); + unsigned char datas[length + 2]; + for (int n = 0; n < length; n++)datas[n] = data[n]; + printf("The data frame length is: %d\n", length); + crc_data = us_CalculateCrc16(data, length); + datas[length] = (crc_data & 0xff00) >> 8; + datas[length+1] = crc_data & 0xff; + printf("The last two CRC check digits are: %04x\n", crc_data); + printf("The datas send to the radar: "); + for (int n = 0; n < length + 2; n++){ + printf("0x%02x ", datas[n]); + } + printf("\n"); + return 0; +} +``` + +编辑器执行后,也可以输出需要发送给雷达的完整数据帧。 + +
+ +**步骤4.** 向雷达发送数据帧。 + +通过[**UART转USB**设备](https://www.seeedstudio.com/USB-To-Uart-5V-p-1833.html?queryID=588a892811a774ad3005ea0d31427532&objectID=1111&indexName=bazaar_retailer_products)直接将雷达连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + 主板
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ + +使用像串口调试助手这样的软件来选择雷达所在的串口。 + +
+ +:::caution警告 +24GHz雷达需要5V电源供电,否则雷达可能无法正常工作。 +::: + +连接成功后,你将看到雷达发送的稳定消息流。 + +
+ +将在**步骤3**中获得的完整数据帧粘贴到软件的发送区域。然后点击发送。 + +
+ +你可以查找第三个元素为0x03的一组返回数据。这组数据是查询后获得的信息。如果你发送了调整雷达参数的数据,它也会返回这样的信息。 + +:::caution警告 +如果你选择**ASCII**作为发送数据的格式,每个数据集都需要以**0x**为前缀。如果你选择**HEX**,那么每组数据不需要以**0x**为前缀。 +::: + +## 故障排除 + +**常见问题1:如何将代码应用到Seeeduino(或Arduino)上?** + +> 由于不同的硬件设计,XIAO系列或Wio Terminal的串口被命名为Serial1,而Seeeduino或Arduino需要使用软件串口。如果你想为Seeeduino使用雷达,你可以更改软件串口或使用引脚2(RX)和3(TX)。 +>
+ +**常见问题2:如果XIAO BLE和雷达长时间收集数据,无法上传代码,我应该怎么做?** + +> At this time, you can use your finger to lightly press the reset button on top of XIAO BLE to re-upload the program to run. + +## 资源 + +- **[PDF]** [睡眠呼吸雷达传感器数据手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR24BSD1_Datasheet.pdf) +- **[PDF]** [24GHz睡眠呼吸雷达传感器用户手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR24BSD1_User_Manual.pdf) +- **[ZIP]** [24GHz呼吸原理图](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-respiratory-schematic.zip) +- **[PPTX]** [Seeed毫米波传感器系列V2.0](https://files.seeedstudio.com/wiki/mmWave-radar/Seeed-mmWave-sensor-series-V2.0.pptx) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24FDB1.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24FDB1.md new file mode 100644 index 0000000000000..8151f81f88c13 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24FDB1.md @@ -0,0 +1,568 @@ +--- +description: 24GHz mmWave Human Fall Detection +title: 24GHz毫米波传感器 - 人体跌倒检测传感器 +keywords: +- mmWave_radar_sensor +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/Radar_MR24FDB1 +last_update: + date: 03/22/2024 + author: AnXiaodie +--- + +# 24GHz毫米波传感器 - 人体跌倒检测传感器(MR24FDB1) + +
+ + + +## 简介 + +毫米波雷达跌倒检测模块是一款自给自足、保护隐私的24GHz毫米波安全模块。该模块采用增强的英飞凌多普勒雷达和标准算法,是老年人健康护理、智能家居和危险报警等个体应用的理想解决方案。 + +### 应用领域 + +- 跌倒检测 +- 智能家居 +- 健康护理 + +### **特点** + +- 可靠技术:采用英飞凌毫米波调频连续波(FMCW)工业雷达 +- 启用原理:应用多普勒雷达技术,配备24GHz近距传感器(NDS) +- 标准算法:在自适应环境中区分占用/未占用状态,识别人类活动 +- 单一跌倒检测:在20平方米区域内,同时、隐私保护、无线、无需穿戴设备地检测疑似跌倒/快速跌倒/异常长时间停留的情况 +- 完美的隐私保护:提供无需身份识别的监控能力 +- 灵活的安装位置:无论遮挡物如何,都能正常工作 +- 无害工作状态:输出10 dBm无害能量功率 +- 高精度:减少非生物物体的干扰,输出结果准确度超过95% +- 高鲁棒性:能在包含不同温度、湿度、噪音、气流、灰尘、光线等复杂环境中保持正常工作。 +- 高性能天线:在扇形波束模式(水平90°/垂直60°)中能够感知到微小的动作。 + +- 测量距离: + + - 动作感知最大距离:可达12米 + - 微动作感知最大距离:可达5米 + - 人体感知最大距离:可达3米 + +- 检测时间: + + - 未占用状态到占用状态:0.5秒内 + - 占用状态到未占用状态:超过1分钟 + +- 可定制雷达:支持雷达参数、协议、天线、功能的二次开发 + +### **硬件概述** + +![](https://files.seeedstudio.com/wiki/mmWave-radar/yinjiaotu.png) + +1. S1输出:高电平表示占用状态,低电平表示未占用状态。 +2. S2输出:高电平表示活动状态,低电平表示静止状态。 +3. GP1至GP4是参数选择控制,可以根据用户要求进行重新定义。 +4. 该接口的输出信号均为3.3V电平。 + +:::caution警告 +该产品的功耗为500mW,不适合长期供电。 +::: + +### **特性** + +![](https://files.seeedstudio.com/wiki/mmWave-radar/radar1.png) + +## 入门指南 + +### Arduino库概述 + +:::tip提示 +如果您是第一次使用Arduino,我们强烈建议您参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +示例中使用的库代码可以通过点击下面的图标进行下载。 + +

+ +在我们开始开发草图之前,让我们先了解一下库中可用的函数。 + + - `void recvRadarBytes()` —— 这个函数获取雷达返回的当前帧的长度。根据这个长度,帧被存储在一个数组中。 + **输入参数:** 无 + **返回值:** 无 + - `void Bodysign_judgment(byte inf[], float Move_min, float Move_max)` —— 雷达返回的数据包含大量的物理数据。用户可以根据函数提供的符号数据和解码算法,灵活地调整检测到的运动信息。判断的内容将通过串口输出。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + - `float Move_min` —— 用于确定用户处于静止或未占用状态的阈值。 + + - `float Move_max` —— 用于确定用户处于静止状态或有人处于活动状态的阈值。 + + **返回值:** 无 + 关于符号参数的描述:理论上,符号参数的计算值范围从 **0 到 100**。当计算值为 **0** 时,表示在周围环境中 **未检测到人**。当计算值为 **1** 时,表示检测到环境被占用并处于 **静止状态**。计算值为 **2 到 100** 表示检测到周围环境被占用且 **处于活动状态**。 + +- `void Situation_judgment(byte inf[])` —— 这个函数根据雷达内部的算法检测人体是否接近或远离雷达所在位置,并确定人体的移动情况。这些信息将通过串口输出。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + + **返回值:** 无 + +- `void Fall_inf(byte inf[])` —— 这个函数完成雷达返回的跌倒检测信息的解码,并通过串口打印雷达检测的结果。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + + **返回值:** 无 + +- `unsigned short int us_CalculateCrc16(unsigned char *lpuc_Frame, unsigned short int lus_Len)` —— 这个函数用于生成CRC16校验和。 +**输入参数:** + + - `unsigned char *lpuc_Frame` —— 您想要发送给雷达的数据帧(不包括最后的2字节校验和帧)。 + + - `unsigned short int lus_Len` —— 您想要发送给雷达的数据帧的长度。 + + **返回值:** 2字节整数类型的校验位。 + +- `void SerialInit()` —— 将雷达串口波特率设置为9600。如果是Seeeduino板,将软串口设置为RX: 2, TX: 3。 + **输入参数:** 无 + **返回值:** 无Installation + +**第一步**。 你需要安装Arduino软件。 + +

+ +**第二步**。 启动Arduino应用程序。 + +
+ +**第三步**。 选择你的开发板型号并将其添加到Arduino IDE中。 + - 如果你想在后续的步骤中使用**Seeeduino V4.2**,请参考[这个教程](https://wiki.seeedstudio.com/Seeed_Arduino_Boards/)来完成添加。 + - 如果你想在后续的步骤中使用**Seeeduino XIAO**,请参考[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)来完成添加。 + - 如果你想在后续的步骤中使用**XIAO RP2040**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)来完成添加。 + - 如果你想在后续的步骤中使用**XIAO BLE**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)来完成添加。 + +**第四步**。 安装Arduino代码库。 + +首先,从[GitHub](https://github.com/limengdu/Seeed_24GHz_mmWave_Radar_Sensor)获取代码库,并将其下载到你的本地计算机上。 + +既然你已经下载了zip格式的库文件,打开你的Arduino IDE,点击**Sketch(草图)> Include Library(包含库)> Add .ZIP Library(添加.ZIP库)**。选择你刚刚下载的zip文件,如果库安装正确,你会在通知窗口中看到**Library added to your libraries(库已添加到你的库中)**。这意味着库已成功安装。 + +
+ +### 所需材料 + +在完成以下示例之前,您需要准备以下材料。 + +| | | | +|:--------------:|:--------------:|:--------------:| +|
|
|
| +|[**24GHz毫米波雷达传感器**](https://www.seeedstudio.com/24GHz-mmWave-Radar-Sensor-Fall-Detection-Module-p-5268.html)|[**Seeed XIAO BLE nRF52840感知板**](https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html)|**2mm to 2.54mm Pitch Ribbon Cable**| + +**第一步**。 通过主板将设备连接到计算机上。接线图如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + 主板
5V-->5V
GND-->GND
RX-->D6
TX-->D7
+ +**第二步**。 在Arduino IDE左上角的菜单栏中,选择**工具**,然后选择你正在使用的开发板类型,并选择相应的串口。 + +:::tip提示 +如果你使用的是**MacOS**,设备的串口名称通常会以**/dev/cu.usbmodem xxx**开头,后面跟着设备的名称。如果你使用的是**Windows**,设备的串口名称通常会以**COM**开头,后面也跟着设备的名称。 +::: + +
+ +在这个例子中,我们将展示雷达如何与我们的热门产品XIAO BLE配合使用。 + +### 示例1:解码内置雷达算法数据以输出环境状态 + +雷达具有一套完整的内置算法,可以直接输出雷达判断得到的环境条件。本示例将描述如何通过代码将雷达检测到的环境条件直接通过串口打印出来。 + +本示例中的代码如下。 + +```c++ +#include + +FallDetectionRadar radar; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + radar.recvRadarBytes(); //接收雷达数据并开始处理 + if (radar.newData == true) { //数据已被接收并传输至新的列表dataMsg[]中 + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; //将帧头作为数组的第一个元素添加进去 + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; //逐帧传输 + radar.newData = false; //一套完整的数据帧已保存 + + //雷达.显示数据(dataMsg); //串口打印出一组接收到的数据帧 + radar.Fall_inf(dataMsg); //睡眠信息输出 + } + +} +``` + +在`setup()`代码中,我们打开了XIAO BLE上的**串口**和**Serial1端口**。串口用于数据打印,而Serial1则用于XIAO BLE与雷达之间的通信。根据雷达的波特率,我们将两个串口的波特率都设置为9600。当准备就绪时,串口监视器将打印出**Ready**。 + +```c +radar.Situation_judgment(dataMsg); +``` + +当dataMsg列表完全获取后,它将被用作`Situation_judgment()`函数的参数,以完成环境监测数据的输出,并且输出结果将直接打印在串口监视器上。 + +上传程序。打开你的串口监视器,并将波特率设置为9600,应该可以看到结果。输出应该类似于下面的图像。 + +
+ +:::tip提示 +如果打开串口监视器后没有看到数据,这可能是正常的。这部分雷达数据的获取依赖于雷达监测范围内人体运动的变化。只有当范围内的人的运动发生变化时,雷达才会发送数据,也只有在这种情况下数据才会被打印出来。 + +如果你想查看雷达返回了什么数据,你可以取消注释`radar.ShowData(dataMsg);`,这样将通过串口监视器输出接收到的完整数据帧。 +::: + +### Demo2 通过特征参数分析获取人体运动信息 + +雷达返回的大量数据中,物理数据信息占据了大多数。有时,过度依赖雷达自身的算法在某些场景下可能会得到不太满意的结果。这时,我们可以选择根据实际应用场景对雷达返回的信息进行适当调整。 + +以下是这个示例中的代码: + +
+ +```c++ +//Physical_Parameters_Example.ino + +#include + +SleepBreathingRadar radar; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + radar.recvRadarBytes(); //接收雷达数据并开始处理 + if (radar.newData == true) { //数据已接收并传输至新的列表 dataMsg[] 中 + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; //将头帧作为数组的第一个元素添加 + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; //逐帧传输 + radar.newData = false; //一套完整的数据帧已保存 + + //雷达.显示数据(dataMsg); //串口打印出一套接收到的数据帧 + radar.Bodysign_judgment(dataMsg, 1, 15); //使用符号参数输出人体运动信息 + } +} +``` + +```c +radar.Bodysign_judgment(dataMsg, 1, 15); +``` + +一旦获得了 dataMsg 数组,我们可以将该数组的数据作为第一个参数传递给 `Bodysign_judgment()` 函数,该函数用于解析符号参数。 + +`Bodysign_judgment()` 函数的第二个和第三个参数分别是用于判断环境无人和人体静止状态的临界值,以及用于判断人体静止和运动状态的临界值。 + +(1, 15) 表示当身体符号的计算值小于 1 时,输出环境中无人;当身体符号值大于等于 1 且小于 15 时,输出当前环境有人处于静止状态;当身体符号值大于等于 35 时,输出环境中有人在移动。 + +上传程序。打开串口监视器并将波特率设置为 9600,应该可以看到结果。输出应该类似于下面的图片。 + +
+ +:::tip提示 +输出数据帧后面的数值代表计算得到的符号值。 +::: + +### Demo 3 向雷达发送数据 + +雷达为我们提供了大量的接口,以便我们获取信息以及设置雷达的灵敏度或场景。这个程序将指导用户如何使用用户手册向雷达发送数据消息,以调整雷达的参数或获取所需的数据信息。 + +**步骤 1.** 根据所需的查询获取数据帧。 + +在资源区域下载[用户手册](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-Sleep-monitorng-user-manual.pdf),并在**第8.2章**中,找到你需要查询或设置的数据帧的内容,并整理它们。 + +在这个示例中,假设你想要查找雷达设备的ID,你应该能够获取所需的功能码、地址码1和地址码2。 + +
+ +**步骤 2.** 在Arduino IDE中打开示例代码。 + +
+ +这个示例中的代码如下: + +```c +//CRC_Checksum_Generation.ino + +#include + +SleepBreathingRadar radar; +char buff[30]; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + //请根据数据手册填写您想要设置的数据帧(不包括2字节的校验帧)。 + unsigned char data[] = {0x55, 0x08, 0x00, 0x05, 0x01, 0x04, 0x03}; + + unsigned int length = sizeof(data)/sizeof(unsigned char); + unsigned char datas[length + 2]; + for (int n = 0; n < length; n++)datas[n] = data[n]; + unsigned short int crc_data = radar.us_CalculateCrc16(data, length); + sprintf(buff, "The CRC16 values is: %04x", crc_data); + Serial.println(buff); + datas[length] = (crc_data & 0xff00) >> 8; + datas[length+1] = crc_data & 0xff; + Serial.print("The datas send to the radar: "); + for (int n = 0; n < length + 2; n++){ + char buffsend[1]; + sprintf(buffsend, "0x%02x ", datas[n]); + Serial.print(buffsend); + } + Serial.println(); + delay(6000); +} +``` + +**步骤 3.** 修改数据帧的内容以生成完整的发送给雷达的数据帧。 + +我们需要修改的是循环中的 `data[]` 数组。 + +```c +//请根据数据手册填写你希望设置的数据帧(不包括2字节的校验帧) +unsigned char data[] = {0x55, 0x08, 0x00, 0x05, 0x01, 0x04, 0x03}; +``` +我们需要修改的地方是第二个元素,以及倒数第四个元素到最后一个元素。头帧 0x55 是固定的,不需要修改。第二个帧是长度帧,请根据你发送的数据的长度进行修改。第三个帧固定为 0x00。第四个帧是功能码,第五个帧是地址码 1,以此类推。 + +:::tip提示 +关于长度帧的计算方法: +长度 = 数据长度 + 功能码 + 地址码 1 + 地址码 2 + 数据 + 校验和。(头帧不计入) + +有关帧格式和规则的更多信息,请参阅[用户手册](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-Sleep-monitorng-user-manual.pdf)的第8章。 +::: + +上传程序。打开串口监视器并将波特率设置为 9600,应该可以看到结果。输出应该类似于下面的图片。 +
+需要发送给雷达的完整数据将在串口监视器中显示。 +**其他方式** +如果你不想使用任何主程序来生成完整的数据帧,你也可以将下面的代码粘贴到可以运行C程序的编辑器中。按照上面的步骤,并用你的帧的内容填充数组数据。 + +```c +#include +const unsigned char cuc_CRCHi[256]= { + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40 +}; +const unsigned char cuc_CRCLo[256]= { + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, + 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, + 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, + 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, + 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, + 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, + 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, + 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, + 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, + 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, + 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, + 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, + 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, + 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, + 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, + 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, + 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, + 0x41, 0x81, 0x80, 0x40 +}; +static unsigned short int us_CalculateCrc16(unsigned char *lpuc_Frame, unsigned short int lus_Len){ + unsigned char luc_CRCHi = 0xFF; + unsigned char luc_CRCLo = 0xFF; + int li_Index=0; + while(lus_Len--){ + li_Index = luc_CRCLo ^ *( lpuc_Frame++); + luc_CRCLo = (unsigned char)( luc_CRCHi ^ cuc_CRCHi[li_Index]); + luc_CRCHi = cuc_CRCLo[li_Index]; + } + return (unsigned short int )(luc_CRCLo << 8 | luc_CRCHi); +} +int main() { + //请根据数据手册填写你想要设置的数据帧(不包括2字节的校验帧) + unsigned char data[] = {0x55, 0x07, 0x00, 0x01, 0x01, 0x01}; + unsigned short int crc_data = 0x0000; + unsigned int length = sizeof(data)/sizeof(unsigned char); + unsigned char datas[length + 2]; + for (int n = 0; n < length; n++)datas[n] = data[n]; + printf("The data frame length is: %d\n", length); + crc_data = us_CalculateCrc16(data, length); + datas[length] = (crc_data & 0xff00) >> 8; + datas[length+1] = crc_data & 0xff; + printf("The last two CRC check digits are: %04x\n", crc_data); + printf("The datas send to the radar: "); + for (int n = 0; n < length + 2; n++){ + printf("0x%02x ", datas[n]); + } + printf("\n"); + return 0; +} +``` + +编辑器执行后,也可以输出需要发送给雷达的完整数据帧。 + +
+ +**步骤 4.** 向雷达发送数据帧。 + +通过一个[**UART转USB**设备](https://www.seeedstudio.com/USB-To-Uart-5V-p-1833.html?queryID=588a892811a774ad3005ea0d31427532&objectID=1111&indexName=bazaar_retailer_products)将雷达直接连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Radar Sensor + Main Board
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ +使用像串口调试助手这样的软件来选择雷达所在的串口。 + +
+ +:::caution警告 +24GHz雷达需要5V电源供电,否则雷达可能无法正常工作。 +::: + +成功连接后,您将看到雷达发送持续的消息流。 + +
+ +将在**步骤3**中获得的完整数据帧粘贴到软件的发送区域。然后点击发送。 + +
+ +您可以查找一个第三元素为0x03的数据集。这组数据是查询后获得的信息。如果您发送调整雷达参数的数据,它也会返回此类信息。 + +:::caution警告 +如果您选择**ASCII**作为发送数据的格式,则每个数据集前都需要加上**0x**。如果您选择**HEX**,则每组数据前不需要加上**0x**。 +::: + +## 故障排除 + +**常见问题1:如何将代码应用到Seeeduino(或Arduino)上?** + +> 由于硬件设计的不同,XIAO系列或Wio Terminal的串口被命名为Serial1,而Seeeduino或Arduino则需要使用软件串口。如果您想在Seeeduino上使用雷达,您可以更改软件串口或使用引脚2(RX)和引脚3(TX)。 +>
+ +**常见问题2:如果XIAO BLE和雷达长时间收集数据,无法上传代码,我应该怎么做?** + +> 此时,您可以用手指轻轻按下XIAO BLE顶部的复位按钮,以重新上传程序并运行。 + +## 资源 + +- **[PDF]** [睡眠呼吸雷达传感器数据手册](http://files.seeedstudio.com/wiki/mmWave-radar/MR24FDB1_Datasheet.pdf) +- **[ZIP]** [24GHz呼吸原理图](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-respiratory-schematic.zip) +- **[PDF]** [用户手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR24FDB1_User_manual.pdf) +- **[PPTX]** [Seeed毫米波传感器系列V2.0](https://files.seeedstudio.com/wiki/mmWave-radar/Seeed-mmWave-sensor-series-V2.0.pptx) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您在使用我们的产品时能够尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPB1.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPB1.md new file mode 100644 index 0000000000000..7ca08a28621f8 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPB1.md @@ -0,0 +1,510 @@ +--- +description: 24GHz mmWave Human Static Presence +title: 24GHz 毫米波传感器 - 人体静态存在模块 +keywords: +- mmWave_radar_sensor +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/Radar_MR24HPB1 +last_update: + date: 03/23/2024 + author: AnXiaodie +--- + +# 24GHz 毫米波传感器 - 人体静态存在模块(MR24HPB1) + +![](https://files.seeedstudio.com/wiki/mmWave-radar/radar.jpg) + + + +## 简介 + + 人体静态存在雷达传感器是一个自包含的、保护隐私的、安全的毫米波模块,工作频率为24GHz。借助增强的英飞凌多普勒雷达和标准算法,该模块是智能家居、智能酒店和危险警报等个人应用的理想解决方案。 + + ### 应用 + + - 智能家居 + +### **特性** + +- 可靠技术:采用英飞凌毫米波调频连续波(FMCW)工业雷达 +- 成熟理论:运用多普勒雷达技术与24GHz近距离传感器(NDS) +- 标准算法:在自适应环境中区分占用/未占用状态,并识别人体活动 +- 完美的隐私保护:提供监控能力,无需身份识别 +- 灵活的安装位置:无论遮挡物如何,都能正常工作 +- 无害工作状态:输出10 dBm无害能量功率 +- 高精确度:减少非生物物体的干扰,输出结果达到95%以上的准确度 +- 高鲁棒性:在包含不同温度、湿度、噪声、气流、灰尘、光线等复杂环境中保持正常工作 +- 高性能天线:在扇形波束模式(水平90°/垂直60°)中感知细微动作 +- 测量距离: + - 运动感知最大距离:可达12米 + - 微动感知最大距离:可达5米 + - 人体感知最大距离:可达3米 +- 探测时间: + - 未占用状态到占用状态:0.5秒内 + - 有人状态到无人状态:超过1分钟 +- 可定制雷达:支持雷达参数、协议、天线、功能的二次开发 + +### **硬件概览** + +![](https://files.seeedstudio.com/wiki/mmWave-radar/yinjiaotu.png) + +1. S1输出:高电平 - 占用状态,低电平 - 未占用状态。 +2. S2输出:高电平 - 活动状态,低电平 - 静止状态 +3. GP1到GP4是参数选择控制,可以根据用户需求重新定义。 +4. 该接口的输出信号均为3.3V电平。 + +:::caution警告 +该产品的功耗为500mW,不适合长期供电。 +::: + +### **特性** + +![](https://files.seeedstudio.com/wiki/mmWave-radar/radar1.png) + +## 开始使用 + +### Arduino库概述 + +:::tip提示 +如果您是第一次使用Arduino,我们强烈建议您参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +本示例中使用的库代码可以通过点击下面的图标进行下载。 + +

+ +在开始编写草图之前,我们先来了解一下这个库的可用函数。 + + - `void recvRadarBytes()` —— 这个函数用于获取雷达返回的当前帧的长度。帧会根据这个长度存储在一个数组中。 + **输入参数:** 无 + **返回值:** 无 + - `void Bodysign_judgment(byte inf[], float Move_min, float Move_max)` —— 雷达返回的数据包含大量的物理数据。用户可以根据函数提供的信号数据和解码算法,灵活地调整检测到的运动信息。判断的内容将通过串口输出。 + **输入参数:** + - `byte inf[]` —— 雷达发送的数据帧。 + - `float Move_min` —— 确定用户处于静止或未占用状态的阈值。 + - `float Move_max` —— 确定用户处于静止状态或有人处于运动状态的阈值。 + + **返回值:** 无 + 关于信号参数的描述:理论上,信号参数的计算值范围从**0到100**。当计算值为**0**时,表示周围环境中**没有人**被检测到。当计算值为**1**时,表示环境被检测为有人且处于**静止状态**。计算值为**2到100**表示周围环境被检测为有人且处于**活动状态**。 + + - `void Situation_judgment(byte inf[])` —— 这个函数根据雷达内部的算法,检测人体是否正在靠近或远离雷达所在位置,并判断人体的移动情况。这些信息将通过串口输出。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + + **返回值:** 无 + +- `void Fall_inf(byte inf[])` —— 这个函数完成了雷达返回的跌倒检测信息的解码,并通过串口打印出雷达检测的结果。 + **输入参数:** + + - `byte inf[]` —— 雷达发送的数据帧。 + + **返回值:** 无 + +- `unsigned short int us_CalculateCrc16(unsigned char *lpuc_Frame, unsigned short int lus_Len)` —— 这个函数用于生成CRC16校验和。 + **输入参数:** + + - `unsigned char *lpuc_Frame` —— 您想要发送给雷达的数据帧(不包括最后的2字节校验和帧)。 + + - `unsigned short int lus_Len` —— 您想要发送给雷达的数据帧的长度。 + + **返回值:** 2字节整数类型的校验和。 + + +- `void SerialInit()` —— 将雷达串口波特率设置为9600。如果是Seeeduino板,将软串口设置为RX: 2, TX: 3。 +**输入参数:** 无 +**返回值:** 无 + +### 安装 + +**第一步**。 你需要安装Arduino软件。 + +

+ +**第二步**。 启动Arduino应用程序。 + +
+ +**第三步**。 选择你的开发板型号并将其添加到Arduino IDE中。 + - 如果你想在后续的例程中使用**Seeeduino V4.2**,请参考[这个教程](https://wiki.seeedstudio.com/Seeed_Arduino_Boards/)来完成添加。 + - 如果你想在后续的例程中使用**Seeeduino XIAO**,请参考[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)来完成添加。 + - 如果你想在后续的例程中使用**XIAO RP2040**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)来完成添加。 + - 如果你想在后续的例程中使用**XIAO BLE**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)来完成添加。 + +**第四步**。 安装Arduino代码库。 + +首先,从[GitHub](https://github.com/limengdu/Seeed_24GHz_mmWave_Radar_Sensor)获取代码库,并将其下载到你的本地计算机上。 + +既然你已经下载了zip格式的库文件,打开你的Arduino IDE,点击**Sketch(草图)> Include Library(包含库)> Add .ZIP Library(添加.ZIP库)**。选择你刚刚下载的zip文件,如果库安装正确,你会在通知窗口中看到**Library added to your libraries(库已添加到你的库中)**。这意味着库已成功安装。 + +
+ +### 所需材料 + +在完成以下示例之前,你需要准备以下材料。 + +| | | | +|:--------------:|:--------------:|:--------------:| +|
|
|
| +|[**24GHz毫米波雷达传感器**](https://www.seeedstudio.com/24GHz-mmWave-Radar-Sensor-Human-Static-Presence-Module-p-5267.html)|[**Seeed XIAO BLE nRF52840 传感器**](https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html)|**2mm to 2.54mm Pitch Ribbon Cable**| + +**第一步**。 通过主板将设备连接到计算机。接线图如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + 主板
5V-->5V
GND-->GND
RX-->D6
TX-->D7
+ +**第二步**。 在Arduino IDE左上角的菜单栏中,选择**工具**,选择你正在使用的开发板类型,并选择相应的串口。 + +:::tip提示 +如果你使用的是**MacOS**,设备的串口名称通常以**/dev/cu.usbmodem xxx**开始,后面跟着设备的名称。如果你使用的是**Windows**,设备的串口名称通常以**COM**开始,后面也跟着设备的名称。 +::: + +
+ +在本示例中,我们将展示雷达如何与我们热门产品XIAO BLE配合使用。 + +### 示例1 使用特征参数分析获取人体运动 + +雷达返回的大量数据中,物理数据信息占据了大部分。有时,过度依赖雷达自身的算法在某些场景下可能无法获得满意的结果。因此,我们可以选择使用雷达返回的信息,并根据实际应用场景进行适当的调整。 + +本示例中的代码如下。 + +
+ +```c++ +//Physical_Parameters_Example.ino + +#include + +SleepBreathingRadar radar; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + radar.recvRadarBytes(); //接收雷达数据并开始处理 + if (radar.newData == true) { //数据已被接收并传输到新的列表dataMsg[]中 + byte dataMsg[radar.dataLen+1] = {0x00}; + dataMsg[0] = 0x55; //将帧头作为数组的第一个元素添加 + for (byte n = 0; n < radar.dataLen; n++)dataMsg[n+1] = radar.Msg[n]; //逐帧传输 + radar.newData = false; //保存完整的数据帧集 + + //radar.ShowData(dataMsg); //串口打印出接收到的一组数据帧 + radar.Bodysign_judgment(dataMsg, 1, 15); //使用符号参数输出人体运动信息 + } +} +``` + +```c +radar.Bodysign_judgment(dataMsg, 1, 15); +``` + +一旦获取了dataMsg数组,我们可以将该数组的数据作为第一个参数传递给`Bodysign_judgment()`函数,该函数用于解析符号参数。 + +`Bodysign_judgment()`函数的第二个和第三个参数分别是判断无人和人体静止状态的临界值,以及人体静止和运动状态的临界值。 + +(1, 15)表示当计算出的身体符号值小于1时,输出环境中无人。当体值大于等于1且小于15时,输出当前环境有人处于静止状态。当身体符号值大于等于35时,输出环境中有人正在移动。 + +上传程序。将你的串口监视器波特率设置为9600,应该可以看到结果。输出应该类似于下面的图像。 + +
+ +:::tip提示 +输出数据帧后面的值表示计算出的符号值。 +::: + +### 示例2 向雷达发送数据 + +雷达为我们打开了非常多的接口,用于获取信息以及设置雷达的灵敏度或场景。本例程将指导用户如何使用用户手册向雷达发送数据消息,以调整雷达的参数或获取所需的数据信息。 + +**第一步**。 根据所需的查询获取数据帧。 + +在资源区域下载[用户手册](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-Sleep-monitorng-user-manual.pdf),并在**第8.2章**中找到你需要查询或设置的帧的内容,并整理它们。 + +在本示例中,假设你想查询雷达设备的ID,你应该能够获得所需的功能码、地址码1和地址码2。 + +
+ +**第二步**。 在Arduino IDE中打开示例代码。 + +
+ +本示例中的代码如下。 + +```c +//CRC_Checksum_Generation.ino + +#include + +SleepBreathingRadar radar; +char buff[30]; + +void setup() +{ + radar.SerialInit(); + Serial.begin(9600); + delay(1500); + Serial.println("Readly"); +} + +void loop() +{ + //请根据数据手册填写你想要设置的数据帧(不包括2字节的校验和帧) + unsigned char data[] = {0x55, 0x08, 0x00, 0x05, 0x01, 0x04, 0x03}; + + unsigned int length = sizeof(data)/sizeof(unsigned char); + unsigned char datas[length + 2]; + for (int n = 0; n < length; n++)datas[n] = data[n]; + unsigned short int crc_data = radar.us_CalculateCrc16(data, length); + sprintf(buff, "The CRC16 values is: %04x", crc_data); + Serial.println(buff); + datas[length] = (crc_data & 0xff00) >> 8; + datas[length+1] = crc_data & 0xff; + Serial.print("The datas send to the radar: "); + for (int n = 0; n < length + 2; n++){ + char buffsend[1]; + sprintf(buffsend, "0x%02x ", datas[n]); + Serial.print(buffsend); + } + Serial.println(); + delay(6000); +} +``` + +**第三步**。 修改数据帧的内容以生成发送给雷达的完整数据帧。 + +我们需要修改的是循环中的`data[]`数组。 + +```c +//请根据数据手册填写你想要设置的数据帧(不包括2字节的校验和帧)。 +unsigned char data[] = {0x55, 0x08, 0x00, 0x05, 0x01, 0x04, 0x03}; +``` +我们需要修改的地方是第二个元素,以及从第四个到最后一个元素。帧头0x55是固定的,不需要修改。第二个帧是长度帧,请根据你发送的数据长度进行修改。第三个帧固定为0x00。第四个帧是功能码,第五个帧是地址码1,以此类推。 + +:::tip提示 +关于长度帧的计算方法:
+长度 = 数据长度 + 功能码 + 地址码1 + 地址码2 + 数据 + 校验和。(帧头不计入) + +有关帧格式和规则的更多信息,请参阅[用户手册](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-Sleep-monitorng-user-manual.pdf)的第8章。 +::: + +上传程序。将你的串口监视器波特率设置为9600,应该可以看到结果。输出应该类似于下面的图像。 +
+ +需要发送给雷达的完整数据将在串口监视器中显示。 + +**其他方法** + +如果你不想使用任何主设备来生成完整的数据帧,你也可以将下面的代码粘贴到可以运行C程序的编辑器中。按照上述步骤,用你帧的内容填充数组数据。 + +```c +#include +const unsigned char cuc_CRCHi[256]= { + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40 +}; +const unsigned char cuc_CRCLo[256]= { + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, + 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, + 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, + 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, + 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, + 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, + 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, + 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, + 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, + 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, + 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, + 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, + 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, + 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, + 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, + 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, + 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, + 0x41, 0x81, 0x80, 0x40 +}; +static unsigned short int us_CalculateCrc16(unsigned char *lpuc_Frame, unsigned short int lus_Len){ + unsigned char luc_CRCHi = 0xFF; + unsigned char luc_CRCLo = 0xFF; + int li_Index=0; + while(lus_Len--){ + li_Index = luc_CRCLo ^ *( lpuc_Frame++); + luc_CRCLo = (unsigned char)( luc_CRCHi ^ cuc_CRCHi[li_Index]); + luc_CRCHi = cuc_CRCLo[li_Index]; + } + return (unsigned short int )(luc_CRCLo << 8 | luc_CRCHi); +} +int main() { + //请根据数据手册填写你想要设置的数据帧(不包括2字节的校验和帧)。 + unsigned char data[] = {0x55, 0x07, 0x00, 0x01, 0x01, 0x01}; + unsigned short int crc_data = 0x0000; + unsigned int length = sizeof(data)/sizeof(unsigned char); + unsigned char datas[length + 2]; + for (int n = 0; n < length; n++)datas[n] = data[n]; + printf("The data frame length is: %d\n", length); + crc_data = us_CalculateCrc16(data, length); + datas[length] = (crc_data & 0xff00) >> 8; + datas[length+1] = crc_data & 0xff; + printf("The last two CRC check digits are: %04x\n", crc_data); + printf("The datas send to the radar: "); + for (int n = 0; n < length + 2; n++){ + printf("0x%02x ", datas[n]); + } + printf("\n"); + return 0; +} +``` + +编辑器执行后,同样可以输出需要发送给雷达的完整数据帧。 + +
+ +**第四步**。 向雷达发送数据帧。 + +通过一个[**UART转USB**设备](https://www.seeedstudio.com/USB-To-Uart-5V-p-1833.html?queryID=588a892811a774ad3005ea0d31427532&objectID=1111&indexName=bazaar_retailer_products)将雷达直接连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + 主板
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ + +使用类似串口调试助手的软件,选择雷达所在的串口。 + +
+ +:::caution警告 +24GHz雷达需要5V电源供电,否则雷达可能无法正常工作。 +::: + +连接成功后,你会看到雷达发送连续不断的信息流。 + +
+ +将在**第三步**中获得的完整数据帧粘贴到软件的发送区域。然后点击发送。 + +
+ +你可以查找第三个元素为0x03的返回数据集。这组数据是查询后获得的信息。如果你发送调整雷达参数的数据,它也会返回这样的信息。 + +:::caution警告 +如果你选择**ASCII**作为发送数据的格式,每个数据集前都需要加上**0x**。如果你选择**HEX**,那么每组数据前不需要加上**0x**。 +::: + +## 故障排除 + +**常见问题1:如何将代码应用到Seeeduino(或Arduino)上?** + +> 由于硬件设计的不同,XIAO系列或Wio Terminal的串口被命名为Serial1,而Seeeduino或Arduino需要使用软串口。如果你想在Seeeduino上使用雷达,你可以更改软串口设置,或者使用引脚2(RX)和引脚3(TX)。 +>
+ +**常见问题2:如果XIAO BLE和雷达长时间收集数据,无法上传代码,我应该怎么做?** + +> 此时,你可以用手指轻轻按下XIAO BLE顶部的复位按钮,以重新上传程序运行。 + +## 资源 + +- **[PDF]** [人体存在用户手册](https://files.seeedstudio.com/wiki/mmWave-radar/Human_Presence_User_Manual.pdf) +- **[ZIP]** [24GHz呼吸探测示意图/方案图/电路图](https://files.seeedstudio.com/wiki/60GHzradar/24GHz-respiratory-schematic.zip) +- **[PPTX]** [矽力特毫米波传感器系列V2.0](https://files.seeedstudio.com/wiki/mmWave-radar/Seeed-mmWave-sensor-series-V2.0.pptx) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供各种支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多个沟通渠道,以满足不同的偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPC1.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPC1.md new file mode 100644 index 0000000000000..9ccff259e2be5 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPC1.md @@ -0,0 +1,1045 @@ +--- +description: 24GHz mmWave Human Static Presence Lite +title: 24GHz毫米波传感器 - 人体静态存在模块精简版 +keywords: +- mmWave_radar_sensor +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/Radar_MR24HPC1 +last_update: + date: 03/23/2024 + author: AnXiaodie +--- + + +# 24GHz毫米波传感器 - 人体静态存在模块精简版(MR24HPC1) + +
+ + + + + +## 简介 + +24GHz毫米波传感器 - 人体静态存在模块精简版是一款集成了天线的、对人体健康友好的毫米波雷达传感器。它采用FMCW测距技术,在24GHz频段工作,用于实现人体存在的检测,且不受环境因素的影响。这也是一款个性化雷达,用户可以配置其底层参数,以确定检测功能。 + +### 应用场景 +- 自动户外照明 +- 自动门开启 +- 全屋监控 +- 智能家电(电视、浴室助手、安防等) +- 办公室节能(空调、照明) +- 睡眠监测曲线 +- 家庭安防 +- IPC触发 + +### 特点 + +- 人体存在毫米波雷达:采用FMCW测距技术,在24GHz频段工作,探测距离达5米,用于检测感应区域内的人体行为 +- 个性化雷达检测:提供可配置的检测范围、运动触发、状态改变时间,以及可视化调试软件,以满足各种场景的需求 +- 健康友好的工作状态:输出功率低至对人体无害 +- 高抗干扰性:输出数据不受温度、湿度、噪声、气流、灰尘、光线等环境因素的影响 +- 支持Arduino + +### 硬件概述 + +
+ +1. 5V引脚是雷达的电源接口,而RX和TX则是雷达的数据传输接口。RX代表串行接收,TX代表串行发送。 +2. 人体存在状态输出接口。您可以使用这两个引脚的电平来确定当前环境中的人体移动情况。 + S1输出:高电平 - 有人,低电平 - 无人。 + S2输出:高电平 - 活动,低电平 - 静止。 +3. 固件闪存引脚。 +4. 其他输入输出引脚。 + +## 入门指南 + +### 固件版本更新 + +毫米波传感器经过了长时间的技术沉淀和用户提供的宝贵建议,我们一直在原始产品的基础上进行迭代,以提供更准确、可靠的监测结果和更好的用户体验。 + +新出厂的传感器默认搭载最新固件,以确保用户获得最新的产品体验。然而,为了照顾老用户的使用体验,我们在此提供最新的固件和更新方法,以确保您能够使用我们最新的技术。 + +#### 通用方法——使用J-link烧录固件 + +如果遇到固件错误或雷达异常、固件故障等问题,使用此方法重新烧录固件是最有效的方法。 + +**最新固件下载** + +| 固件版本 | 下载地址 | +| :-------------------------: | :----------------------------------------------------------: | +| Jlink_MR24HPC1-20230302.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/Jlink_MR24HPC1-20230302.bin) | + +:::caution警告 + +1. 请仔细检查您的产品功能,请勿与其他毫米波传感器混淆以刷写此固件,否则可能会导致产品功能异常,后果需自负! +2. 请注意,更新固件的不同方式使用不同的固件内容,您正在下载的是通过**J-link**烧录的固件。 +::: + +**将您的雷达更新到最新版本** + +**步骤1.** 您需要有一个**Jlink**和**MR24HPC1** 24GHz毫米波传感器。 + +通过杜邦线将雷达和Jlink连接在一起,连接方式如以下图示所示。 + +
+ +**步骤2.** 下载必要的软件和固件。 + +| 文件 | 下载地址 | +|:----------------:|:----------------:| +| JlinkV644e.rar | [下载](https://files.seeedstudio.com/wiki/60GHzradar/JlinkV644e.rar) | +| Pack_Segger_AT32F4xx_v1.3.3.zip | [下载](https://files.seeedstudio.com/wiki/60GHzradar/Pack_Segger_AT32F4xx_v1.3.3.zip) | + +**步骤3.** 解压**JlinkV644e.rar**文件,并打开其中的**JLink_Windows_V644e.exe**文件。 + +只需按照默认选项进行安装。安装完成后,启动**J-Flash V6.44e**软件。 + +**步骤4.** 安装芯片包。 + +解压**Pack_Segger_AT32F4xx_v1.3.3.zip**文件,并打开其中的**Segger_AT32F4xx_AddOn.exe**文件。 + +
+ +:::tip提示 +如果在向JFlash添加内容时遇到如下图片所示的错误,您可以按照以下说明解决问题。 +::: + +
+ +解决方案: + +1. 从https://www.arterychip.com/en/product/AT32F403A.jsp下载此文件。 +2. 解压文件并打开。 +3. 将C:\Program Files\SEGGER\JLink_V794中的JLinkDevices.xml文件复制到C:\Users[用户名]\AppData\Roaming\SEGGER。 + +这样就可以解决问题,我们可以使用JFlash或JFlash Lite软件进行烧录。 + +**步骤5.** 创建一个新项目。 + +
+ +
+ +找到并选择**AT32F403ARGT7**。 + +
+ +
+ +**步骤6.** 将雷达固件(.bin文件)拖放到此软件中,会弹出一个窗口,我们只需使用其默认的起始地址0x8000000。 + +
+ +**步骤7.** 点击 **Target** -> **Connect*** + +
+ +当连接成功时,它会显示“Connected successfully”。 + +
+ +擦除固件:**Target** -> **manual Programming** -> **Erase Chip** + +
+ +升级固件:**Target** -> **manual Programming** -> **Program & Verify** + +
+ +此时,固件更新已完成。 + +#### 通过UART更新固件 + +考虑到J-link价格昂贵,对于绝大多数仅需要更新雷达固件的用户来说,购买J-link太过奢侈,因此我们提供了通过UART进行更新的方法。 + +**最新固件下载** + +| 固件版本 | 下载地址 | +|:----------------:|:----------------:| +| UART_MR24HPC1-20230302.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/UART_MR24HPC1-20230302.bin) | + +:::caution警告 + +1. 请仔细检查您的产品功能,请勿与其他毫米波传感器混淆以刷写此固件,否则可能会导致产品功能异常,后果需自负! +2. 请注意,更新固件的不同方式使用不同的固件内容,您正在下载的是通过**UART**烧录的固件。 +3. 在使用UART升级固件之前,请确保您的雷达固件版本**至少是G24VD1SYV001006**,否则可能会导致雷达无法使用,届时您将需要使用J-link烧录固件才能使用! + +您可以通过向雷达发送命令`0x53 0x59 0x02 0xA4 0x00 0x01 0x0F 0x62 0x54 0x43`来查询固件版本号信息。雷达报告的数据将以字符串形式显示,您将看到类似于以下所示的效果。 + +`G24VD1SYV000009`是雷达报告的型号号,其中`000009`是版本号。这意味着这个传感器**不支持**UART升级。 + +
+::: + +**更新您的雷达至最新版本** + +**步骤1**. 您需要准备一个**UART转USB**转换器和**MR24HPC1** 24GHz毫米波传感器。 + +通过杜邦线将雷达和UART转USB转换器连接在一起,如以下示意图所示。 + +
+ +**步骤2**. 下载必要的软件和固件。 + +| 文件 | 下载地址 | +|:----------------:|:----------------:| +| PackageMake-v1.1.1.zip | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/PackageMake-v1.1.1.zip) | + +**步骤3**. 解压PackageMake-v1.1.1.zip包,并打开其中的PackageMake-v1.1.1.exe文件。 + +将UART转USB转换器与连接到电脑的传感器连接,点击软件界面左上角的齿轮图案,选择端口号,将波特率设置为115200,然后点击右下角的确认按钮。(如果找不到端口号,请检查连接,然后点击左下角的刷新按钮重试) + +
+ +**步骤4**. 连接传感器 + +按照上述步骤设置好串口后,点击右上角的第二个图标,如果端口选择正确,您将看到雷达的原始数据被打印出来。 + +
+ +**步骤5**. 更新固件 + +鼠标左键点击右上角的最后一个图标,这将弹出一个窗口用于选择固件。请选择您已下载的固件版本。 + +
+ +选择完成后,所选文件路径将出现在软件下方,请再次确认所选固件版本和型号是否与您使用的传感器一致。 + +
+ +要升级固件,请在软件左上角最后一张图片的位置双击鼠标左键,然后固件将开始下载到传感器中。 + +
+ +
+ +等待进度条完成,固件更新即告结束。 + +### 上位机使用说明 + +通过**UART转USB**设备将雷达直接连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + UART转USB
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ +除了上述串口软件外,您还可以使用专为雷达设计的[上位机软件](https://files.seeedstudio.com/wiki/Radar_MR24HPCB1/Human-Radar-Open-Protocol_2.0.exe)。 + +以下十个部分解释了软件中每个部分的作用。 + +
+ +1. 端口 + + 选择雷达连接到电脑的端口。在选择之前,通常需要点击刷新按钮来**刷新**端口。选择完毕后,请点击**打开**按钮。 + +2. 波特率 + + MR24HPC1雷达需要设置为115200的波特率。 + +3. 运动能量 + + 这个值相当于**动态值**。这个值的变化代表了环境中持续的运动噪声。当空间内无人时,运动能量较低;随着运动幅度和距离的增加,整体运动能量会升高。 + +4. 退出能量 + + 这个值相当于**静态值**。这个值的变化代表了环境中持续的静态噪声。当空间内无人时,退出能量较低;当空间内有静止的人(如胸部呼吸的轻微运动)时,整体退出能量会在较高的值之间波动。 + +5. 距离 + + **静止距离**:环境中存在轻微移动区域时,环境与雷达之间的直线距离。当空间中的某个位置有人静止时,会实时输出该位置与雷达之间的直线距离。 + **运动距离**:环境中移动位置与雷达之间的直线距离。当空间中的某个位置有人运动时,会实时输出该位置与雷达之间的直线距离。 + +
+ +6. 图形设置 + + 用于明确确定实时波形与阈值之间的关系。根据实时曲线的变化,可以观察空间在不同状态下的底噪变化,并根据底噪的变化来设置人体存在的阈值,从而对静止状态的存在/不存在/活动进行简单判断。 + +
+ +7. 查询 + + 搜索当前的参数设置。由于篇幅原因,各参数值的详细含义请参考用户手册。 + +8. 设置 + + 设置各参数的阈值。 + +9. 状态显示 + + 此窗口实时显示当前的距离、速度和运动状态等数值。 + +10. 发送与回复 + + 发送和接收的数据帧。Sensor development with Arduino + +### Arduino Library Overview + +:::tip提示 +如果你是第一次使用Arduino,我们强烈建议你参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +本示例中使用的库代码可以通过点击下面的图标进行下载。 + +

+ +#### 功能 + +在开始开发草图之前,让我们先看一下库中可用的功能。 + +- `void recvRadarBytes()` —— 此函数根据传感器数据协议中的帧头和帧尾,通过UART收集传感器报告的数据帧。与`showData()`函数一起使用,可以将收集的数据信息通过串口打印出来。 + - **输入参数:** 无 + - **返回值:** 无 +- `void showData()` —— 此函数用于通过串口一次性打印出传感器报告的完整数据帧,需要与`recvRadarBytes()`函数一起使用。 + - **输入参数:** 无 + - **返回值:** 无 +- `void HumanStatic_func(bool bodysign /*=false*/)` —— 此函数负责解析传感器的数据帧,并输出关于人体存在状态的相关数据。 + - **输入参数:** `bodysign` —— 这是一个开关,用于控制是否输出人体运动参数。如果为**true**,输出将包含大量人体信号参数数据,这可能会影响您查看数据的体验。默认情况下,此参数为**false**,不显示身体信号参数信息。 + - **返回值:** + - `int radarStatus` —— 返回的值表示解析的数据帧所属的状态类别。具体类别可以在**默认变量**部分找到。 + + - `int bodysign_val` —— 返回的值表示人体运动参数的值。这个值仅在参数`bodysign=true`时有效。 + + - `int static_val` —— 这个值相当于**静态值**。该值的变化代表了环境中恒定的静态噪声。当空间无人时,退出能量较低,而当空间内有人静止不动时(如胸部呼吸的轻微运动),整体退出能量会在较高的值上波动。这个值仅在开启底层消息时有效。 + + - `int dynamic_val` —— 这个值的变化代表了环境中恒定的运动噪声。当空间内无人时,运动能量较低,而随着运动幅度和距离的增加,整体运动能量会上升。这个值仅在开启底层消息时有效。 + + - `int dis_static` —— 在存在轻微运动区域的情况下,环境与传感器之间的直线距离。当空间内某位置有人静止不动时,该位置到传感器的直线距离会实时输出。这个值仅在开启底层消息时有效。 + + - `int dis_move` —— 环境中运动位置与传感器之间的直线距离。当空间内某位置有人运动时,该位置到传感器的直线距离会实时输出。这个值仅在开启底层消息时有效。 + + - `int speed` —— 这个值表示运动物体的移动速度。该值仅供参考。这个值仅在开启底层消息时有效。 + +- `void checkSetMode_func(const unsigned char* buff, int len, bool cyclic /*= false*/)` —— 此函数可用于向传感器发送数据帧。发送的数据帧和返回的数据帧会通过串口打印出来。 + + - **输入参数:** + - `buff` —— 您想要发送给传感器的数据帧。 + - `len` —— 您想要发送给传感器的数据帧的长度。 + - `cyclic` —— 循环发送开关。默认为false,如果您希望循环发送此数据帧,可以设置为**true**。 + - **返回值:** 无 + +- `void reset_func()` —— 这个函数用于重置传感器。 + + - **输入参数:** 无 + - **返回值:** 无 + + +#### 默认变量 + +```c +#define MESSAGE_HEAD1 0x53 //数据框标题1 +#define MESSAGE_HEAD2 0x59 //数据框标题2”。在这个上下文中 + +#define MESSAGE_END1 0x54 //数据框的结束位置1 +#define MESSAGE_END2 0x43 //数据框的结束位置2 + +#define HUMANSTATUS 0x80 //人类存在信息 +#define HUMANEXIST 0x01 //人体的存在 +#define HUMANMOVE 0x02 //人体运动信息 +#define HUMANSIGN 0x03 //体征参数 +#define HUMANDIRECT 0x0B //人体运动趋势 + +#define SOMEBODY 0x01 //有人移动 +#define NOBODY 0x00 //没有人 + +#define NONE 0x00 +#define SOMEBODY_STOP 0x01 //有人停下来 +#define SOMEBODY_MOVE 0x02 //Somebody move + +#define CA_CLOSE 0x01 //有人移动 +#define CA_AWAY 0x02 //有些人保持距离”或“有些人远离 + + +#define DETAILSTATUS 0x08 //人类状态的底层参数 +#define DETAILINFO 0x01 //关于人体运动状态的详细数据 +#define DETAILDIRECT 0x06 //人体运动趋势 +#define DETAILSIGN 0x07 //体征参数 + +//返回状态,在Arduino中使用 +#define SOMEONE 0x01 //有人 +#define NOONE 0x02 //没人 +#define NOTHING 0x03 //没有信息 +#define SOMEONE_STOP 0x04 //有人停止 +#define SOMEONE_MOVE 0x05 //有人移动 +#define HUMANPARA 0x06 //体征参数 +#define SOMEONE_CLOSE 0x07 //有人靠近 +#define SOMEONE_AWAY 0x08 //有些人保持距离 +#define DETAILMESSAGE 0x09 //人类状态的底层参数 + +#define reset_frame_len 10 //重置数据帧长度 + +//重置数据帧 +const unsigned char reset_frame[10] = {0x53, 0x59, 0x01, 0x02, 0x00, 0x01, 0x0F, 0xBF, 0x54, 0x43}; +``` +### 安装步骤 +**第一步**。 您需要安装Arduino软件。 +

+ +**第二步**。 启动Arduino应用程序。 +
+ +**第三步**。 选择您的开发板型号并将其添加到Arduino IDE中。 +- 如果您打算在后续步骤中使用**Seeeduino V4.2**,请参考[这个教程](https://wiki.seeedstudio.com/Seeed_Arduino_Boards/)以完成添加。 +- 如果您打算在后续步骤中使用**Seeeduino XIAO**,请参考[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)以完成添加。 +- 如果您打算在后续步骤中使用**XIAO RP2040**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)以完成添加。 +- 如果您打算在后续步骤中使用**XIAO nRF52840**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)以完成添加。 +- 如果您打算在后续步骤中使用**XIAO ESP32C3**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/#software-setup)以完成添加。 + +:::caution警告 +对于**XIAO nRF52840**,请选择**Seeed nRF52 mbed-enabled Boards**,否则在运行程序时可能会出现错误。 +
+::: + +**第四步**。 安装Arduino代码库。 + +首先,从[GitHub](https://github.com/limengdu/Seeed_24GHz_Human_Static_Presence_Module_Lite)获取代码库,并将其下载到您的本地计算机。 + +既然您已经下载了zip格式的库文件,打开您的Arduino IDE,点击**Sketch(草图)> Include Library(包含库)> Add .ZIP Library(添加.ZIP库)**。选择您刚刚下载的zip文件,如果库安装正确,您会在通知窗口中看到**Library added to your libraries(库已添加到您的库中)**。这意味着库已成功安装。 +
+ +## Arduino 示例 +既然我们已经安装了库并理解了基本功能,现在让我们运行一些XIAO nRF52840 Sense的示例,看看它的表现如何。 +### 所需材料 + +在完成以下示例之前,您需要准备以下材料。 + +| | | | +|:--------------:|:--------------:|:--------------:| +|
|
|
| +|[**MR24HPC1**](https://www.seeedstudio.com/24GHz-mmWave-Sensor-Human-Static-Presence-Module-Lite-p-5524.html)|[**Seeed XIAO BLE 基于nRF52840的传感器板**](https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html?queryID=4bbd8c09f20216aa26f6b5a9040504d0&objectID=5253&indexName=bazaar_retailer_products)|**2mm to 2.54mm Pitch Ribbon Cable**| +**第一步**。通过主板将设备连接到计算机。接线图如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MR24HPC1 + 主板
5V-->5V
GND-->GND
RX-->D6
TX-->D7
+ +**第二步**。在Arduino IDE左上角菜单栏中,选择**工具**,选择您正在使用的开发板类型,并选择相应的串行端口。 + +:::tip提示 +如果您使用的是**MacOS**,设备的串行端口名称通常以**/dev/cu.usbmodem xxx**开头,并以设备名称结尾。如果您使用的是**Windows**,设备的串行端口名称通常以**COM**开头,同样以设备名称结尾。 +
+::: + +在这个示例中,我们将演示传感器如何与我们广受欢迎的产品 XIAO nRF52840 Sense 配合使用。 + +### 示例1:通过串行端口打印传感器输出的原始数据帧 +本示例将指导您通过串行端口打印出传感器报告的原始数据。 + +在库的示例文件夹中,有一个名为 **MR24HPCB1_rawdata_print** 的示例程序。 + +```c +#include "Arduino.h" +#include +//#include +// 选择任何两个可以使用 SoftwareSerial 进行 RX(接收)和 TX(发送)的引脚 +//#define RX_Pin A2 +//#define TX_Pin A3 +//创建一个名为mySerial的SoftwareSerial对象,并指定接收引脚(RX_Pin)和发送引脚(TX_Pin)。 +// 我们将使用软件串行通信 +//“创建一个名为radar的HumanStaticLite雷达对象,并将mySerial对象的地址传递给它。” +// 也可以尝试使用硬件串行端口进行(通信) +HumanStaticLite radar = HumanStaticLite(&Serial1); +void setup() { + // 将您的设置代码放在这里,仅运行一次: + Serial.begin(115200); + Serial1.begin(115200); + // mySerial 开始以 115200 波特率运行。 + while(!Serial); //当串行端口打开时,程序开始执行。 + Serial.println("Ready"); +} +void loop() { + // 将您的主要代码放在这里,以便反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串行端口打印出一组接收到的数据帧 + delay(200); //添加时间延迟以避免程序卡死 +} +``` +:::tip提示 +如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 更改为`Serial1.begin(115200)`;`Serial1.begin(115200, SERIAL_8N1, D7, D6)`; +::: + +在这个程序中,我们使用XIAO nRF52840的硬件**Serial1**端口连接到传感器,并使用硬件**Serial**端口Serial输出数据,因此我们需要在初始化函数`Setup()`中单独初始化这个串行端口。 + +在主要的`loop()`函数中,我们使用`recvRadarBytes()`函数从传感器接收数据帧,然后使用`showData()`函数通过串行端口打印出接收到的数据帧。 + +在这个程序中,需要注意的是,每接收并输出两个数据帧之间有一个间隔,以避免主板卡死。这个时间间隔不应小于**150毫秒**。 + +这意味着主板无法接收传感器报告的所有数据帧,但由于传感器报告的数据帧数量非常大且频繁,这并不影响使用传感器来确定环境的准确性。 + +上传程序。将您的串行监视器设置为115200波特率,应该可以看到结果。输出应该看起来类似于下面的图像。 + +
+ +### 示例2:串行端口打印解析后的人体存在信息 + +在这个示例中,我们将使用库中的函数来解析接收到的数据帧,并通过串行端口打印出传感器主动报告的所有特征数据。 + +以下示例程序位于名为**MR24HPCB1_parsed_rawdata**的库的示例文件夹中。 + +```c +#include "Arduino.h" +#include + +//#include +// 选择任何两个可以使用 SoftwareSerial 进行接收(RX)和发送(TX)的引脚 +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信。 +//HumanStaticLite radar = HumanStaticLite(&mySerial); + +// 也可以尝试使用硬件串行端口进行(通信) +HumanStaticLite radar = HumanStaticLite(&Serial1); + +void setup() { + // 将您的设置代码放在这里,仅运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // 设置软件串行通信mySerial的波特率为115200 + + while(!Serial); //当串行端口打开时,程序开始执行 + + Serial.println("Ready"); +} + +void loop() { + // 将您的主要代码放在这里,以便反复运行: + radar.HumanStatic_func(true); //开启人体运动信号参数的打印功能 + if(radar.radarStatus != 0x00){ + switch(radar.radarStatus){ + Serial.println(radar.radarStatus); + case SOMEONE: + Serial.println("Someone is here."); + Serial.println("---------------------------------"); + break; + case NOONE: + Serial.println("Nobody here."); + Serial.println("---------------------------------"); + break; + case NOTHING: + Serial.println("No human activity messages."); + Serial.println("---------------------------------"); + break; + case SOMEONE_STOP: + Serial.println("Someone stop"); + Serial.println("---------------------------------"); + break; + case SOMEONE_MOVE: + Serial.println("Someone moving"); + Serial.println("---------------------------------"); + break; + case HUMANPARA: + Serial.print("The parameters of human body signs are: "); + Serial.println(radar.bodysign_val, DEC); + Serial.println("---------------------------------"); + break; + case SOMEONE_CLOSE: + Serial.println("Someone is closing"); + Serial.println("---------------------------------"); + break; + case SOMEONE_AWAY: + Serial.println("Someone is staying away"); + Serial.println("---------------------------------"); + break; + case DETAILMESSAGE: + Serial.print("Spatial static values: "); + Serial.println(radar.static_val); + Serial.print("Distance to stationary object: "); + Serial.print(radar.dis_static); + Serial.println(" m"); + + Serial.print("Spatial dynamic values: "); + Serial.println(radar.dynamic_val); + + Serial.print("Distance from the movement object: "); + Serial.print(radar.dis_move); + Serial.println(" m"); + + Serial.print("Speed of moving object: "); + Serial.print(radar.speed); + Serial.println(" m/s"); + Serial.println("---------------------------------"); + break; + } + } + delay(200); +} +``` +:::tip提示 +如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 更改为`Serial1.begin(115200)`;`Serial1.begin(115200, SERIAL_8N1, D7, D6)`; +::: + +要实现数据解析功能,我们首先需要调用`HumanStatic_func()`函数。传入的参数可以是`true`或`false`,用于控制是否启用人体运动参数的显示。 + +如果你选择开启它,即传入参数`true`,那么你可能会在串行端口得到以下消息。 + +
+ +:::note注意 + +人体运动参数:人体运动幅度值。当空间内无人时,人体运动参数为**0**;当有人在场且静止不动时,参数为**1-5**;当人体处于运动状态时,参数为**2-100**(运动幅度越大,人体运动参数越接近该范围)。 +这意味着,如果你感觉传感器识别的结果不符合你的预期,你可以通过自定义人体运动参数的判断来输出人体存在的信息。 +::: + +如果你希望停止在串行端口上疯狂输出人体运动参数,可以传入参数`false`,这样你就可以在串行端口上看到清晰的人体状态信息了。 + +
+ +:::tip提示 + +你可能会在串行监视器上长时间看不到打印的内容,这可能是正常的。传感器内置的算法是这样的,只有当被监控物体的运动状态发生变化时,才会输出信息。如果你在上传程序后一直保持静止,你可能需要起身走动并观察效果。 +::: + +你收到的数据也可能与上面两张图片中显示的数据信息不同。那么,你可能已经打开了底层消息输出开关。 + +
+ +有关如何打开和关闭“Open Underlying Message”的更多信息,请参考[**示例3**](https://yiyan.baidu.com/#jump1)的相关部分。简而言之,打开“Open Underlying Message”意味着将导出更详细的数据。 + +由于篇幅限制,关于“Open Underlying Message”数据的含义,请查阅此传感器的[**功能**](https://yiyan.baidu.com/#jump2)部分或用户手册。 + +### 示例3:向传感器发送数据 + +MR24HPC1提供了丰富的模式设置功能。本示例将解释如何实现开关“Open Underlying Message”作为发送数据帧的示例。 + +以下示例程序位于名为**MR24HPCB1_open_underlyingMes**的库的示例文件夹中。 + +(注意:根据原文中的描述,库名称应为**MR24HPCB1_open_underlyingMes**,但通常库名和示例程序名应保持一致,可能原文中存在笔误。正确的库名或示例程序名应与实际的库或示例文件相匹配。) + +```c +#include "Arduino.h" +#include + +//#include +// 选择任何两个可用于 SoftwareSerial 进行接收(RX)和发送(TX)的引脚。 +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信。 +//HumanStaticLite radar = HumanStaticLite(&mySerial); + +// 也可以尝试使用硬件串行端口 +HumanStaticLite radar = HumanStaticLite(&Serial1); + +const unsigned char close_buff[10] = {0x53, 0x59, 0x08, 0x00, 0x00, 0x01, 0x00, 0xB5, 0x54, 0x43}; //关闭底层消息输出 +const unsigned char open_buff[10] = {0x53, 0x59, 0x08, 0x00, 0x00, 0x01, 0x01, 0xB6, 0x54, 0x43}; //开启底层消息输出 + +void setup() { + // 将您的设置代码放在这里,仅运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial(一个 SoftwareSerial 对象)的波特率为 115200 + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Ready"); +} + +void loop() { + // 把你的主代码放在这里,以便反复运行: + radar.checkSetMode_func(open_buff, 10, false); + delay(50); //不要将延时时间设置得太长,因为这可能会影响雷达返回的数据帧的接收。 +} +``` +:::tip提示 +如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 更改为`Serial1.begin(115200)`;`Serial1.begin(115200, SERIAL_8N1, D7, D6)`; +::: + +在向传感器发送数据之前,我们需要参考用户手册,根据我们的需求获取要发送的完整数据帧,并在程序中定义一个数组来存储待发送的数据帧。 + +在这个示例中,我们根据用户手册创建了两个数据帧数组。它们的功能是开启或关闭底层消息输出功能。 + +```c +const unsigned char close_buff[10] = {0x53, 0x59, 0x08, 0x00, 0x00, 0x01, 0x00, 0xB5, 0x54, 0x43}; //switch off Open Underlying Message +const unsigned char open_buff[10] = {0x53, 0x59, 0x08, 0x00, 0x00, 0x01, 0x01, 0xB6, 0x54, 0x43}; //switch on Open Underlying Message +``` +:::tip提示 +**关于校验位“sum”的计算**。 +所有的数据帧都有一个校验位,以确保数据的发送或接收准确无误。校验位通常位于数据帧的倒数第二位。它是通过将校验位之前的所有位相加,并取十六进制下的最低两位来计算的。 +以查询设备ID的数据帧为例,我们来进行说明。 +
+可以看到,校验位位于整个数据帧的倒数第二位。然后,我们开始将前面所有的十六进制数相加。 +``` +0x53 + 0x59 + 0x02 + 0xA2 + 0x00 + 0x01 + 0x0F = 0x0160 +``` +然后我们需要取它的最低两位,也就是 **60**,所以这个数据帧的校验位是 **60**。如果我们想要查询传感器的ID,那么可以定义以下数组。 +`const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x60, 0x54, 0x43};` +::: +接着,我们通过调用 `checkSetMode_func()` 函数来发送数据帧。传入的参数包括数据帧的数组、数组的长度以及一个布尔值,表示是否循环发送。 +```c +radar.checkSetMode_func(open_buff, 10, false); +``` + +接着,我们通过调用 `checkSetMode_func()` 函数来发送数据帧。传入的参数包括数据帧的数组、数组的长度以及一个布尔值,表示是否循环发送。 + +
+ +此时,请检查返回的数据帧,如果它们与用户手册中描述的数据帧匹配,那么设置就成功了。 + +通常情况下,我们不需要重复向传感器发送命令,但是由于传感器回复消息的速度非常快,我们无法确保能够接收到传感器返回的精确数据消息。解决这个问题有两个方案。 + +- 多次重新上传上述过程。 +- 将 `checkSetMode_func()` 函数的第三个参数(循环发送)设置为 `true`。但是请注意,反复发送设置类型的数据帧**可能会导致传感器卡住**,因此请小心使用此功能。如果传感器卡住了,请断开传感器的 5V 供电引脚,等待片刻,使其功能恢复。 + +### 示例4:重置传感器 + +有时,您的传感器在检测异常时可能会遇到问题,或者您想清除传感器上的所有设置,这时您可以按照此示例来重置您的传感器。 + +以下示例程序位于库的示例文件夹中,名为 **MR24HPCB1_reset_radar**。 + +```c +#include "Arduino.h" +#include + +//#include +// 选择任何两个可以与 SoftwareSerial 一起使用的引脚作为 RX(接收)和 TX(发送) +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行(通信) +//HumanStaticLite radar = HumanStaticLite(&mySerial); + +// 也可以尝试使用硬件串行端口进行(通信) +HumanStaticLite radar = HumanStaticLite(&Serial1); + +void setup() { + // 把你的初始化代码放在这里,只需运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Ready"); + + radar.reset_func(); +} + +void loop() { + // 把你的主代码放在这里,以便反复运行: + +} +``` +:::tip提示 +如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 更改为`Serial1.begin(115200)`;`Serial1.begin(115200, SERIAL_8N1, D7, D6)`; +::: + +重置传感器非常简单,您只需要调用 `reset_func()` 函数。重置只需要**执行一次**,因此我们在 `Setup()` 函数中使用它。 + +### 示例5:使用 Arduino/Seeeduino + +我们的库与 Arduino 兼容,您还可以选择您手头的 Arduino 来开发您的传感器项目。 + +MR24HPC1 传感器使用 UART 串行端口进行通信,您只需要按照下面的接线方式将传感器连接到您的 Arduino 即可。 + + + + + + + + + + + + + + + + + + + + + + + + + + +
MR24HPC1 + MCU
5V-->5V
GND-->GND
RX-->软件串行端口 TX(发送)
TX-->软件串行端口 RX(接收)
+ +所有功能的应用方式与上述 Demo1 到 Demo4 中的相同,因此在这个示例中我们不会重复它们。在本示例中,我们将向您概述如何使用 Arduino 的软件串行端口从传感器获取数据信息。 + +:::tip提示 +关于 Arduino 软件串行端口的说明,请参考 [Arduino 官方文档](https://docs.arduino.cc/learn/built-in-libraries/software-serial)。 +::: + +为了避免使用 Serial 同时进行输出和数据传输时造成的数据混淆,在 Arduino 端我们通常使用软件串行端口。 + +需要在程序较早的部分导入软件串行端口库并定义 RX 和 TX 引脚。以下程序将 **A2** 和 **A3** 引脚定义为软件串行端口的 **RX** 和 **TX** 引脚。 + +```c +#include +//选择任何两个可以与 SoftwareSerial 一起使用的引脚作为 RX(接收)和 TX(发送) +#define RX_Pin A2 +#define TX_Pin A3 + +SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +//我们将使用软件串行通信 +HumanStaticLite radar = HumanStaticLite(&mySerial); +``` + +此外,不要忘记在 `Setup()` 函数中设置软件串行端口的波特率。 + +```c +void setup() { + // 把你的初始化代码放在这里,只需运行一次: + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Ready"); +} +``` + +```c +void setup() { + // 这句话的意思是:把你的初始化代码放在这里,它只需要运行一次。 + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //这句话的翻译为:当串行端口被打开时,程序开始执行。 + + Serial.println("Ready"); +} +``` + +以 **Demo1** 为例,如果你想要使用 Arduino 来打印传感器报告的数据帧,那么完整的程序如下。 + +```c +#include "Arduino.h" +#include + +#include +// 选择任何两个可以作为 SoftwareSerial 的 RX(接收)和 TX(发送)的引脚 +#define RX_Pin A2 +#define TX_Pin A3 + +SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信 +HumanStaticLite radar = HumanStaticLite(&mySerial); + +void setup() { + // 在这里放置你的初始化代码,只需运行一次: + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //当串行端口被打开时,程序开始执行。 + + Serial.println("Ready"); +} + +void loop() { + // 在这里放置你的主代码,它将反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串行端口打印出一组接收到的数据帧 + delay(200); //添加时间延迟以避免程序卡顿 +} +``` + +### 示例6:直接与电脑连接获取数据 + +如果你想要使用专门为传感器设计的上位机,或者想要使用串行软件来获取完整的数据帧,你可以参考这个例程。 + +通过 **UART 到 USB** 设备将传感器直接连接到电脑的 USB 端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
雷达传感器 + UART 到 USB
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ + +使用如串口调试助手这样的软件来选择传感器所在的串口。 + +
+ +:::caution警告 +MR24HPC1 传感器需要 5V 电源供电,否则传感器可能无法正常工作。 +::: + +连接成功后,你将看到传感器持续发送消息流。 + +
+ +同时,你也可以通过软件的发送功能向传感器发送数据帧。 + +
+ +### 示例7:MR24HPBC1 & XIAO ESP32C3 & ESPHome & Home Assistant + +我们已经为这个雷达和 XIAO ESP32C3 创建了一个连接到 ESPHome 和 Home Assistant 的教程,如果你感兴趣,可以在这里参考教程。 + +- [XIAO ESP32C3 通过 ESPHome 服务访问 Home Assistant](https://wiki.seeedstudio.com/xiao-esp32c3-esphome) + +### 示例8:在 XIAO ESP32C3 中使用传感器 + +由于 XIAO ESP32C3 的硬件串行端口具有[特殊设计](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/#special-way---use-usb-serial-and-uart0uart1-at-the-same-time),因此,为了使用 UART 发送和接收与传感器之间的数据消息,你需要使用以下代码。 + +```cpp +#include "Arduino.h" +#include +#include + +//HardwareSerial MySerial(0); // 如果你想使用D6和D7作为串行引脚,取消注释这行代码,并注释掉下面的那行代码。 +HardwareSerial MySerial(1); // 创建一个新的 HardwareSerial 类 + +// 也可以尝试使用硬件串行通信 +HumanStaticLite radar = HumanStaticLite(&MySerial); + +void setup() { + // 在这里放置你的初始化代码,只需运行一次: + Serial.begin(115200); + + /* + +4和5分别代表GPIO4和GPIO5,对应到D2和D3引脚。 +如果你想要直接使用XIAO ESP32C3的硬件UART引脚,你可以将4和5改为-1和-1。 +MySerial.begin(115200, SERIAL_8N1, -1, -1); +除此之外,你还可以使用D9(GPIO9)和D10(GPIO10)引脚作为串行端口。 +MySerial1.begin(115200, SERIAL_8N1, 9, 10); +*/ + MySerial.begin(115200, SERIAL_8N1, 4, 5); + + while(!Serial); //当串行端口被打开时,程序开始执行。 + + delay(500); + + Serial.println("Ready"); +} + +void loop() { + // 在这里放置你的主代码,它将反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串行端口打印出一组接收到的数据帧 + delay(200); //添加时间延迟以避免程序卡顿 +} +``` +## 故障排除 +### 常见问题1:这个传感器能在同一环境中同时检测到多个人吗? +> 答:不可以。这个传感器只能用于单个活动物体。如果监控范围内有多于一个人或动物,这将会对监控结果产生影响。 + +### 常见问题2:为什么我在XIAO ESP32C3的串行监视器中看不到任何内容? +> 答:XIAO ESP32C3的串行端口功能与一般的Arduino硬件不完全一致,直接使用Serial1可能会导致USB串行端口无法工作。有关相关应用案例,请访问[XIAO ESP32C3的串行章节](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/#serial)以获取详细信息。 + +### 常见问题3:是否可以使用其他芯片代替 XIAO ESP32-C3 来使用该库? +> 答:是的,确实可以使用其他芯片代替 XIAO ESP32-C3 与库一起使用。只需确保连接正确的 RX/TX 引脚或两个 GPIO 引脚,并将波特率设置为 。 确认使用哪种方法,软件或硬件,例如,如果您有一个只有一个串口,则可以实现如下:`115200` `Arduino Uno R3` + +## 资源 +- **[PDF]** [快速设置模板](https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_Quick_Setup_Template-V1.0.pdf) +- **[PDF]** [数据手册](https://files.seeedstudio.com/wiki/mmWave-radar/24GHz_mmWave_Sensor-Human_Static_Presence_Module_Lite_Datasheet.pdf) +- **[PDF]** [用户手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_User_Manual-V2.0.pdf) +- **[EXE]** [上位机软件](https://files.seeedstudio.com/wiki/Radar_MR24HPCB1/Human-Radar-Open-Protocol_2.0.exe) +- **[ZIP]** [CE认证文件](https://files.seeedstudio.com/wiki/Radar_MR24HPCB1/101991030_CE.zip) + +## 技术支持与产品讨论 +感谢您选择我们的产品!我们在这里为您提供各种支持,以确保您在使用我们的产品时获得尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同的需求和偏好。 +
+ + +
+
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60BHA1.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60BHA1.md new file mode 100644 index 0000000000000..1c13f44662bb4 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60BHA1.md @@ -0,0 +1,1370 @@ +--- +description: 60GHz mmWave Static Breathing and Heartbeat +title: 60GHz毫米波传感器 - 人体静态睡眠呼吸监测 +keywords: +- mmWave_radar_sensor +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/Radar_MR60BHA1 +last_update: + date: 03/23/2024 + author: AnXiaodie +--- + +# 60GHz毫米波传感器 - 人体静态睡眠呼吸监测(MR60BHA1) + +
+ + + + + +## 介绍 + +MR60BHA1 60GHz雷达模块采用调频连续波(FMCW)检测理论,实现高精度的人体呼吸率和心率的同时监测,提供了完全私密和安全的环境,不受其他噪音干扰的影响。它是消费电子、医疗保健以及工业应用中的标准生物雷达系统。在本指南中,我们将向您介绍如何使用它。 + +### 应用 + +- 智能家居 +- 医疗保健 +- 呼吸率检测 +- 心率检测 +- 智能酒店 +- 医疗助手 + +### 特点 + +- 启用理论:基于FMCW(调频连续波信号)实现雷达检测 +- 标准算法:在自适应环境中同时感应和输出人体呼吸率和心率 +- 完美的隐私保护:应用FMCW监测技术,提供无识别能力的监控能力 +- 健康友好的工作状态:输出功率低至对人体无害 +- 高稳定性:独立于温度、湿度、噪音、气流、灰尘、光线和其他环境影响 +- 高测量精度:实现高达85%的心率精度和高达90%的呼吸精度 +- 高度灵活的硬件设计雷达:支持二次开发,适应各种应用场景 + +### 规格参数 + +| 参数内容 | 最小值 | 典型值 | 最大值 | 单位 | +|-----------------------------------|----------|----------|----------|-------| +| **性能** | | | | | +| 探测距离(胸部) | 0.4 | | 1.5 | 米 | +| 呼吸测量精度 | | 90 | | % | +| 心率测量精度 | | 95 | | % | +| 刷新时间 | 1 | | 30 | 秒 | +| 观察设置时间 | | 20 | | 秒 | +| **操作参数** | | | | | +| 操作电压(VCC) | 4.6 | 5 | 6 | 伏 | +| 操作电流(ICC) | | 150 | | 毫安 | +| 操作温度(TOP) | -20 | | 60 | 摄氏度 | +| 存储温度(TST) | -40 | | 80 | 摄氏度 | +| **发射参数** | | | | | +| 操作频率(fTX) | 58 | 60 | 63.5 | 吉赫兹 | +| 发射功率(Pout) | | 6 | | 分贝毫瓦 | +| **天线参数** | | | | | +| 天线增益(GANT) | | 4 | | 分贝i | +| 水平波束角(-3dB) | -20 | | 20 | 度 | +| 垂直波束角(-3dB) | -20 | | 20 | 度 | + +## 硬件概述 + +在开始之前,了解产品的一些基本参数是非常必要的。下表提供了60GHz毫米波呼吸和心率模块的特性信息。 + +
+ +- 接口1: + - 5V引脚是传感器的电源供应接口。 + - RX和TX是传感器的数据传输接口。RX表示串行接收,TX表示串行发送。 + - 人体存在状态输出接口。您可以使用这两个引脚的电平来确定环境中当前的人体活动情况。 + - GP2输出:高电平 - 有人,低电平 - 无人。 + - GP1输出:高电平 - 活动状态,低电平 - 静止状态。 +- 接口2: + - 闪存固件引脚:GND/3.3V/SWD/SWC。 + - 顶部输入/输出引脚:GP3~GP6。 + +## 开始使用 + +### 固件版本更新 + +毫米波传感器经过长期的技术沉淀和用户的宝贵建议,我们一直在对原始产品进行迭代,以提供更准确、可靠的监测结果,并为我们的用户带来更好的体验。 + +新出厂的传感器默认搭载最新的固件,以确保用户能够享受到最新的产品体验。然而,为了照顾老用户的体验,我们在此提供最新的固件和更新方法,以确保您能够使用我们的最新技术。 + +#### 通用方法——使用J-link烧录固件 + +如果您遇到固件错误、雷达异常、固件故障等问题,使用此方法重新烧录固件是最有效的方法。 + +**下载最新固件** + +| 固件版本 | 下载地址 | +|:----------------:|:----------------:| +| Jlink_MR60BHA1-V230104.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/Jlink_MR60BHA1-V230104.bin) | +| Jlink_MR60BHA1-V230904.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/Jlink_MR60BHA1-V230904.bin) | + +:::caution警告 + 1. 请仔细核对您的产品功能,请勿与其他毫米波传感器混淆并刷入此固件,否则可能导致产品功能异常,后果需自负! + 2. 还请注意,更新固件的不同方式使用的固件内容也不同,您正在下载的是通过**J-link**烧录的固件。 +::: + +**将您的雷达更新到最新版本** + +**步骤1.** 您需要准备一个**Jlink**和**MR60BHA1** 60GHz毫米波传感器。 + +按照下面的示意图,使用杜邦线将雷达和Jlink连接起来。 + +
+ +**步骤2.** 下载必要的软件和固件。 + +| 文件 | 下载地址 | +|:----------------:|:----------------:| +| JlinkV644e.rar | [下载](https://files.seeedstudio.com/wiki/60GHzradar/JlinkV644e.rar) | +| Pack_Segger_AT32F4xx_v1.3.3.zip | [下载](https://files.seeedstudio.com/wiki/60GHzradar/Pack_Segger_AT32F4xx_v1.3.3.zip) | + +**步骤3.** 解压**JlinkV644e.rar**,并打开其中的**JLink_Windows_V644e.exe**文件。 + +只需按照默认选项进行安装。安装完成后,启动**J-Flash V6.44e**软件。 + +**步骤4.** 安装芯片包。 + +解压**Pack_Segger_AT32F4xx_v1.3.3.zip**,并打开其中的**Segger_AT32F4xx_AddOn.exe**文件。 + +
+ +**步骤5.** 创建一个新项目。 + +
+ +
+ +找到并选择**AT32F403ARGT7**。 + +
+ +
+ +**步骤6.** 将雷达固件(.bin文件)拖入此软件,将弹出一个窗口,我们将直接使用其默认的起始地址0x8000000。 + +
+ +**步骤7.** 点击**Target** -> **Connect** + +
+ +当连接成功时,将显示“Connected successfully”。 + +
+ +擦除固件:**Target** -> **manual Programming** -> **Erase Chip** + +
+ +升级固件:**Target** -> **manual Programming** -> **Program & Verify** + +
+ +此时,固件更新已完成。 + +#### 通过UART更新固件 + +考虑到J-link价格昂贵,对于大多数只需要更新雷达固件的用户来说,购买J-link太奢侈了,因此我们提供了一种通过UART更新的方法。 + +**下载最新固件** + +| 固件版本 | 下载地址 | +|:----------------:|:----------------:| +| UART_MR60BHA1-230104.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/UART_MR60BHA1-230104.bin) | +| UART_MR60BHA1-230904.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/UART_MR60BHA1-230904.bin) | + +:::caution警告 + +1. 请仔细核对您的产品功能,请勿与其他毫米波传感器混淆并刷入此固件,否则可能导致产品功能异常,后果需自负! +2. 还请注意,更新固件的不同方式使用的固件内容也不同,您正在下载的是通过**UART**烧录的固件。 +3. 在使用UART升级固件之前,请确保您的雷达固件版本**至少为G60SM1SYv010003**,否则可能会导致雷达无法使用,届时您将需要使用J-link烧录固件才能使用! + +您可以通过向雷达发送命令`0x53 0x59 0x02 0xA4 0x00 0x01 0x0F 0x62 0x54 0x43`来查询固件版本号信息。雷达报告的数据将以字符串形式显示,您会看到类似以下效果。 + +`G60SM1SYv010009`是雷达报告的型号编号,其中`10009`是版本号。这意味着这款传感器支持UART升级。 + +
+::: + +**将您的雷达更新到最新版本** + +**步骤1**. 您需要准备一个**UART转USB转换器**和**MR60BHA1** 60GHz毫米波传感器。 + +按照下面的示意图,使用杜邦线将雷达和UART转USB转换器连接起来。 + +
+ +**步骤2**. 下载必要的软件和固件。 + +| 文件 | 下载地址 | +|:----------------:|:----------------:| +| PackageMake-v1.1.1.zip | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/PackageMake-v1.1.1.zip) | + +**步骤3**. 解压PackageMake-v1.1.1.zip包,并打开其中的PackageMake-v1.1.1.exe文件。 + +将UART转USB转换器与连接到电脑的传感器相连,点击软件左上角齿轮图案,选择端口号,将波特率设置为115200,然后点击右下角确认。(如果找不到端口号,请检查连接,然后点击左下角的刷新按钮重新尝试) + +
+ +**步骤4**. 连接传感器 + +按照上述描述设置好串口后,点击右上角的第二个图标,如果端口选择正确,您将看到雷达的原始数据打印出来。 + +
+ +**步骤5**. 更新固件 + +点击鼠标左键右上角的最后一个图标,这将弹出一个窗口来选择固件。请选择您已下载的固件版本。 + +
+ +选择完成后,软件下方会显示所选文件的路径,请再次确认所选固件版本和型号是否与您使用的传感器一致。 + +
+ +要升级固件,请双击鼠标左键到软件顶部左侧的最后一个图标,然后固件将开始下载到传感器。 + +
+ +
+ +等待进度条完成,固件更新即完成。 + +### 上位机的使用 + +通过**UART转USB**设备将传感器直接连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UART 到 USBMR60BHA1 传感器
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ +除了上述提到的串口软件外,您还可以直接使用为雷达设计的[上位机软件](https://files.seeedstudio.com/wiki/60GHzradar/MR60BHA1_new.exe)。 + +:::tip提示 +如果您使用的是较旧版本的OP和固件,请尽快[升级到最新版本](https://yiyan.baidu.com/#firmware-version-updates),以确保您能享受到软件协议和Wiki内容。 +::: + +以下五个部分解释了软件中各个部分的作用。 + +
+ +1. 连接设置 + + 选择传感器连接到电脑的端口。在选择端口之前,通常需要点击**刷新串口按钮**来刷新端口。一旦串口选择正确,数据将自动在圆圈4中更新(如果有数据可用)。 + +2. 功能设置 + + - **调试**:当此功能打开时,软件中可以输出实时原始数据。这是图中圆圈3的窗口。 + - **保存原始数据**:点击后,您可以选择将原始数据保存到本地电脑。但是请注意,点击此按钮后不会保存新数据,只会保存最新的历史数据。 + - **保存休眠数据**:点击后,您可以选择保存与休眠相关的原始数据信息,而其他数据则不会保存。但是请注意,点击此按钮后不会保存新数据,只会保存最新的历史数据。 + +3. 串口监视器 + + 当在圆圈2中的**调试**选项被选中时,此窗口将出现,此时该区域将显示传感器的实时数据帧。在底部,您可以向传感器发送命令帧。可以发送或查询的命令可以在传感器的用户手册中找到。 + +4. 图形显示 + + 这部分实时显示线图。显示的数据内容包括呼吸率、心率和身体参数。横坐标为时间,纵坐标为对应的数据。 + +5. 状态与方向 + + 这个区域用于观察人体存在状态以及人体的方向。请注意,人体方向数据仅供参考。 + +## 使用Arduino开发传感器 + +### Arduino库概述 + +:::tip提示 +如果您是首次使用Arduino,我们强烈建议您参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +本示例中使用的库代码可以通过点击下面的图标进行下载。 + +

+ +#### 功能 + +在我们开始开发草图之前,让我们来看看这个库可用的功能。 + +- `void recvRadarBytes()` —— 此函数根据传感器数据协议中的帧头和帧尾,通过UART收集传感器报告的数据帧。与`showData()`函数一起使用,收集的数据信息可以通过串口打印出来。 + - **输入参数:** 无 + - **返回值:** 无 +- `void showData()` —— 此函数用于通过串口一次性打印出传感器报告的完整数据帧,需要与`recvRadarBytes()`函数一起使用。 + - **输入参数:** 无 + - **返回值:** 无 +- `void HumanExis_Func()` —— 此函数负责解析传感器的数据帧,并输出关于人体存在状态的相关数据。 + - **输入参数:** 无 + - **返回值:** + - `unsigned int sensor_report` —— 返回的值表示解析的数据帧属于哪个状态类别。具体的类别可以在**默认变量**部分找到。只有当发生变化时,才会报告人体移动信息。 + - `int bodysign_val` —— 返回的值代表人体运动参数的值。该值每秒报告一次。 + - `float distance` —— 传感器确定当前到人体的距离,值以米为单位。该值每两秒报告一次。 + - `float Dir_x, Dir_y, Dir_z` —— 表示传感器检测到的人体位置信息。人体位置信息有正负单位,以米为单位。该值每两秒报告一次。 + +- `void Breath_Heart()` —— 此函数负责解析传感器中的呼吸和心跳数据,并返回相关值。 + - **输入参数:** 无 + - **返回值:** + - `unsigned int sensor_report` —— 返回的值表示解析的数据帧属于哪个状态类别。具体的类别可以在**默认变量**部分找到。 + - `unsigned int heart_rate` —— 心跳数值。每3秒报告一次。数值范围0~100。 + - `unsigned int heart_point_1, heart_point_2, heart_point_3, heart_point_4, heart_point_5` —— 心跳波形数据。5个字节代表1秒内的5个实时值,波形是正弦波数据,中心轴为128,表示当心跳强度为0时,将显示为128。该值每秒报告一次。 + - `unsigned int breath_rate` —— 呼吸数值。每3秒报告一次。数值范围0~20。 + - `unsigned int breath_point_1, breath_point_2, breath_point_3, breath_point_4, breath_point_5` —— 呼吸波形数据。5个字节代表1秒内的5个实时值,波形是正弦波数据,中心轴为128,表示当呼吸强度为0时,将显示为128。该值每秒报告一次。 + +- `void SleepInf_Decode()` —— 此函数负责解析传感器报告的睡眠数据信息。只有当被监测的人已上床且入睡超过五分钟后,此函数才有效。在使用此函数时,请确保启用了睡眠状态转移模式。 + + - **输入参数:** 无 + - **返回值:** + - `unsigned int sensor_report` —— 返回的值表示解析的数据帧属于哪个状态类别。具体的类别可以在**默认变量**部分找到。 + - `unsigned int awake_time` —— 如果被监测的人已上床,此值表示其清醒时间。此值将与其他睡眠状态数据一起每十分钟报告一次。 + - `unsigned int light_time` —— 如果被监测的人已上床,此值表示其浅睡时间。此值将与其他睡眠状态数据一起每十分钟报告一次。 + - `unsigned int deep_time` —— 如果被监测的人已上床,此值表示其深睡时间。此值将与其他睡眠状态数据一起每十分钟报告一次。 + - `unsigned int sleep_score` —— 此值表示睡眠质量评分。此信息将在睡眠过程结束时报告。 + - `boolean existence` —— 该值表示人体存在信息。返回结果为True表示有人存在,返回结果为False表示无人存在。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int sleep_status` —— 此值表示睡眠状态。有四种睡眠状态,分别是:离床、清醒、浅睡和深睡。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int breath_rate` —— 十分钟内的平均呼吸率。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int heart_rate` —— 十分钟内的平均心率。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int turn_num` —— 十分钟内的翻身次数。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int substantial_move_ratio` —— 人物十分钟内大幅度运动所占的比例。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int small_move_ratio` —— 人物十分钟内小幅度运动的百分比。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int apnea_num` —— 十分钟内的呼吸暂停次数。此值将与其他睡眠状态数据一起每十分钟报告一次。 + + - `unsigned int sleep_time` —— 总睡眠时长(小时)。当传感器确定睡眠过程结束时报告。 + + - `unsigned int awake_time_ratio` —— 清醒时间所占的百分比。当传感器确定睡眠过程结束时报告。 + + - `unsigned int light_time_ratio` —— 浅睡时间所占的百分比。当传感器确定睡眠过程结束时报告。 + + - `unsigned int deep_time_ratio` —— 深睡时间所占的百分比。当传感器确定睡眠过程结束时报告。 + + - `unsigned int outbed_time` —— 离床时间。当传感器确定睡眠过程结束时报告。 + + - `unsigned int outbed_num` —— 离床次数。当传感器确定睡眠过程结束时报告。 + +- `void send_func(const unsigned char* buff, int len, bool cyclic /*=false*/)` —— 该函数用于发送查询帧和命令帧。 + - **输入参数:** + - `buff` —— 你想发送给传感器的数据帧。 + - `len` —— 你想发送给传感器的数据帧的长度。 + - `cyclic` —— 循环发送开关。默认值为false,如果你希望循环发送这个数据帧,可以设置为**true**。 + - **返回值:** 无 +- `void ModeSelect_func(int mode)` —— 该函数用于选择传感器的操作模式。有两种操作模式,即睡眠状态传输模式和实时数据传输模式。在睡眠状态传输模式下,睡眠监测功能开启(`SleepInf_Decode()`有效)。在实时数据传输模式下,睡眠监测功能关闭(`SleepInf_Decode()`无效),但会报告波形数据。 + - **输入参数:** + - `mode` —— 所选模式编号。1表示实时数据传输模式,2表示睡眠状态传输模式。 + - **返回值:** 无 +- `void reset_func()` —— 该函数用于重置传感器。 + - **输入参数:** 无 + - **返回值:** 无 + + +### 默认变量 + +```c +#define MESSAGE_HEAD1 0x53 //数据帧头1 +#define MESSAGE_HEAD2 0x59 //数据帧头2 + +#define MESSAGE_END1 0x54 //数据帧尾部1 +#define MESSAGE_END2 0x43 //数据帧尾部2 + +#define HUMAN_PSE_RADAR 0x80 //人类存在数据 + +#define PRESENCE_INF 0x01 //存在信息 +#define SOMEONE_HERE 0x01 //有人 +#define NOONE_HERE 0x00 //无人 + +#define MOVE_INF 0x02 //活动信息 +#define PSE_NONE 0x00 //无 +#define STATIONARY 0x01 //一个人是静止的 +#define MOVEMENT 0x02 //一个人是运动的 + +#define BODY_SIG 0x03 //人移动信息 + +#define DISTANCE 0x04 //与被检测人的距离 + +#define DIRECTIONS 0x05 //身体朝向 + +#define HEART_INF 0x85 //心率信息 + +#define HEART_RATE 0x02 //心率 + +#define HEART_RATE_WAVE 0x05 //心率波形(目前不进行分析) + +#define BREATH_RATE_RADAR 0x81 //呼吸心率数据 + +#define BREATH_INF 0x01 //呼吸数据 +#define BREATH_NORMAL 0x01 //正常呼吸 +#define BREATH_RAPID 0x02 //急性呼吸异常 +#define BREATH_SLOW 0x03 //心跳缓慢 +#define BREATH_NONE 0x04 //雷达未检测到任何物体 + +#define BREATH_VAL 0x02 //呼吸价值 + +#define BREATH_WAVE 0x05 //呼吸波形(目前不进行分析) + +#define SLEEP_INF 0x84 //睡眠信息 + +#define INOUT_BED 0x01 //在床上和不在床上 +#define OUT_BED 0x00 //离开床 +#define IN_BED 0x01 //上床 +#define INOUT_NONE 0x02 //无(实时检测模式下显示) + +#define SLEEP_STATE 0x02 //睡眠状态 +#define DEEP_SLEEP 0x00 //深度睡眠 +#define LIGHT_SLEEP 0x01 //浅睡 +#define AWAKE 0x02 //清醒 +#define SLEEP_NONE 0x03 //无(在实时检测模式下显示) + +#define AWAKE_TIME 0x03 //清醒时间 + +#define LIGHTSLEEP_TIME 0x04 //浅睡时间 + +#define DEEPSLEEP_TIME 0x05 //深度睡眠时间 + +#define SLEEP_SCORE 0x06 //睡眠质量分数 + +#define SLEEP_STATUE 0x0C //睡眠综合状态报告 + +#define SLEEP_QUALITY 0x0D //睡眠质量综合信息报告 + +#define SLEEP_ERROR 0x0E //异常睡眠报告 + +#define SLEEP_LESS4H 0x00 //睡眠时间少于4小时 +#define SLEEP_OVER12H 0x01 //睡眠时间超过4小时 +#define SLEEP_LONGTIMENOONE 0x02 //异常情况,长时间无人 +#define SLEEP_ERRORNONE 0x03 //无 + +#define reset_frame_len 10 //重置数据帧长度 +const unsigned char breath_reset_frame[10] = {0x53, 0x59, 0x01, 0x02, 0x00, 0x01, 0x0F, 0xBF, 0x54, 0x43}; + +#define mode_frame_len 10 //模式选择命令帧长度 +//模式选择命令帧 +const unsigned char realtime_mode_frame[10] = {0x53, 0x59, 0x84, 0x0F, 0x00, 0x01, 0x00, 0x40, 0x54, 0x43}; +const unsigned char sleepstatus_mode_frame[10] = {0x53, 0x59, 0x84, 0x0F, 0x00, 0x01, 0x01, 0x41, 0x54, 0x43}; + +//返回状态,用于Arduino +//sensor_report的可能值 +#define NOONE 0x01 +#define SOMEONE 0x02 +#define NONEPSE 0x03 +#define STATION 0x04 +#define MOVE 0x05 +#define BODYVAL 0x06 +#define DISVAL 0x07 +#define DIREVAL 0x08 + +#define HEARTRATEVAL 0x09 +#define HEARTRATEWAVE 0x10 +#define BREATHNOR 0x11 +#define BREATHRAPID 0x12 +#define BREATHSLOW 0x13 +#define BREATHNONE 0x14 +#define BREATHVAL 0x15 +#define BREATHWAVE 0x16 + +#define OUTBED 0x17 +#define INBED 0x18 +#define NOINOUT 0x19 +#define SLEEPAWAKE 0x20 +#define SLEEPLIGHT 0x21 +#define SLEEPDEEP 0x22 +#define SLEEPNONE 0x23 +#define AWAKETIME 0x24 +#define LIGHTTIME 0x25 +#define DEEPTIME 0x26 +#define SLEEPSCORE 0x27 +#define SLEEPSTATUE 0x28 +#define SLEEPQUALITY 0x29 +#define SLEEPLESS4H 0x30 +#define SLEEPOVER12H 0x31 +#define LONGTIMENOONE 0x32 +#define ERRORNONE 0x33 + + +unsigned int sensor_report = 0, bodysign_val = 0, awake_time = 0, light_time = 0, deep_time = 0, sleep_score = 0, turn_num = 0; +unsigned int heart_rate = 0, heart_point_1 = 0, heart_point_2 = 0, heart_point_3 = 0, heart_point_4 = 0, heart_point_5 = 0; +unsigned int breath_rate = 0, breath_point_1 = 0, breath_point_2 = 0, breath_point_3 = 0, breath_point_4 = 0, breath_point_5 = 0; +unsigned int substantial_move_ratio = 0, samll_move_ratio = 0, apnea_num = 0, sleep_status = 0, sleep_time = 0; +unsigned int awake_time_radio = 0, light_time_radio = 0, deep_time_radio = 0; +unsigned int outbed_time = 0, outbed_num = 0; +float distance = 0; +float Dir_x = 0, Dir_y = 0, Dir_z = 0; +boolean existence; +``` +### 安装步骤 +**第一步**。 你需要安装Arduino软件。 +

+ +**第二步**。 启动Arduino应用程序。 +
+ +**第三步**。 选择你的开发板型号,并将其添加到Arduino IDE中。 +- 如果你想在后续流程中使用**Seeeduino V4.2**,请参考[这个教程](https://wiki.seeedstudio.com/Seeed_Arduino_Boards/)以完成添加。 +- 如果你想在后续流程中使用**Seeeduino XIAO**,请参考[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)以完成添加。 +- 如果你想在后续流程中使用**XIAO RP2040**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)以完成添加。 +- 如果你想在后续流程中使用**XIAO BLE**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)以完成添加。 +- 如果你想在后续流程中使用**XIAO ESP32C3**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/#software-setup)以完成添加。 + +:::caution 注意 +对于**XIAO nRF52840**,请选择**Seeed nRF52 mbed-enabled Boards**,否则在运行程序时可能会报错。 +
+::: + +**第四步**。 安装Arduino代码库。 + +首先,从[GitHub](https://github.com/limengdu/Seeed-Studio-MR60BHA1-Sensor)获取代码库,并将其下载到本地计算机。 + +既然你已经下载了ZIP格式的库文件,打开你的Arduino IDE,点击**Sketch(草图)> Include Library(包含库)> Add .ZIP Library(添加.ZIP库)**。选择你刚刚下载的ZIP文件,如果库安装正确,你将在通知窗口中看到**Library added to your libraries(库已添加到你的库中)**,这意味着库已成功安装。 +
+ +## Arduino 示例 +既然我们已经安装了库并了解了基本功能,那么让我们运行一些XIAO BLE的示例来看看它的表现。 +### 所需材料 +在完成以下示例之前,你需要准备以下材料。 + +| | | | +|:--------------:|:--------------:|:--------------:| +|
|
|
| +|[**60GHz MR60BHA1 传感器**](https://www.seeedstudio.com/60GHz-mmWave-Radar-Sensor-Breathing-and-Heartbeat-Module-p-5305.html)|[**Seeed XIAO BLE nRF52840 感知板**](https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html?queryID=4bbd8c09f20216aa26f6b5a9040504d0&objectID=5253&indexName=bazaar_retailer_products)|**2mm to 2.54mm Pitch Ribbon Cable**| + +**第一步**。通过主板将设备连接到计算机。接线图如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
矽力特(Seeed Studio)XIAO nRF52840 开发板 + MR60BHA1 传感器
5V-->5V
GND-->GND
RX-->D6
TX-->D7
+ +**第二步**。在Arduino IDE左上角的菜单栏中,选择**工具**,选择你正在使用的开发板类型,并选择相应的串行端口。 + +:::tip提示 +如果你使用的是**MacOS**,设备的串行端口名称通常以**/dev/cu.usbmodem xxx**开头,以设备名称结尾。如果你使用的是**Windows**,设备的串行端口名称通常以**COM**开头,同样以设备名称结尾。 +::: +
+在本示例中,我们将展示雷达如何与我们的热门产品XIAO BLE配合使用。 + +### 示例1:原始数据导出 +本示例将指导你通过串口打印出传感器报告的原始数据。 +以下示例程序位于库的examples文件夹中,名为**MR60BHA1_print_rawdata**。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> +//#include +// 选择任意两个可以通过SoftwareSerial用于接收(RX)和发送(TX)的引脚 +//#define RX_Pin A2 +//#define TX_Pin A3 +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); +// 我们将使用软件串行通信 +//BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); +// 也可以尝试使用硬件串行通信进行 +BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1); +void setup() { + // 将你的初始化代码放在这里,只运行一次: + Serial.begin(115200); + Serial1.begin(115200); + // mySerial.begin(115200); + while(!Serial); //当串行端口打开时,程序开始执行。 + Serial.println("Readly"); +} +void loop() +{ + // 将你的主代码放在这里,它将反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串行端口打印出接收到的一系列数据帧 + delay(200); //添加时间延迟以避免程序堵塞 +} +``` +:::tip提示 +如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 更改为`Serial1.begin(115200)`;`Serial1.begin(115200, SERIAL_8N1, D7, D6)`; +::: + + +在这个程序中,我们使用了XIAO nRF52840的硬件**Serial1**端口来连接传感器,并使用硬件**Serial**端口(Serial)来输出数据,因此我们需要在初始化函数`Setup()`中单独初始化这个串行端口。 + +在主要的`loop()`函数中,我们使用`recvRadarBytes()`函数从传感器接收数据帧,然后使用`showData()`函数通过串行端口打印出接收到的数据帧。 + +在这个程序中,需要注意的是每两个数据帧的接收和输出之间有一个间隔,以避免主板发生堵塞。这个时间间隔不应少于**150毫秒**。 + +这意味着主板无法接收传感器报告的所有数据帧,但由于传感器报告的数据帧数量非常大且频繁,这并不影响使用传感器确定环境的准确性。 + +上传程序。将您的串行监视器打开到115200波特率,应该能看到结果。输出应该类似于下面的图片。 + +
+ +### 示例2:人体存在检测功能的使用 + +在这个示例中,我们将解释如何使用人体存在检测功能,并通过串行监视器在函数中打印出该功能的所有值。 + +以下示例程序位于库的examples文件夹中,名为**MR60BHA1_human_existence_inf_output**。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> + +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为接收(RX)和发送(TX)。 +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串口。 +//BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); + +// 也可以尝试使用硬件串口与……进行通信 +BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1); + +void setup() { + // 将您的初始化代码放在这里,确保它只运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + //将你的主要代码放在这里,以便反复运行: + radar.HumanExis_Func(); //人类存在信息输出 + if(radar.sensor_report != 0x00){ + switch(radar.sensor_report){ + case NOONE: + Serial.println("Nobody here."); + Serial.println("----------------------------"); + break; + case SOMEONE: + Serial.println("Someone is here."); + Serial.println("----------------------------"); + break; + case NONEPSE: + Serial.println("No human activity messages."); + Serial.println("----------------------------"); + break; + case STATION: + Serial.println("Someone stop"); + Serial.println("----------------------------"); + break; + case MOVE: + Serial.println("Someone moving"); + Serial.println("----------------------------"); + break; + case BODYVAL: + Serial.print("The parameters of human body signs are: "); + Serial.println(radar.bodysign_val, DEC); + Serial.println("----------------------------"); + break; + case DISVAL: + Serial.print("The sensor judges the distance to the human body to be: "); + Serial.print(radar.distance, DEC); + Serial.println(" m"); + Serial.println("----------------------------"); + break; + case DIREVAL: + Serial.print("The sensor judges the orientation data with the human body as -- x: "); + Serial.print(radar.Dir_x); + Serial.print(" m, y: "); + Serial.print(radar.Dir_y); + Serial.print(" m, z: "); + Serial.print(radar.Dir_z); + Serial.println(" m"); + Serial.println("----------------------------"); + break; + } + } + delay(200); //添加时间延迟以防止程序卡死 +} +``` +:::tip提示 +如果您使用的是 XIAO ESP32 系列,并且毫米波雷达没有数据反馈。您可以尝试将上面的代码从 更改为`Serial1.begin(115200)`;`Serial1.begin(115200, SERIAL_8N1, D7, D6)`; +::: + +在这个示例中,人体存在检测功能是通过`HumanExis_Func()`函数实现的。程序实现的基本逻辑是,`HumanExis_Func()`函数将传感器报告的状态信息赋值给`sensor_report`变量。然后,基于`sensor_report`的值,我们通过串行端口打印出该状态下的所有值。 + +请注意,`sensor_report`对应于缩进下的串行端口数据输出。例如,代表信号参数的`bodysign_val`变量仅在`sensor_report`为`BODYVAL`时有效,而在传感器报告的其他`sensor_reports`中则不存在。 + +上传程序。将您的串行监视器打开到115200波特率,应该能看到结果。输出应该类似于下面的图片。 + +
+ +### 示例3:静止人体呼吸和心跳功能的使用 + +在这个示例中,我们将使用`Breath_Heart()`函数来检测静止人体的呼吸和心率。 + +:::tip +我们强调的是对静止人体的呼吸和心率的检测。当人体处于运动状态时,请不要使用本产品,因为我们已经限制了传感器的心率和呼吸率。最大心率将**不会超过100**,最大呼吸率将**不会超过25**。 +::: + +以下示例程序位于库的examples文件夹中,名为**MR60BHA1_Breath_heartbeat_inf_output**。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> + +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为接收(RX)和发送(TX)。 +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串口。 +//BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); + +// 也可以尝试使用硬件串口与……进行通信 +BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1); + +void setup() { + // 将您的初始化代码放在这里,确保它只运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行 + + Serial.println("Readly"); + + // radar.ModeSelect_fuc(1); //1:表示实时传输模式,2:表示睡眠状态模式。 + //在设置模式后,如果没有看到返回的数据,您可能需要重新为传感器供电。 +} + +void loop() +{ + // 将你的主要代码放在这里,以便反复运行: + radar.Breath_Heart(); //呼吸和心跳信息输出 + if(radar.sensor_report != 0x00){ + switch(radar.sensor_report){ + case HEARTRATEVAL: + Serial.print("Sensor monitored the current heart rate value is: "); + Serial.println(radar.heart_rate, DEC); + Serial.println("----------------------------"); + break; + case HEARTRATEWAVE: //仅在实时数据传输模式开启时有效 + Serial.print("The heart rate waveform(Sine wave) -- point 1: "); + Serial.print(radar.heart_point_1); + Serial.print(", point 2 : "); + Serial.print(radar.heart_point_2); + Serial.print(", point 3 : "); + Serial.print(radar.heart_point_3); + Serial.print(", point 4 : "); + Serial.print(radar.heart_point_4); + Serial.print(", point 5 : "); + Serial.println(radar.heart_point_5); + Serial.println("----------------------------"); + break; + case BREATHNOR: + Serial.println("Sensor detects current breath rate is normal."); + Serial.println("----------------------------"); + break; + case BREATHRAPID: + Serial.println("Sensor detects current breath rate is too fast."); + Serial.println("----------------------------"); + break; + case BREATHSLOW: + Serial.println("Sensor detects current breath rate is too slow."); + Serial.println("----------------------------"); + break; + case BREATHNONE: + Serial.println("There is no breathing information yet, please wait..."); + Serial.println("----------------------------"); + break; + case BREATHVAL: + Serial.print("Sensor monitored the current breath rate value is: "); + Serial.println(radar.breath_rate, DEC); + Serial.println("----------------------------"); + break; + case BREATHWAVE: //仅在实时数据传输模式开启时有效 + Serial.print("The breath rate waveform(Sine wave) -- point 1: "); + Serial.print(radar.breath_point_1); + Serial.print(", point 2 : "); + Serial.print(radar.breath_point_2); + Serial.print(", point 3 : "); + Serial.print(radar.breath_point_3); + Serial.print(", point 4 : "); + Serial.print(radar.breath_point_4); + Serial.print(", point 5 : "); + Serial.println(radar.breath_point_5); + Serial.println("----------------------------"); + break; + } + } + delay(200); //添加时间延迟以防止程序卡死 +} +``` + +上传程序。将您的串行监视器打开到115200波特率,应该能看到结果。输出应该类似于下面的图片。 + +
+ +:::caution警告 +如果您想查看波形数据,请将传感器切换到实时数据传输模式。切换模式后,传感器可能需要重新上电才能生效。 +::: + +### 示例4:睡眠功能的使用 + +在这个示例中,我们将指导您如何使用`SleepInf_Decode()`函数获取睡眠相关信息。请确保您或测试人员在使用此示例前已准备好入睡。 + +:::tip提示 +默认情况下,传感器处于睡眠状态传输模式。在此模式下,睡眠监控功能已开启。如果您切换到实时数据传输模式,那么可能无法获取睡眠数据。如果您想更改传输模式,可以使用`ModeSelect_fuc()`函数进行操作。示例文件夹中的**MR60BHA1_Transfer_mode_selection**也提供了使用示例。切换模式后,传感器可能需要重新上电才能生效。 +与睡眠相关的数据需要在人员上床时报告,当前固件默认在人员状态持续5分钟后判断有人上床。 +::: + +以下示例程序位于库的examples文件夹中,名为**MR60BHA1_Sleep_inf_output**。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> + +//#include +// 选择任意两个可以与SoftwareSerial库一起使用的引脚作为接收(RX)和发送(TX) +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串口 +//BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); + +// 也可以尝试使用硬件串口与……进行通信 +BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1); + +void setup() { + // 将您的初始化代码放在这里,确保它只运行一次: + + + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + // 将你的主要代码放在这里,以便反复运行: + radar.SleepInf_Decode(); //与睡眠相关的信息输出。当监测对象躺在床上五分钟时,数据输出开始。 + if(radar.sensor_report != 0x00){ + switch(radar.sensor_report){ + case OUTBED: + Serial.println("Sensor detects someone currently leaving the bed."); + Serial.println("----------------------------"); + break; + case INBED: + Serial.println("Sensor detects that someone is currently in bed."); + Serial.println("----------------------------"); + break; + case NOINOUT: + Serial.println("No subject is detected leaving or going to bed."); + Serial.println("----------------------------"); + break; + case SLEEPAWAKE: + Serial.println("Sensor detects that the monitoring people is awake."); + Serial.println("----------------------------"); + break; + case SLEEPLIGHT: + Serial.println("Sensor detects that the monitoring people is in light sleeping."); + Serial.println("----------------------------"); + break; + case SLEEPDEEP: + Serial.println("Sensor detects that the monitoring people is in deep sleeping."); + Serial.println("----------------------------"); + break; + case SLEEPNONE: + Serial.println("Sleep state of the object is not detected."); + Serial.println("----------------------------"); + break; + case AWAKETIME: + Serial.print("Sensor monitored the awake sleep time is: "); + Serial.print(radar.awake_time); + Serial.println(" min"); + Serial.println("----------------------------"); + break; + case LIGHTTIME: + Serial.print("Sensor monitored the light sleep time is: "); + Serial.print(radar.light_time); + Serial.println(" min"); + Serial.println("----------------------------"); + break; + case DEEPTIME: + Serial.print("Sensor monitored the deep sleep time is: "); + Serial.print(radar.deep_time); + Serial.println(" min"); + Serial.println("----------------------------"); + break; + case SLEEPSCORE: + Serial.print("Sensor judgment sleep score is: "); + Serial.println(radar.sleep_score); + Serial.println("----------------------------"); + break; + case SLEEPSTATUE: + Serial.println("Sleep integrated state information -- "); + Serial.print("Human existence: "); + if(radar.existence)Serial.println("human exis"); + else Serial.println("human non-existent"); + Serial.print("Sleep state: "); + if(radar.sleep_status == SLEEPDEEP)Serial.println("sleeping soundly"); + else if(radar.sleep_status == SLEEPLIGHT)Serial.println("light sleep"); + else if(radar.sleep_status == SLEEPAWAKE)Serial.println("awake"); + else if(radar.sleep_status == SLEEPNONE)Serial.println("off the bed"); + Serial.print("Average breathing: "); + Serial.println(radar.breath_rate); + Serial.print("Average heart rate: "); + Serial.println(radar.heart_rate); + Serial.print("Number of turning over during sleep: "); + Serial.println(radar.turn_num); + Serial.print("Percentage of substantial exercise during sleep: "); + Serial.println(radar.substantial_move_ratio); + Serial.print("Percentage of small-amplitude movements during sleep: "); + Serial.println(radar.samll_move_ratio); + Serial.print("Number of apnea: "); + Serial.println(radar.apnea_num); + Serial.println("----------------------------"); + break; + case SLEEPQUALITY: + Serial.println("Quality of sleep information -- "); + Serial.print("Sleep score: "); + Serial.println(radar.sleep_score); + Serial.print("Total time of sleep: "); + Serial.print(radar.sleep_time); + Serial.println(" min"); + Serial.print("Percentage of waking time: "); + Serial.println(radar.awake_time_radio); + Serial.print("Percentage of light sleep time: "); + Serial.println(radar.light_time_radio); + Serial.print("Percentage of deep sleep time: "); + Serial.println(radar.deep_time_radio); + Serial.print("Total time away from bed: "); + Serial.print(radar.outbed_time); + Serial.println(" min"); + Serial.print("Total number of times out of bed: "); + Serial.println(radar.outbed_num); + Serial.print("The number of turning over during sleep: "); + Serial.println(radar.turn_num); + Serial.print("Average breathing: "); + Serial.println(radar.breath_rate); + Serial.print("Average heart rate: "); + Serial.println(radar.heart_rate); + Serial.print("Number of apnea: "); + Serial.println(radar.apnea_num); + Serial.println("----------------------------"); + break; + case SLEEPLESS4H: + Serial.print("The monitored subjects slept for less than 4 hours."); + Serial.println("----------------------------"); + break; + case SLEEPOVER12H: + Serial.print("The length of sleep of the monitored subjects exceeded 12 hours."); + Serial.println("----------------------------"); + break; + case LONGTIMENOONE: + Serial.print("Abnormally unoccupied for long periods of time."); + Serial.println("----------------------------"); + break; + case ERRORNONE: + Serial.print("No abnormal information."); + Serial.println("----------------------------"); + break; + } + } + delay(200); //添加时间延迟以防止程序卡死 +} +``` + +上传程序。将您的串行监视器打开到115200波特率,应该能看到结果。输出应该类似于下面的图片。 + +
+ +### 示例5:向传感器发送数据 + +根据用户手册中提供的详细信息,用户可以根据实际需求向传感器发送命令帧,以查询或设置传感器的某些状态或模式。 + +传感器库中的examples文件夹下名为**MR60BHA1_Send_frame**的.ino文件向我们展示了如何向传感器发送一个查询设备ID的程序。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> + +//#include +// 选择任意两个可以与SoftwareSerial库一起使用的引脚作为接收(RX)和发送(TX) +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串口。 +//BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); + +// 也可以尝试使用硬件串口与……进行通信 +BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1); + +const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x5F, 0x54, 0x43}; + +void setup() { + // put your setup code here, to run once: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + // 将你的主要代码放在这里,以便反复运行: + radar.send_func(DevID_buff, 10, false); + delay(50); //不要将延迟时间设置得太长,因为这可能会影响雷达返回的数据帧的接收。 +} +``` + +在这个示例程序中,你可以看到一个名为`DevID_buff[10]`的数组被定义,它用于存储查询设备ID的十六进制数,每个字节占用一个位置。 + +发送操作是通过`send_func()`函数完成的。传入的参数包括要发送的帧数组、数组的长度以及是否循环发送。 + +如果你需要发送自己的命令帧,那么你需要根据用户手册中提供的帧格式来定义正确的数组。 + +:::tip提示 +**关于校验位“sum”的计算**。 + +所有的数据帧都包含一个校验位,以确保数据发送或接收的准确性。校验位通常位于数据帧的倒数第二位。它是通过将校验位之前的所有位相加,并取十六进制下的低两位来计算的。 +以查询设备ID的数据帧为例: + +
+ +可以看到,校验位位于整个数据帧的倒数第二位。然后,我们从加总所有前面的十六进制数开始。 + +``` +0x53 + 0x59 + 0x02 + 0xA2 + 0x00 + 0x01 + 0x0F = 0x0160 +``` + +接着,我们需要取它的低两位,即**60**,所以这个数据帧的校验位就是**60**。如果我们想要查询传感器的ID,那么可以定义以下数组。 + +``` +const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x60, 0x54, 0x43}; +``` + +::: + +上传程序。将您的串行监视器打开到115200波特率,应该能看到结果。输出应该类似于下面的图片。 + +
+ +此时,请检查返回的数据帧,并确认它们是否与用户手册中描述的数据帧匹配。 + +通常,我们不需要重复向传感器发送命令,但由于传感器回复消息的速度非常快,我们无法确保能够接收到传感器返回的精确数据消息。针对这个问题,有两种解决方案。 + +- 多次重新上传上述程序。 +- 将`send_func()`函数的第三个参数(循环发送)设置为`true`。但请注意,反复发送设置类型的数据帧**可能会导致传感器堵塞**,因此请谨慎使用此功能。如果传感器卡住,请断开传感器的5V供电引脚,等待片刻以恢复功能。 + +### 示例6:重置传感器 + +有时,您的传感器在检测异常时可能出现问题,或者您想清除传感器上的所有设置,那么您可以根据此示例重置您的传感器。 + +以下示例程序位于库的examples文件夹中,名为**MR60BHA1_Reset_sensor**。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> + +//#include +// 选择任意两个可以与SoftwareSerial库一起使用的引脚作为接收(RX)和发送(TX)。 +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串口。 +//BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); + +// 也可以尝试使用硬件串口与……进行通信。 +BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1); + +void setup() { + // 将您的设置代码放在这里,确保它只运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行。 + + Serial.println("Readly"); + + radar.reset_func(); +} + +void loop() +{ + // 将你的主要代码放在这里,以便它可以反复运行: +} +``` + +重置传感器非常简单,您只需要调用`reset_func()`函数。重置只需要**执行一次**,因此我们在`Setup()`函数中使用它。 + +### 示例7:使用Arduino/Seeeduino + +我们的库与Arduino兼容,您还可以选择手头上的Arduino来开发您的传感器项目。 + +MR60BHA1传感器使用UART串行端口进行通信,您只需要按照下面的接线方式将传感器连接到Arduino上。 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MR60BHA1 传感器MCU
5V-->5V
GND-->GND
RX-->软件串行端口接收(TR)
TX-->软件串行端口发送(TX)
+ +所有函数的应用方式与上面Demo1到Demo6中的相同,因此我们在本示例中不再重复它们。在本示例中,我们将为您概述如何使用Arduino的软件串行端口从传感器获取数据信息。 + +:::tip提示 +关于Arduino软件串行端口的说明,请参阅[Arduino官方文档](https://docs.arduino.cc/learn/built-in-libraries/software-serial)。 +::: + +为了避免使用Serial同时进行输出和数据传输时造成的数据混淆,在Arduino端我们通常使用软件串行端口。 + +软件串行端口库的导入以及RX和TX引脚的定义需要在程序开始时完成。以下程序将**A2**和**A3**引脚定义为软件串行端口的**RX**和**TX**引脚。 + +```c +#include +//选择任何两个可以与SoftwareSerial库一起使用的引脚作为接收(RX)和发送(TX)。 +#define RX_Pin A2 +#define TX_Pin A3 + +SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +//我们将使用软件串口 +BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); +``` + +Also, don't forget to set the baud rate for the soft serial port in the `Setup()` function. + +```c +void setup() { + // 请将你的初始化代码放在这里,以确保只运行一次。 + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行。 + + Serial.println("Readly"); +} +``` + +以**Demo1**为例,如果您想使用Arduino打印传感器报告的数据帧,那么完整的程序如下。 + +```c +#include "Arduino.h" +#include <60ghzbreathheart.h> + +#include +// 选择任何两个可以与SoftwareSerial一起使用的引脚作为RX和TX +#define RX_Pin A2 +#define TX_Pin A3 + +SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串口 +BreathHeart_60GHz radar = BreathHeart_60GHz(&mySerial); + +void setup() { + // 在这里放置你的设置代码,使其只运行一次: + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //当串口被打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + // 在这里放置你的主要代码,使其反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串口打印出一组接收到的数据帧 + delay(200); //添加时间延迟以避免程序卡死 +} +``` + +### 示例8:直接与电脑连接获取数据 + +如果您想使用专为传感器设计的上位机,或者想使用串口软件来获取完整的数据帧,可以参考这个流程。 + +通过**UART转USB**设备将传感器直接连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UART 到 USBMR60BHA1 传感器
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ + +使用像串口调试助手这样的软件来选择传感器所在的串口。 + +
+ +:::caution警告 +MR60BHA1传感器需要5V的电源供应,否则传感器可能无法正常工作。 +::: + +连接成功后,您将看到传感器发送稳定的数据流。 + +
+ +同时,您也可以通过软件的发送功能向传感器发送数据帧。 + +
+ +:::caution警告 +如果您选择**ASCII**作为发送数据的格式,则每个数据集需要以**0x**为前缀。如果您选择**HEX**,那么每套数据不需要以**0x**为前缀。 +::: + +## 故障排除 + +### 常见问题1:这个传感器能在同一环境中同时检测到多个人吗? + +> 答:不可以。这个传感器只能用于单个生命体。如果监测范围内有多于一个人或动物,这将对监测结果产生影响。 + +### 常见问题2:为什么我在XIAO ESP32C3的串口监视器中看不到任何内容? + +> XIAO ESP32C3的串口功能与一般的Arduino硬件不完全一致,直接使用Serial1可能会导致USB串口无法工作。对于相关的应用案例,请查阅[XIAO ESP32C3的串口章节](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/#serial)以获取详细信息。 + +## 资源 + + - **[PDF]** [呼吸和心跳雷达传感器数据手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR60BHA1_Datasheet.pdf) + - **[PDF]** [呼吸和心跳雷达传感器用户手册-V1.9](https://files.seeedstudio.com/wiki/60GHzradar/new_res/MR60BHA1_user_manual-V1.9.pdf) + - **[PDF]** [呼吸和心跳雷达传感器用户手册-V2.3](https://files.seeedstudio.com/wiki/60GHzradar/new_res/MR60BHA1_userManual_V2.3.pdf) + - **[EXE]** [上位机软件_旧版本](https://files.seeedstudio.com/wiki/60GHzradar/Human-Vital-Sign-Radar.exe) + - **[EXE]** [上位机软件_新版本](https://files.seeedstudio.com/wiki/60GHzradar/MR60BHA1_new.exe) + - **[PPTX]** [Seeed毫米波雷达传感器系列V2.0](https://files.seeedstudio.com/wiki/mmWave-radar/Seeed-mmWave-sensor-series-V2.0.pptx) + - **[ZIP]** [60G雷达心跳3D模型](https://files.seeedstudio.com/wiki/mmWave-radar/60G-Radar-heartbeat-3D.zip) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您在使用我们的产品时能够尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60FDA1.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60FDA1.md new file mode 100644 index 0000000000000..bfd02445a364e --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60FDA1.md @@ -0,0 +1,998 @@ +--- +description: 60GHz mmWave Fall Detection Pro +title: 60GHz毫米波传感器 - 跌倒检测模块专业版 +keywords: +- mmWave_radar_sensor +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/Radar_MR60FDA1 +last_update: + date: 03/24/2024 + author: AnXiaodie +--- +# 60GHz毫米波传感器 - 跌倒检测模块专业版(MR60FDA1) + +
+ + + +## 引言 + +60GHz毫米波雷达传感器 - 跌倒检测模块专业版应用调频连续波(FMCW)检测理论,实现高精度地同时检测人体活动,包括移动、跌倒和静止状态,从而提供一个完全私密且安全的环境,独立于其他噪声干扰。它是私人财产监控、跌倒预警、老年人健康护理中的标准生物雷达系统,在家庭、酒店以及医院等场所表现良好。在本指南中,我们将向您介绍如何使用它。 + +### 应用领域 + +- 智能家居 +- 健康护理 +- 跌倒检测 +- 智能酒店 +- 医疗助手 + +### 特点 + +- 启用理论:基于60GHz调频连续波信号实现雷达检测 +- 先进的检测算法:在自适应环境中同时感应和输出人体活动,包括移动、跌倒和静止状态 +- 完美的隐私保护:采用FMCW监控技术,提供无需识别的监控能力 +- 健康友好的工作状态:输出功率低,对人体无害 +- 高稳定性:独立于温度、湿度、噪声、气流、灰尘、光线等环境因素的影响 +- 高测量精度:实现高达90%的跌倒检测精度和高达90%的存在感知功能精度 +- 高灵活性硬件设计雷达:支持二次开发,适应各种场景应用 + +### **规格说明** + +| 检测角度和距离 | 最小值 | 典型值 | 最大值 | 单位 | +|-----------------------------------|----------|----------|----------|-------| +| **内容 最小值 典型值 最大值 单位** | | | | | +| 人员检测的运动半径[1] | | 6 | | 米 | +| 跌倒监测半径[2] | | 3 | | 米 | +| 雷达检测角度(水平) | | 60 | | 度 | +| 雷达检测角度(俯仰) | | 60 | | 度 | +| 注:[1][2] 雷达悬挂高度2.8米,雷达投影半径。 | | | | | +| **电气特性** | | | | | +| 工作电压(VCC) | 4.5 | 5 | 6 | 伏 | +| 工作电流(ICC) | 90 | 93 | 100 | 毫安 | +| 工作温度(TOP) | -20 | | 60 | ℃ | +| 存储温度(TST) | -40 | | 80 | ℃ | +| **射频性能** | | | | | +| 工作频率(fTX) | 58 | | 63.5 | GHz | +| 发射功率(Pout) | | | 6 | dBm | + +## 硬件概述 + +在开始之前,了解产品的一些基本参数是非常必要的。以下表格提供了关于60GHz毫米波雷达传感器 - 跌倒检测专业版模块特性的信息。 + +
+ +- 接口1: + - 5V引脚是传感器的电源供应接口。 + - RX和TX是传感器的数据传输接口。RX代表串行接收,TX代表串行发送。 + - 人体存在状态输出接口。您可以通过这两个引脚的电平来判断当前环境中的人体运动情况。 + - GP2输出:高电平 - 有人,低电平 - 无人。 + - GP1输出:高电平 - 活动状态,低电平 - 静止状态。 +- 接口2: + - 固件烧录引脚:GND/3.3V/SWD/SWC。 + - 预留输入输出引脚:GP3~GP6。 + +## 入门指南 + +### 固件版本更新 + +毫米波雷达传感器经过长期的技术沉淀和用户提供的宝贵建议,我们一直在对原始产品进行迭代,以提供更准确、可靠的监测结果和更好的用户体验。 + +新出厂的传感器默认会搭载最新的固件,以确保用户能够体验到最新的产品功能。但是,为了照顾老用户的体验,我们在此提供最新的固件及更新方法,以确保您能够使用我们最新的技术。 + +#### 通用方法 - 使用J-link烧录固件 + +如果您遇到固件错误、雷达异常、固件故障等问题,使用此方法重新烧录固件是最有效的方法。 + +**下载最新固件** + +| 固件版本 | 下载地址 | +|:----------------:|:----------------:| +| Jlink_MR60FDA1-V0821.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/Jlink_MR60FDA1-230821.bin) | +| Jlink_MR60FDA1-V114.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/Jlink_MR60FDA1-V114.bin) | +| Jlink_MR60FDA1-V0728.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/Jlink_MR60FDA1-V0728.bin) | + +:::caution警告 + +1. 请仔细检查您的产品功能,请勿与其他毫米波雷达传感器混用刷写此固件,否则可能导致产品功能异常,后果需自行承担! +2. 请注意,不同的固件更新方式使用不同的固件内容,您所下载的是通过**J-link**烧录的固件。 +::: + +**将您的雷达更新到最新版本** + +**第一步.** 您需要准备一个**Jlink**和**MR60FDA1** 60GHz毫米波雷达传感器。 + +通过杜邦线将雷达和Jlink连接在一起,连接方式如下图所示。 + +
+ +**第二步.** 下载必要的软件和固件。 + +| 文件 | 下载地址 | +|:----------------:|:----------------:| +| JlinkV644e.rar | [下载](https://files.seeedstudio.com/wiki/60GHzradar/JlinkV644e.rar) | +| Pack_Segger_AT32F4xx_v1.3.3.zip | [下载](https://files.seeedstudio.com/wiki/60GHzradar/Pack_Segger_AT32F4xx_v1.3.3.zip) | + +**第三步.** 解压**JlinkV644e.rar**文件,并打开其中的**JLink_Windows_V644e.exe**文件。 + +按照默认选项进行安装。安装完成后,启动**J-Flash V6.44e**软件。 + +**第四步.** 安装芯片包。 + +解压**Pack_Segger_AT32F4xx_v1.3.3.zip**文件,并打开其中的**Segger_AT32F4xx_AddOn.exe**文件。 + +
+ +**Step5.** Create a new project. + +
+ +
+ +**第五步.** 创建一个新项目。 + +
+ +
+ +**第六步.** 将雷达固件(.bin文件)拖放到此软件中,将弹出一个窗口,我们只需使用默认的起始地址0x8000000。 + +
+ +**第七步.** 点击**Target** -> **Connect** + +
+ +当连接成功时,会显示“Connected successfully”。 + +
+ +擦除固件:**Target** -> **manual Programming** -> **Erase Chip** + +
+ +升级固件:**Target** -> **manual Programming** -> **Program & Verify** + +
+ +此时,固件更新已完成。 + +#### 通过UART更新固件 + +考虑到J-link的价格昂贵,对于大多数只需要更新雷达固件的用户来说,购买J-link太过奢侈,因此我们提供了一种通过UART更新的方法。 + +**下载最新固件** + +| 固件版本 | 下载地址 | +|:----------------:|:----------------:| +| UART_MR60FDA1-230821.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/UART_MR60FDA1-230821.bin) | +| UART_MR60FDA1-230728.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/UART_MR60FDA1-230728.bin) | +| UART_MR60FDA1-230227.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/UART_MR60FDA1-230227.bin) | +| UART_MR60FDA1-230915.bin | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/UART_MR60FDA1-230915.bin) | + +:::caution警告 + +1. 请仔细检查您的产品功能,请勿与其他毫米波雷达传感器混用刷写此固件,否则可能导致产品功能异常,后果需自行承担! +2. 请注意,不同的固件更新方式使用不同的固件内容,您所下载的是通过**UART**烧录的固件。 +3. 在使用UART升级固件之前,请确保您的雷达固件版本**至少为G60FD1SYv010102**,否则可能会使雷达失效,届时您将不得不使用J-link烧录固件才能使用! + +您可以通过向雷达发送命令`0x53 0x59 0x02 0xA4 0x00 0x01 0x0F 0x62 0x54 0x43`来查询固件版本号信息。雷达报告的数据将以字符串形式显示,您会看到类似于下面所示的效果。 + +`G60FD1SYv010104`是雷达报告的型号编号,其中`010104`是版本号。这意味着此传感器支持UART升级。 + +
+::: + +**将您的雷达更新到最新版本** + +**第一步**. 您需要准备一个**UART转USB转换器**和**MR60FDA1** 60GHz毫米波雷达传感器。 + +通过杜邦线将雷达和UART转USB转换器连接在一起,连接方式如下图所示。 + +
+ +**第二步**. 下载必要的软件和固件。 + +| 文件 | 下载地址 | +|:----------------:|:----------------:| +| PackageMake-v1.1.1.zip | [下载](https://files.seeedstudio.com/wiki/60GHzradar/new_res/PackageMake-v1.1.1.zip) | + +**第三步**. 解压PackageMake-v1.1.1.zip包,并打开其中的PackageMake-v1.1.1.exe文件。 + +将UART转USB转换器与连接到电脑的传感器相连,点击软件界面左上角的齿轮图案,选择端口号,将波特率设置为115200,然后点击右下角进行确认。(如果找不到端口号,请检查连接,然后点击左下角的刷新按钮重试) + +
+ +**第四步**. 连接传感器 + +按照上述说明设置完串口后,点击界面右上角的第二个图标,如果端口选择正确,您将看到雷达的原始数据被打印出来。 + +
+ +**第五步**. 更新固件 + +鼠标左键点击界面右上角的最后一个图标,这将弹出一个窗口来选择固件。请选择您已下载的固件版本。 + +
+ +选择完成后,所选文件的路径将出现在软件下方,请再次检查所选的固件版本和型号是否与您使用的传感器一致。 + +
+ +要升级固件,请在软件左上角最后一个图像上双击鼠标左键,然后固件将开始下载到传感器。 + +
+ +
+ +等待进度条完成,固件更新即完成。 + +### 上位机的使用 + +通过**UART转USB**设备将传感器直接连接到电脑的USB端口。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UART 到 USBMR60FDA1 传感器
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ +除了上述串口软件外,您还可以使用专门为雷达设计的[上位机软件](https://files.seeedstudio.com/wiki/60GHzradar/Fall_detection_radar.zip)。 + +以下两节将解释软件中各部分的作用。 + +
+ +- **工作区** + + 上位机的所有功能仅在工作区显示。显示的主要内容集中在工作区的顶部。 + + **状态**:显示是否有人在场,是移动还是静止。 + + **跌倒状态**:跌倒状态将以人物动画的形式呈现。图片中的状态为未跌倒,如果有人跌倒,则会显示一个人跌倒的动画图片。 + + **设置**:用于设置传感器连接到电脑的端口号。通常,当传感器通过UART转USB连接到电脑时,需要点击**刷新**按钮刷新端口,然后选择新出现的端口号,然后点击**打开**按钮,最后点击**开始**按钮启用监控功能。 + + **安装高度/cm**:指安装高度。为确保跌倒检测的准确性,请按照以下方式准确安装传感器。请将其安装在顶部!雷达应垂直安装,水平偏差角≤5°,以确保雷达主波束覆盖检测区域;建议雷达的安装高度为2m≤H≤3m。雷达前方无明显遮挡物。受雷达安装高度和雷达波束范围的影响,此安装模式下移动人体的最大检测半径为R3≈3米;静止人体的最大检测半径为R2≈2.25米;跌倒检测半径为R1≤2米。 + + 例如,如果我的安装高度是2.6米,那么我应该填入260并点击**发送**按钮。 + +- **无效区域** + + 该区域目前不起作用,仅作为预留界面。 + +:::caution警告 +请注意,这款雷达目前不支持测距、测速或点云功能! +::: + +## 使用Arduino进行传感器开发 + +### Arduino库概述 + +:::tip提示 +如果您是第一次使用Arduino,我们强烈建议您参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +您可以通过点击下面的图标来下载本示例中使用的库代码。 + + +

+ +功能 + + 在我们开始开发草图之前,让我们先了解一下库中可用的功能。 + + - `void recvRadarBytes()` —— 这个函数根据传感器数据协议中的帧头和帧尾,通过UART收集传感器报告的数据帧。与`showData()`函数一起使用,可以将收集到的数据信息通过串口打印出来。 + - **输入参数:** 无 + - **返回值:** 无 + - `void showData()` —— 这个函数的作用是一次性地将传感器报告的完整数据帧通过串口打印出来,需要配合`recvRadarBytes()`函数一起使用。 + - **输入参数:** 无 + - **返回值:** 无 + - `void HumanExis_Func()` —— 这个函数负责解析传感器的数据帧,并输出关于人体存在状态的相关数据。 + - **输入参数:** 无 + - **返回值:** + - `unsigned int sensor_report` —— 返回的值表示解析后的数据帧所属的状态类别。具体的类别可以在**默认变量**部分找到。只有当发生变化时,才会报告人体移动信息。 + - `int bodysign_val` —— 返回的值代表人体运动参数的值。该值每秒报告一次。 + - `void Fall_Detection()` —— 这个函数用于解析并返回跌倒检测的结果。检测结果存储在变量sensor_report中。 + + - **输入参数:** 无 + - **返回值:** - `unsigned int sensor_report` —— 返回的值表示解析后的数据帧所属的状态类别。具体的类别可以在**默认变量**部分找到。只有当跌倒状态发生变化时,才会报告跌倒信息。 + - `void send_func(const unsigned char* buff, int len, bool cyclic /*=false*/)` —— 该函数用于发送查询帧和命令帧。 + - **输入参数:** + - `buff` —— 你想要发送给传感器的数据帧。 + - `len` —— 你想要发送给传感器的数据帧的长度。 + - `cyclic` —— 循环发送开关。默认值为false,如果你希望循环发送这个数据帧,可以设置为**true**。 + - **返回值:** 无 + - `void reset_func()` —— 该函数用于重置传感器。 + - **输入参数:** 无 + - **返回值:** 无 + + ### 默认变量 + + +```c +#define MESSAGE_HEAD1 0x53 //数据表头1 +#define MESSAGE_HEAD2 0x59 //数据表头2 + +#define MESSAGE_END1 0x54 //数据框末端1 +#define MESSAGE_END2 0x43 //数据框末端2 + +#define HUMAN_PSE_RADAR 0x80 //人类在场数据 + +#define PRESENCE_INF 0x01 //在场信息 +#define SOMEONE_HERE 0x01 //这里有人 +#define NOONE_HERE 0x00 //这里没人 + +#define MOVE_INF 0x02 //活动信息 +#define PSE_NONE 0x00 //无人 +#define STATIONARY 0x01 //一个人是静止的 +#define MOVEMENT 0x02 //一个人是运动的 + +#define BODY_SIG 0x03 //身体运动信息 + +#define MOVE_DIS 0x0E //确定运动发生的距离 + +#define FALL_DETECTION 0x83 //跌倒数据标记 + +#define FALL_STATE 0x01 //跌倒状态标记 +#define NO_FALL 0x00 //未检测到跌倒 +#define FALLING 0x01 //检测到跌倒 + +#define RESIDENT_STATE 0x05 //居民身份 +#define NO_RESIDENT 0x00 //无固定居所 +#define RESIDENT 0x01 //有一个固定居所 + +#define reset_frame_len 10 //重置数据帧长度” +//重置数据帧 +const unsigned char fall_reset_frame[10] = {0x53, 0x59, 0x01, 0x02, 0x00, 0x01, 0x0F, 0xBF, 0x54, 0x43}; + +//返回状态,在Arduino中使用 +#define NOONE 0x01 +#define SOMEONE 0x02 +#define NONEPSE 0x03 +#define STATION 0x04 +#define MOVE 0x05 +#define BODYVAL 0x06 +#define MOVEDIS 0x07 + +#define NOFALL 0x08 +#define FALL 0x09 +#define NORESIDENT 0x10 +#define RESIDENCY 0x11 + +unsigned int sensor_report = 0, bodysign_val = 0, total_detect = 0, height_0005 = 0, height_0510 = 0, height_1015 = 0, height_1520 = 0; +``` +### 安装 + +**第一步**。 你需要安装Arduino软件。 + +

+ +**第二步**。 启动Arduino应用程序。 + +
+ +**第三步**。 选择你的开发板型号并将其添加到Arduino IDE中。 + +- 如果你打算在后续例程中使用**Seeeduino V4.2**,请参考[这个教程](https://wiki.seeedstudio.com/Seeed_Arduino_Boards/)来完成添加。 +- 如果你打算在后续例程中使用**Seeeduino XIAO**,请参考[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)来完成添加。 +- 如果你打算在后续例程中使用**XIAO RP2040**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)来完成添加。 +- 如果你打算在后续例程中使用**XIAO BLE**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)来完成添加。 +- 如果你打算在后续例程中使用**XIAO ESP32C3**,请参考[这个教程](https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/#software-setup)来完成添加。 + +:::caution 注意 +对于**XIAO nRF52840**,请选择**Seeed nRF52 mbed-enabled Boards**,否则在运行程序时可能会报错。 +
+::: + +**第四步**。 安装Arduino代码库。 + +首先,从[GitHub](https://github.com/limengdu/Seeed-Studio-MR60FDA1-Sersor)获取代码库,并将其下载到你的本地计算机上。 +既然你已经下载了zip格式的库文件,接下来打开你的Arduino IDE,点击**文件(Sketch)> 包含库(Include Library)> 添加.ZIP库(Add .ZIP Library)**。选择你刚才下载的zip文件,如果库安装正确,你会在通知窗口中看到**库已添加到你的库中**。这意味着库已成功安装。 + +现在,你可以在Arduino IDE中编写代码并调用这个库提供的函数和变量了。请确保按照库的文档或示例代码来正确使用库中的功能。如果你遇到任何问题或需要进一步的帮助,可以查阅库的文档、社区论坛或相关教程。 +
+ +## Arduino 示例 + +既然我们已经安装了库并理解了基本功能,那么让我们运行一些针对XIAO BLE的示例,看看它的表现如何。 + +### 所需材料 + +在完成以下示例之前,你需要准备以下材料。 + +| | | | +|:--------------:|:--------------:|:--------------:| +|
|
|
| +|[**60GHz毫米波雷达传感器**](https://www.seeedstudio.com/60GHz-mmWave-Radar-Sensor-Fall-Detection-Module-Pro-p-5375.html)|[**Seeed XIAO BLE nRF52840 感知开发板**](https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html?queryID=4bbd8c09f20216aa26f6b5a9040504d0&objectID=5253&indexName=bazaar_retailer_products)|**2mm to 2.54mm Pitch Ribbon Cable**| + +**第一步**。通过主板将设备连接到计算机。接线图如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Seeed Studio XIAO nRF52840MR60FDA1 传感器
5V-->5V
GND-->GND
RX-->D6
TX-->D7
+ +**第二步**。在Arduino IDE左上角菜单栏中,选择**工具**,然后选择你正在使用的开发板类型,并选择对应的串口。 + +:::tip提示 +如果你使用的是**MacOS**,设备的串口名称通常以**/dev/cu.usbmodem xxx**开始,以设备名称结尾。如果你使用的是**Windows**,设备的串口名称通常以**COM**开始,同样以设备名称结尾。 +::: +
+ +在这个示例中,我们将演示雷达如何与我们热门产品XIAO BLE配合使用。 + +### 示例1:原始数据导出 + +本示例将指导你通过串口打印出传感器报告的原始数据的过程。 + +库中的示例文件夹中包含一个名为**MR60FDA1_print_rawdata**的示例程序,以下就是这个程序的内容。 + +```c +#include "Arduino.h" +#include <60ghzfalldetection.h> +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为RX(接收)和TX(发送) +//#define RX_Pin A2 +//#define TX_Pin A3 +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); +// 我们将使用软件串行通信 +//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); +// 也可以尝试使用硬件串行通信与.. +FallDetection_60GHz radar = FallDetection_60GHz(&Serial1); +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + Serial1.begin(115200); + // mySerial.begin(115200); + while(!Serial); //当串行端口打开时,程序开始执行。 + Serial.println("Readly"); +} +void loop() +{ + // 请在这里放置您的主代码,它将反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串行端口打印一组接收到的数据帧 + delay(200); //添加时间延迟以避免程序卡顿 +} +``` + +在此程序中,我们使用XIAO nRF52840的硬件**Serial1**端口连接传感器,并使用硬件**Serial**端口(即Serial)输出数据,因此我们需要在初始化函数`Setup()`中单独初始化这个串口。 + +在主要的`loop()`函数中,我们使用`recvRadarBytes()`函数从传感器接收数据帧,然后使用`showData()`函数通过串口打印出接收到的数据帧。 + +在此程序中,需要注意的是,每两个数据帧的接收和输出之间有一个间隔,以避免主板发生拥堵。这个时间间隔应不少于**150毫秒**。 + +这意味着主板无法接收传感器报告的所有数据帧,但由于传感器报告的数据帧数量很大且频繁,这并不影响使用传感器确定环境的准确性。 + +上传程序后,打开你的串口监视器,并将波特率设置为115200,应该可以看到结果。输出应该类似于下面的图像。 + +
+ +### 示例2:人体存在检测功能的使用 + +在本示例中,我们将解释如何使用人体存在检测功能,并通过串口监视器在函数中打印出此功能的所有值。 + +库中的示例文件夹中包含一个名为**MR60FDA1_human_existence_inf_output**的示例程序,以下就是这个程序的内容。 + +```c +#include "Arduino.h" +#include <60ghzfalldetection.h> + +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为RX(接收)和TX(发送) +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信 +//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); + +// 也可以尝试使用硬件串行通信与... +FallDetection_60GHz radar = FallDetection_60GHz(&Serial1); + +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + // 请在这里放置您的主代码,它将反复运行。 + radar.HumanExis_Func(); //人类存在信息输出 + if(radar.sensor_report != 0x00){ + switch(radar.sensor_report){ + case NOONE: + Serial.println("Nobody here."); + Serial.println("----------------------------"); + break; + case SOMEONE: + Serial.println("Someone is here."); + Serial.println("----------------------------"); + break; + case NONEPSE: + Serial.println("No human activity messages."); + Serial.println("----------------------------"); + break; + case STATION: + Serial.println("Someone stop"); + Serial.println("----------------------------"); + break; + case MOVE: + Serial.println("Someone moving"); + Serial.println("----------------------------"); + break; + case BODYVAL: + Serial.print("The parameters of human body signs are: "); + Serial.println(radar.bodysign_val, DEC); + Serial.println("----------------------------"); + break; + } + } + delay(200); //添加时间延迟以避免程序卡顿或阻塞 +} +``` + +在这个示例中,人体存在检测功能是通过`HumanExis_Func()`函数实现的。程序实现的基本逻辑是,`HumanExis_Func()`函数将传感器报告的状态信息赋值给`sensor_report`变量。然后,根据`sensor_report`的值,我们通过串口打印出该状态下的所有值。 + +请注意,`sensor_report`对应的是缩进下的串口数据输出。例如,代表信号参数的`bodysign_val`变量仅在`sensor_report`为`BODYVAL`时有效,而在传感器报告的其他`sensor_reports`中则不存在。 + +上传程序后,打开你的串口监视器,并将波特率设置为115200,应该可以看到结果。输出应该类似于下面的图像。 + +
+ +### 示例3:人体跌倒检测 + +在本示例中,我们将使用`Fall_Detection()`函数来检测人体跌倒。 + +:::tip提示 +跌倒状态输出的原理是,只有当传感器检测到跌倒状态发生变化时,才会有内容输出。 +::: + +库中的示例文件夹中包含一个名为**MR60FDA1_Fall_detection**的示例程序,以下就是这个程序的内容。 + +```c +#include "Arduino.h" +#include <60ghzfalldetection.h> + +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为接收(RX)和发送(TX)引脚 +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// “我们将使用软件串行通信” +//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); + +// 也可以尝试使用硬件串行通信 +FallDetection_60GHz radar = FallDetection_60GHz(&Serial1); + +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + // 请在这里放置您的主代码,它将反复运行: + radar.Fall_Detection(); //接收雷达数据并开始处理 + if(radar.sensor_report != 0x00){ + switch(radar.sensor_report){ + case NOFALL: + Serial.println("The sensor detects this movement is not a fall."); + Serial.println("----------------------------"); + break; + case FALL: + Serial.println("The sensor detects a fall."); + Serial.println("----------------------------"); + break; + case NORESIDENT: + Serial.println("The sensors did not detect anyone staying in place."); + Serial.println("----------------------------"); + break; + case RESIDENCY: + Serial.println("The sensor detects someone staying in place."); + Serial.println("----------------------------"); + break; + } + } + delay(200); //添加时间延迟以避免程序卡顿 +} +``` + +在跌倒检测功能中,还包括一个停留检测功能。这个功能的主要作用是辅助用户或传感器确定人体是否跌倒。当垂直方向的加速度发生剧烈变化后,一段时间内没有人体活动时(即停留在原地),传感器有很大可能性会判定有人跌倒且失去意识。 + +### 示例4:向传感器发送数据 + +根据用户手册中提供的详细信息,用户可以根据实际需求向传感器发送命令帧,以查询或设置传感器的某些状态或模式。 + +在传感器库的示例文件夹中,名为**MR60FDA1_Send_frame**的.ino文件向我们展示了如何向传感器发送一个查询设备ID的程序。 + +```c +#include "Arduino.h" +#include <60ghzfalldetection.h> + +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为RX(接收)和TX(发送) +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信 +//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); + +// 也可以尝试使用硬件串行通信 +FallDetection_60GHz radar = FallDetection_60GHz(&Serial1); + +const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x5F, 0x54, 0x43}; + +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Readly"); +} + +void loop() +{ + // 请在这里放置您的主代码,它将反复运行: + radar.send_func(DevID_buff, 10, false); + delay(50); //不要将延迟时间设置得太长,因为这可能会影响雷达返回数据帧的接收。 +} +``` + +在这个示例程序中,你可以看到一个名为`DevID_buff[10]`的数组被定义,它用于存储查询设备ID的十六进制数,每个字节占一个位置。 + +发送操作是通过`send_func()`函数完成的。传入的参数包括要发送的帧数组、数组的长度以及是否循环发送。 + +如果你需要发送自己的命令帧,那么你需要根据用户手册中提供的帧格式来定义正确的数组。 + +:::tip提示 +**关于校验位“sum”的计算**。 + +所有数据帧都有一个校验位,以确保数据能够准确发送或接收。校验位通常位于数据帧的倒数第二个位。它是通过将校验位之前的所有位相加,并取十六进制数的低两位来计算的。 +以查询设备ID的数据帧为例,我们可以这样计算: + +
+ +可以看出,校验位位于整个数据帧的倒数第二个位。然后,我们从加总所有前面的十六进制数开始。 + +``` +0x53 + 0x59 + 0x02 + 0xA2 + 0x00 + 0x01 + 0x0F = 0x0160 +``` + +然后我们需要取它的低两位,即**60**,所以这个数据帧的校验码就是**60**。如果我们想要查询传感器的ID,那么可以定义以下数组。 + +``` +const unsigned char DevID_buff[10] = {0x53, 0x59, 0x02, 0xA1, 0x00, 0x01, 0x0F, 0x60, 0x54, 0x43}; +``` + +::: + +上传程序后,打开你的串口监视器,并将波特率设置为115200,应该可以看到结果。输出应该类似于下面的图像。 + +
+ +此时,请检查返回的数据帧,并确认它们是否与用户手册中描述的数据帧匹配。 + + 通常,我们不需要重复向传感器发送命令,但由于传感器回复消息的速度非常快,我们无法确保能够接收到传感器返回的准确数据消息。针对这个问题,有两种解决方案。 + + - 多次重复上传上述程序。 + - 将`send_func()`函数的第三个参数(循环发送)设置为`true`。但请注意,反复发送设置类型的数据帧**可能会导致传感器卡死**,因此请谨慎使用此功能。如果传感器卡住,请断开传感器的5V供电引脚,并等待片刻,以便传感器功能恢复。 + +### 示例5:重置传感器 + +有时你可能会遇到传感器检测异常的问题,或者你想要清除传感器上的所有设置,这时你可以根据这个示例来重置你的传感器。 + +以下示例程序位于库中的示例文件夹内,名为**MR60FDA1_Reset_sensor**。 + +```c +#include "Arduino.h" +#include <60ghzfalldetection.h> + +//#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为RX(接收)和TX(发送) +//#define RX_Pin A2 +//#define TX_Pin A3 + +//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信 +//FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); + +// 也可以尝试使用硬件串行通信 +FallDetection_60GHz radar = FallDetection_60GHz(&Serial1); + +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + Serial1.begin(115200); + + // mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行 + + Serial.println("Readly"); + + radar.reset_func(); +} + +void loop() +{ + // 请在这里放置您的主代码,它将反复运行: +} +``` + +重置传感器非常简单,你只需要调用`reset_func()`函数。重置操作**只需执行一次**,因此我们将其用在`Setup()`函数中。 + +### 示例6:使用Arduino/Seeeduino + +我们的库与Arduino兼容,你也可以选择你手头已有的Arduino来开发你的传感器项目。 + +MR60FDA1传感器通过UART串口进行通信,你只需要按照下面的接线方式将传感器连接到Arduino上即可。 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MR60FDA1 传感器MCU
5V-->5V
GND-->GND
RX-->soft serial port TX
TX-->soft serial port RX
+ +所有函数的使用方式与上面示例1到示例5中的方式相同,因此在这个示例中我们不再重复。在这个示例中,我们将向你概述如何使用Arduino的软串口从传感器获取数据信息。 + +:::tip提示 +关于Arduino软串口的说明,请参考[Arduino官方文档](https://docs.arduino.cc/learn/built-in-libraries/software-serial)。 +::: + +为了避免使用Serial进行输出和数据传输时造成的数据混乱,在Arduino端我们通常使用软串口。 + +软串口库的导入以及RX和TX引脚的定义需要在程序的早期进行。以下程序将**A2**和**A3**引脚定义为软串口的**RX**和**TX**引脚。 + +```c +#include +//选择任意两个可以与SoftwareSerial一起使用的引脚作为RX(接收)和TX(发送) +#define RX_Pin A2 +#define TX_Pin A3 + +SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +//我们将使用软件串行通信 +FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); +``` + +同时,不要忘了在`Setup()`函数中设置软串口的波特率。 + +```c +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行。 + + Serial.println("Readly"); +} +``` + +以**示例1**为例,如果你想使用Arduino打印传感器报告的数据帧,那么完整的程序如下。 + +```c +#include "Arduino.h" +#include <60ghzfalldetection.h> + +#include +// 选择任意两个可以与SoftwareSerial一起使用的引脚作为RX(接收)和TX(发送) +#define RX_Pin A2 +#define TX_Pin A3 + +SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin); + +// 我们将使用软件串行通信 +FallDetection_60GHz radar = FallDetection_60GHz(&mySerial); + +void setup() { + // 请在这里放置您的设置代码,它将运行一次: + Serial.begin(115200); + + mySerial.begin(115200); + + while(!Serial); //当串行端口打开时,程序开始执行 + + Serial.println("Readly"); +} + +void loop() +{ + // 请在这里放置您的主代码,它将反复运行: + radar.recvRadarBytes(); //接收雷达数据并开始处理 + radar.showData(); //串行端口打印出一组接收到的数据帧 + delay(200); //添加时间延迟以避免程序卡顿 +} +``` + +### 示例7:直接与电脑连接获取数据 + +如果你想使用为传感器设计的上位机,或者想通过串口软件获取完整的数据帧,你可以参考这个例程。 + +通过**UART转USB**设备将传感器直接连接到电脑的USB端口上。接线方式如下表所示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UART 到 USBMR60FDA1 传感器
5V-->5V
GND-->GND
RX-->TX
TX-->RX
+ + +使用诸如串口调试助手这样的软件来选择传感器所在的串口。 + +
+ +:::caution警告 +MR60FDA1传感器需要5V电源供电,否则传感器可能无法正常工作。 +::: + +连接成功后,你将看到传感器持续发送一系列的消息。 + +
+ +同时,你也可以通过软件的发送功能向传感器发送数据帧。 + +
+ +:::caution警告 +如果选择**ASCII**作为发送数据的格式,每个数据集前需要加上**0x**前缀。如果选择**HEX**,则每组数据前不需要加上**0x**前缀。 +::: + +## 故障排除 + +### 常见问题1:这个传感器能否在同一环境中同时检测到多个人? + +> 答:不可以。这个传感器只能用于单个生命体。如果监测范围内有多个人或动物,这将影响监测结果。 + +### FAQ2:为什么我在XIAO ESP32C3的串口监视器中看不到任何内容? + +> XIAO ESP32C3的串口功能与一般的Arduino硬件并不完全一致,直接使用Serial1可能会导致USB串口无法工作。对于相关应用案例,请前往[XIAO ESP32C3的串口章节](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/#serial)查看详细信息。 + +## 资源 + +- **[PDF]** [通用协议](https://files.seeedstudio.com/wiki/60GHzradar/60GHz_mmWave_Sensor_Fall_Detection_Module_Pro-Universal_Protocol.pdf) +- **[PDF]** [用户手册V1.3](https://files.seeedstudio.com/wiki/60GHzradar/new_res/MR60FDA1_user_manual-V1.3.pdf) +- **[PDF]** [Seeed Studio毫米波传感器外壳设计](https://files.seeedstudio.com/wiki/60GHzradar/Seeed_Studio_MMWave_Sensor-Case_Design.pdf) +- **[EXE]** [上位机软件](https://files.seeedstudio.com/wiki/60GHzradar/Fall_detection_radar.zip) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您在使用我们的产品时能够尽可能顺畅。我们提供多种沟通渠道,以满足不同偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-mmwave_radar_Intro.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-mmwave_radar_Intro.md new file mode 100644 index 0000000000000..93a582eddfb5f --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/cn-mmwave_radar_Intro.md @@ -0,0 +1,56 @@ +--- +description: mmWave Radar Sensor Guide +title: 毫米波雷达传感器指南 +keywords: +- Grove +image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png +slug: /cn/mmwave_radar_Intro +last_update: + date: 03/22/2024 + author: Matthew +--- + +- ## 不同类型的毫米波雷达传感器 + + - 左侧展示了我们不同类型的毫米波雷达传感器。 + - 以下是毫米波雷达传感器的全景图: + + + + +## ✨ 贡献者项目 + +- 我们有一个更新此页面的任务列表,该列表归类于我们的[贡献者项目](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=30957479),因为我们致力于通过开发我们的wiki平台来提升用户体验和提供更好的支持。 +- [您对此页面的贡献](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=33962026)对我们来说至关重要!我们非常看重您的意见,并非常感谢您的帮助和提供的想法。 + +## 技术支持与产品讨论 + +
+ +感谢您选择我们的产品!我们致力于为您提供不同形式的技术支持,以确保您在使用我们的产品时能够拥有尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao-connect-to-HA.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao-connect-to-HA.md new file mode 100644 index 0000000000000..fe22d48ae8eab --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao-connect-to-HA.md @@ -0,0 +1,136 @@ +--- +description: Introduction of how the mmWave Sensor connect to HA. +title: 通过蓝牙将XIAO的毫米波雷达数据传输到Home Assistant(家庭助手) +keywords: +- mmwave +- radar +image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png +slug: /cn/mmwave_for_xiao_to_ha_bt +last_update: + date: 03/21/2024 + author: AnXiaodie +--- + +# 通过蓝牙将XIAO的毫米波雷达数据传输到Home Assistant(家庭助手) + +
+ +## 简介 + +XIAO 24GHz毫米波传感器 - 人体静态检测是Seeed Studio XIAO系列的一个扩展板。它是一个集成了天线、高灵敏度的毫米波传感器,基于FMCW(调频连续波)原理。结合传感器信号处理技术和精确的人体感应算法,它能够识别运动中或静止状态下的人体。 + +本章主要介绍如何将XIAO 24GHz毫米波传感器通过蓝牙连接到HA(Home Assistant,家庭助手)。关于XIAO 24GHz毫米波传感器的详细功能特性,您可以参考[这里](https://wiki.seeedstudio.com/mmwave_for_xiao/)。 + +:::caution注意 +本Wiki的所有内容仅适用于XIAO 24GHz毫米波传感器,并不适用于其他毫米波传感器。 +::: + +## 开始使用 + +### 硬件准备 + +在本文中,我们将使用XIAO的毫米波传感器与XIAO ESP32C3配合使用,并将其插入Home Assistant中,以便美观和易于布线。如果您想严格按照本教程进行操作,那么您需要准备以下模块。 + + + + + + + + + + + + + + +
Seeed Studio XIAO ESP32C324GHz mmWave for XIAO
+ + +该传感器专为与XIAO兼容而设计,因此,通常如果您想使用此传感器,您需要准备一个XIAO,并为传感器安装母排针。当连接到XIAO时,请特别注意传感器的安装方向,请勿反向插入,否则可能会烧毁传感器或XIAO。 + +:::caution注意 +正确的方向是传感器的天线应朝向外部。 +::: + +
+ +确认连接方向正确后,您可以将USB-C型电缆连接到电脑或3.3V电源,传感器将开始工作。 + +:::tip提示 +如果您手头暂时没有XIAO,您可以选择将TTL连接到其3.3V引脚和GND引脚,为XIAO的毫米波传感器单独供电,这也可以按照本教程的内容进行。对于本教程,无需使用RX和TX引脚。 + +
+::: + +### 软件准备 + +如果您还没有安装HomeAssistant,可以点击[这里](https://www.home-assistant.io/installation/)参考HomeAssistant的官方教程。 + +## 操作步骤 + +### 步骤1. 发现设备 + +在Home Assistant中,点击左下角的**设置**,在中心选择**设备与服务**。 + +
+ +在“已发现”区域中,会出现一个传感器图标,请点击**配置**。 + +
+ +将会出现一个弹窗,点击**提交**。 + +
+ +您将看到一个配置成功的弹窗,点击**完成**。 + +
+ +### 步骤2. 配置设备 + +在已配置区域,点击**ld2410_ble**。 + +
+ +一旦进入传感器设置页面,点击**设备1**。 + +
+ +将传感器的返回值添加到仪表板中。 + +
+ +在弹出窗口中选择“添加到仪表板”。 + +
+ +最后,点击左上角的“概览”,您会看到mmwave-for-xiao传感器数据已成功显示在仪表板上。至此,mmwave for xiao传感器已成功连接到Home Assistant。 + +
+ +接下来,您可以充分发挥创造力,实现自动化操作! + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们致力于为您提供全方位的支持,确保您在使用我们的产品时拥有尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同偏好和需求。 + +
+
+ + +
+ +
+ + +
+
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao.md new file mode 100644 index 0000000000000..baa862007d542 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao.md @@ -0,0 +1,275 @@ +--- +description: Getting started with Seeed Studio 24GHz mmWave for XIAO +title: 用于 XIAO 的 24GHz 毫米波 +keywords: +- mmwave +- radar +image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png +slug: /cn/mmwave_for_xiao +last_update: + date: 03/21/2024 + author: AnXiaodie +--- + +# 用于 XIAO 的 24GHz 毫米波 + +
+ +

+ +
+ + +## 介绍 + +24GHz毫米波传感器是Seeed Studio XIAO系列的扩展板,主要用于人体静态存在检测。它是一款集成了天线的高灵敏度毫米波雷达传感器,基于调频连续波(FMCW)原理。结合雷达信号处理和精准的人体感应算法,它能够识别处于运动状态和静止状态的人体。 + +### 特点 +- **基于FMCW原理**:高灵敏度,对环境干扰免疫。 +- **全面的人体检测**:该传感器不仅具有高灵敏度地检测移动人体,还能对静止个体、微小动作以及坐着或躺着的个体展现出敏感性。 +- **多级智能参数调整**:可通过蓝牙或串口进行调整,以灵活应对不同的环境条件和场景变化。此外,它还支持通过应用程序直接进行参数配置,无需串口连接。 +- **大检测角度和长感应距离**:视野可达60度,传感器可以从大角度检测移动物体。此外,它还能探测到距离达5米远的物体。 +- **出色的外壳穿透能力和审美增强**:具有良好的外壳穿透性,可以隐藏在产品外壳内部工作,无需在表面打孔,从而保持美观。 + +### 应用领域 +- 人体感应灯光控制 +- 生命安全防护 +- 智能家电 +- 智能安防 + +### 规格 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数数值
工作频率24GHz ~ 24.25GHz
工作电压DC 5V
平均工作电流>200mA
调制方式 79mA
接口FMCW
InterfaceGPIO (IO 电平 3.3V), UART
目标应用 人体存在传感器
检测距离0.75m ~ 6m (可调)
检测角度±60°
距离分辨率0.75m
扫描带宽250MHz
环境温度-40℃ ~ 85℃
尺寸17.5mm x 21mm
+
+ +## 硬件概述 + +这款毫米波传感器与全系列XIAO兼容,因此引脚定义遵循XIAO的引脚定义。然而,考虑到串行端口的广泛应用,我们为毫米波传感器设计了一个软串行连接。 + +
+ +该传感器主要依赖于软串行端口(D2 - TX,D3 - RX)和3.3V电源供电。除此之外,其他引脚均不会使用。 + +## 入门指南 + +该传感器模块既支持直接软件查看(通过蓝牙),也支持二次开发(使用XIAO和UART)。如果您希望尽快查看传感器数值,可以参照**入门指南**中的步骤,使用我们提供的软件。 + +## 硬件连接 + +该传感器专为与XIAO兼容而设计,因此一般来说,如果您想要使用这款传感器,您需要准备一个XIAO并为传感器安装一排母针脚。在与XIAO连接时,请特别注意传感器的安装方向,请勿反向插入,否则可能会烧毁传感器或XIAO。 + +:::caution警告 +正确的方向是确保传感器的天线朝外。 +::: + +
+ +确认连接方向正确后,您可以将USB-C型电缆连接到电脑或电源,传感器将开始工作。 + +### 毫米波传感器软件 + + 可以使用HLKRadarTool软件直接观察雷达的传感器数值。该软件目前支持IOS、Android和Windows系统。 + +- [从Google Play下载HLKRadarTool](https://play.google.com/store/apps/details?id=com.hlk.hlkradartool). + +- [从App Store下载HLKRadarTool](https://apps.apple.com/us/app/hlkradartool/id1638651152). + +
+ + +- [下载适用于Windows的HLKRadarTool](https://files.seeedstudio.com/wiki/mmwave-for-xiao/HLKRadarTool.zip) + +
+ +接下来,我们将描述如何将这些软件与传感器结合使用。 + +### 移动端软件操作指南 + +如果您希望在手机上查看传感器的数值,那么您需要使用传感器的蓝牙与手机进行通信,这意味着您还需要一部支持蓝牙的手机。请提前下载上述软件。 + +**步骤一**. 打开应用程序,应用程序会搜索附近的雷达设备。设备的广播名称为**HLK-LD2410_xxxx**(xxxx为mac地址的最后四位)。 + +
+ +:::tip提示 +APP的使用距离不应超过蓝牙信号范围(4米以内)。 +::: + +**步骤二**. 模块成功连接后,您可以查看雷达信息,或调试并保存参数。 + +
+ +**步骤三**. 在软件右上角的“更多”选项中,您可以进入设置菜单,为传感器设置自定义参数和功能。 + +
+ +:::tip提示 +在修改这些参数和设置之前,我们建议您仔细阅读[用户协议手册](https://files.seeedstudio.com/wiki/mmwave-for-xiao/24GHz_mmWave_for_XIAO-Usermanual-V1.00.pdf),并参考手册中的说明进行修改。关于软件显示值的含义和设置参数的更多详细信息,请阅读[用户协议手册](https://files.seeedstudio.com/wiki/mmwave-for-xiao/24GHz_mmWave_for_XIAO-Usermanual-V1.00.pdf)。 +::: + +### Windows软件操作指南 + +为方便用户快速有效地测试和配置模块,我们提供了一个PC配置工具。用户可以使用该工具软件连接模块的串口,读取和配置模块的参数,接收模块报告的检测结果数据,并进行实时可视化显示,从而大大方便用户的使用。 + +**步骤一**. 使用USB转串口工具正确连接模块串口。 + +
+ + + + + + + + + + + + + + + + + + + + + + + +
USB to serial port toolmmWave Sensor
3V33V3
GNDGND
RXTX
TXRX
+
+ +**步骤二**. 在主机工具中选择对应的串口号,将波特率设置为**256000**,选择**工程模式**,然后点击**连接**设备。 + +:::tip提示 +如果您在将传感器连接到电脑之前打开了软件,您可能需要点击“刷新”来刷新端口号。 + +::: + +
+ +**步骤三**. 连接成功后,点击“开始”按钮,右侧的图形界面将显示测试结果和数据。 + +:::tip注意 +点击“开始”后无法读取和配置参数,必须在停止后才能进行配置。 + +::: + +小球是目标状态输出指示:红色表示有移动目标;紫色表示有静止目标;绿色表示无人。 + +
+ +## 传感器异常恢复 + +如果您在使用传感器的过程中遇到了雷达异常,如数据不报告、停机等问题,您可以尝试按照此处说明恢复传感器的固件。 + +恢复固件的方法是使用手机带有蓝牙功能的APP,在软件主界面的右上角选择**更多**,然后选择**初始化**。 + +
+ + + +## OTA Upgrade + +## OTA升级 + +当设备的固件有更新时,固件版本处会显示“可升级”字样,长按版本号进入升级界面;仅**V1.07.22091516**或更高版本支持升级。 + +
+ +整体升级过程需要1~3分钟。升级必须从模块端进行,否则如果蓝牙信号不佳,升级将失败。 + +在升级完成之前,请勿关闭或重启模块,也不要强行退出APP,否则升级会失败。如果升级失败,传感器程序将被禁用,无法进行传感器检测。如果设备升级失败,请重启设备并重新连接APP,设备列表中会出现“等待升级”的提示: + +:::tip提示 +请确保在升级过程中保持蓝牙信号稳定,并遵循上述提示操作,以避免升级失败导致的问题。 +::: + +
+ +点击待升级的设备进行重新升级,只有升级成功后才能恢复雷达功能。 + +## 资源 + +- **[PDF]** [适用于XIAO的24GHz毫米波数据手册-V1.00](https://files.seeedstudio.com/wiki/mmwave-for-xiao/24GHz_mmWave_for_XIAO-Datasheet-V1.00.pdf) +- **[PDF]** [适用于XIAO的24GHz毫米波用户协议手册](https://files.seeedstudio.com/wiki/mmwave-for-xiao/24GHz_mmWave_for_XIAO-Usermanual-V1.00.pdf) +- **[PDF]** [适用于XIAO的24GHz毫米波电路图(SCH通常指电路图)](https://files.seeedstudio.com/wiki/mmwave-for-xiao/24GHz-mmWave-for-xiao-SCH.pdf) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供全方位的支持,以确保您在使用我们产品时的体验尽可能顺畅。我们提供多个沟通渠道,以满足不同的偏好和需求。 + +
+
+ + +
+ +
+ + +
+
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao_arduino.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao_arduino.md new file mode 100644 index 0000000000000..52040afa29e03 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao_arduino.md @@ -0,0 +1,563 @@ +--- +description: Introduction of how to develop mmWave Sensor on XIAO. +title: XIAO与Arduino上的24GHz毫米波传感器开发 +keywords: +- mmwave +- radar +image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png +slug: /cn/mmwave_for_xiao_arduino +last_update: + date: 03/21/2024 + author: AnXiaodie +--- + +# XIAO与Arduino上的24GHz毫米波传感器开发 + +本节介绍了如何在XIAO上使用毫米波库及其二次开发。 + +:::caution注意: +本Wiki的所有内容仅适用于适用于 XIAO 的 24GHz 毫米波,可能不适用于其他毫米波传感器。 +::: + +## 入门指南 + +### 硬件准备 + +在开始本文的教程内容之前,我们建议您购买我们目前出售的任何一款XIAO,以便使用毫米波传感器。 + + + + + + + + + + + + + + + + + + + + + + + +
Seeed Studio XIAO SAMD21Seeed Studio XIAO RP2040Seeed Studio XIAO nRF52840 (Sense)Seeed Studio XIAO ESP32C3Seeed Studio XIAO ESP32S3
+ + +在本文的教程中,我们将以XIAO ESP32C3和毫米波传感器为例,指导您如何使用传感器的Arduino库和相关功能。 + + + + + + + + + + + + + + +
Seeed Studio XIAO ESP32C324GHz mmWave for XIAO
+ + +该传感器是为XIAO设计的兼容型产品,因此,一般来说,如果您想使用这款传感器,您需要准备一款XIAO,并为传感器安装一排母针脚。在连接到XIAO时,请特别注意传感器的安装方向,请勿反向插入,否则可能会烧毁传感器或XIAO。 + +:::caution注意: +正确的安装方向是传感器的天线应朝向外侧。 +::: + +
+ +确认连接方向正确后,您可以将USB-C型电缆连接到电脑或电源,传感器将开始工作。 + +### 软件准备 + + 由于传感器使用的默认波特率为256000,而XIAO设计的软串口波特率可能无法满足如此高速的数据传输,因此在使用传感器之前,我们需要使用软件来调整传感器的波特率。然后,请根据您使用的手机系统下载相应的APP。 + +- [从Google Play下载HLKRadarTool](https://play.google.com/store/apps/details?id=com.hlk.hlkradartool). + +- [从App Store下载HLKRadarTool](https://apps.apple.com/us/app/hlkradartool/id1638651152). + +
+ +## Arduino库概述 + +:::tip提示 +如果您是第一次使用Arduino,我们强烈建议您参考[Arduino入门指南](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/)。 +::: + +
+ +### 功能 + +在开始编写草图之前,让我们先了解一下这个库中的可用功能。 + +- `Seeed_HSP24(Stream &serial)`—— 用于传入传感器连接的串口,并开始初始化传感器。 + - **输入参数**: + - **serial**:传感器连接的串口。 + +- `Seeed_HSP24(Stream &serial, Stream &debugSerial)`—— 用于传入传感器连接的串口,添加调试串口,并开始初始化传感器。 + - **输入参数**: + - **serial**:传感器连接的串口。 + - **debugSerial**:启用串口调试,并在接收的串口上输出。 + +- `String getVersion()`—— 获取传感器的软件版本号。 + - **返回值**:传感器的软件版本号。 + +- `RadarStatus getStatus()` —— 获取传感器的状态信息,该函数将解析传感器报告的所有信息。 + - 返回值 + - **radarStatus.radarMode**:工程模式或基础模式。1 对应工程模式,2 对应基础模式。 + - **radarStatus.targetStatus**:指示监测对象的当前情况。总共有四种情况(NoTarget),第一种是未检测到人(MovingTarget),第二种是检测到有人静止不动(StaticTarget),第三种是同时检测到(BothTargets),第四种是异常情况(ErrorFrame)。其中 BothTarget 指有人移动。因为传感器监测当前环境,运动能量和静止能量都超过了设定的阈值,所以我们命名为“BothTarget”,如果只有运动能量超过阈值,则会输出“MovingTarget”。 + - **radarStatus.distance**:这个值指的是传感器检测到的与被检测物体之间的距离。 + - **radarStatus.radarMovePower.moveGate**(在工程模式下有效):这个数组存储了不同距离门限的移动能量值。 + - **radarStatus.radarStaticPower.staticGate**(在工程模式下有效):这个数组存储了不同距离门限的静止能量值。 + - **radarStatus.photosensitive**(在工程模式下有效):这个值指的是传感器的光敏度值,范围是 0-255。 + +- `DataResult sendCommand(const byte* sendData, int sendDataLength)`—— 通过此函数向传感器发送命令。 + - 输入参数 + - **sendData**:发送的命令帧数组。 + - **sendDataLength**:发送的命令帧长度。 + - 返回值 + - **resultBuffer**:指向动态分配的数组。 + - **length**:数组的长度。 + +- `AskStatus setDetectionDistance(int distance, int times)`—— 使用此函数配置最大距离门限和未占用时长。 + - 输入参数 + - **distance**:配置最大距离门限。 + - **times**:未占用时长。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + +- `AskStatus setGatePower(int gate, int movePower, int staticPower)`—— 使用此函数配置不同距离门限及其灵敏度。 + - 输入参数 + - **gate**:距离门限,范围 0-8 米。 + - **movePower**:触发运动阈值的能量值。 + - **staticPower**:触发静止阈值的能量值。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + +- `RadarStatus getConfig()`—— 读取设置传感器的参数值。 + - 返回值 + - **radarStatus.detectionDistance**:雷达的运动检测距离门限数量。 + - **radarStatus.moveSetDistance**:雷达的静止检测距离门限数量。 + - **radarStatus.staticSetDistance**:雷达的最长检测范围门限。 + - **radarStatus.noTargrtduration**:无人值守时长。 + +- `AskStatus setResolution(int resolution)`—— 设置距离门限的分辨率,1 表示 0.25M,0 表示 0.75M。默认值为 0.75M。 + - 输入参数 + - **resolution**:1 表示 0.25M,0 表示 0.75M。默认值为 0.75M。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + +- `RadarStatus getResolution()`—— 获取距离门限的分辨率,1 表示 0.25M,0 表示 0.75M。默认值为 0.75M。 + - 返回值 + - **radarStatus.resolution**:1 表示 0.25M,0 表示 0.75M。默认值为 0.75M。 + +- `AskStatus rebootRadar()`—— 重启雷达命令。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + +- `AskStatus refactoryRadar()`—— 将雷达恢复为出厂设置。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + +- `AskStatus enableEngineeringModel()`—— 启用传感器工程模式输出。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + +- `AskStatus disableEngineeringModel()`—— 退出工程模式输出。 + - 返回值 + - 成功返回 0x00 或错误返回 0x01。 + + +### 默认变量 + +```cpp +#define BUFFER_SIZE 256 // 串行缓冲区大小 + +class Seeed_HSP24 +{ + public: + static const int FRAME_START_SIZE = 4; + static const int FRAME_END_SIZE = 4; + + static const byte frameStart[FRAME_START_SIZE]; + static const byte frameEnd[FRAME_END_SIZE]; + static const byte frameAskStart[FRAME_START_SIZE]; + static const byte frameAskEnd[FRAME_END_SIZE]; + + struct RadarMovePower // 每个运动距离门限的能量值 + { + int moveGate[9] = {-1, -1, -1, -1, -1, -1, -1, -1, -1}; + }; + + struct RadarStaticPower // 每个静止距离门限的能量值 + { + int staticGate[9] = {-1, -1, -1, -1, -1, -1, -1, -1, -1}; + }; + + // 定义 TargetStatus 枚举类 + enum class AskStatus : byte + { + Success = 0x00, // 成功 + Error = 0x01, // 失败 + }; + + // 定义TargetStatus枚举类 + enum class TargetStatus : byte + { + NoTarget = 0x00, // 无目标 + MovingTarget = 0x01, // 移动目标 + StaticTarget = 0x02, // 稳定目标 + BothTargets = 0x03, // 这可以被解释为运动,意味着设定的运动阈值和静止阈值都超过了设定值。 + ErrorFrame = 0x04 // 获取目标失败 + }; + + // 定义 RadarStatus 结构体 + struct RadarStatus + { + TargetStatus targetStatus = TargetStatus::ErrorFrame; // 雷达的目标状态 + int distance = -1; // 雷达的目标距离(以毫米为单位) + int moveSetDistance = -1; // 雷达的运动检测距离门限数量,通常无需配置 + int staticSetDistance = -1; // 雷达的静止检测距离门限数量,通常无需配置 + int detectionDistance = -1; // 雷达的最远探测距离门限 + int resolution = -1; // 雷达的距离门限分辨率 + int noTargrtduration = -1; // 无人值守时长”或“无人持续时间 + int radarMode = -1; // 用于区分模块是处于基本报告模式(2)还是工程报告模式(1) + RadarMovePower radarMovePower; // 运动能量值 + RadarStaticPower radarStaticPower; // 静止能量值 + int photosensitive = -1; // 光敏范围 0-255 + }; + + // 用于返回已发出命令的结果 + struct DataResult + { + byte *resultBuffer; // 指向一个动态分配的数组 + int length; // 数组的长度 + }; +}; +``` + +### 安装 + +既然您已经下载了zip格式的库文件,请打开您的Arduino IDE,点击**Sketch(草图)> Include Library(包含库)> Add .ZIP Library(添加.ZIP库)**。选择您刚刚下载的zip文件,如果库文件安装正确,您会在通知窗口中看到**Library added to your libraries(库已添加到您的库中)**。这表示库文件已成功安装。 + +
+ +

+ +## XIAO 示例 + +既然我们已经安装了库文件,并且了解了基本功能,接下来让我们运行一些针对我们的24GHz毫米波传感器的示例,看看它的表现如何。 + +**步骤 1.** 启动Arduino应用程序。 + +
+ + + +**步骤 2.** 选择您的开发板型号并将其添加到Arduino IDE中。 + - 如果您想在后续的步骤中使用**Seeed Studio XIAO SAMD21**,请参考**[这个教程](https://wiki.seeedstudio.com/Seeeduino-XIAO/#software)**来完成添加。 + - 如果您想在后续的步骤中使用**Seeed Studio XIAO RP2040**,请参考**[这个教程](https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#software-setup)**来完成添加。 + - 如果您想在后续的步骤中使用**Seeed Studio XIAO nRF52840**,请参考**[这个教程](https://wiki.seeedstudio.com/XIAO_BLE/#software-setup)**来完成添加。 + - 如果您想在后续的步骤中使用**Seeed Studio XIAO ESP32C3**,请参考**[这个教程](https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started#software-setup)**来完成添加。 + - 如果您想在后续的步骤中使用**Seeed Studio XIAO ESP32S3**,请参考**[这个教程](http://wiki.seeedstudio.com/xiao_esp32s3_getting_started#software-preparation)**来完成添加。 + +:::tip提示 +本教程将以XIAO ESP32C3为例进行说明。 +::: + +**步骤 3.** 将传感器连接到XIAO,并使用USB-C型电缆将XIAO连接到电脑。 + +**步骤 4.** 打开已下载的**HLKRadarTool**应用程序,并为传感器配置适当的波特率。 + +打开应用程序后,应用程序会搜索附近的雷达设备。设备的广播名称为**HLK-LD2410_xxxx**(xxxx是MAC地址的最后四位)。 + +
+ +在软件右上角的“更多”选项中,您可以访问设置菜单,为传感器设置自定义参数和功能。请将传感器的波特率设置为**9600**并保存。 + +
+ +等待传感器重启后。 + +**步骤 5.** 添加必要的库。 + +除了需要添加到Arduino环境中的传感器库之外,如果您使用的是**ESP32系列的XIAO**,则可能需要单独安装软串行端口库,以便能够使用提供的示例。 + +
+ +### 示例 1. 基本模式输出 + +在第一个程序示例中,我们将解析传感器报告的一般信息。这将代表该产品的主要功能信息输出。例如,关于人体存在、运动、距离等的数据。 + +```cpp +#if defined(ARDUINO_SEEED_XIAO_NRF52840_SENSE) || defined(ARDUINO_SEEED_XIAO_NRF52840) +#error "XIAO nRF52840 please use the non-mbed-enable version." +#endif + +#include +#include + +// 定义SoftwareSerial对象,将D2作为RX(接收),D3作为TX(发送),连接到毫米波传感器的串行端口 +SoftwareSerial COMSerial(D2, D3); + +// 创建一个全局的Serial对象用于打印调试信息 +#define ShowSerial Serial + +// 初始化雷达配置 +// 使用COMSerial作为通信串行端口,ShowSerial作为显示串行端口,初始化Seeed_HSP24雷达配置。 +Seeed_HSP24 xiao_config(COMSerial); + +Seeed_HSP24::RadarStatus radarStatus; + +void setup() { + COMSerial.begin(9600); + ShowSerial.begin(9600); + delay(500); + + ShowSerial.println("Programme Starting!"); + + xiao_config.disableEngineeringModel(); +} + +void loop() { + int retryCount = 0; + const int MAX_RETRIES = 10; // 防止无限循环时的最大重试次数 + + //获取雷达状态 + do { + radarStatus = xiao_config.getStatus(); + retryCount++; + } while (radarStatus.targetStatus == Seeed_HSP24::TargetStatus::ErrorFrame && retryCount < MAX_RETRIES); + + //解析雷达状态并从调试串行端口打印结果 + if (radarStatus.targetStatus != Seeed_HSP24::TargetStatus::ErrorFrame) { + ShowSerial.print("Status: " + String(targetStatusToString(radarStatus.targetStatus)) + " ---- "); + ShowSerial.println("Distance: " + String(radarStatus.distance) + " Mode: " + String(radarStatus.radarMode)); + } + delay(200); +} + +// 解析获取的雷达状态 +const char* targetStatusToString(Seeed_HSP24::TargetStatus status) { + switch (status) { + case Seeed_HSP24::TargetStatus::NoTarget: + return "NoTarget"; + case Seeed_HSP24::TargetStatus::MovingTarget: + return "MovingTarget"; + case Seeed_HSP24::TargetStatus::StaticTarget: + return "StaticTarget"; + case Seeed_HSP24::TargetStatus::BothTargets: + return "BothTargets"; + default: + return "Unknown"; + } +} +``` + +编译并上传程序后,打开串行监视器并将波特率设置为9600。如果一切顺利,您应该看到以下结果输出。 +
+ +### 示例 2. 工程模式输出 +在第二个示例程序中,我们将打开传感器的工程数据上传功能,并解析这些工程信息。与基础模式相比,工程信息包含更多不同距离门限的运动能量值和静态能量值。这些值的显示允许您可视化当前环境中的动态和静态能量变化,使您更容易根据实际情况调整传感器的触发条件,以确定是否有人存在、静止或处于运动中。 + +```cpp +#if defined(ARDUINO_SEEED_XIAO_NRF52840_SENSE) || defined(ARDUINO_SEEED_XIAO_NRF52840) +#error "XIAO nRF52840 please use the non-mbed-enable version." +#endif +#include +#include +// 定义SoftwareSerial对象,将D2作为RX(接收),D3作为TX(发送),连接到毫米波传感器的串行端口。 +SoftwareSerial COMSerial(D2, D3); +// 创建一个全局的Serial对象,用于打印调试信息。 +#define ShowSerial Serial +// 初始化雷达配置。 +// 为 Seeed_HSP24 雷达进行 xiao_config 配置,使用 COMSerial 作为通信串行端口,ShowSerial 用于显示串行端口。 +Seeed_HSP24 xiao_config(COMSerial); +Seeed_HSP24::RadarStatus radarStatus; +void setup() { + COMSerial.begin(9600); + ShowSerial.begin(9600); + delay(500); + ShowSerial.println("Programme Starting!"); + xiao_config.enableEngineeringModel(); +} +void loop() { + int retryCount = 0; + const int MAX_RETRIES = 10; // 为防止无限循环而设置的最大重试次数 + //获取雷达状态 + do { + radarStatus = xiao_config.getStatus(); + retryCount++; + } while (radarStatus.targetStatus == Seeed_HSP24::TargetStatus::ErrorFrame && retryCount < MAX_RETRIES); + //解析雷达的状态,并将解析得到的结果通过调试串行端口打印输出。 + if (radarStatus.targetStatus != Seeed_HSP24::TargetStatus::ErrorFrame) { + ShowSerial.print("Status: " + String(targetStatusToString(radarStatus.targetStatus)) + " ---- "); + ShowSerial.println("Distance: " + String(radarStatus.distance) + " Mode: " + String(radarStatus.radarMode)); + + if (radarStatus.radarMode == 1) { + ShowSerial.print("Move:"); + for (int i = 0; i < 9; i++) { + ShowSerial.print(" " + String(radarStatus.radarMovePower.moveGate[i]) + ","); + } + ShowSerial.println(""); + ShowSerial.print("Static:"); + for (int i = 0; i < 9; i++) { + ShowSerial.print(" " + String(radarStatus.radarStaticPower.staticGate[i]) + ","); + } + ShowSerial.println(""); + ShowSerial.println("Photosensitive: " + String(radarStatus.photosensitive)); + } + } + delay(100); +} +// 解析获取的雷达状态 +const char* targetStatusToString(Seeed_HSP24::TargetStatus status) { + switch (status) { + case Seeed_HSP24::TargetStatus::NoTarget: + return "NoTarget"; + case Seeed_HSP24::TargetStatus::MovingTarget: + return "MovingTarget"; + case Seeed_HSP24::TargetStatus::StaticTarget: + return "StaticTarget"; + case Seeed_HSP24::TargetStatus::BothTargets: + return "BothTargets"; + default: + return "Unknown"; + } +} +``` + +编译并上传程序后,打开串行监视器并将波特率设置为9600。如果一切顺利,您应该看到以下结果输出。 + +
+ +### 示例 3. 其他配置查询和恢复出厂设置 + +在第三个示例中,我们提供了一种恢复传感器设置的方法以及使用参数查询功能的其他示例。 + +:::caution警告 + +特别需要注意的是,当传感器恢复到出厂设置时,这也意味着传感器的波特率将被恢复为**256000**。在使用其他XIAO程序之前,您需要按照之前的步骤在您的手机APP上将波特率重新设置为**9600**。 +::: + +```cpp +#if defined(ARDUINO_SEEED_XIAO_NRF52840_SENSE) || defined(ARDUINO_SEEED_XIAO_NRF52840) +#error "XIAO nRF52840 please use the non-mbed-enable version." +#endif + +#include +#include + +// 定义SoftwareSerial对象,将D2作为RX(接收),D3作为TX(发送),连接到毫米波传感器的串行端口。 +SoftwareSerial COMSerial(D2, D3); + +// 创建一个全局的Serial对象,用于打印调试信息 +#define ShowSerial Serial + +// 初始化雷达配置 +// Seeed_HSP24 的 xiao_config 函数使用 COMSerial 作为通信串行端口,ShowSerial 用于显示串行端口。 +Seeed_HSP24 xiao_config(COMSerial); + +Seeed_HSP24::RadarStatus radarStatus; + +void setup() { + COMSerial.begin(9600); + ShowSerial.begin(9600); + while(!ShowSerial); // 打开串行监视器并开始执行 + delay(500); + + ShowSerial.println("Programme Starting!"); + + ShowSerial.print("Sensor Software Version: "); + ShowSerial.println(xiao_config.getVersion()); + + radarStatus = xiao_config.getConfig(); + if (radarStatus.detectionDistance != -1) { + ShowSerial.println("Detection Distance: " + String(radarStatus.detectionDistance) + " m "); + ShowSerial.println("Moveing Set Distance: " + String(radarStatus.moveSetDistance) + " m "); + ShowSerial.println("Static Set Distance: " + String(radarStatus.staticSetDistance) + " m "); + ShowSerial.println("No Target Duration Time: " + String(radarStatus.noTargrtduration) + " seconds "); + } + else ShowSerial.println("Failed to get configuration information, please retry."); + + /*** 在恢复或重置为出厂设置后,请在使用XIAO之前重新将波特率修改为9600! + * */ + xiao_config.refactoryRadar(); +// xiao_config 对象的 rebootRadar 方法(或函数)。 // 重启传感器 +} + +void loop() {} +``` +这个程序将在您打开串行监视器后执行重置操作。 +
+ +## 故障排除 +### 问题1:我正在使用XIAO nRF52840(Sense),我应该选择哪个开发板版本? +您应该使用XIAO nRF52840开发板包的非mbed版本,因为它包含了程序所需的软件串行端口库。 +
+ +### 问题2:为什么我会遇到丢帧和传感器数据流乱码的情况? +这最有可能是因为你没有修改传感器的波特率。这款产品的出厂固件默认波特率是256000。XIAO的软件串行端口可能无法处理这么高的数据流速度,导致程序可能异常卡住,无法正确解析数据帧。因此,请降低波特率后再使用程序。我们推荐使用**9600**的波特率。 +### 问题3:为什么在使用Demo2时数据流会有1~2秒的延迟? +这可能是正常现象,工程模式下的数据流较大,软件串行端口占用CPU处理数据的能力有限,因此会不时地暂停一下。 +## 技术支持与产品讨论 +感谢您选择我们的产品!我们在这里为您提供各种支持,以确保您使用我们的产品时能够拥有尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。 +
+
+ + +
+
+ + +
+
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmWave_Kit_And_Grove_Connect_To_ESPHome.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmWave_Kit_And_Grove_Connect_To_ESPHome.md new file mode 100644 index 0000000000000..323613cf6739a --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmWave_Kit_And_Grove_Connect_To_ESPHome.md @@ -0,0 +1,356 @@ +--- +description: mmWave Kit And Grove Connect To ESPHome +title: 毫米波套件和 Grove 连接到 ESPHome +keywords: +- ESPHome +image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png +slug: /cn/mmWave_Kit_And_Grove_Connect_To_ESPHome +last_update: + date: 03/22/2024 + author: AnXiaodie +--- + +## 简介 + +mmWave人体检测传感器套件由Seeed Studio XIAO ESP32C3驱动,支持Wi-Fi/BLE连接,并通过毫米波传感器提供精确的人体检测。可无缝连接Grove模块以添加更多功能。在1-2分钟内轻松为Home Assistant进行设置,同时提供方便的无线空中(OTA)更新。通过可替换的毫米波传感器实现广泛的通用性。适用于定制智能家居自动化、检测入侵以及监测老年人健康状况等场景。 + +## 硬件准备 + +我使用Raspberry Pi 4B作为服务器来运行Home Assistant,同时使用mmWave人体检测传感器套件作为硬件,并搭配多个Grove传感器。 + + + + + + + + + + + + + + +
毫米波人体检测传感器套件Raspberry Pi 4B
+ +**Grove传感器** + +- [Grove - 温度与湿度传感器(DHT20)](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-V2-0-DHT20-p-4967.html) +- [Grove - 光传感器(LS06-S)](https://www.seeedstudio.com/Grove-Light-Sensor-v1-2-LS06-S-phototransistor.html) +- [Grove - 火焰传感器](https://www.seeedstudio.com/Grove-Flame-Sensor.html) + +## 软件准备 + +### 安装Home Assistant + +请确保您已经安装并运行了Home Assistant。这里有多个教程介绍如何将Home Assistant刷入[产品](https://wiki.seeedstudio.com/home_assistant_topic/#-devices-for-home-assistant-)中。由于我使用的是Raspberry Pi 4B,因此我可以[直接使用官方教程将操作系统刷入Raspberry Pi 4B](https://www.home-assistant.io/installation/raspberrypi)。 + +### 在Home Assistant上安装ESPHome + +ESPHome可作为**Home Assistant插件**使用,并可以通过插件商店轻松安装。 + +
+ +- **第一步**。 点击 **安装**。 + +
+ +- **第二步**。 启用所有选项并点击 **开始**。 + +
+ +如果ESPHome成功加载,您将会看到以下窗口 + +
+ +## 开始入门 + +### mmWave套件连接至ESPHome + +#### 第一步:硬件连接 + +通过Type-C线缆将mmWave套件连接到HomeAssistant,您可以参考以下图片进行连接。 + +
+ +#### 第二步:软件设置 + +##### a. 设置mmWave套件 + +1. 打开ESPHome页面,并点击右下角的 **NEW DEVICE** 按钮。 + +
+ +2. 然后,点击 **CONTINUE**. + +
+ +3. 给它起一个你想要的名字,然后点击 **NEXT**。 + +
+ +4. 选择你的设备类型,点击 **ESP32-C3**。 + +
+ +5. 你可以在配置文件中稍后找到密钥,所以这里只需点击 **SKIP**。 + +
+ +6. 我们需要在这里编辑配置文件,点击 **EDIT**。 + +
+ +7. 以下代码供您参考。您可以将其复制到您的配置文件中。完成代码后,点击右上角的 **INSTALL** 按钮。 + +
+ +:::tip提示 +1. api和ota部分有默认的密钥或密码,您无需更改。 +2. wifi部分您需要更改为您自己的ssid和密码。 +3. [点击这里查看代码](https://github.com/limengdu/mmwave-kit-external-components/blob/mmwave-kit-factory-bin/example/mr24hpc1.yaml) +::: + +8. 接着会出现一个弹出窗口,点击第三个条目。 + +
+ +9. 请按照以下方式点击。 + +
+ +10. 现在mmWave套件已经设置完成,您将看到此页面,请点击右下角的 **CLOSE** 按钮。 + +
+ +##### b. 将mmWave套件数据添加到概览中 + +1. 转到 **Settings** 页面并点击 **Devcies & services** + +
+ +2. 在已配置的区域中点击 **ESPHome**。 + +
+ +:::tip提示 +如果您发现ESPHome不在已配置区域,而是在上方的已发现区域,您可以按照此[链接](https://wiki.seeedstudio.com/XIAO-ESP32C3-for-ESPHome-Support/)中的步骤15至步骤18进行操作。 +::: + +3. 点击 **devices**。我这里有2个设备,但在您的情况下可能只有1个设备。 + +
+ +4. 点击 **mmWave Kit Plus Grove**。 + +
+ +5. 点击 **ADD TO DASHBOARD** 将这些信息添加到仪表板。您可以滚动此页面以添加您想要的更多信息。 + +
+ +6. 继续点击 **ADD TO DASHBOARD**。 + +
+ +7. 最后,您可以通过点击左上角的 **overview** 按钮在仪表板中查看这些信息。 + +
+ +### Grove 连接至 ESPHome + +#### 光传感器(LS06-S) + +##### 第一步:硬件连接 + +通过 Grove 线缆将 [光传感器](https://www.seeedstudio.com/Grove-Light-Sensor-v1-2-LS06-S-phototransistor.html) 连接到 mmWave 套件,您可以参考下面的图片。 + +
+ +##### 第二步:软件设置 + +###### a. 设置光传感器 + +1. 将以下代码添加到您的配置文件中的相应位置,您可以参考下面的图片。 + +``` + - platform: adc + pin: GPIO2 + name: "Light Sensor" + update_interval: 1s +``` + +
+ +2. 然后点击左上角的 **INSTALL** 按钮。如果一切正常,您将看到以下图片。 + +
+ +:::tip提示 +如果遇到错误,您可以按照以下方式清除构建文件。 +::: + +1. 您可能会遇到这样的错误。 + +
+ +2. 您可以点击 **Clean Build Files** 来清理一些文件。 + +
+ +3. 清理完成后,点击 **CLOSE** 并尝试再次 **INSTALL**。 + +
+ +###### b. 将光传感器添加到仪表板 + +1. 点击左上角的 **Overview**,然后点击右上角的 **“三点”** 和 **Edit dashboard**。 + +
+ +2. 点击右下角的 **ADD CARD**。 + +
+ +3. 点击 **BY ENTITY**,选择 **Light Sensor** 条目,然后点击 **CONTINUE**。 + +
+ +4. 选择 **PICK DIFFERENT CARD**。 + +
+ +5. 选择 **Gauge**。 + +
+ +6. 将最小值设为0,最大值设为1,然后点击 **SAVE**。 + +
+ +7. 最后,您将在仪表板上看到光传感器。 + +
+ +#### 温度和湿度传感器(DHT20) + +##### 第一步:硬件连接 + +通过 Grove 线缆将 [温度和湿度传感器](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-V2-0-DHT20-p-4967.html) 连接到 mmWave 套件,您可以参考下面的图片。 + +
+ +##### 第二步:软件设置 + +###### a. 设置温度和湿度传感器 + +1. 将以下代码添加到您的配置文件中的相应位置,您可以参考下面的图片。 + +``` +i2c: + sda: GPIO6 + scl: GPIO7 + scan: True + id: bus_0x38 +``` + +``` +sensor: + - platform: aht10 + temperature: + name: "Living Room Temperature" + humidity: + name: "Living Room Humidity" + update_interval: 60s +``` + +
+ +
+ +2. 然后点击左上角的 **INSTALL** 按钮。如果一切顺利,您将看到以下图片。 + +
+ +:::tip提示 +如果您遇到错误,您可以跳转到 [这里](https://yiyan.baidu.com/#jump) 以作参考。 +::: + +###### b. 将温度和湿度传感器添加到仪表板 + +1. 点击左上角的 **Overview**,然后点击右上角的 **“三点”** 图标和 **Edit dashboard**。 + +
+ +2. 点击右下角的 **ADD CARD**。 + +
+ +3. 点击 **BY ENTITY**,选择 **Humidity** 和 **Temperature** 条目,然后点击 **CONTINUE**。 + +
+ +4. 点击 **ADD TO DASHBOARD**(添加到仪表板)。 + +
+ +5. 最后,您将在仪表板上看到温度和湿度数据。 + +
+ +#### 火焰传感器 + +##### 第一步:硬件连接 + +使用 Grove 线缆将 [火焰传感器](https://www.seeedstudio.com/Grove-Flame-Sensor.html) 连接到 mmWave 套件的模拟端口。您可以参考下面的视频。 + +##### 第二步:软件设置 + +###### a. 设置火焰传感器 + +将以下代码添加到您的配置文件中,并 **INSTALL** 到 mmWave 套件。 + +``` +binary_sensor: + - platform: gpio + pin: + number: GPIO3 + inverted: true + name: "Flame Detecctor" + device_class: smoke +``` + +###### b. 将火焰传感器添加到仪表板 + +您可以参考上面的光传感器或温度和湿度传感器。 + +#### 带有 Yaml 文件的其他传感器 + +通过 [Seeed Studio Contributor Program](https://github.com/orgs/Seeed-Studio/projects/12/views/1) 支持,感谢 Mohammed。下面列出了更多支持的传感器: + +[ATH20 传感器](https://files.seeedstudio.com/wiki/wiki-ranger/Contributions/mmWave-kit-sensor-add-grove/AHT20.yaml) +[SHT35 传感器](https://files.seeedstudio.com/wiki/wiki-ranger/Contributions/mmWave-kit-sensor-add-grove/SHT35.yaml) +[SHT40 传感器](https://files.seeedstudio.com/wiki/wiki-ranger/Contributions/mmWave-kit-sensor-add-grove/SHT40.yaml) +[Vibration 传感器](https://files.seeedstudio.com/wiki/wiki-ranger/Contributions/mmWave-kit-sensor-add-grove/Vibration%20Sensor.yaml) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们的产品时能够拥有尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同偏好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmwave_human_kit.md b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmwave_human_kit.md new file mode 100644 index 0000000000000..aea8b3ed84f48 --- /dev/null +++ b/docs/zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmwave_human_kit.md @@ -0,0 +1,507 @@ +--- +description: Getting started with mmWave Human Detection Sensor Kit +title: 毫米波人体检测传感器套件 +keywords: +- radar +- mmwave kit +image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png +slug: /cn/mmwave_human_detection_kit +last_update: + date: 03/22/2024 + author: AnXiaodie +--- + +# 毫米波人体检测传感器套件 + +
+ +
+ +
+ + + +## 产品介绍 + +毫米波人体检测传感器套件采用 Seeed Studio 的 XIAO ESP32C3 作为核心,支持 WiFi/BLE 连接功能,并可通过毫米波传感器实现精确的人体检测。轻松连接 Grove 模块以添加更多功能。在 1-2 分钟内即可完成与 Home Assistant 的便捷设置,并支持方便的无线空中升级(OTA)。此外,本产品还支持更换毫米波传感器,实现广泛的可定制性。它非常适合用于定制智能家居自动化、检测入侵者以及监测老年人的健康状况。 + +### 功能特性 + +- **精准人体检测**:板载的毫米波传感器基于FMCW原理,提供精准且注重隐私保护的人体检测功能。 +- **灵活定制**:板载的人体存在传感器可替换为 Seeed 的其他毫米波系列传感器,以实现心跳检测、跌倒检测等功能;配合400多种可选的Grove传感器,可实现更多附加功能。 +- **轻松设置,无线更新**:无需编写代码,即可在1-2分钟内完成Home Assistant的设置,并支持无线空中升级(OTA)。 +- **无缝连接**:由XIAO ESP32C3驱动,支持WiFi/BLE,兼容智能家居系统 +- **可扩展解决方案**:通过提供的OEM/ODM服务,根据您的需求量身定制可扩展的解决方案。 + + + +### 应用场景 + +- **智能家居自动化**:根据人体存在情况,提升照明、HVAC和安全系统的性能。 +- **建筑安全**:检测入侵行为并触发安全警报。 +- **健康监测**:监测患者移动,辅助跌倒检测。 +- **自动门**:实现当人员接近时自动开门。 +- **老年人护理**:监测老年人的健康状况,提供及时援助。 + +## 硬件概览 + +在开始之前,了解产品的基本参数至关重要。以下表格提供了毫米波人体检测传感器套件的技术特性信息。 + +
+ +:::tip提示 +在使用这个套件时,有几点需要注意。 + +1. XIAO ESP32C3的网络功能需要使用天线。如果你想安装一个Grove模块,尽量不要改变天线的位置。天线默认放置在底板的背面,这样可以确保良好的信号,并且不会干扰雷达的工作。 +2. 套件外壳上预留的孔是通风孔,这是考虑到用户可能会使用传感器模块检测某些气体而预留的。它们并不是用来判断是否有人存在的标准,因此请不用担心隐私问题。 + +::: + +下表展示了毫米波雷达与XIAO ESP32C3之间的硬件连接。如有需要,您可以根据下表中的连接方式进行后续的自主开发。 + +
+ + + + + + + + + + + + + + + + + + + + + +
XIAO ESP32C3MR24HPC1
5VVCC
GNDGND
GPIO4 (D2)RX
GPIO5 (D3)TX
+
+ +## 开始使用 + +:::tip提示 +本教程主要聚焦于套件在Home Assistant和ESPHome中的快速应用。如果您想对套件进行二次开发,请参考本教程的[自定义二次开发](https://yiyan.baidu.com/#customized-secondary-development)部分。 +::: + +### 软件准备 + +在本教程中,我们将不展开如何安装Home Assistant环境,我们将假设您已经拥有了一个可运行的Home Assistant设备。 + +如果您想学习如何安装Home Assistant,那么您可以参考[官方教程](https://www.home-assistant.io/installation/)。我们强烈建议您使用x86设备来安装Home Assistant,因为这是使用Supervised安装Home Assistant的最用户友好的方式。 + +
+ +- 根据上表,安装**Home Assistant OS**和**Home Assistant Supervised**是最合适的选择,这将为您省去很多麻烦。 + + 我们还为一些Seeed Studio产品编写了如何安装Home Assistant的教程,请参考它们。 +- [ODYSSEY-X86上的Home Assistant入门指南](https://wiki.seeedstudio.com/ODYSSEY-X86-Home-Assistant/) +- [reTerminal上的Home Assistant入门指南](https://wiki.seeedstudio.com/reTerminal_Home_Assistant/) +- [LinkStar H68K/reRouter CM4上的Home Assistant入门指南](https://wiki.seeedstudio.com/h68k-ha-esphome/) + +此外,XIAO ESP32C3依赖于开源项目ESPHome来接入Home Assistant,因此您还需要在**插件**中安装**ESPHome**服务。 + +
+ +## ESPHome入门指南 + +出厂套件中的XIAO ESP32C3已经预装了可立即启动的固件,因此我们能够在很短的时间内让套件在Home Assistant上运行。下面的视频将向您展示快速入门的精确步骤。 + +
+ +
+以下是详细的图形化步骤,请参考以下内容完成快速入门。 + +### 步骤1. 为套件供电 + +请使用USB-C型电缆为套件供电。请注意,电源输入不得超过5V/1A,否则产品可能会损坏。 + +### 步骤2. 连接到套件的热点“seedstudio-mr24hpc1” + +套件上电后,会自动打开一个名为**seedstudio-mr24hpc1**的热点,请搜索并连接到该热点。您可以使用手机连接到这个网络,这样您就不必频繁地在电脑上切换网络了。 + +:::note注意 +如果您使用的是旧版本的固件,那么可能需要您输入WiFi密码才能连接到**mmwave-kit**。我们建议您**[更新您的固件](https://yiyan.baidu.com/#restore-factory-firmware)**。如果您想继续,网络密码是`seeedstudio`。 +::: + +
+ +然后使用浏览器访问后端管理地址:`192.168.4.1`。我们将在这里配置套件需要连接的网络和密码。 + +
+ +然后,选择您希望套件连接的网络名称。请注意,您选择的网络需要与Home Assistant处于同一局域网内,否则Home Assistant搜索将无法识别您的套件。 + +:::caution警告 +如果您在页面上找不到要连接的网络,那么很可能是XIAO ESP32C3不支持您的网络。请自行调整路由器以启用最大兼容性,并确保网络处于2.4GHz频段。XIAO不支持5GHz频段的网络。 +::: + +输入正确的WiFi密码并点击保存。设备将自动重启并尝试连接到您配置的网络。您不需要停留在该页面,现在可以关闭它。 + +
+ +### 步骤3. 将您的设备添加到Home Assistant + +如果网络连接顺利,您应该在Home Assistant上找到您的设备。请按照以下路径添加您的设备。 + +
+ +在菜单栏中点击**设置**,然后选择**设备与服务**。 + +
+ +您应该在**已发现**部分看到设备出现,点击**配置**按钮。在随后弹出的窗口中选择**提交**,并配置区域以正常使用设备。 + +
+ +套件已成功添加到Home Assistant中。 + +
+ +:::note注意 +如果您家中设备过多,存在一定概率在已发现中找不到您的设备。那么,请从您的路由器控制台获取套件的IP地址,点击右下角的**添加集成**按钮,并手动输入IP地址以添加设备。 +::: + +### 步骤4. 将组件添加到仪表板 + +然后,我们点击添加的**ESPHome**卡片,这里是**1个设备**。 + +
+ +这将显示我们为套件编写的所有组件内容。让我们稍微向下滚动显示区域,将这些组件全部添加到仪表板中。 + +:::caution警告 +如果您在此页面下找不到显示的组件,请检查套件的电源和日志。如果您正在使用计算机功能,有些计算机的USB端口可能无法提供足够的电源支持。如果您确定电源没有问题,请打开日志并将详细日志发送回Seeed Studio的技术支持部门。 +::: + +
+ +我们可以在**概览**中看到所有信息和内容。 + +### 步骤5. 编辑仪表板 + +目前,仪表板组件的显示顺序是自动的,这可能不利于观察和执行设置操作,因此接下来我们需要编辑仪表板,使其显示更符合其功能。 + +在概览中,点击带有三角形的三个点,然后点击**编辑仪表板**。 + +
+ +在编辑页面上,再次点击右上角的三个点,选择**原始配置编辑器**。 + +
+ +然后,请清除原始编辑器中的代码,复制下面的代码并保存。 + +:::tip提示 +新固件已根据ESPHome提供的文档进行了修订,每个设备都有一个唯一的MAC名称。因此,组件名称将不会相同。如果您想使用下面的代码,请将代码中的所有`{$DEVICE}`替换为您的设备名称。您的设备名称可以在ESPHome的设备实体中看到。 + +
+::: + +
+ + +
+点击此处查看完整代码预览 + +```css +title: My Home +views: + - path: default_view + title: Home + cards: + - type: horizontal-stack + cards: + - type: entities + entities: + - entity: button.{$DEVICE}_module_restart + name: Module Restart + - entity: sensor.{$DEVICE}_hardware_model + name: Hardware Model + - entity: sensor.{$DEVICE}_hardware_version + name: Hardware Version + - entity: sensor.{$DEVICE}_heartbeat + name: Heartbeat + - entity: sensor.{$DEVICE}_product_id + name: Product ID + - entity: sensor.{$DEVICE}_product_model + name: Product Model + title: DEVICE Information + - type: vertical-stack + cards: + - type: entities + entities: + - entity: select.{$DEVICE}_scene + name: Scene + - entity: number.{$DEVICE}_sensitivity + name: Sensitivity + - entity: select.{$DEVICE}_time_for_entering_no_person_state_standard_function + name: Time For Entering No Person State Setting (Standard Function) + - entity: binary_sensor.{$DEVICE}_presence_information + name: Presence Information + - entity: sensor.{$DEVICE}_motion_information + name: Motion Information + - entity: sensor.{$DEVICE}_body_movement_parameter + name: Body Movement Parameter + - entity: sensor.{$DEVICE}_active_reporting_of_proximity + name: Active Reporting Of Proximity + title: Unsolicited Information + - type: horizontal-stack + cards: + - type: entities + entities: + - entity: switch.{$DEVICE}_underlying_open_function_info_output_switch + name: Underlying Open Function Info Output Switch + - entity: sensor.{$DEVICE}_existence_energy + name: Existence Energy + - entity: sensor.{$DEVICE}_motion_energy + name: Motion Energy + - entity: sensor.{$DEVICE}_static_distance + name: Static Distance + - entity: sensor.{$DEVICE}_motion_distance + name: Motion Distance + - entity: sensor.{$DEVICE}_motion_speed + name: Motion Speed + title: Underlying Open Function + - type: horizontal-stack + cards: + - type: entities + entities: + - entity: sensor.{$DEVICE}_custom_mode_status + name: Custom Mode Status + - entity: number.{$DEVICE}_custom_mode + name: Custom Mode + - entity: sensor.{$DEVICE}_current_custom_mode + name: Current Custom Mode + - entity: button.{$DEVICE}_end_of_custom_mode_settings + name: End Of Custom Mode Settings + - entity: select.{$DEVICE}_existence_boundary + name: Existence Boundary + - entity: select.{$DEVICE}_motion_boundary + name: Motion Boundary + - entity: number.{$DEVICE}_existence_energy_threshold + name: Existence Energy Threshold + - entity: number.{$DEVICE}_motion_energy_threshold + name: Motion Energy Threshold + - entity: number.{$DEVICE}_motion_trigger_time + name: Motion Trigger Time + - entity: number.{$DEVICE}_motion_to_rest_time + name: Motion To Rest Time + - entity: number.{$DEVICE}_time_for_entering_no_person_state_underlying_open_function + name: Time For Entering No Person State (Underlying Open Function) + title: Custom Settings +``` + +
+ + +
+ +然后点击**完成**。 + +
+ +全新的仪表板界面已配置完成。 + +
+ +恭喜,至此您已完成套件的所有Home Assistant访问设置! + +## 仪表板操作细节 + +为帮助您快速了解套件的全部功能以及这些功能的使用方法,您需要仔细阅读本节。如果您需要更详细的信息,我们建议您花时间阅读[产品的用户手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_User_Manual-V1.5.pdf)。 + +关于仪表板的配置和参数细节,我们在ESPHome Docs中进行了详细的编写,因此请移至该处阅读完整的文章和细节。 + + + + +
+ +## 自定义二次开发 + +如果您需要更换雷达或安装Grove模块,可以参考下面的动态图进行操作。产品背面有四个用于固定外壳的螺丝,拆下它们,然后轻轻敲打以取下前盖。 + +
+ +如果您想安装Grove模块,可以参考下面的图片进行安装。我们建议将Grove连接器朝外,并将Grove线缆隐藏在Grove模块下方。 + +
+ +:::note注意 +除了模块的安装,套件的安装也需要特别注意。套件的安装位置将直接影响监控的准确性,请参考**[数据手册](https://files.seeedstudio.com/wiki/mmWave-radar/24GHz_mmWave_Sensor-Human_Static_Presence_Module_Lite_Datasheet.pdf)**中的相关说明进行安装。 +::: + +此套件主要面向智能家居方向,关于内容的二次开发我们不会深入太多细节,但我们会提供您可能需要的二次开发信息和内容,请参考。 + +- Wiki about the built-in MR24HPC1 module: [24GHz毫米波传感器 - 人体静态存在模块精简版(MR24HPC1)](https://wiki.seeedstudio.com/Radar_MR24HPC1) + +- Built-in XIAO ESP32C3 development materials and hands-on Wiki: [开始使用 Seeed Studio XIAO ESP32C3](https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/) + +### ESPHome的二次开发 + +目前套件的所有代码都是开源的。如果您有开发ESPHome的需求,可以使用外部组件的代码。 + +
+ +对于这个代码框架的使用,您可以参考项目中的examples文件夹下的[**mr24hpc1.yaml**](https://github.com/limengdu/mmwave-kit-external-components/blob/main/example/mr24hpc1.yaml)文件。这是一个ESPHome的示例yaml文件。 + +如果您之前没有任何ESPHome的使用经验,您可以阅读[**这个Wiki**](https://wiki.seeedstudio.com/xiao-esp32c3-esphome/)来学习如何使用它。 + +## 使用ESPHome OTA进行软件升级 + +在设计这款产品时,我们希望它是一款持续供电并固定在一个位置上的监控设备。同时,我们会不断更新和维护其软件,并设想了一种情况,即我们不需要改变它的位置,您就可以通过局域网实现OTA(Over-the-Air,空中下载技术)更新。 + +
+ +
+ +请点击ESPHome的主屏幕。 + +
+ +点击**NEW DEVICE(新设备)**。然后点击**Continue(继续)**。 + +在新的弹出窗口中,请输入您希望设置的应用程序的名称,以及WiFi的名称和密码。请确保套件和Home Assistant位于**同一局域网**中。 + +
+ +然后点击**Next(下一步)**。在设备类型中,请选择**ESP32-C3**。 + +
+ +然后点击**Next(下一步)**。然后点击**SKIP(跳过)**。 + +
+ +我们会在Github项目中更新我们的程序,一旦程序更新,您可以直接复制里面的所有内容并覆盖生成的yaml文件。也可以对此进行修改。 + +
+ + +最后,只需选择**Wireless(无线)**来上传程序。 + +
+ +## 恢复出厂固件 + +### 方法一:快速刷写最新固件 + +如果您在使用套件时发现与上述步骤和内容存在不一致,请更新套件的固件以恢复出厂设置。 + +**步骤一**. 点击下方按钮前往刷写固件页面。然后通过USB-C型线缆将套件连接到您的电脑。 + +
+ +**步骤二**. 点击Connect(连接)按钮,并选择具有**JTAG**名称的端口号设备。 + +
+ +**步骤三**. 刷写固件。 + +
+ +只需点击**INSTALL SEEED STUDIO MMWAVE KIT(安装Seeed Studio毫米波套件)**。 + +
+ +如果您看到下面的显示,那么固件刷写就完成了。此时,您可能需要重新上电以启动并运行程序。完成固件烧录后,您需要从零开始配置网络。 + +
+ +### 方法二:使用ESPHome工具刷写固件 + +如果您的设备工作不正常,请尝试恢复工厂固件并重新将设备添加到Home Assistant中。 + +
+ + +- 选项一:使用[ESPhome Web工具](https://web.esphome.io/?dashboard_install)进行上传。 + +使用Chrome或Edge浏览器打开[ESPhome Web工具](https://web.esphome.io/?dashboard_install)。 + +点击**CONNECT(连接)**。 + +
+ +在弹出窗口中选择XIAO ESP32串行端口。 + +
+ +点击**INSTALL(安装)**,然后选择从上述步骤中下载的`.bin`文件。 + +
+ +
+ + +- 选项二:使用[esphome-flasher工具](https://github.com/esphome/esphome-flasher)。 + +如果在安装驱动程序和更换浏览器后,您仍然无法使用方法一上传固件,那么您可以尝试使用方法二。请参照官方教程了解具体的安装方法和说明。 + +:::tip提示 +如果您希望观察XIAO ESP32C3的日志消息,您也可以通过此软件的View Logs(查看日志)按钮查看它们。 + +
+::: + +一旦固件成功上传,您将能够看到名为**seeedstudio-mr24hpc1**的网络。请参照[三分钟快速入门ESPHome](https://yiyan.baidu.com/#three-minutes-to-get-started-esphome)内容重新配置设备。 + + +## 资源 + +- **[GITHUB]** [项目开源](https://github.com/limengdu/mmwave-kit-external-components) +- **[PDF]** [快速设置模板](https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_Quick_Setup_Template-V1.0.pdf) +- **[PDF]** [数据表](https://files.seeedstudio.com/wiki/mmWave-radar/24GHz_mmWave_Sensor-Human_Static_Presence_Module_Lite_Datasheet.pdf) +- **[PDF]** [用户手册](https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_User_Manual-V1.5.pdf) +- **[ZIP]** [PCB和SCH Eagle文件](https://files.seeedstudio.com/wiki/mmwave_kit/mmWare-kit_sch&pcb.zip) +- **[PDF]** [电路图](https://files.seeedstudio.com/wiki/mmwave_kit/sch_mmware_kit.pdf) + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供各种支持,以确保您在使用我们产品时的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的喜好和需求。 + +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 4025309eb0eed..75da54bbf097e 100644 --- a/sidebars.js +++ b/sidebars.js @@ -4760,6 +4760,43 @@ const sidebars = { }, + + + { + type: 'doc', + id: 'zh-CN/Sensor/mmWave_radar_sensor/cn-mmwave_radar_Intro', + label: '毫米波雷达传感器', + className: 'sideboard_calss', + }, + { + type: 'category', + label: '用于XIAO的毫米波', + collapsed: true, + collapsible: true, + items: [ + 'zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao', + 'zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao_arduino', + 'zh-CN/Sensor/mmWave_radar_sensor/mmwave-for-XIAO/cn-mmwave-for-xiao-connect-to-HA', + ], + }, + { + type: 'category', + label: '毫米波套件', + collapsed: true, + collapsible: true, + items: [ + 'zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmwave_human_kit', + 'zh-CN/Sensor/mmWave_radar_sensor/mmwave-kit/cn-mmWave_Kit_And_Grove_Connect_To_ESPHome', + + ], + }, + 'zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24BSD1', + 'zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24FDB1', + 'zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPB1', + 'zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR24HPC1', + 'zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60BHA1', + 'zh-CN/Sensor/mmWave_radar_sensor/cn-Radar_MR60FDA1', + { type: 'doc', id: 'zh-CN/Sensor/SeeedStudio_XIAO/CN_SeeedStudio_XIAO_Series_Introduction', From 821135cea744d27f667f43d1329b061a54d9b7c9 Mon Sep 17 00:00:00 2001 From: nfs0619 <1447996181@qq.com> Date: Mon, 15 Jul 2024 16:23:55 +0800 Subject: [PATCH 3/3] To supplement and modify the Chinese Wiki. --- .../Grove/Grove_Sensors_Network/Grove_network_module_intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md b/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md index 5145684e7536f..c8e1a075ceb6b 100644 --- a/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md +++ b/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md @@ -14,7 +14,7 @@ last_update: The Grove Network Modules are modular electronic components introduced by Seeed Studio, forming part of their Grove series. The Grove series modules are designed to simplify the prototyping process, making the construction of electronic projects more intuitive and faster. The network modules primarily provide networking capabilities, allowing devices to connect to the network through wired or wireless means. -
+
Overall, Grove network modules significantly lower the barrier to electronic project development by simplifying the connection and configuration process, allowing you to focus on functionality implementation and application innovation.