天天看点

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 基于stm32的智能宠物箱

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 简介

智能宠物箱是基于自主开发的物联网环境监测系统,该系统通过3.5寸电阻屏实现与用户的交互,系统可以实时监测宠物箱内的空气温度、空气湿度、光照强度、有害气体浓度、烟雾气体浓度、土壤温度湿度等一系列环境参数,并绘成曲线在屏幕上显示出来。

用户通过系统屏幕可以自主设定各种参数的阈值,当环境参数发生波动高于或低于设定值时,系统会发出声光报警,并通过APP通知用户。

同时系统还配有排气通道、通风系统、散热系统、升温系统等一系列子系统实时保持宠物箱内环境参数正常,确保宠物安全。

系统通过物联网实时把环境参数上传到云端,通过专属APP用户可以随时随地查看宠物箱状况,并可以自主调整环境参数上下限,也可以通过APP打开或关闭宠物箱内某功能模块。同时系统添加了语音交互功能,能够识别用户指令并作出判断,可以进行简单交流,同时用户可以通过语音控制宠物箱各种用电器,十分方便快捷。

2 主要器件

  • 中科蓝讯的AB32VG1单片机
  • RT-Thread物联网操作系统
  • LD3320语音识别模块
  • TTS MR628播报芯片
  • ESP8266模块实现无线通讯功能
  • 手机APP与设备之间的数据通讯
  • 空气温度、空气湿度、光照强度、有害气体浓度、烟雾气体浓度、土壤温度湿度检测
  • 手机控制通风、灯光等设备

3 实现效果

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后
毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

4 设计原理

主要框架

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

硬件设计

智能宠物箱系统通过3.5寸电阻屏实现与用户的交互,系统可以实时监测宠物箱内的空气温度、空气湿度、光照强度、有害气体浓度、烟雾气体浓度、土壤温度湿度等一系列环境参数,并绘成曲线在屏幕上显示出来,用户通过系统屏幕可以自主设定各种参数的阈值,当环境参数发生波动高于或低于设定值时,系统会发出声光报警,并通过APP通知用户,同时系统还配有排气通道、通风系统、散热系统、升温系统等一系列子系统实时保持宠物箱内环境参数正常,确保宠物安全。

1.主控单元

以中科蓝讯 (Bluetrum) 公司推出的基于 RISC-V 架构的高配置 芯片 AB32VG1 为核心所组成的。AB32VG1芯片为RISC-V 内核 32 位 MCU 芯片,主频 120M ,片上集成 RAM 192K, Flash 4Mbit,ADC,PWM,USB,UART,IIC 等资源。

2.语音功能模块

使用LD3320语音识别模块加TTS MR628播报芯片实现人机语音交互功能,使得用户可以仅凭语音了解宠物箱状况以及控制用电器。

3.物联网模块

使用ESP8266模块实现无线通讯功能,实现手机APP与设备之间的数据通讯,实时监测宠物箱内的空气温度、空气湿度、光照强度、有害气体浓度、烟雾气体浓度、土壤温度湿度等一系列环境参数,并通过手机控制通风、灯光等设备。

ESP-01S WIFI模块

简介

ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

尺寸、管脚定义

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

ESP8266的指令介绍

AT指令可以细分四种类型:

1.测试指令:AT+=?

该命令用于查询设置指令的参数以及取值的范围

2.查询指令:AT+?

该命令用于返回参数的当前值

3.设置指令:AT+=<’’’>

该命令用于设置用户自定义的参数

4.执行指令:AT+

该命令用于执行受模块内部程序控制的变参数不可变的功能

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

ESP8266的指令测试

可以通过STM开发板转为电平转换的功能连接上ESP8266模块在通过串口显示窗口在PC机上热输入AT指令来进行操作。

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

ESP8266的AT指令一览

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

4.检测传感器

(1)温湿度检测选用的传感器型号是DHT11,具有测温度和湿度的元器件,测量误差小,开发便捷,容易上手。

(2)烟雾检测选用的传感器型号是MQ-2,具有连接电路简单,且其价格低廉,检测精度高的特点。

DHT11温湿度传感器

简介

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

接线

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

MQ-2烟雾传感器

简介

MQ-2常用于家庭和工厂的气体泄漏监测装置,适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此,MQ-2可以准确来说是一个多种气体探测器。

