基于STM32的智能喂养系统

基于STM32的智能喂养系统

系统简介

  • 自动检测环境温湿度,当温湿度低于阈值时自动打开加湿器;
  • 自动检测水位,当水位低于阈值时自动加水;
  • 自动检测有害气体,当检测到有害气体时自动打开风扇;
  • 同步状态到微信小程序,微信小程序可以控制风扇,加湿器,水泵开关。

系统

有单片机主控负责检测各种信号量,将信息显示到屏幕上,采集信息后判断,并作出相应的动作。
在这里插入图片描述

系统框图

在这里插入图片描述

框图描述:相关传感器采集水位、温度、湿度、气体成分等信息传给主控,主控将处理之后的信息分别显示出来和发送到云端,主控可以控制相关设备进行加水、排气、报警、加湿等操作。相关模块独立供电。

系统所需器件

  • STM32F103RCT6最小系统板(系统主控)
  • ESP8266(WiFi通信模块)
  • 0.94寸OLED屏(显示模块)
  • DHT11(温湿度检测模块)
  • SPG30(二氧化碳检测模块)
  • HCSR-04(超声波模块)
  • 有源蜂鸣器
  • 5V继电器
  • LED灯若干

系统流程图

在这里插入图片描述

框图描述:下位机硬件驱动初始化,软件联网初始化,初始化完成后采集各个传感器数据进行处理、显示和上报,然后系统判断是否超过阈值,超过阈值之后控制相应器件进行相关操作;上位机初始化之后,接收下位机发来的数据进行显示,并且可以下发命令到下位机执行相关的操作。

硬件组成

硬件选型

  • 系统采用STM32F103RCT6最小系统板作为系统主控,32单片机,满足此系统所有要求,便宜,淘宝容易获得。
  • ESP8266作为WiFi通信模块和小程序通信,将采集的信息发送给小程序,同时接受小程序的命令。
  • 显示采用0.94寸的OLED模块,足够显示所有信息,采用IIC通信。
  • 采用SPG30模块检测二氧化碳浓度。该模块灵敏,采用IIC通信。
  • 用HCSR-04超声波模块检测水位。
  • 有源蜂鸣器作为提醒单元。
  • 若干发光二极管作为光信号。
  • 5V继电器驱动风机和加湿器。
  • 5V驱动的风机
  • 5V驱动的加湿器。
  • 一组3.3V电源,一组5V电源。(充电宝即可)

硬件原理图

在这里插入图片描述

硬件PCB图

板子正面
在这里插入图片描述
板子反面
在这里插入图片描述

硬件实物图

在这里插入图片描述

软件组成

软件描述:软件由Keil5编写,用的是C语言。

下位机

程序流程图

在这里插入图片描述

程序

//系统初始化
void System_Init(void)
{u8 i = 0;BEEP_Init();SysInit_GPIO();delay_init();	    	 //延时函数初始化I2C_Configuration();OLED_Init();			//初始化OLEDNVIC_Config();SysInit_TIM();Adc_Init();Hcsr04Init();//超声波初始化OLED_CLS();OLED_ShowStr1(0, 0, (char*)"OLED Ready", 1);if(DHT11_Init())	//DHT11初始化{OLED_ShowStr1(0, 1, (char*)"DHT11 Error", 1);delay_ms(200);DHT11_Init();}elseOLED_ShowStr1(0, 1, (char*)"DHT11 Ready", 1);Usart1_Init(115200);	 	//串口初始化为9600OLED_ShowStr1(0, 2, (char*)"UART1 Ready", 1);UsartPrintf(USART_DEBUG, "串口1初始化成功\r\n");Usart2_Init(115200);//8266通讯串口UsartPrintf(USART_DEBUG, "串口2初始化成功!\n");OLED_ShowStr1(0, 3, (char*)"UART2 OK", 1);//SGP30模块开机需要一定时间初始化,在初始化阶段读取的CO2浓度为400ppm,TVOC为0ppd且恒定不变,因此上电后每隔一段时间读取一次//SGP30模块的值,如果CO2浓度为400ppm,TVOC为0ppd,发送“正在检测中...”,直到SGP30模块初始化完成。//初始化完成后刚开始读出数据会波动比较大,属于正常现象,一段时间后会逐渐趋于稳定。//气体类传感器比较容易受环境影响,测量数据出现波动是正常的,可自行添加滤波函数。SGP30_Init();   //初始化SGP30SGP30_Write(0x20, 0x08);sgp30_dat = SGP30_Read();//读取SGP30的值CO2Data = (sgp30_dat & 0xffff0000) >> 16;TVOCData = sgp30_dat & 0x0000ffff;OLED_ShowStr1(0, 4, (char*)"SGP30 Ready", 1);
}

