- 2024-10-31
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-作品提交
本帖最后由 zygalaxy 于 2024-10-31 23:13 编辑
基于毫米波雷达的生命体征检测及健康监护系统
作者:zygalaxy
一、作品简介
作品照片:
作品功能介绍:
本系统融合毫米波雷达与多传感器技术,提供心率、呼吸频率监测及睡眠质量分析,实时数据可通过LCD屏和手机APP查看;摔倒检测功能在确认后自动报警并通知相关联系人;环境监测温湿度,异常时自动提醒用户采取措施。系统设计全面监控健康与环境,提升生活安全与舒适度。
物料清单及简介:
1、毫米波雷达传感器(MR60BHA1和MR60ADF)
用于非接触式检测老年人的心率、呼吸频率和摔倒情况。这些传感器利用毫米波雷达技术实现高精度的生命体征检测。
2、ESP32-S3开发板
作为系统的主控制器,执行数据处理、分析与设备控制功能。
3、ESP32-S3-LCD-BOARD
实时显示采集到的数据进行展示。
4、温湿度传感器
监测室内环境的温度和湿度变化,帮助维持适宜的生活环境。
二、系统框图
设计思路:
通过集成毫米波雷达技术和多种传感器,实现对用户心率、呼吸频率、睡眠质量等健康指标的实时监测,并能在检测到摔倒等紧急情况时自动报警,同时还能监控室内空气质量,提醒用户改善居住环境,以此来提升生活质量和安全性。
系统软硬件介绍:
硬件部分
1、毫米波雷达传感器(MR60BHA1和MR60ADF):非接触式检测心率、呼吸频率及摔倒情况。
2、温湿度传感器:监测室内温度和湿度。
3、ESP32-S3开发板:作为主控制器,负责数据处理、分析和设备控制。
软件部分
1、ESP-IDF开发框架:基于C/C++,用于开发和调试系统应用。
2、手机应用:实时查看健康数据,接收报警通知。
3、网页应用:查看健康数据。
4、数据分析和可视化:对健康数据进行处理,提供可视化报表。
实现框图:
三、各部分功能说明
(1)健康监护模块
1、心率监测:通过MR60BHA1毫米波雷达实时监测心率,数据通过ESP32模块传输至LCD触摸屏显示器和用户手- 完成了心率监测功能,通过MR60BHA1毫米波雷达实现了非接触式的心率监测,并成功将数据传输到显示终端和手机APP。
2、呼吸频率监测已经可以准确捕捉呼吸频率的变化,并且在异常情况下能够及时报警。
3、睡眠质量监测已能提供详细的睡眠质量报告,帮助用户改善睡眠。
实现思路:
通过UART esp32 与毫米波雷达传感进行通信,esp32 解析串口发送的相关数据并解析为呼吸、睡眠、心率等信息进行传递。非接触式的采集信息能够大幅度避免人体的不适。
相关部分代码:
void app_main(void)
{
ESP_LOGI(TAG, "Compile time: %s %s", __DATE__, __TIME__);
// Initialize NVS
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
// Initialize display and LVGL
bsp_display_start();
ESP_LOGI(TAG, "Display LVGL demo");
// Lock the display to prevent interference during initialization
bsp_display_lock(0);
// Pre-initialize styles (if needed)
lv_style_pre_init();
// 创建一个屏幕
lv_obj_t *scr = lv_disp_get_scr_act(NULL);
// 创建一个容器并设置为网格布局
lv_obj_t *cont = lv_obj_create(scr);
lv_obj_set_size(cont, 480, 480); // 假设屏幕分辨率为240x135,你可以根据实际情况调整
lv_obj_center(cont);
lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);
// 创建并配置心率标签
lv_obj_t *label_hr = lv_label_create(cont);
lv_label_set_text(label_hr, "Heart Rate: --");
lv_obj_set_style_text_font(label_hr, &lv_font_montserrat_26, 0); // 使用较大的字体
lv_obj_set_style_text_align(label_hr, LV_TEXT_ALIGN_CENTER, 0); // 文本居中
// 创建并配置呼吸率标签
lv_obj_t *label_br = lv_label_create(cont);
lv_label_set_text(label_br, "Breathing Rate: --");
lv_obj_set_style_text_font(label_br, &lv_font_montserrat_26, 0);
lv_obj_set_style_text_align(label_br, LV_TEXT_ALIGN_CENTER, 0);
// 创建并配置温度标签
lv_obj_t *label_temp = lv_label_create(cont);
lv_label_set_text(label_temp, "Temperature: --");
lv_obj_set_style_text_font(label_temp, &lv_font_montserrat_26, 0);
lv_obj_set_style_text_align(label_temp, LV_TEXT_ALIGN_CENTER, 0);
// 创建并配置湿度标签
lv_obj_t *label_humid = lv_label_create(cont);
lv_label_set_text(label_humid, "Humidity: --");
lv_obj_set_style_text_font(label_humid, &lv_font_montserrat_26, 0);
lv_obj_set_style_text_align(label_humid, LV_TEXT_ALIGN_CENTER, 0);
// 保存标签指针
hr_label = label_hr;
br_label = label_br;
temp_label = label_temp;
humid_label = label_humid;
// 设置网格布局
lv_obj_set_layout(cont, LV_LAYOUT_FLEX);
lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW_WRAP);
lv_obj_set_flex_align(cont, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
// Unlock the display after initialization
bsp_display_unlock();
// Initialize Wi-Fi
wifi_init();
// Main loop to handle LVGL tasks
while (1)
{
lv_task_handler(); // Process LVGL tasks
vTaskDelay(pdMS_TO_TICKS(5)); // Short delay
}
}
(2)摔倒检测:
1、通过MR60ADF毫米波雷达传感器检测人体摔倒事件,确认摔倒后,系统将自动触发报警并通知相关人员。
2、数据记录:记录摔倒事件的时间、地点等信息,供事后分析和改善。
实现思路:
通过 esp32检测雷达传感器的输出引脚,当检测到跌倒的时候会检测指定引脚的电平信号来判断是否摔倒,同时像服务器发送相关跌倒的信息进行报警。
相关部分代码:
// #include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#define FALL_DETECT_PIN 3 // 新增:定义摔倒检测引脚
// WiFi network credentials
const char *ssid = "ExclusiveForQuZhihang";
const char *password = "quzhihang1314!";
// MQTT broker settings
const char *mqtt_server = "192.168.2.105";
const int mqtt_port = 1883;
const char *clientId = "fall_1";
const char *mqtt_user = "zygalaxy";
// 摔倒检测主题
const char *fall_topic = "t/fall_detection"; // 新增:定义摔倒检测的主题
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId))
{
Serial.println(" connected");
}
else
{
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial.println("Ready");
pinMode(FALL_DETECT_PIN, INPUT_PULLUP); // 新增:设置摔倒检测引脚为输入模式,并启用内部上拉电阻
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
// 检测摔倒
if (digitalRead(FALL_DETECT_PIN) == LOW) // 新增:如果摔倒检测引脚为低电平
{
Serial.println("Fall detected!");
// 发送摔倒信息
client.publish(fall_topic, "Fall Detected"); // 新增:发布摔倒信息
// 可以添加延迟或其他逻辑来避免重复发送
delay(3000); // 等待一段时间,防止连续触发
}
delay(200);
}
(3)环境监测模块
1、空气质量监测:集成空气温湿度传感器,实时监测室内空气温湿度。
2、环境信息展示:在LCD触摸屏和手机APP上实时展示空气温湿度等环境信息。
3、报警系统:当空气质量参数超出正常范围时,系统会自动报警。
实现思路:
通过 esp32 驱动 dht11 温湿度传感器,读取温湿度信息,通过 mqtt 协议把数据发送到服务端进行储存,以便于监护者能够准确获取室内舒适度信息。
相关部分代码:
// #include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// WiFi network credentials
const char *ssid = "ExclusiveForQuZhihang";
const char *password = "quzhihang1314!";
// MQTT broker settings
const char *mqtt_server = "192.168.2.105";
const int mqtt_port = 1883;
const char *clientId = "humidity_1";
const char *mqtt_user = "zygalaxy";
// 温湿度主题
const char *humidity_topic = "t/humidity";
// 'payload': '{"humidity": 57, "temperature": 25}'
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId))
{
Serial.println(" connected");
}
else
{
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial.println("Ready");
Serial.println(F("DHTxx test!"));
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
int a = 0;
void loop()
{
if (!client.connected())
{
reconnect();
}
// 读取温湿度
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
client.loop();
// 定义发送的数据
String payload = "{\"humidity\":" + String(h) + ",\"temperature\":" + String(t) + "}";
client.publish(humidity_topic, payload.c_str());
delay(200);
}
四、作品源码
作品源码:https://download.eeworld.com.cn/detail/zygalaxy/634864
(注意:运行项目需要确保安装环境搭建文档全部搭建好环境)
五、作品功能演示视频
六、项目总结
项目总结:
通过项目整合与调试,我成功地将基于毫米波雷达的生命体征检测及健康监护系统各个模块整合在一起,实现了健康监护和环境监测的功能。在调试过程中,我解决了各种问题,确保了系统的稳定性和可靠性。未来,我将继续优化系统的功能和性能,为用户提供更加智能化、便捷化的健康监护与环境监测服务。
帖子分享链接汇总:
https://bbs.eeworld.com.cn/thread-1297669-1-1.html
https://bbs.eeworld.com.cn/thread-1297670-1-1.html
https://bbs.eeworld.com.cn/thread-1297673-1-1.html
https://bbs.eeworld.com.cn/thread-1297671-1-1.html
https://bbs.eeworld.com.cn/thread-1297674-1-1.html
https://bbs.eeworld.com.cn/thread-1297704-1-1.html
https://bbs.eeworld.com.cn/thread-1297705-1-1.html
https://bbs.eeworld.com.cn/thread-1297763-1-1.html
https://bbs.eeworld.com.cn/thread-1297752-1-1.html
七、其他
心得体会:
通过参加本次的【2024 DigiKey创意大赛】让我收获良多,学习了许多没有接触到的新知识,比如 ESP-IDF环境的开发,以及数据传输等多种方式,再次感谢本次大赛给我提供这么好的平台,祝大赛越办越好!
-
上传了资料:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-源码下载
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境监测
本帖最后由 zygalaxy 于 2024-10-31 19:56 编辑
##【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境监测模块开发
## 一、模块概述
本环境监测模块旨在通过温湿度传感器,实时监测室内温度和湿度,并将数据展示在LCD触摸屏和手机APP上。当温湿度参数超出正常范围时,系统会自动报警,提醒用户采取措施改善环境。
## 二、功能需求
1. **温湿度监测**
- 利用空气温湿度传感器监测室内温度和湿度。
2. **环境信息展示**
- 在LCD触摸屏和手机APP上实时展示温湿度等环境信息。
- 以直观的图表和数字形式呈现,方便用户查看。
3. **报警系统**
- 当温湿度参数超出正常范围时,自动报警。
- 报警方式可以是声音、震动、推送通知等。
## 三、硬件需求
1. **空气温湿度传感器**:监测室内温度和湿度。
2. **ESP32 评估板**:负责数据处理和传输。
3. **LCD 触摸屏显示器**:显示环境信息。
4. **手机 APP**:用户可以通过手机APP查看环境数据。
## 四、软件设计
1. **数据采集**
- 通过温湿度传感器持续采集室内环境数据。
- 确保数据采集的准确性和稳定性。
2. **数据处理**
- 对采集到的数据进行处理和分析,提取有用的环境信息。
- 计算温湿度的平均值、最大值和最小值等统计信息。
3. **数据传输**
- 通过 ESP32 模块将处理后的数据传输至 LCD 触摸屏显示器和用户手机APP。
- 确保数据传输的实时性和可靠性。
4. **报警触发**
- 当检测到温湿度参数超出正常范围时,自动触发报警。
- 根据不同的参数设置不同的报警阈值。
## 五、用户界面设计
1. **LCD 触摸屏显示器界面**
- 显示温湿度等环境信息。
- 提供简洁明了的图表和数字显示,方便用户查看。
- 可以设置报警阈值,当数据超出阈值时自动报警。
2. **手机 APP 界面**
- 实时显示室内环境数据。
- 提供历史数据查询功能,用户可以查看过去一段时间的环境数据。
- 推送报警通知,当检测到异常情况时及时提醒用户。
## 六、部分代码
硬件代码:
```c
// #include
#include
#include
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// WiFi network credentials
const char *ssid = "ExclusiveForQuZhihang";
const char *password = "quzhihang1314!";
// MQTT broker settings
const char *mqtt_server = "192.168.2.105";
const int mqtt_port = 1883;
const char *clientId = "humidity_1";
const char *mqtt_user = "zygalaxy";
// 温湿度主题
const char *humidity_topic = "t/humidity";
// 'payload': '{"humidity": 57, "temperature": 25}'
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload);
}
Serial.println();
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId))
{
Serial.println(" connected");
}
else
{
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial.println("Ready");
Serial.println(F("DHTxx test!"));
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
int a = 0;
void loop()
{
if (!client.connected())
{
reconnect();
}
// 读取温湿度
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
client.loop();
// 定义发送的数据
String payload = "{\"humidity\":" + String(h) + ",\"temperature\":" + String(t) + "}";
client.publish(humidity_topic, payload.c_str());
delay(200);
}
```
软件代码:
```python
# 温湿度
@app.route('/humidity', methods=['POST'])
def humidity():
reply = {"result": "ok", "message": "success"}
raw_data = request.get_json()
print(raw_data)
if raw_data['event'] == 'message.publish':
device_id = raw_data['clientid']
device = DeviceInfo.query.filter_by(device_id=device_id).first()
if device:
if device.device_type == 'humidity':
"""
{'publish_received_at': 1723617041052, 'pub_props': {'User-Property': {}}, 'peerhost': '112.224.169.80', 'qos': 0, 'topic': 't/humidity', 'clientid': 'humidity_1',
'payload': '{"humidity": 57, "temperature": 25}',
'username': 'your_username', 'event': 'message.publish', 'metadata': {'rule_id': 'humidity_WH_D'}, 'timestamp': 1723617041052, 'node': 'emqx@172.17.0.4', 'id': '00061F9EDD75F3A432490013C2880018', 'flags': {'retain': False, 'dup': False}}
"""
# payload转化为 json
payload = json.loads(raw_data['payload'])
humidity_data = HumidityData(
device_id=device_id,
timestamp=datetime.utcnow(),
user_id=device.user_id,
humidity=payload['humidity'],
temperature=payload['temperature']
)
print(humidity_data)
db.session.add(humidity_data)
db.session.commit()
socketio.emit('message', '设备:' + device_id + ' 触发了温湿度检测')
return json.dumps(reply), 200
```
### 总结
通过本项目,我们构建了一个基于温湿度传感器的环境监测模块,能够实时监测并展示室内温度和湿度。该系统不仅提供了直观的数据展示,还具备智能报警功能,确保用户能够及时了解并应对环境变化。结合LCD触摸屏和手机APP,用户可以随时随地获取最新的环境数据,为创造一个舒适健康的居住环境提供支持。
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-项目整合
本帖最后由 zygalaxy 于 2024-10-31 20:23 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 项目整合
**一、项目概述**
本项目通过毫米波雷达技术和多种传感器完成了基于毫米波雷达的生命体征检测及健康监护系统,为用户提供生活保障。系统包括健康监护模块、摔倒检测模块和环境监测模块。
**二、模块完成情况**
1. **健康监护模块**
- 完成了心率监测功能,通过MR60BHA1毫米波雷达实现了非接触式的心率监测,并成功将数据传输到显示终端和手机APP。
- 呼吸频率监测已经可以准确捕捉呼吸频率的变化,并且在异常情况下能够及时报警。
- 睡眠质量监测已能提供详细的睡眠质量报告,帮助用户改善睡眠。
2. **摔倒检测模块**
- 摔倒检测功能已实现,使用MR60ADF毫米波雷达传感器检测摔倒事件,并在确认后触发报警。
- 数据记录功能已就绪,记录了摔倒的时间、地点等信息,便于后续分析。
3. **环境监测模块**
- 集成了空气温湿度传感器,可以实时监测空气质量,并将数据同步到显示终端和手机APP。
- 当空气质量超出安全范围时,系统能够自动报警。
**三、软件架构概览**
系统采用了模块化设计,每个模块负责特定的功能:
- 数据采集层:负责从各种传感器获取原始数据。
- 数据处理层:处理和分析来自数据采集层的数据。
- 数据传输层:负责将处理后的数据传输到显示终端、手机APP或其他终端。
- 数据展示层:在LCD屏幕和手机APP上展示处理后的数据。
- 数据记录层:保存所有关键数据以便后续分析。
## 总结
通过项目整合与调试,我们成功地将基于毫米波雷达的生命体征检测及健康监护系统各个模块整合在一起,实现了健康监护和环境监测的功能。在调试过程中,我们解决了各种问题,确保了系统的稳定性和可靠性。未来,我们将继续优化系统的功能和性能,为用户提供更加智能化、便捷化的健康监护与环境监测服务。
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-摔倒检测
本帖最后由 zygalaxy 于 2024-10-31 14:54 编辑
# 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 摔倒检测模块开发
## 一、模块概述
本摔倒检测模块旨在通过先进的毫米波雷达传感器技术,及时检测人体摔倒事件,并在确认摔倒后自动触发报警并通知相关人员,确保及时救助。同时,该模块还能记录摔倒事件的时间、地点等信息,供事后分析和改善。
## 二、功能需求
1. **摔倒检测**
- 利用 MR60ADF 毫米波雷达传感器检测人体摔倒事件。
- 当检测到摔倒事件时,迅速确认并启动报警机制。
2. **报警通知**
- 自动触发报警,通知家人、医疗服务机构或指定的联系人。
- 报警方式可以包括声音、震动、推送通知等多种形式。
3. **数据记录**
- 记录摔倒事件的时间、地点等信息。
- 存储这些信息以便事后进行分析和改善。
## 三、硬件需求
1. **MR60ADF 毫米波 60GHz 摔倒检测模块**:核心检测部件。
2. **ESP32 评估板**:用于数据处理和传输。
3. **报警装置**:扬声器等,用于发出报警信号。
4. **存储设备**:用于记录摔倒事件信息。
## 四、软件设计
1. **数据采集**
- 通过毫米波雷达传感器持续监测人体活动状态。
- 采集的数据应准确反映人体的运动特征。
2. **数据处理**
- 对采集到的数据进行分析,判断是否发生摔倒事件。
3. **报警触发**
- 一旦确认摔倒事件,立即触发报警。
- 确保报警信号能够及时、准确地传达给相关人员。
4. **数据记录**
- 将摔倒事件的时间、地点等信息记录下来。
- 可以选择将数据存储在本地存储设备或通过网络上传至服务器。
## 五、用户界面设计
设计一个简单的用户界面,用于显示摔倒检测模块的状态和历史记录。
1. 显示当前是否处于监测状态。
2. 展示最近的摔倒事件记录,包括时间和地点。
## 六、相关代码
硬件代码:
```c
// #include
#include
#include
#define FALL_DETECT_PIN 3 // 新增:定义摔倒检测引脚
// WiFi network credentials
const char *ssid = "ExclusiveForQuZhihang";
const char *password = "quzhihang1314!";
// MQTT broker settings
const char *mqtt_server = "192.168.2.105";
const int mqtt_port = 1883;
const char *clientId = "humidity_1";
const char *mqtt_user = "zygalaxy";
// 摔倒检测主题
const char *fall_topic = "t/fall_detection"; // 新增:定义摔倒检测的主题
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload);
}
Serial.println();
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId))
{
Serial.println(" connected");
}
else
{
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial.println("Ready");
pinMode(FALL_DETECT_PIN, INPUT_PULLUP); // 新增:设置摔倒检测引脚为输入模式,并启用内部上拉电阻
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
// 检测摔倒
if (digitalRead(FALL_DETECT_PIN) == LOW) // 新增:如果摔倒检测引脚为低电平
{
Serial.println("Fall detected!");
// 发送摔倒信息
client.publish(fall_topic, "Fall Detected"); // 新增:发布摔倒信息
// 可以添加延迟或其他逻辑来避免重复发送
delay(3000); // 等待一段时间,防止连续触发
}
delay(200);
}
```
软件部分代码:
```python
# 摔倒检测
@app.route('/fall_detection', methods=['POST'])
def fall():
reply = {"result": "ok", "message": "success"}
"""
{'publish_received_at': 1723569671836, 'pub_props': {'User-Property': {}}, 'peerhost': '39.85.60.209', 'qos': 0, 'topic': 't/fall_detection', 'clientid': 'mqttx_7492d77a', 'payload': '{
\n "msg": "hello HTTP Server"\n}', 'username': 'undefined', 'event': 'message.publish', 'metadata': {'rule_id': 'fall_detection_WH_D'}, 'timestamp': 1723569671836, 'node': 'emqx@172.17.0.4', 'id': '00061F93D60912043249000A6ABB0002', 'flags': {'retain': True, 'dup': False}}
"""
# 解析 device_id
raw_data = request.get_json()
print(raw_data)
device_id = raw_data['clientid']
device = DeviceInfo.query.filter_by(device_id=device_id).first()
if device:
if device.device_type == 'fall_detection':
fall_detection_data = FallDetectionData(
device_id=device_id,
timestamp=datetime.utcnow(),
user_id=device.user_id
)
db.session.add(fall_detection_data)
db.session.commit()
warning_record = WarningRecord(
device_id=device_id,
timestamp=datetime.utcnow(),
user_id=device.user_id,
warning_type=1
)
db.session.add(warning_record)
db.session.commit()
print('设备:', device_id, ' 触发了跌倒检测')
socketio.emit('message', '设备:' + device_id + ' 触发了跌倒检测')
return json.dumps(reply), 200
```
```javascript
跌倒详细记录
{{ currentMonth }} ▼
导出数据
日期
时间
地点
持续时间
处理状态
{{ item.date }}
{{ item.time }}
{{ item.location }}
{{ item.duration }}
{{ item.status }}
上一页
{{ currentPage }}/{{ totalPages }}
下一页
本月跌倒总次数
{{ monthlyStats.totalFalls }}
平均处理时间
{{ monthlyStats.avgHandleTime }}
最常发生地点
{{ monthlyStats.mostLocation }}
export default {
data() {
return {
chartData: {},
opts: {
color: ["#FC8452"],
padding: [15, 15, 0, 5],
enableScroll: false,
legend: {},
xAxis: {
disableGrid: true
},
yAxis: {
data: [{
min: 0
}]
},
extra: {
column: {
type: "group",
width: 30,
activeBgColor: "#000000",
activeBgOpacity: 0.08
}
}
},
currentMonth: '2024-07',
currentPage: 1,
pageSize: 10,
fallRecords: [],
monthlyStats: {
totalFalls: 0,
avgHandleTime: '',
mostLocation: ''
}
};
},
computed: {
totalPages() {
return Math.ceil(this.fallRecords.length / this.pageSize);
}
},
onReady() {
this.getInitialData();
this.getFallRecords();
this.calculateMonthlyStats();
},
methods: {
getInitialData() {
let res = {
categories: ["2024-7-11", "2024-7-15", "2024-7-17"],
series: [{
name: "摔倒次数",
data: [2, 3, 1]
}]
};
this.chartData = JSON.parse(JSON.stringify(res));
},
getFallRecords() {
},
calculateMonthlyStats() {
// 计算月度统计数据
this.monthlyStats = {
totalFalls: this.fallRecords.length,
avgHandleTime: '4分钟',
mostLocation: '卧室'
};
},
onMonthChange(e) {
this.currentMonth = e.detail.value;
this.currentPage = 1;
this.getFallRecords(); // 重新获取数据
this.calculateMonthlyStats();
},
prevPage() {
if (this.currentPage > 1) {
this.currentPage--;
}
},
nextPage() {
if (this.currentPage < this.totalPages) {
this.currentPage++;
}
},
exportData() {
uni.showToast({
title: '数据导出中...',
icon: 'loading'
});
// 实现导出逻辑
}
}
};
.fall-analysis-container {
padding: 20rpx;
background-color: #f5f7fa;
}
.charts-box {
width: 100%;
height: 300px;
background-color: #fff;
border-radius: 12rpx;
margin-bottom: 20rpx;
}
.table-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
}
.table-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
.filter-group {
display: flex;
align-items: center;
gap: 20rpx;
}
.picker {
background-color: #fff;
padding: 10rpx 20rpx;
border-radius: 8rpx;
font-size: 28rpx;
}
.picker-arrow {
font-size: 24rpx;
color: #666;
margin-left: 10rpx;
}
.export-btn {
font-size: 24rpx;
padding: 10rpx 20rpx;
background-color: #4a90e2;
color: #fff;
border-radius: 8rpx;
}
.table-container {
background-color: #fff;
border-radius: 12rpx;
overflow: hidden;
}
.table-head {
display: flex;
background-color: #f8f9fa;
border-bottom: 2rpx solid #eee;
}
.th {
flex: 1;
padding: 20rpx;
font-size: 28rpx;
font-weight: bold;
color: #333;
text-align: center;
}
.table-body {
max-height: 600rpx;
}
.table-row {
display: flex;
border-bottom: 2rpx solid #eee;
}
.row-even {
background-color: #f9fbfd;
}
.td {
flex: 1;
padding: 20rpx;
font-size: 26rpx;
color: #666;
text-align: center;
}
.status-tag {
padding: 4rpx 12rpx;
border-radius: 4rpx;
font-size: 24rpx;
}
.status-resolved {
background-color: #e8f5e9;
color: #4caf50;
}
.status-pending {
background-color: #fff3e0;
color: #ff9800;
}
.pagination {
display: flex;
justify-content: center;
align-items: center;
padding: 20rpx;
gap: 20rpx;
}
.page-btn {
padding: 10rpx 20rpx;
font-size: 26rpx;
color: #4a90e2;
}
.page-btn.disabled {
color: #ccc;
}
.page-current {
font-size: 26rpx;
color: #666;
}
.summary-box {
margin-top: 20rpx;
display: flex;
justify-content: space-between;
background-color: #fff;
padding: 20rpx;
border-radius: 12rpx;
}
.summary-item {
text-align: center;
}
.summary-label {
font-size: 24rpx;
color: #666;
display: block;
margin-bottom: 8rpx;
}
.summary-value {
font-size: 32rpx;
color: #333;
font-weight: bold;
}
```
## 六、总结
通过的MR60ADF毫米波雷达传感器,结合ESP32的联网能力,成功实现了一个可以检测人体摔倒的模块。如果有什么实现上的问题可以留言。
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-监护模块
本帖最后由 zygalaxy 于 2024-10-31 19:52 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 健康监护模块开发
## 一、模块概述
本健康监护模块旨在为用户提供实时的心率、呼吸频率和睡眠质量监测功能,通过先进的毫米波雷达技术和传感器,准确获取用户的生命体征数据,并在异常情况下自动报警,通知家人或医疗服务机构。同时,该模块还能生成详细的睡眠质量报告,帮助用户改善睡眠。
## 二、功能需求
1. **心率监测**
- 利用 MR60BHA1 毫米波雷达实时监测用户的心率。
- 将心率数据通过 ESP32 模块传输至 LCD 触摸屏显示器和用户手机 APP,以便用户实时查看。
2. **呼吸频率监测**
- 采用毫米波雷达技术精准监测用户的呼吸频率。
- 当检测到呼吸频率异常时,自动报警并通知家人或医疗服务机构。
3. **睡眠质量监测**
- 通过传感器监测用户的睡眠状态。
- 生成详细的睡眠质量报告,包括入睡时间、睡眠时长、深度睡眠时间等信息。
- 为用户提供改善睡眠的建议。
## 三、硬件需求
1. **MR60BHA1 毫米波非接触式心率传感器模块**:用于心率监测。
2. **毫米波雷达**:用于呼吸频率监测和睡眠质量监测。
3. **ESP32 评估板**:负责数据传输和处理。
4. **LCD 触摸屏显示器**:显示心率、呼吸频率和睡眠质量数据。
## 四、软件设计
1. **数据采集**
- 利用传感器模块和毫米波雷达采集用户的心率、呼吸频率和睡眠状态数据。
- 确保数据采集的准确性和稳定性。
2. **数据处理**
- 对采集到的数据进行处理和分析,提取有用的信息。
- 计算心率、呼吸频率的平均值、最大值和最小值等统计信息。
- 分析睡眠状态数据,生成睡眠质量报告。
3. **数据传输**
- 通过 ESP32 模块将处理后的数据传输至 LCD 触摸屏显示器和用户手机 APP。
- 确保数据传输的实时性和可靠性。
4. **报警系统**
- 当检测到心率、呼吸频率异常或睡眠质量较差时,自动触发报警。
- 报警方式可以是声音、震动或推送通知等。
## 五、用户界面设计
1. **LCD 触摸屏显示器界面**
- 显示用户的心率、呼吸频率和睡眠质量数据。
- 提供简洁明了的图表和数字显示,方便用户查看。
2. **手机 APP 界面**
- 实时显示用户的健康数据,包括心率、呼吸频率和睡眠质量报告。
- 提供历史数据查询功能,用户可以查看过去一段时间的健康数据。
- 推送报警通知,当检测到异常情况时及时提醒用户。
## 六、部分代码
硬件代码:
```c
#include
#include
#include
#include
// WiFi network credentials
const char *ssid = "zygalaxy";
const char *password = "12345678";
// MQTT broker settings
const char *mqtt_server = "104.168.82.148";
const int mqtt_port = 1883;
const char *clientId = "heart_breath_1";
const char *mqtt_user = "zygalaxy";
const char *mqtt_password = "YOUR_MQTT_PASSWORD";
//定义心率呼吸信息topic
const char *heart_rate_topic = "t/heart_rate";
const char *breath_topic = "t/breath_rate";
//定义睡眠topic
// 进出床状态
//0:未检测到;1:上床;2:下床
const char *bed_topic = "t/bed";
// 睡眠状态
const char *sleep_awake_topic = "t/sleep_awake";
const char *sleep_light_topic = "t/sleep_light";
const char *sleep_deep_topic = "t/sleep_deep";
const char *sleep_none_topic = "t/sleep_none";
// 睡眠时间
const char *awake_time_topic = "t/awake_time";
const char *light_time_topic = "t/light_time";
const char *deep_time_topic = "t/deep_time";
// 睡眠评分
const char *sleep_score_topic = "t/sleep_score";
// 综合睡眠状态
const char *sleep_statue_existence_topic = "t/sleep_statue/existence";
const char *sleep_statue_state_topic = "t/sleep_statue/state";
const char *sleep_statue_breath_rate_topic = "t/sleep_statue/breath_rate";
const char *sleep_statue_heart_rate_topic = "t/sleep_statue/heart_rate";
const char *sleep_statue_turn_num_topic = "t/sleep_statue/turn_num";
const char *sleep_statue_substantial_move_ratio_topic = "t/sleep_statue/substantial_move_ratio";
const char *sleep_statue_small_move_ratio_topic = "t/sleep_statue/small_move_ratio";
const char *sleep_statue_apnea_num_topic = "t/sleep_statue/apnea_num";
// 睡眠质量信息
const char *sleep_quality_score_topic = "t/sleep_quality/score";
const char *sleep_quality_time_total_topic = "t/sleep_quality/time_total";
const char *sleep_quality_awake_time_radio_topic = "t/sleep_quality/awake_time_radio";
const char *sleep_quality_light_time_radio_topic = "t/sleep_quality/light_time_radio";
const char *sleep_quality_deep_time_radio_topic = "t/sleep_quality/deep_time_radio";
const char *sleep_quality_outbed_time_topic = "t/sleep_quality/outbed_time";
const char *sleep_quality_outbed_num_topic = "t/sleep_quality/outbed_num";
const char *sleep_quality_breath_rate_topic = "t/sleep_quality/breath_rate";
const char *sleep_quality_heart_rate_topic = "t/sleep_quality/heart_rate";
const char *sleep_quality_apnea_num_topic = "t/sleep_quality/apnea_num";
// 异常睡眠情况
const char *sleep_less4h_topic = "t/sleep_less4h";
const char *sleep_over12h_topic = "t/sleep_over12h";
const char *longtime_noone_topic = "t/longtime_noone";
const char *error_none_topic = "t/error_none";
WiFiClient wifiClient;
PubSubClient client(wifiClient);
BreathHeart_60GHz radar = BreathHeart_60GHz(&Serial1);
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload);
}
Serial.println();
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId, mqtt_user, mqtt_password)) {
Serial.println(" connected");
} else {
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
Serial1.begin(115200);
while (!Serial);
Serial.println("Ready");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
int a=0;
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
radar.BreathHeart_Breath_Sleep_Decode_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);
client.publish(heart_rate_topic, String(radar.heart_rate).c_str());
Serial.println("----------------------------");
break;
case HEARTRATEWAVE:
// Heart rate wave data can be published as well if needed.
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.");
client.publish(breath_topic, "Normal");
Serial.println("----------------------------");
break;
case BREATHRAPID:
Serial.println("Sensor detects current breath rate is too fast.");
//client.publish(breath_topic, "Rapid");
Serial.println("----------------------------");
break;
case BREATHSLOW:
Serial.println("Sensor detects current breath rate is too slow.");
//client.publish(breath_topic, "Slow");
Serial.println("----------------------------");
break;
case BREATHNONE:
Serial.println("There is no breathing information yet, please wait...");
break;
case BREATHVAL:
Serial.print("Sensor monitored the current breath rate value is: ");
Serial.println(radar.breath_rate);
client.publish(breath_topic, String(radar.breath_rate).c_str());
Serial.println("----------------------------");
break;
case BREATHWAVE:
// Breath wave data can be published as well if needed.
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;
//睡眠信息
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);
}
```
软件代码:
```python
# 心率呼吸查询
@app.route('/heart_rate_respiration', methods=['GET'])
def get_heart_rate_respiration():
reply = {"result": "ok", "message": "success"}
device_id = request.args.get('device_id')
start_date = request.args.get('start_date')
end_date = request.args.get('end_date')
if device_id and start_date and end_date:
# 先在心率查询,再在呼吸查询
heart_rate_data = HeartRateData.query.filter(
HeartRateData.device_id == device_id,
HeartRateData.timestamp >= start_date,
HeartRateData.timestamp = start_date,
RespirationData.timestamp
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境搭建 5
本帖最后由 zygalaxy 于 2024-10-30 09:56 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建 - PlatformIO安装
### 方法一:通过Homebrew安装(Mac)
1. **安装Homebrew**(如果尚未安装):
```text
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
2. **使用Homebrew安装PlatformIO**:
```text
brew install platformio
```
3. **验证安装**:
```text
pio --version
```
详细文档请参考PlatformIO Homebrew安装文档 。
### 方法二:通过安装脚本安装
1. **使用curl下载并运行安装脚本**:
```text
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
```
2. **或者使用wget下载并运行安装脚本**:
```text
wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
```
3. **验证安装**:
```text
pio --version
```
详细文档请参考PlatformIO安装脚本文档 。
### 方法三:通过PlatformIO IDE for VSCode安装
1. **下载并安装Visual Studio Code**:
1. 访问 VSCode 官方网站:https://code.visualstudio.com/ 下载对应系统版本的安装包
2. 运行下载的安装程序,并按照提示完成安装。
3. 打开 VSCode。
2. **在VSCode中安装PlatformIO IDE扩展**:
- 打开VSCode的扩展管理器(左侧栏的方块图标)
- 搜索`platformio ide`
- 点击`Install`进行安装
3. **使用PlatformIO IDE**:
- 打开VSCode,点击左侧栏的蚂蚁图标进入PlatformIO Home
- 创建或导入PlatformIO项目
通过以上任意一种方法,你都可以在macOS平台上成功安装并使用PlatformIO。如果有任何问题,可以参考对应的官方文档、留言与我交流。
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境搭建 4
本帖最后由 zygalaxy 于 2024-10-29 21:21 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建 - ESP-IDF环境安装
**一、Windows 平台(离线安装)**
1. 下载离线安装包
- 从 乐鑫的 esp-idf 官方网站下载离线安装包
2. 安装
- 打开下载的安装包,根据提示进行安装
这里应用修复以后,点击下一步进行安装
- 选择安装的路径
- 选择安装的芯片包
- 继续下一步进行安装,等待进度条走完
3. 安装完成
- 当显示下面的图片的时候就证明安装已经完成了
-
**二、macOS 平台**
1. 安装 Homebrew
- 如果还没有安装 Homebrew,请执行下面的命令进行安装。
```shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
2. 安装 XCode 命令行工具
`xcode-select --install`
3. 安装 CMake 和 Ninja 编译工具
- 若有 [HomeBrew](https://brew.sh/),可以运行:
```
brew install cmake ninja dfu-util
```
- 强烈建议同时安装 [ccache](https://ccache.samba.org/) 以获得更快的编译速度。如有 [HomeBrew](https://brew.sh/),可通过 [MacPorts](https://www.macports.org/install.php) 上的 `brew install ccache` 或 `sudo port install ccache` 完成安装。
4. 安装 Python 3
- 检查 Python 版本 `python3 --version`
- 如果出现错误,执行下面的命令进行安装 `brew install python3`
5. 获取 ESP-IDF
- 打开终端,运行以下命令:
```
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
```
- ESP-IDF 将下载至 `~/esp/esp-idf`
6. 设置工具
- 执行下面的命令安装对应各个芯片的工具包
```
cd ~/esp/esp-idf
./install.sh esp32
```
**三、Linux 平台(以 (Debian、Ubuntu) 为例)**
1. 安装依赖项
- 打开终端。
- 运行以下命令安装必要的依赖项:`sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0`。
2. 安装 Python
- 如果系统中没有安装 Python 3,或者需要安装特定版本的 Python 3,可以使用以下命令安装:`sudo apt-get install python3.8`(根据需要调整版本号)。
- 执行以下命令来检查当前使用的 Python 版本:
```
python --version
```
3. 安装 Git
- 运行 `sudo apt-get install git`。
4. 安装 ESP-IDF 工具
- 打开终端,运行以下命令:
```
mkdir -p ~/esp
cd ~/esp
git clone -b v5.2.3 --recursive https://github.com/espressif/esp-idf.git
```
ESP-IDF 将下载至 `~/esp/esp-idf`
这是下载已经开始
下面是安装完成的图片
5. 设置工具
- 除了 ESP-IDF 本身,还需要为支持 ESP32-S3 的项目安装 ESP-IDF 使用的各种工具,比如编译器、调试器、Python 包等。
```shell
cd ~/esp/esp-idf
./install.sh esp32s3
```
**因为我这里只使用芯片 esp32 s3,所以只安装 esp32s3 的工具,esp32 需要单独安装./install.sh esp32**
- 要在安装工具时优先选择 Espressif 下载服务器,请在运行 `install.sh` 时使用以下命令:
```
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh
```
6. 设置环境变量
- 此时,刚刚安装的工具尚未添加至 PATH 环境变量,无法通过“命令窗口”使用这些工具。因此,必须设置一些环境变量。这可以通过 ESP-IDF 提供的另一个脚本进行设置。
请在需要运行 ESP-IDF 的终端窗口运行以下命令:
```
. $HOME/esp/esp-idf/export.sh
```
至此各平台环境已经全部安装完成
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境搭建 3
本帖最后由 zygalaxy 于 2024-10-30 15:30 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建 - EMQX 安装
由于我的服务器是 WindowServer2016,以下是在Windows平台安装EMQX的详细步骤:
**一、系统要求检查**
- 确保你的Windows系统是Windows 7或更高版本。并且系统已经安装了.NET Framework 4.5或更高版本。这是因为EMQX在Windows环境下运行依赖于相关的系统组件来保证正常的功能和性能。(一般Win10 以及以上都是满足的)
- 一般如果在服务器上面,运行内存要尽量大一些,避免程序因为内存不足自动停止。
**二、下载EMQX安装包**
1. 访问EMQX官方网站(https://www.emqx.io/)。
2. 在官网的下载页面找到适合Windows系统的EMQX安装包。通常会提供不同版本供选择,根据你的需求下载对应的版本。也可以进入 github 的官网发布页面下载`https://github.com/emqx/emqx/releases`
3. 因为官方从5.3.2版本开始就不再提供 window 的最新版本,所以只能去 github下载最新版。
https://github.com/emqx/emqx/releases/download/v5.3.2/emqx-5.3.2-windows-amd64.zip
![856225](/data/attachment/forum/202410/29/213802h1bx9xqou9x1y3lq.png?rand=7093.639493902219)
**三、解压文件**
1. 使用您喜欢的解压缩工具(如 WinRAR, 7-Zip 等)将下载的 `.zip` 文件解压到您希望安装 EMQX 的目录下。例如,可以创建一个名为 `C:\emqx` 的文件夹,并将所有内容解压至此。
![856584](/data/attachment/forum/202410/30/152616vgqg5s4e0nccvlqq.png.thumb.jpg?rand=4077.0268814352153)
**四、 启动 EMQX**
1. 打开命令提示符窗口(以管理员身份运行)。
2. 导航到 EMQX 的 bin 目录,例如:
```
cd C:\emqx\bin
```
![856591](/data/attachment/forum/202410/30/152631j8u82yg36hlv82g8.png.thumb.jpg?rand=8415.790996336866)
3. 运行以下命令来启动 EMQX 服务:
```
emqx start
```
**四、验证安装**
1. 打开浏览器并访问 `http://localhost:18083`,这是 EMQX 默认的管理界面地址。如果在安装完成后没有自动启动EMQX服务,你可以通过以下方式手动启动:在安装目录下找到EMQX的可执行文件或者使用系统服务管理工具。在Windows系统中,可以通过在“开始菜单”中搜索“服务”,打开服务管理控制台。在服务列表中找到“EMQX”服务,右键点击它并选择“启动”。
2. 第一次访问时,您可能需要使用默认的用户名 `admin` 和密码 `public` 登录。在管理控制台中,你可以进行各种配置操作,如创建用户、管理连接、查看消息统计等。如果能够成功访问管理控制台,就说明EMQX已经成功安装并在你的Windows系统上运行。
因为其他版本在 EMQX 官网都有详细文档,所以不再赘述——https://docs.emqx.com/zh/emqx/latest/deploy/install-open-source.html
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境搭建 2
本帖最后由 zygalaxy 于 2024-10-29 20:58 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建 - APP开发环境搭建
因为需要使用HBuilder X和uni-app开发App,所以需要按照以下步骤搭建开发环境:
### 1. 安装HBuilder X
首先,需要下载并安装HBuilder X,这是开发uni-app的主要工具。HBuilder X是一个强大的前端开发工具,专门为uni-app进行了优化。可以从官方网站下载最新版本的HBuilder X:[下载HBuilder X](https://www.dcloud.io/hbuilderx.html)。
### 2. 创建uni-app项目
打开HBuilder X后,可以通过以下步骤创建一个新的uni-app项目:
- 点击左上角的“文件”菜单,选择“新建” -> “项目”。
- 在弹出的对话框中,选择“uni-app”项目模板。
- 填写项目名称、项目路径等信息,然后点击“创建”按钮。
- 如果有DCloud账号,可以选择或创建一个AppID。如果没有,可以注册一个账号并绑定新的AppID。
- 创建项目后,会看到项目的目录结构,如果没有`package.json`文件,需要在终端运行`npm init`来创建它。
### 3. 安装依赖和配置项目
- 打开终端,定位到的项目目录,运行`npm install`来安装项目依赖。(默认可以不做,下载的项目依据要求操作)。
- 配置项目的`manifest.json`文件,这是uni-app项目的配置文件,可以在这里设置App的名称、图标、权限等信息。
### 4. 开发App
- 使用Vue.js语法开发App,编写页面、组件和逻辑代码。
- 利用HBuilder X提供的代码提示和自动补全功能,提高开发效率。
### 5. 运行和预览
- 在HBuilder X中,点击工具栏上的“运行”按钮,选择目标平台(如H5、微信小程序等),然后在模拟器或真机上预览项目效果。
### 6. 发布App
- 当App开发完成并测试无误后,可以通过HBuilder X的“发行”功能来发布App。
- 选择“发行”菜单,然后根据的需求选择不同的发布选项,例如发布为微信小程序、H5、原生App等。
### 注意事项
- 开发App时,可能需要安装微信开发者工具,因为目前开发App也需要使用到它。
- 如果是第一次使用HBuilder X开发小程序,需要配置小程序IDE的相关路径,才能运行成功。
- 发布App时,需要根据目标平台的要求,配置相应的签名和证书。
通过以上步骤,可以使用HBuilder X和uni-app搭建起一个完整的App开发环境,并进行App的开发、调试和发布。
更多详细信息和高级配置,可以参考官方文档:[uni-app快速上手](https://uniapp.dcloud.io/quickstart) 。
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境安装 2
# **【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建 - ESP-IDF环境安装**
### 方法一:通过Homebrew安装
1. **安装Homebrew**(如果尚未安装):
sh
```text
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
2. **使用Homebrew安装PlatformIO**:
sh
```text
brew install platformio
```
3. **验证安装**:
sh
```text
pio --version
```
详细文档请参考PlatformIO Homebrew安装文档 。
### 方法二:通过安装脚本安装
1. **使用curl下载并运行安装脚本**:
sh
```text
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
```
2. **或者使用wget下载并运行安装脚本**:
sh
```text
wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
```
3. **验证安装**:
sh
```text
pio --version
```
详细文档请参考PlatformIO安装脚本文档 。
### 方法三:通过PlatformIO IDE for VSCode安装
1. **下载并安装Visual Studio Code**: 下载VSCode
2. **在VSCode中安装PlatformIO IDE扩展**:
- 打开VSCode的扩展管理器(左侧栏的方块图标)
- 搜索`platformio ide`
- 点击`Install`进行安装
3. **使用PlatformIO IDE**:
- 打开VSCode,点击左侧栏的蚂蚁图标进入PlatformIO Home
- 创建或导入PlatformIO项目
详细文档请参考PlatformIO IDE for VSCode文档 。
通过以上任意一种方法,你都可以在macOS平台上成功安装并使用PlatformIO。如果有任何问题,可以参考对应的官方文档获取更多帮助。
![image-20241020204246299](/Users/Galaxy/Library/Application Support/typora-user-images/image-20241020204246299.png)
![image-20241020210852046](/Users/Galaxy/Library/Application Support/typora-user-images/image-20241020210852046.png)
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建1
本帖最后由 zygalaxy 于 2024-10-29 20:52 编辑
## 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建-Node.js 与 Python 的服务器开发环境搭建
由于大赛的项目需要设计软件方面,下面是一份安装 Node.js、Python 环境以及通过 PHPStudy 安装 MySQL 数据库环境的简易指南。请注意,由于软件版本会不断更新,具体步骤可能会有所变化,请参考官方文档获取最新信息。
### 1. 安装 Node.js
#### 步骤:
1. 访问 Node.js 官方网站:https://nodejs.org/
2. 在首页上选择适合您操作系统的 LTS (长期支持) 版本或 Current (当前) 版本来下载。
3. 下载完成后,运行安装程序,并按照提示完成安装过程。
4. 验证安装是否成功,在命令行工具中输入 `node -v` 和 `npm -v` 来查看 Node.js 和 npm 的版本号。
### 2. 安装 Python 环境
#### 步骤:
1. 访问 Python 官方网站:https://www.python.org/downloads/
2. 根据您的操作系统选择合适的 Python 版本进行下载。建议选择最新的稳定版。
3. 运行下载好的安装包,确保勾选了“Add Python to PATH”选项以便于在命令行中直接使用 Python。
4. 按照安装向导的指示完成安装。
5. 打开命令行工具,输入 `python --version` 或 `python3 --version` 来验证 Python 是否已正确安装。
### 3. 使用 PHPStudy 安装 MySQL
PHPStudy 是一个集成了 Apache、Nginx、PHP 和 MySQL 的集成环境套件,非常适合开发人员快速搭建 Web 开发环境。
#### 步骤:
1. 访问 PHPStudy 官方网站:http://old.xp.cn/(注意检查网址的安全性)
2. 根据您的操作系统选择相应的 PHPStudy 版本下载。
3. 解压下载文件到您想要存放的位置。
4. 运行解压后的目录下的 `phpstudy.exe` 文件启动 PHPStudy 控制面板。
5. 在控制面板中找到 MySQL 服务并点击启动。首次启动时可能需要设置 root 用户密码。
6. 您可以通过 phpMyAdmin 工具来管理 MySQL 数据库,它通常会在安装后自动配置好访问路径。
至此服务器环境搭建完毕
### 注意事项
- 对于 Windows 用户来说,这些软件大多提供了图形界面安装方式,相对直观简单。
- Linux 和 macOS 用户可能更倾向于使用命令行工具如 `apt`, `brew` 等来安装软件。
- 安装过程中如果遇到问题,可以查阅相关软件的官方文档或社区论坛寻求帮助。
如果有任何特定需求或遇到了困难,欢迎继续提问。
- 2024-09-11
-
发表了主题帖:
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 物料开箱
本帖最后由 zygalaxy 于 2024-9-11 20:05 编辑
【2024 DigiKey 创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 物料开箱
首先感谢EEworld与DigiKey 举办这样的活动为我提供发展想象的平台,让我能够将自己的想法付诸实践。
2024 DigiKey 创意大赛所需物料都已经收到,再次感谢EEworld与DigiKey。
物料清单
``1、ESP32-S3-LCD-EV-BOARD``
``2、ESP32-S3-DEVKITC-1-N8R8``
由于前期其他的比赛导致没有及时的更新开箱帖,十分抱歉。
后续会逐步跟进更新项目的进度!
- 2024-08-30
-
回复了主题帖:
【2024 DigiKey 创意大赛】睡眠监测设备制作进度分享
秦天qintian0303 发表于 2024-8-26 11:31
这个还有方向的要求吗?主要应该是距离影响吧
不是这个方向嘞,说的是睡眠监测这个方向,这个毫米波雷达和主控mcu是有一定的高度要求的,要不会有很大的干扰嘞,
- 2024-08-25
-
回复了主题帖:
【2024 DigiKey 创意大赛】睡眠监测设备制作进度分享
你好,我也是这个方向,请问你这个安装高度不会影响检测吗,就是他这个安装高度我看文档好像有一定的要求
- 2024-08-11
-
发表了主题帖:
Sipeed MAix BiT AIoT 开发套件测评-评测总结报告
本帖最后由 zygalaxy 于 2024-8-11 14:07 编辑
时间规划:评测第八天
内容要点:
优点与亮点:
总结Sipeed MAix BiT开发套件的突出特点,如易用性、性能、集成度等。
1. 易用性: Sipeed MAix BiT开发套件以其直观的开箱体验、详尽的文档以及顺畅的环境搭建流程,展现了出色的易用性。硬件设计紧凑,接口布局合理,便于快速上手和原型制作。
2. 性能: K210芯片的双核RISC-V CPU与AI加速器KPU提供了强大的运算能力和高效的AI处理能力,适合边缘计算应用,如实时图像识别和声音处理。
3. 集成度: 套件集成了屏幕和摄像头,提供了一体化的开发环境,非常适合AI视觉识别项目,增强了在智能家居和智能安防等场景的应用潜力。
改进建议:
基于测试中遇到的问题,提出具体的改进建议,包括硬件设计、软件支持、文档完善等方面。
1. 硬件设计: 提升摄像头模块的分辨率和质量,以适应更复杂图像处理的需求。
2. 软件支持: 增强IDE的功能,简化代码调试过程;提供更丰富的API文档和示例代码,帮助开发者快速掌握开发技巧。
3. 文档完善: 细化硬件接口说明,增加故障排查指南,确保新手也能轻松解决常见问题。
应用场景展望:根据评测结果,探讨该套件在不同领域的应用潜力及可能的改进方向。
1. 智能家居: 利用其集成的摄像头和屏幕,可以开发更智能的家庭安全系统,实现面部识别解锁、入侵警报等功能。
2. 智能安防: 在公共场所部署,进行人群行为分析,提高公共安全水平。
4. 教育与培训: 作为教学工具,用于教授AI和IoT原理,激发学生对技术的兴趣,促进教育发展。
6. 资源优化: 探索低功耗模式下的性能极限,适用于需要长时间运行的远程监控设备。
- 2024-08-05
-
回复了主题帖:
Sipeed MAix BiT AIoT 开发套件测评-模型训练 (二)
wangerxian 发表于 2024-8-5 09:17
改源码的话,只能离线训练了吧。
本地这个本身就是离线训练的,你只不过就是调用已经封装好的函数
- 2024-08-03
-
回复了主题帖:
Sipeed MAix BiT AIoT 开发套件测评-模型训练 (二)
wangerxian 发表于 2024-8-2 10:01
这个训练模型的工具可以调参吗?
本地训练这个能调整的参数有限, 大部分都封装在了软件内部(可以去改源码-在安装目录),建议还是他官方的在线训练,本机在没有 cuda的情况下还是比较慢的
- 2024-08-01
-
发表了主题帖:
Sipeed MAix BiT AIoT 开发套件测评-性能与稳定性评估
本帖最后由 zygalaxy 于 2024-8-11 11:39 编辑
### 长时间运行测试
时间规划:评测第七天
内容要点:
稳定性监测:
让开发板执行一个中等复杂度的AI识别任务,连续运行超过24小时,记录任何异常情况。
这里我们选择1000 种物体分类模型来作为测试的模型,因为模型比较大,所以还需要刷minimum 版本固件
[下载1000 种物体分类模型](https://dl.sipeed.com/fileList/MAIX/MaixPy/model/mobilenet_0x300000.kfpkg "下载1000 种物体分类模型")
上面的模型按照刷固件的方式直接刷进去
[下载label.txt](https://github.com/sipeed/MaixPy-v1_scripts/tree/master/machine_vision/mobilenet_1000_class/labels.txt "下载label.txt")
因为模型比较大本次我们选择把label.txt放到SD卡中进行读取测试。(为什么不放模型呢,因为人家给打包在固件里面了:Onion-110:)
SD卡中应该有以下两个文件
``因为刷的是mini版本的固件,可能会不支持IDE,所以进行脱机测试,将运行的程序文件放到SD卡中,并且命名为main.py,当开机检测到这个文件的时候程序会自动执行``
main.py文件如下:
```python
# refer to http://blog.sipeed.com/p/680.html
import sensor, image, lcd, time
import KPU as kpu
import gc, sys
def main(labels = None, model_addr="/sd/m.kmodel", lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):
gc.collect()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_hmirror(sensor_hmirror)
sensor.set_vflip(sensor_vflip)
sensor.run(1)
lcd.init(type=1)
lcd.rotation(lcd_rotation)
lcd.clear(lcd.WHITE)
if not labels:
raise Exception("no labels.txt")
task = kpu.load(model_addr)
try:
while(True):
img = sensor.snapshot()
t = time.ticks_ms()
fmap = kpu.forward(task, img)
t = time.ticks_ms() - t
plist=fmap[:]
pmax=max(plist)
max_index=plist.index(pmax)
img.draw_string(0,0, "%.2f\n%s" %(pmax, labels[max_index].strip()), scale=2, color=(255, 0, 0))
img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))
lcd.display(img)
except Exception as e:
sys.print_exception(e)
finally:
kpu.deinit(task)
if __name__ == "__main__":
try:
with open("/sd/labels.txt") as f:
labels = f.readlines()
main(labels=labels, model_addr=0x300000, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False)
# main(labels=labels, model_addr="/sd/m.kmodel")
except Exception as e:
sys.print_exception(e)
finally:
gc.collect()
```
txt文件如下:
```python
tench, Tinca tinca
goldfish, Carassius auratus
great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias
tiger shark, Galeocerdo cuvieri
hammerhead, hammerhead shark
electric ray, crampfish, numbfish, torpedo
stingray
cock
hen
ostrich, Struthio camelus
brambling, Fringilla montifringilla
goldfinch, Carduelis carduelis
house finch, linnet, Carpodacus mexicanus
junco, snowbird
indigo bunting, indigo finch, indigo bird, Passerina cyanea
robin, American robin, Turdus migratorius
bulbul
jay
magpie
chickadee
water ouzel, dipper
kite
bald eagle, American eagle, Haliaeetus leucocephalus
vulture
great grey owl, great gray owl, Strix nebulosa
European fire salamander, Salamandra salamandra
common newt, Triturus vulgaris
eft
spotted salamander, Ambystoma maculatum
axolotl, mud puppy, Ambystoma mexicanum
bullfrog, Rana catesbeiana
tree frog, tree-frog
tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui
loggerhead, loggerhead turtle, Caretta caretta
leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea
mud turtle
terrapin
box turtle, box tortoise
banded gecko
common iguana, iguana, Iguana iguana
American chameleon, anole, Anolis carolinensis
whiptail, whiptail lizard
agama
frilled lizard, Chlamydosaurus kingi
alligator lizard
Gila monster, Heloderma suspectum
green lizard, Lacerta viridis
African chameleon, Chamaeleo chamaeleon
Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis
African crocodile, Nile crocodile, Crocodylus niloticus
American alligator, Alligator mississipiensis
triceratops
thunder snake, worm snake, Carphophis amoenus
ringneck snake, ring-necked snake, ring snake
hognose snake, puff adder, sand viper
green snake, grass snake
king snake, kingsnake
garter snake, grass snake
water snake
vine snake
night snake, Hypsiglena torquata
boa constrictor, Constrictor constrictor
rock python, rock snake, Python sebae
Indian cobra, Naja naja
green mamba
sea snake
horned viper, cerastes, sand viper, horned asp, Cerastes cornutus
diamondback, diamondback rattlesnake, Crotalus adamanteus
sidewinder, horned rattlesnake, Crotalus cerastes
trilobite
harvestman, daddy longlegs, Phalangium opilio
scorpion
black and gold garden spider, Argiope aurantia
barn spider, Araneus cavaticus
garden spider, Aranea diademata
black widow, Latrodectus mactans
tarantula
wolf spider, hunting spider
tick
centipede
black grouse
ptarmigan
ruffed grouse, partridge, Bonasa umbellus
prairie chicken, prairie grouse, prairie fowl
peacock
quail
partridge
African grey, African gray, Psittacus erithacus
macaw
sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita
lorikeet
coucal
bee eater
hornbill
hummingbird
jacamar
toucan
drake
red-breasted merganser, Mergus serrator
goose
black swan, Cygnus atratus
tusker
echidna, spiny anteater, anteater
platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus
wallaby, brush kangaroo
koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus
wombat
jellyfish
sea anemone, anemone
brain coral
flatworm, platyhelminth
nematode, nematode worm, roundworm
conch
snail
slug
sea slug, nudibranch
chiton, coat-of-mail shell, sea cradle, polyplacophore
chambered nautilus, pearly nautilus, nautilus
Dungeness crab, Cancer magister
rock crab, Cancer irroratus
fiddler crab
king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica
American lobster, Northern lobster, Maine lobster, Homarus americanus
spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish
crayfish, crawfish, crawdad, crawdaddy
hermit crab
isopod
white stork, Ciconia ciconia
black stork, Ciconia nigra
spoonbill
flamingo
little blue heron, Egretta caerulea
American egret, great white heron, Egretta albus
bittern
crane
limpkin, Aramus pictus
European gallinule, Porphyrio porphyrio
American coot, marsh hen, mud hen, water hen, Fulica americana
bustard
ruddy turnstone, Arenaria interpres
red-backed sandpiper, dunlin, Erolia alpina
redshank, Tringa totanus
dowitcher
oystercatcher, oyster catcher
pelican
king penguin, Aptenodytes patagonica
albatross, mollymawk
grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus
killer whale, killer, orca, grampus, sea wolf, Orcinus orca
dugong, Dugong dugon
sea lion
Chihuahua
Japanese spaniel
Maltese dog, Maltese terrier, Maltese
Pekinese, Pekingese, Peke
Shih-Tzu
Blenheim spaniel
papillon
toy terrier
Rhodesian ridgeback
Afghan hound, Afghan
basset, basset hound
beagle
bloodhound, sleuthhound
bluetick
black-and-tan coonhound
Walker hound, Walker foxhound
English foxhound
redbone
borzoi, Russian wolfhound
Irish wolfhound
Italian greyhound
whippet
Ibizan hound, Ibizan Podenco
Norwegian elkhound, elkhound
otterhound, otter hound
Saluki, gazelle hound
Scottish deerhound, deerhound
Weimaraner
Staffordshire bullterrier, Staffordshire bull terrier
American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier
Bedlington terrier
Border terrier
Kerry blue terrier
Irish terrier
Norfolk terrier
Norwich terrier
Yorkshire terrier
wire-haired fox terrier
Lakeland terrier
Sealyham terrier, Sealyham
Airedale, Airedale terrier
cairn, cairn terrier
Australian terrier
Dandie Dinmont, Dandie Dinmont terrier
Boston bull, Boston terrier
miniature schnauzer
giant schnauzer
standard schnauzer
Scotch terrier, Scottish terrier, Scottie
Tibetan terrier, chrysanthemum dog
silky terrier, Sydney silky
soft-coated wheaten terrier
West Highland white terrier
Lhasa, Lhasa apso
flat-coated retriever
curly-coated retriever
golden retriever
Labrador retriever
Chesapeake Bay retriever
German short-haired pointer
vizsla, Hungarian pointer
English setter
Irish setter, red setter
Gordon setter
Brittany spaniel
clumber, clumber spaniel
English springer, English springer spaniel
Welsh springer spaniel
cocker spaniel, English cocker spaniel, cocker
Sussex spaniel
Irish water spaniel
kuvasz
schipperke
groenendael
malinois
briard
kelpie
komondor
Old English sheepdog, bobtail
Shetland sheepdog, Shetland sheep dog, Shetland
collie
Border collie
Bouvier des Flandres, Bouviers des Flandres
Rottweiler
German shepherd, German shepherd dog, German police dog, alsatian
Doberman, Doberman pinscher
miniature pinscher
Greater Swiss Mountain dog
Bernese mountain dog
Appenzeller
EntleBucher
boxer
bull mastiff
Tibetan mastiff
French bulldog
Great Dane
Saint Bernard, St Bernard
Eskimo dog, husky
malamute, malemute, Alaskan malamute
Siberian husky
dalmatian, coach dog, carriage dog
affenpinscher, monkey pinscher, monkey dog
basenji
pug, pug-dog
Leonberg
Newfoundland, Newfoundland dog
Great Pyrenees
Samoyed, Samoyede
Pomeranian
chow, chow chow
keeshond
Brabancon griffon
Pembroke, Pembroke Welsh corgi
Cardigan, Cardigan Welsh corgi
toy poodle
miniature poodle
standard poodle
Mexican hairless
timber wolf, grey wolf, gray wolf, Canis lupus
white wolf, Arctic wolf, Canis lupus tundrarum
red wolf, maned wolf, Canis rufus, Canis niger
coyote, prairie wolf, brush wolf, Canis latrans
dingo, warrigal, warragal, Canis dingo
dhole, Cuon alpinus
African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus
hyena, hyaena
red fox, Vulpes vulpes
kit fox, Vulpes macrotis
Arctic fox, white fox, Alopex lagopus
grey fox, gray fox, Urocyon cinereoargenteus
tabby, tabby cat
tiger cat
Persian cat
Siamese cat, Siamese
Egyptian cat
cougar, puma, catamount, mountain lion, painter, panther, Felis concolor
lynx, catamount
leopard, Panthera pardus
snow leopard, ounce, Panthera uncia
jaguar, panther, Panthera onca, Felis onca
lion, king of beasts, Panthera leo
tiger, Panthera tigris
cheetah, chetah, Acinonyx jubatus
brown bear, bruin, Ursus arctos
American black bear, black bear, Ursus americanus, Euarctos americanus
ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus
sloth bear, Melursus ursinus, Ursus ursinus
mongoose
meerkat, mierkat
tiger beetle
ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle
ground beetle, carabid beetle
long-horned beetle, longicorn, longicorn beetle
leaf beetle, chrysomelid
dung beetle
rhinoceros beetle
weevil
fly
bee
ant, emmet, pismire
grasshopper, hopper
cricket
walking stick, walkingstick, stick insect
cockroach, roach
mantis, mantid
cicada, cicala
leafhopper
lacewing, lacewing fly
dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk
damselfly
admiral
ringlet, ringlet butterfly
monarch, monarch butterfly, milkweed butterfly, Danaus plexippus
cabbage butterfly
sulphur butterfly, sulfur butterfly
lycaenid, lycaenid butterfly
starfish, sea star
sea urchin
sea cucumber, holothurian
wood rabbit, cottontail, cottontail rabbit
hare
Angora, Angora rabbit
hamster
porcupine, hedgehog
fox squirrel, eastern fox squirrel, Sciurus niger
marmot
beaver
guinea pig, Cavia cobaya
sorrel
zebra
hog, pig, grunter, squealer, Sus scrofa
wild boar, boar, Sus scrofa
warthog
hippopotamus, hippo, river horse, Hippopotamus amphibius
ox
water buffalo, water ox, Asiatic buffalo, Bubalus bubalis
bison
ram, tup
bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis
ibex, Capra ibex
hartebeest
impala, Aepyceros melampus
gazelle
Arabian camel, dromedary, Camelus dromedarius
llama
weasel
mink
polecat, fitch, foulmart, foumart, Mustela putorius
black-footed ferret, ferret, Mustela nigripes
otter
skunk, polecat, wood pussy
badger
armadillo
three-toed sloth, ai, Bradypus tridactylus
orangutan, orang, orangutang, Pongo pygmaeus
gorilla, Gorilla gorilla
chimpanzee, chimp, Pan troglodytes
gibbon, Hylobates lar
siamang, Hylobates syndactylus, Symphalangus syndactylus
guenon, guenon monkey
patas, hussar monkey, Erythrocebus patas
baboon
macaque
langur
colobus, colobus monkey
proboscis monkey, Nasalis larvatus
marmoset
capuchin, ringtail, Cebus capucinus
howler monkey, howler
titi, titi monkey
spider monkey, Ateles geoffroyi
squirrel monkey, Saimiri sciureus
Madagascar cat, ring-tailed lemur, Lemur catta
indri, indris, Indri indri, Indri brevicaudatus
Indian elephant, Elephas maximus
African elephant, Loxodonta africana
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca
barracouta, snoek
eel
coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch
rock beauty, Holocanthus tricolor
anemone fish
sturgeon
gar, garfish, garpike, billfish, Lepisosteus osseus
lionfish
puffer, pufferfish, blowfish, globefish
abacus
abaya
academic gown, academic robe, judge's robe
accordion, piano accordion, squeeze box
acoustic guitar
aircraft carrier, carrier, flattop, attack aircraft carrier
airliner
airship, dirigible
altar
ambulance
amphibian, amphibious vehicle
analog clock
apiary, bee house
apron
ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin
assault rifle, assault gun
backpack, back pack, knapsack, packsack, rucksack, haversack
bakery, bakeshop, bakehouse
balance beam, beam
balloon
ballpoint, ballpoint pen, ballpen, Biro
Band Aid
banjo
bannister, banister, balustrade, balusters, handrail
barbell
barber chair
barbershop
barn
barometer
barrel, cask
barrow, garden cart, lawn cart, wheelbarrow
baseball
basketball
bassinet
bassoon
bathing cap, swimming cap
bath towel
bathtub, bathing tub, bath, tub
beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon
beacon, lighthouse, beacon light, pharos
beaker
bearskin, busby, shako
beer bottle
beer glass
bell cote, bell cot
bib
bicycle-built-for-two, tandem bicycle, tandem
bikini, two-piece
binder, ring-binder
binoculars, field glasses, opera glasses
birdhouse
boathouse
bobsled, bobsleigh, bob
bolo tie, bolo, bola tie, bola
bonnet, poke bonnet
bookcase
bookshop, bookstore, bookstall
bottlecap
bow
bow tie, bow-tie, bowtie
brass, memorial tablet, plaque
brassiere, bra, bandeau
breakwater, groin, groyne, mole, bulwark, seawall, jetty
breastplate, aegis, egis
broom
bucket, pail
buckle
bulletproof vest
bullet train, bullet
butcher shop, meat market
cab, hack, taxi, taxicab
caldron, cauldron
candle, taper, wax light
cannon
canoe
can opener, tin opener
cardigan
car mirror
carousel, carrousel, merry-go-round, roundabout, whirligig
carpenter's kit, tool kit
carton
car wheel
cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM
cassette
cassette player
castle
catamaran
CD player
cello, violoncello
cellular telephone, cellular phone, cellphone, cell, mobile phone
chain
chainlink fence
chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour
chain saw, chainsaw
chest
chiffonier, commode
chime, bell, gong
china cabinet, china closet
Christmas stocking
church, church building
cinema, movie theater, movie theatre, movie house, picture palace
cleaver, meat cleaver, chopper
cliff dwelling
cloak
clog, geta, patten, sabot
cocktail shaker
coffee mug
coffeepot
coil, spiral, volute, whorl, helix
combination lock
computer keyboard, keypad
confectionery, confectionary, candy store
container ship, containership, container vessel
convertible
corkscrew, bottle screw
cornet, horn, trumpet, trump
cowboy boot
cowboy hat, ten-gallon hat
cradle
crane
crash helmet
crate
crib, cot
Crock Pot
croquet ball
crutch
cuirass
dam, dike, dyke
desk
desktop computer
dial telephone, dial phone
diaper, nappy, napkin
digital clock
digital watch
dining table, board
dishrag, dishcloth
dishwasher, dish washer, dishwashing machine
disk brake, disc brake
dock, dockage, docking facility
dogsled, dog sled, dog sleigh
dome
doormat, welcome mat
drilling platform, offshore rig
drum, membranophone, tympan
drumstick
dumbbell
Dutch oven
electric fan, blower
electric guitar
electric locomotive
entertainment center
envelope
espresso maker
face powder
feather boa, boa
file, file cabinet, filing cabinet
fireboat
fire engine, fire truck
fire screen, fireguard
flagpole, flagstaff
flute, transverse flute
folding chair
football helmet
forklift
fountain
fountain pen
four-poster
freight car
French horn, horn
frying pan, frypan, skillet
fur coat
garbage truck, dustcart
gasmask, respirator, gas helmet
gas pump, gasoline pump, petrol pump, island dispenser
goblet
go-kart
golf ball
golfcart, golf cart
gondola
gong, tam-tam
gown
grand piano, grand
greenhouse, nursery, glasshouse
grille, radiator grille
grocery store, grocery, food market, market
guillotine
hair slide
hair spray
half track
hammer
hamper
hand blower, blow dryer, blow drier, hair dryer, hair drier
hand-held computer, hand-held microcomputer
handkerchief, hankie, hanky, hankey
hard disc, hard disk, fixed disk
harmonica, mouth organ, harp, mouth harp
harp
harvester, reaper
hatchet
holster
home theater, home theatre
honeycomb
hook, claw
hoopskirt, crinoline
horizontal bar, high bar
horse cart, horse-cart
hourglass
iPod
iron, smoothing iron
jack-o'-lantern
jean, blue jean, denim
jeep, landrover
jersey, T-shirt, tee shirt
jigsaw puzzle
jinrikisha, ricksha, rickshaw
joystick
kimono
knee pad
knot
lab coat, laboratory coat
ladle
lampshade, lamp shade
laptop, laptop computer
lawn mower, mower
lens cap, lens cover
letter opener, paper knife, paperknife
library
lifeboat
lighter, light, igniter, ignitor
limousine, limo
liner, ocean liner
lipstick, lip rouge
Loafer
lotion
loudspeaker, speaker, speaker unit, loudspeaker system, speaker system
loupe, jeweler's loupe
lumbermill, sawmill
magnetic compass
mailbag, postbag
mailbox, letter box
maillot
maillot, tank suit
manhole cover
maraca
marimba, xylophone
mask
matchstick
maypole
maze, labyrinth
measuring cup
medicine chest, medicine cabinet
megalith, megalithic structure
microphone, mike
microwave, microwave oven
military uniform
milk can
minibus
miniskirt, mini
minivan
missile
mitten
mixing bowl
mobile home, manufactured home
Model T
modem
monastery
monitor
moped
mortar
mortarboard
mosque
mosquito net
motor scooter, scooter
mountain bike, all-terrain bike, off-roader
mountain tent
mouse, computer mouse
mousetrap
moving van
muzzle
nail
neck brace
necklace
nipple
notebook, notebook computer
obelisk
oboe, hautboy, hautbois
ocarina, sweet potato
odometer, hodometer, mileometer, milometer
oil filter
organ, pipe organ
oscilloscope, scope, cathode-ray oscilloscope, CRO
overskirt
oxcart
oxygen mask
packet
paddle, boat paddle
paddlewheel, paddle wheel
padlock
paintbrush
pajama, pyjama, pj's, jammies
palace
panpipe, pandean pipe, syrinx
paper towel
parachute, chute
parallel bars, bars
park bench
parking meter
passenger car, coach, carriage
patio, terrace
pay-phone, pay-station
pedestal, plinth, footstall
pencil box, pencil case
pencil sharpener
perfume, essence
Petri dish
photocopier
pick, plectrum, plectron
pickelhaube
picket fence, paling
pickup, pickup truck
pier
piggy bank, penny bank
pill bottle
pillow
ping-pong ball
pinwheel
pirate, pirate ship
pitcher, ewer
plane, carpenter's plane, woodworking plane
planetarium
plastic bag
plate rack
plow, plough
plunger, plumber's helper
Polaroid camera, Polaroid Land camera
pole
police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria
poncho
pool table, billiard table, snooker table
pop bottle, soda bottle
pot, flowerpot
potter's wheel
power drill
prayer rug, prayer mat
printer
prison, prison house
projectile, missile
projector
puck, hockey puck
punching bag, punch bag, punching ball, punchball
purse
quill, quill pen
quilt, comforter, comfort, puff
racer, race car, racing car
racket, racquet
radiator
radio, wireless
radio telescope, radio reflector
rain barrel
recreational vehicle, RV, R.V.
reel
reflex camera
refrigerator, icebox
remote control, remote
restaurant, eating house, eating place, eatery
revolver, six-gun, six-shooter
rifle
rocking chair, rocker
rotisserie
rubber eraser, rubber, pencil eraser
rugby ball
rule, ruler
running shoe
safe
safety pin
saltshaker, salt shaker
sandal
sarong
sax, saxophone
scabbard
scale, weighing machine
school bus
schooner
scoreboard
screen, CRT screen
screw
screwdriver
seat belt, seatbelt
sewing machine
shield, buckler
shoe shop, shoe-shop, shoe store
shoji
shopping basket
shopping cart
shovel
shower cap
shower curtain
ski
ski mask
sleeping bag
slide rule, slipstick
sliding door
slot, one-armed bandit
snorkel
snowmobile
snowplow, snowplough
soap dispenser
soccer ball
sock
solar dish, solar collector, solar furnace
sombrero
soup bowl
space bar
space heater
space shuttle
spatula
speedboat
spider web, spider's web
spindle
sports car, sport car
spotlight, spot
stage
steam locomotive
steel arch bridge
steel drum
stethoscope
stole
stone wall
stopwatch, stop watch
stove
strainer
streetcar, tram, tramcar, trolley, trolley car
stretcher
studio couch, day bed
stupa, tope
submarine, pigboat, sub, U-boat
suit, suit of clothes
sundial
sunglass
sunglasses, dark glasses, shades
sunscreen, sunblock, sun blocker
suspension bridge
swab, swob, mop
sweatshirt
swimming trunks, bathing trunks
swing
switch, electric switch, electrical switch
syringe
table lamp
tank, army tank, armored combat vehicle, armoured combat vehicle
tape player
teapot
teddy, teddy bear
television, television system
tennis ball
thatch, thatched roof
theater curtain, theatre curtain
thimble
thresher, thrasher, threshing machine
throne
tile roof
toaster
tobacco shop, tobacconist shop, tobacconist
toilet seat
torch
totem pole
tow truck, tow car, wrecker
toyshop
tractor
trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi
tray
trench coat
tricycle, trike, velocipede
trimaran
tripod
triumphal arch
trolleybus, trolley coach, trackless trolley
trombone
tub, vat
turnstile
typewriter keyboard
umbrella
unicycle, monocycle
upright, upright piano
vacuum, vacuum cleaner
vase
vault
velvet
vending machine
vestment
viaduct
violin, fiddle
volleyball
waffle iron
wall clock
wallet, billfold, notecase, pocketbook
wardrobe, closet, press
warplane, military plane
washbasin, handbasin, washbowl, lavabo, wash-hand basin
washer, automatic washer, washing machine
water bottle
water jug
water tower
whiskey jug
whistle
wig
window screen
window shade
Windsor tie
wine bottle
wing
wok
wooden spoon
wool, woolen, woollen
worm fence, snake fence, snake-rail fence, Virginia fence
wreck
yawl
yurt
web site, website, internet site, site
comic book
crossword puzzle, crossword
street sign
traffic light, traffic signal, stoplight
book jacket, dust cover, dust jacket, dust wrapper
menu
plate
guacamole
consomme
hot pot, hotpot
trifle
ice cream, icecream
ice lolly, lolly, lollipop, popsicle
French loaf
bagel, beigel
pretzel
cheeseburger
hotdog, hot dog, red hot
mashed potato
head cabbage
broccoli
cauliflower
zucchini, courgette
spaghetti squash
acorn squash
butternut squash
cucumber, cuke
artichoke, globe artichoke
bell pepper
cardoon
mushroom
Granny Smith
strawberry
orange
lemon
fig
pineapple, ananas
banana
jackfruit, jak, jack
custard apple
pomegranate
hay
carbonara
chocolate sauce, chocolate syrup
dough
meat loaf, meatloaf
pizza, pizza pie
potpie
burrito
red wine
espresso
cup
eggnog
alp
bubble
cliff, drop, drop-off
coral reef
geyser
lakeside, lakeshore
promontory, headland, head, foreland
sandbar, sand bar
seashore, coast, seacoast, sea-coast
valley, vale
volcano
ballplayer, baseball player
groom, bridegroom
scuba diver
rapeseed
daisy
yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum
corn
acorn
hip, rose hip, rosehip
buckeye, horse chestnut, conker
coral fungus
agaric
gyromitra
stinkhorn, carrion fungus
earthstar
hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa
bolete
ear, spike, capitulum
toilet tissue, toilet paper, bathroom tissue
```
文件已经拷贝完成以后,设备插入内存卡,重新上电就能看到程序已经执行了
连续运行超过24小时的异常情况:
1、接触不良导致开发板重启
2、电流要求最好250mA以上,否则也会有时导致重启
总体来说是比较稳定的,在24小时运行这段时间里面只发生了一次重启。
功耗测量:
在不同工作状态下(待机、轻载、满载)测量功耗,评估其能源效率。
待机:
轻载:
满载:
``总体来说整体功耗不错,运行也相对稳定``
- 2024-07-27
-
发表了主题帖:
Sipeed MAix BiT AIoT 开发套件测评-模型训练 (二)
本帖最后由 zygalaxy 于 2024-8-1 21:05 编辑
## Sipeed MAix BiT AIoT 开发套件测评-模型训练 (二)
之前已经介绍了使用Maixpy hub进行训练模型,这是目前最方便的方法。因为他有训练的gpu,训练速度非常非快,如果大家不想使用官方提供的训练平台,接下来向大家介绍本地训练的方法。
1.首先需要关注公众号``import 创客``回复mx3获取软件(软件安装包也会放在底部)
2.安装下载好的安装包,打开软件看到如下页面
这次我们要做一个人脸表情识别的案例,首先点击工具集,选择数据采集助手进行图片的采集
**这个工具的本质是一个爬虫助手**
选择照片保存的路径以及输入下载图片的关键词,输入需要下载的张数
将下载的照片按分类进行保存到不同的文件夹
3. 进入训练的主界面,选择刚才保存图片的路径,然后点击训练,开始训练可以看到下面已经开始训练
![828886](/data/attachment/forum/202408/01/205714ilr656lzlv7sd06b.png.thumb.jpg?rand=5641.909587207257)
4.训练完成,部署训练的模型
打开安装的软件的路径,进入图中的路径,找到模型
本次训练的模型可以根据 ``模型训练一`` 进行模型部署