当前位置: 首页 > news >正文

基于STM32的智能宠物看护系统设计与实现

若该文为原创文章,转载请注明原文出处。

一、引言

随着现代生活节奏加快,宠物主人时常面临外出无法照料宠物的困境。传统的宠物喂养方式无法满足远程、精准、智能化的看护需求。本设计旨在开发一套基于STM32微控制器的智能宠物看护系统,通过集成多种传感器与执行器,实现对宠物生活环境(温湿度、光照)和生存资源(水、粮)的全天候自动监控与调节。系统核心在于通过WiFi接入物联网云平台(OneNet),使主人能够突破地理限制,通过手机APP远程查看宠物状态并进行手动干预,为爱宠提供一个舒适、安全的智能家居环境。

二、系统总体设计

(一)系统架构

系统采用“本地自动控制-云端远程监管”的双模式架构。

  1. 感知层:由DHT11(温湿度)、光敏电阻(光照强度)、水位传感器、称重传感器(余粮)组成,负责采集宠物环境数据。

  2. 控制层:以STM32F103C8T6为核心,处理传感器数据,执行自动控制逻辑,并管理通信。

  3. 执行层:包括继电器模块(控制风扇、加湿器、水泵)、LED灯、蜂鸣器,执行控制器指令。

  4. 交互层:包括按键,用于本地设置和模式切换。

  5. 云平台层:通过ESP8266 WiFi模块以MQTT协议接入中国移动OneNet平台,实现手机APP的远程监控与控制。

(二)功能模块划分

  1. 环境调控模块:温湿度自动/手动调节与光照自动调节。

  2. 资源供给模块:自动补水与缺粮报警。

  3. 通信模块:MQTT协议对接OneNet平台,实现数据上下行。

  4. 模式管理模块:自动模式与手动模式的切换与执行。

三、硬件设计与实现

(一)系统硬件框架图

系统硬件配置与功能说明表

1. 主控单元
器件名称推荐型号接口功能说明
STM32单片机STM32F103C8T6-作为系统核心,负责所有传感器的数据采集、逻辑判断、控制各执行器、以及与WiFi模块通信。
2. 传感器与输入单元
器件名称推荐型号/类型接口功能说明
温湿度传感器DHT11单总线采集宠物生活区域的环境温度和湿度。
水位传感器水位检测模块GPIO/ADC检测饮水机的水位状态。通常使用高低电平输出型模块,缺水时输出低电平,STM32检测该电平状态即可判断是否缺水。
余粮传感器超声波模块/压力传感器GPIO/ADC检测余粮状态。方案1(超声波):在粮仓顶部朝下测量距离,粮食越多距离越近;方案2(压力):粮食重量压在压力传感器上,重量越轻电压越小。最终由STM32判断是否缺粮。
光敏传感器光敏电阻模块ADC检测环境光照强度。输出模拟电压,光线越强电压越高。STM32根据此值调节LED灯亮度。
按键模块轻触开关GPIO用于设置温湿度阈值、切换自动/手动模式、手动控制LED灯开关。
3. 执行器与输出单元
器件名称推荐型号/类型接口功能说明
风扇模块5V DC风扇GPIO/PWM用于降温。STM32通过GPIO(配合三极管/MOS管驱动)或PWM信号控制其开关或转速。
加湿器模块5V超声波雾化片GPIO用于增加湿度。STM32通过GPIO控制继电器模块来通断其电源(强电部分必须隔离!)。
水泵电机小型直流水泵GPIO/PWM用于抽水。STM32通过GPIO(配合电机驱动模块,如L298N)控制其开关。
LED灯高亮LED灯板PWM用于补光。STM32通过输出不同占空比的PWM信号来控制其亮度。
蜂鸣器有源蜂鸣器GPIO用于缺粮报警。STM32控制其发出“嘀”声提醒主人。
4. 通信单元
器件名称推荐型号接口功能说明
WiFi模块ESP-01SUART核心通信单元。STM32通过串口(UART)以AT指令的方式与ESP-01S通信,将采集到的所有状态数据以MQTT协议上传至OneNet云平台,并接收从云平台下发的手机APP控制指令。
5. 电源单元
器件名称推荐规格功能说明
电源适配器5V/3A 开关电源为整个控制系统(STM32、传感器、模块、小功率执行器)提供稳定的5V电源。注意: 加湿器等大功率220V设备必须通过继电器控制,与低压部分隔离。

核心控制逻辑说明

自动模式 (Auto_Mode = 1)
  1. 温控风扇

    • 条件: if (温度 > 温度阈值) { 启动风扇; } else { 关闭风扇; }

  2. 湿控加湿

    • 条件: if (湿度 < 湿度阈值) { 启动加湿器; } else { 关闭加湿器; }

  3. 自动补水

    • 条件: if (水位状态 == 缺水) { 启动水泵; } else { 关闭水泵; } (需注意防溢出的逻辑)

  4. 自动调光

    • 动作: LED亮度 = 最大亮度 - (当前光照强度 / 最大光照强度 * 最大亮度) // 光线越强,灯光越弱

  5. 缺粮报警

    • 条件: if (余粮状态 == 缺粮) { 启动蜂鸣器; } else { 关闭蜂鸣器; }