int main(void)
{const char* topics[] = {"/123/123/123"};unsigned short timeCount = 0;	//发送间隔变量unsigned char* dataPtr = NULL;System_Init(); 	//系统初始化ESP8266_Init();//8266初始化while(OneNet_DevLink())//接入onenetdelay_ms(500);OLED_CLS();BuzzerShortBi();OneNet_Subscribe(topics, 1);while(1){if(timeCount % 40 == 0) //1000毫秒/完成一次25ms=40 一秒执行一次(有一点点误差){distance = Hcsr04GetLength();}if(++timeCount >= 120)									//发送间隔5s,也就是5s上传一次数据,3000/25=120{timeCount = 0;}TimerDeal();OLED_ShowStr1(0, 0, (char*)"OLED Ready", 1);dataPtr = ESP8266_GetIPD(3);//完成需要15个毫秒,三次循环,一次5个毫秒if(dataPtr != NULL)OneNet_RevPro(dataPtr);}
}

连接WiFi需要周围有一个
账号:aoteman,密码:88888888
的热点。

微信小程序

在这里插入图片描述

// 事件处理函数onLoad() {this.connectmqtt()},connectmqtt:function(){var that=thisconst options={connectTimeout:4000,clientId:Math.random().toString(36).substr(2),port:8084,username:'f22dfaf7d27fced36f716e2533f6c48f',password:'123123'}client=mqtt.connect('wxs://t.yoyolife.fun/mqtt',options)client.on('connect',(e)=>{console.log('服务器连接成功')client.subscribe('/iot/3051/cc',{qos:0},function(err){if(!err){console.log('订阅成功')}})})//信息监听事件client.on('message',function(topic,message){let tem={}tem=JSON.parse(message)that.setData({tempo:tem.temp,hum:tem.humi,lx:tem.lengtn,co2:tem.co2,shuiwei:tem.shuiwei,})console.log(tem)console.log('收到'+message.toString())})client.on('reconnect',(error)=>{console.log('正在重新连接',error)})client.on('error',(error)=>{console.log('连接失败',error)})},onledchange:function(event){console.log(event.detail)let sw=event.detail.valueconsole.log(event.detail.value)if(sw){client.publish('/123/123/123','{"target":"led","value":1}',function(err){if(!err){console.log('成功发送指令-开')}})}else{client.publish('/123/123/123','{"target":"led","value":0}',function(err){if(!err){console.log('成功发送指令-关')}})}},onbeepchange:function(event){console.log(event.detail)let sw=event.detail.valueconsole.log(event.detail.value)if(sw){client.publish('/123/123/123','{"target":"beep","value":1}',function(err){if(!err){console.log('成功发送指令-开')}})}else{client.publish('/iot/3051/wsy','{"target":"beep","value":0}',function(err){if(!err){console.log('成功发送指令-关')}})}
}
})

最后就是发布小程序了。可以自行百度。

实物操作视频

哎,我还没录。

总结

此项目还是比较完整的,最终连机调试的时候需要细心慢慢调试。
v:shiboven

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28341.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文看懂《关于网络安全和信息化工作重要指示》