MQ-2的探测范围极其的广泛。它的优点:灵敏度高、响应快、稳定性好、寿命长、驱动电路简单。

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

MQ-2的工作原理

MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大。

![在这里插入图片描述](https://img-blog.csdnimg.cn/17c28e9c5598498e9707786cad8a7b67.png#pic_center =500x#pic_center =500x)

MQ-2应用电路

MQ-2常用的电路有两种,一种使用采用比较器电路监控,另一种为ADC电路检测。

比较器电路

![在这里插入图片描述](https://img-blog.csdnimg.cn/9a6764e53c2047e8be40fcc7fb6a1603.png#pic_center =500x#pic_center =500x)

MQ-2的4脚输出随烟雾浓度变化的直流信号,被加到比较器U1A的2脚,Rp构成比较器的门槛电压。当烟雾浓度较高输出电压高于门槛电压时,比较器输出低电平(0v),此时LED亮报警;当浓度降低传感器的输出电压低于门槛电压时,比较器翻转输出高电平(Vcc),LED熄灭。调节Rp,可以调节比较器的门槛电压,从而调节报警输出的灵敏度。

R1串入传感器的加热回路,可以保护加热丝免受冷上电时的冲击。

ADC转换电路

MQ-2传感器另外一个采集方法为AD信号采集,即将电压信号转化为数字信号,进而转化为精确的烟雾浓度值。

毕业设计 基于stm32的智能宠物箱0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码最后

MQ-2传感器的4脚、6脚的电压为输出信号,Rs为传感器的本体电阻。其中若气体浓度上升,必导致Rs下降。而Rs的下降则会导致MQ-2的4脚、6脚对地输出的电压增大。所以气体浓度增大,其输出的电压也会增大,最终通过ADC0832转换后数值增大。

5.灯光及风机控制

使用继电器实现对灯光和风机的控制,具有结构简单,控制灵活的特点。

5 部分核心代码

```c
//DHT11温湿度传感器部分
#include "reg52.h"
#include "LCD1602.h"
#include "intrins.h"

//typedef unsigned char uchar;
//typedef unsigned int uint;
	
//定义变量
sbit Data=P3^6;
uchar rec_dat[13];//用于保存接收到的数据组

void DHT11_delay_us(uchar n)
{
    while(--n);
}

void DHT11_delay_ms(uint z)
{
   uint i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}

void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(20);   //延时18ms以上
   Data=1;
   DHT11_delay_us(30);
}

uchar DHT11_rec_byte()      //接收一个字节
{
   uchar i,dat=0;
  for(i=0;i<8;i++)    //从高到低依次接收8位数据
   {          
      while(!Data);   //等待50us低电平过去
      DHT11_delay_us(8);     //延时60us,如果还为高则数据为1,否则为0 
      dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
      if(Data==1)    //数据为1时,使dat加1来接收数据1
         dat+=1;
      while(Data);  //等待数据线拉低    
    }  
    return dat;
}

void DHT11_receive()      //接收40位的数据
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise; 
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高     
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位  
        R_L=DHT11_rec_byte();    //接收湿度低八位  
        T_H=DHT11_rec_byte();    //接收温度高八位  
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        } 
		
	
        /*数据处理,方便显示*/
        rec_dat[0]=RH/10+'0';
        rec_dat[1]=(RH%10)+'0';
		rec_dat[2]='%';
        rec_dat[3]='R';
        rec_dat[4]='H';
        rec_dat[5]=' ';
		rec_dat[6]=' ';
        rec_dat[7]=(TH/10)+'0';
        rec_dat[8]=(TH%10)+'0';
		rec_dat[9]='^';
        rec_dat[10]='C';
    }
}

void main()
{
	//使用lcd1602显示数据
	DHT11_receive();
}

           
```c
// MQ-2烟雾传感器

unsigned char GetYanWuValue(void)
{
		unsigned int sum=0;
		unsigned char m,value=0;
		for(m=0;m<20;m++)			//读50次AD值
			sum = adc0832(0)+sum;		//读到的AD值,将读到的数据累加到sum
		value=(unsigned char)(sum/20);				//跳出上面的for循环后,将累加的总数除以50得到平均值value
	
		if(value > ADC_Zero) 
				value = value - ADC_Zero;              //首先减去零点漂移
			else
				value = 0;
	
		return value;

}
           

最后