手动模式 (Auto_Mode = 0)
  • 本地手动: 可通过按键强制控制LED灯的开关。

  • 远程手动: 所有执行器(风扇、加湿器、水泵、LED灯)的开关状态完全接收来自手机APP通过OneNet云平台下发的指令。传感器数据仍正常上传。

关键设计注意事项

  1. 强弱电隔离: 加湿器通常是220V供电,必须使用继电器模块进行隔离控制,确保低压电路的安全。

  2. 水泵与水位逻辑: 水泵抽水时,需有机制防止溢出。例如,采用双水位传感器(低水位触发抽水,高水位触发停止)或设置最大抽水时间

  3. 数据上传策略: 为了节省网络资源,可以采用变化上传策略,即当数据变化超过一定范围或状态发生变化时再上传,而不是一味地高速轮询。

  4. OneNet平台配置: 需要在OneNet上创建产品和设备,定义好数据流模板(如:Temperature, Humidity, Water_Level)和命令(如:LED_Switch, Pump_Switch),才能使STM32与云平台正确通信。

  5. 功耗考虑: 如果采用电池供电,需考虑低功耗设计。但此系统需持续工作,建议直接使用电源适配器供电。

四、软件设计与实现

(一)开发环境搭建

  1. IDE:STM32CubeIDE。

  2. :使用HAL库。需自行添加DHT11、HX711、OneNet MQTT协议封装等驱动代码。

  3. 云平台:在中国移动OneNet平台创建产品和设备,获取设备ID和API Key等连接密钥。

(二)系统软件流程图

(三)代码片段(关键逻辑)

主循环核心逻辑与OneNet通信

// main.c
// 定义全局变量
SystemMode_t work_mode = MODE_AUTO; // 系统工作模式
DeviceState_t dev_state; // 设备状态结构体while (1) {// 1. 读取传感器DHT11_ReadData(&dev_state.temperature, &dev_state.humidity);dev_state.light_val = Read_ADC(LIGHT_SENSOR_CHANNEL);dev_state.water_level = Read_ADC(WATER_SENSOR_CHANNEL);dev_state.food_weight = HX711_Read();// 2. 模式判断与执行if (work_mode == MODE_AUTO) {// 自动控制逻辑if (dev_state.temperature > temp_threshold) {TurnOn_Fan();} else {TurnOff_Fan();}// ... 同理判断湿度、水位、余粮// 光照控制:光线越强,LED越暗 (反向控制)uint16_t pwm_val = Map_LightToPWM(dev_state.light_val); // 映射函数__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwm_val);}// 手动模式下,设备状态由APP指令直接控制,不执行自动逻辑// 3. 上传数据到OneNet (JSON格式)char json_buffer[256];sprintf(json_buffer,"{\"temp\":%.1f,\"humi\":%.1f,\"light\":%d,\"water\":%d,\"food\":%.1f,\"mode\":%d}",dev_state.temperature, dev_state.humidity, dev_state.light_val,dev_state.water_level, dev_state.food_weight, work_mode);ESP8266_MQTT_Publish("$dp", json_buffer); // 发布到OneNet// 4. 处理来自OneNet的下行指令 (在串口中断中接收并解析)if (rx_cmd_received) {Parse_OneNet_Command(rx_buffer); // 解析JSON,执行开关设备、切换模式等操作rx_cmd_received = 0;}// 5. 按键扫描Key_Scan(); // 用于切换模式、本地手动开关灯、设置阈值等HAL_Delay(3000); // 每3秒上传一次数据
}

OneNet下行指令解析函数示例

void Parse_OneNet_Command(char *json) {// 使用cJSON库解析JSON字符串cJSON *root = cJSON_Parse(json);cJSON *obj_mode = cJSON_GetObjectItem(root, "mode");cJSON *obj_led = cJSON_GetObjectItem(root, "led");if (obj_mode != NULL) {work_mode = obj_mode->valueint; // 切换手动/自动模式}if (obj_led != NULL && work_mode == MODE_MANUAL) {// 只有在手动模式下,才执行APP的开关指令if (obj_led->valueint == 1) {TurnOn_LED();} else {TurnOff_LED();}}// ... 同理解析风扇、加湿器、水泵的控制指令cJSON_Delete(root);
}

五、系统测试与优化

(一)测试方案

  1. 功能测试

    • 自动模式测试:用吹风机加热DHT11测试风扇启动;喷水加湿测试加湿器;降低水位测试水泵;遮挡光敏电阻测试LED亮度变化;减少重量测试缺粮报警。

    • 手动模式测试:在APP上点击各个设备开关按钮,测试响应是否正确。

    • 模式切换测试:测试按键和APP切换模式时,系统行为是否正确。

    • 通信测试:拔插网线模拟网络异常,测试系统重连和数据恢复能力。

  2. 性能与安全测试

    • 压力测试:模拟传感器数据频繁变化和大量APP指令,测试系统稳定性。

    • 安全测试:确保继电器控制高压设备的部分绝缘良好,无漏电风险。