7月14日至15日,全国网络安全和信息化工作会议在京召开。《关于网络安全和信息化工作重要指示》也在会上得到解读与传达。 从近年来党的二十大等重大会议上网络安全和数据安全等相关话题多次被提及、我国陆续发布多部网络安全&数据安全相关政策法规等等&#xf…

机器学习1

核心梯度下降算法: import numpy as np from utils.features import prepare_for_trainingclass LinearRegression:def __init__(self,data,labels,polynomial_degree 0,sinusoid_degree 0,normalize_dataTrue):"""1.对数据进行预处理操作2.先得到…

【原创】实现ChatGPT中Transformer模型之输入处理

作者:黑夜路人 时间:2023年7月 Inputs Process(输入处理层)实现 我们看整个绿色框的整个位置,就是Inputs Process(输入处理层)。 在输入处理层,其实非常容易理解,主要就…

springboot与rabbitmq的整合【演示5种基本交换机】

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,…

C语言-ubuntu下的命令

目录 linux命令 【1】打开关闭终端 【2】终端 【3】ls命令 【4】cd 切换路径 【5】新建 【6】删除 【7】复制 【8】移动 【9】常用快捷键 【10】vi编辑器 【11】简单编程步骤 任务: linux命令 【1】打开关闭终端 打开终端: 1. 直接点击 …

数学建模的赛题类型

一、预测类 指通过分析已有的数据或者现象,找出其内在发展规律,然后对未来情形做出预测的过程。 根据已知条件和求解目的,往往将预测类问题分为:小样本内部预测,大样本内部预测。 解决预测类赛题的一般步骤&#xff…

vue3 实现 Map 地图区域组件封装

图例:重庆区域 一、安装echarts 坑:地图echarts版本必须在5.0.0以下,否则不能显示,此处指定安装 echarts4.9.0 即可 cnpm install echarts4.9.0 --save 二、下载 “重庆” 区域地图json文件 下载地址:https://www.…

『表面』在平面模型上提取凸(凹)多边形

原始点云 直通滤波,z轴0~1.1 分割模型为平面&#xff0c;分割结果进行投影 提取多边形 代码: #include <pcl/ModelCoefficients.h> // 模型系数的数据结构&#xff0c;如平面、圆的系数 #include <pcl/io/pcd_io.h>#include <pcl/point_types.h> // 点云数据…

TCP和UDP的区别

连接&#xff1a;TCP 是面向连接的传输层协议&#xff0c;传输数据前先要建立连接&#xff1b;UDP 是不需要连接&#xff0c;即刻传输数据。首部开销&#xff1a;TCP 首部长度较长&#xff0c;首部在没有使用「选项」字段时是 20 个字节&#xff0c;如果使用了「选项」字段则会…

k8s服务发现之第二弹Service详解

创建 Service Kubernetes Servies 是一个 RESTFul 接口对象&#xff0c;可通过 yaml 文件创建。 例如&#xff0c;假设您有一组 Pod&#xff1a; 每个 Pod 都监听 9376 TCP 端口每个 Pod 都有标签 appMyApp apiVersion: v1 kind: Service metadata:name: my-service spec:s…

Modbus TCP/BACnet IP/MQTT物联网网关IOT-810介绍及其典型应用

伴随着计算机技术以及互联网的发展&#xff0c;物联网这个概念已经逐渐进入我们的日常生活&#xff0c;例如智能泊车&#xff0c;智能家居&#xff0c;智能照明&#xff0c;智能楼宇等。智能楼宇是将传统的楼宇自控系统与物联网技术相融合&#xff0c;把系统中常见的传感器、设…

设计模式 ~ 观察者模式

概念 观察者模式是一种设计模式&#xff0c;也被称为发布-订阅模式或事件模式&#xff1b; 用于在对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新&#xff1b; ~ 如&#xff1a;DOM事件、vue …