优化方向

  • 本地日志存储:增加SPI Flash或EEPROM,存储历史操作和报警记录,网络恢复后上报。

  • 低功耗设计:在无事件发生时,让STM32和ESP8266进入睡眠模式,由定时器或中断唤醒。

  • OTA远程升级:通过OneNet平台实现STM32固件的远程无线升级。

  • 视频监控:增加ESP32-CAM模块,通过另一路串口将图像数据上传到云平台。

六、结论与展望

(一)未来展望

本系统成功设计了一个功能完备、实用性强的智能宠物看护系统原型,很好地解决了宠物独自在家的看护痛点。未来可向以下方向发展:

  1. AI行为分析:集成微型摄像头,利用边缘计算能力分析宠物行为(如是否焦虑、是否活跃),提供更深入的健康报告。

  2. 自动喂食器集成:将本系统与一个由舵机或电机控制的自动喂食器结合,实现远程定时、定量投喂。

  3. 多宠物识别与管理:通过RFID技术为不同宠物佩戴标签,实现精准的个体化管理(如按体重分配食物)。

  4. 语音交互:增加语音模块,让主人可以通过APP与宠物进行单向或双向的语音交流。

  5. 产品化与市场化:优化工业设计,将其打造成一款美观、安全、可靠的消费级产品。

如有侵权,或需要完整代码,请及时联系博主。


文章转载自:

http://gTGr8mHK.khyqt.cn
http://GX0duAuz.khyqt.cn
http://ZbDjXhS1.khyqt.cn
http://MU2dajlf.khyqt.cn
http://FZ3oPE1j.khyqt.cn
http://R81zufRz.khyqt.cn
http://NNc2DrkH.khyqt.cn
http://tSD0LK5j.khyqt.cn
http://53T3uopk.khyqt.cn
http://KoWO5MjC.khyqt.cn
http://QSgCvelF.khyqt.cn
http://KDgYYyLs.khyqt.cn
http://ppKyT19q.khyqt.cn
http://ZczzWqSc.khyqt.cn
http://u6wHTo8S.khyqt.cn
http://Bwcc12I9.khyqt.cn
http://GpryWHfv.khyqt.cn
http://zicHRrF1.khyqt.cn
http://DAAhAJy4.khyqt.cn
http://cTrkCpCZ.khyqt.cn
http://WMcUKsXp.khyqt.cn
http://IiHnujgY.khyqt.cn
http://0684KTCu.khyqt.cn
http://FzbywMRw.khyqt.cn
http://9cuxwzAy.khyqt.cn
http://6HFUxtko.khyqt.cn
http://fWeXr2DQ.khyqt.cn
http://e0moGMrP.khyqt.cn
http://Y7NWgLyD.khyqt.cn
http://HjlG1TnT.khyqt.cn
http://www.dtcms.com/a/373183.html

相关文章:

  • 基于SpringBoot的家政保洁预约系统【计算机毕业设计选题 计算机毕业设计项目 计算机毕业论文题目推荐】
  • 幂等性、顺序性保障以及消息积压
  • 第一次使用coze工作流,生成简易行业报告
  • tl;dv:让你的会议更高效
  • 【入门级-算法-6、排序算法: 插入排序】
  • 健康度——设备健康续航条
  • 深入理解Spring Boot的EnvironmentPostProcessor:环境处理的黑科技
  • 面向生产环境的大模型应用开发
  • elastic search 是如何做sum操作的
  • HashMap高频面试题目
  • 李沐深度学习论文精读(二)Transformer + GAN
  • 达梦数据库(DM8)单机数据库安装部署
  • 《sklearn机器学习——特征提取》
  • OnlyOffice的高可用方案如何做
  • 苍穹外卖前端Day1 | vue基础、Axios、路由vue-router、状态管理vuex、TypeScript
  • 【RabbitMQ】----RabbitMQ 的7种工作模式
  • CN2 GIA线路深度解析:阿里云/腾讯云选哪个?(附三网评测)
  • 冰火岛 Tech 传:Apple Foundation Models 心法解密(下集)
  • Gamma AI:高效制作PPT的智能生成工具
  • 云计算学习笔记——HTTP服务、NFS服务篇
  • unity入门:按钮控制横向滚动视窗显示最左最右
  • 大模型为什么会有幻觉?-Why Language Models Hallucinate
  • 数据结构造神计划第三天---数据类型
  • MYSQL集群高可用架构之MHA高可用架构
  • 小麦矩阵系统:让短视频分发实现抖音快手小红书全覆盖
  • 智能高低压地埋线走向探测器如何在多条电缆中查找特定电缆?
  • 【Docker】常见操作
  • Python/JS/Go/Java同步学习(第七篇)四语言“字符串类型验证“对照表: 运维“雏田“白眼审核凭证上传崩溃(附源码/截图/参数表/避坑指南)
  • 深入解析网通核心器件:光模块、巴伦(Balun)与LTCC及其关键参数
  • 将 maven 集成到 idea 后出现 向项目创建模块时出错:null 的问题