毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

简介: 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

1、项目简介

1.1 系统构成

本设计由STM32单片机+指示灯电路+风扇控制电路+温湿度传感器电路+lcd1602液晶显示电路+蓝牙模块电路+按键电路+电源电路组成。

1.2 系统功能

  • 1、通过温湿度传感器检测温湿度,并在液晶上和APP上实时显示
  • 2、通过按键可修改温湿度报警阈值
  • 3、湿度超过最大报警阈值时,向APP发送“Shidu High”报警信息
  • 4、湿度小于最小报警阈值时,向APP发送“Shidu Low”报警信息
  • 5、湿度介于最大与最小之间,发送“Shidu Normal”
  • 6、温度大于最大阈值,使用蜂鸣器报警,温度小于最小阈值,使用LED报警
  • 7、系统运行指示灯,周期闪烁
  • 8、通过APP发送指令“O”,风扇启动;通过APP发送指令“C”,风扇关闭

2、部分电路设计

2.1 stm32f103c8t6单片机最小系统电路设计

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装。

具体参数为:

  • 64K x 8bit的Flash
  • 20K x 8bit的SRAM
  • 37个GPIO,分别为PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1
  • 2个12bit ADC合计12路通道,外部通道:PA0到PA7以及PB0到PB1
  • 内部通道:温度传感器通道ADC_Channel_16和内部参考电压通道ADC_Channel_17
  • 4个16bit定时器/计数器,分别为TIM1、TIM2、TIM3、TIM4
  • 2个看门狗定时器(独立看门狗IWDG、窗口看门狗WWDG)
  • 1个24bit向下计数的滴答定时器systick
  • 2个IIC,2个SPI,3个USART,1个CAN
  • 内部8MHz时钟HSI最高可倍频到64MHz,外部8MHz时钟HSE最高可倍频到72MHz

Cortex-M3是ARM公司推出的基于ARMv7架构的MCU内核,ST公司在此内核的基础上完成了USART、DMA、GPIO等外围电路的设计。

STM32单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。

单片机最小系统原理图如下图所示:

实物图:

2.2 LCD1602液晶显示电路设计

LCD1602是一种字母数字液晶显示模块,可以显示16个字符和2行文本,因此被命名为LCD1602。它通常用于各种电子项目,特别是基于微控制器系统。该模块包含一个驱动电路,简化了与微控制器或其他数字信号源的接口过程,因此成为业余爱好者和工程师的流行选择。LCD1602由+5V DC供电,可以使用并行或串行通信协议与微控制器通信。它可以显示字母数字字符、符号和图标,并可用于许多应用,包括显示传感器数据、消息和菜单。

LCD1602采用标准的16脚接口,具体定义如下:

  • 第1脚:VSS为地电源。
  • 第2脚:VDD接5V正电源。
  • 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的可调电阻调整对比度。
  • 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
  • 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
  • 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行数据写入或读取命令。
  • 第7~14脚:DB0~DB7为8位双向数据线。
  • 第15~16脚:空脚或背光电源端接口。

电路设计

LCD1602模块实物图:

2.2 风扇控制电路设计

  • 风扇控制电路使用NPN三极管对风扇进行控制
  • 三极管8050是非常常见的NPN型晶体三极管,在各种放大电路中经常看到它,主要由硅制成,应用范围很广,主要用于高频放大。也可用作开关电路。一般由硅制成。
  • 电路图如下:

  • 8050三极管实物图

  • 5V风扇模块实物图:

2.3 HC05蓝牙通信电路设计

  • HC-05蓝牙串口模块是一种基于蓝牙2.0协议的串口通信模块,它的数据传输速率高达2Mbps,能够满足绝大部分实际应用。它主要通过串口通信的方式,实现了与各种单片机(如STM32、Arduino等)以及其他蓝牙设备的通信。相对于传统串口通信,使用HC-05蓝牙模块可以实现无线传输,有效地解决了传输距离等问题。
  • HC-05蓝牙模块由两部分组成:蓝牙串口模块和底板电路板。蓝牙串口模块是实际完成数据传输的核心部分,而底板电路板主要负责提供稳定的电源以及与单片机的连接。HC-05蓝牙模块既可以作为主机,也可以作为从机。
  • hc05蓝牙模块实物图:

3、部分代码展示

3.1 系统外设初始化

delay_init();        //延时函数初始化    
  uart_init(9600);    //串口初始化为9600
  TIM3_Int_Init(499,7199);//50ms     
  FengShanInit();         //初始化与LED连接的硬件接口    
  Beep_Init();    //蜂鸣器初始化
  KEY_Init();     //按键初始化
  LedInit();      //LED初始化
  Lcd_GPIO_init();  //1602接口初始化
  Lcd_Init(); 
  fengshan = 1;  //上电风扇转一下
  PowerLed = 0;
  WarnLed = 0;
  BUZZER_ON    //蜂鸣器上电响一下
  delay_ms(200);
  BUZZER_OFF

3.2 LCD1602液晶显示屏引脚初始化

void Lcd_GPIO_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;   //声明结构体
  RCC_APB2PeriphClockCmd(RCC_GPIO_DATA, ENABLE);  //打开端口B时钟   
  GPIO_InitStructure.GPIO_Pin  = GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN; //  DB8~DB15
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //标准输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIO_DATA_0, &GPIO_InitStructure);      //初始化端口
  RCC_APB2PeriphClockCmd(RCC_GPIO_EN, ENABLE);      //打开端口时钟 
  GPIO_InitStructure.GPIO_Pin =  GPIO_EN_PIN;       // 使能端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //标准输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIO_EN, &GPIO_InitStructure);
  RCC_APB2PeriphClockCmd(RCC_GPIO_RW, ENABLE);    //打开端口时钟 
  GPIO_InitStructure.GPIO_Pin =  GPIO_RW_PIN;     // 使能端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //标准输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIO_RW, &GPIO_InitStructure);
  RCC_APB2PeriphClockCmd(RCC_GPIO_RS, ENABLE);    //打开端口时钟 
  GPIO_InitStructure.GPIO_Pin =  GPIO_RS_PIN;     // 使能端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽复用输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIO_RS, &GPIO_InitStructure);
}

3.3 DHT11读取温湿度数据程序设计

/**
  * @brief  读取40bit数据
  * @param  none.
  * @retval 1 读取成功,0读取失败.
  */
int DHT11_ReadData(void)
{
  unsigned int cout = 1;
  unsigned int T_H, T_L, H_H, H_L, Check;
  //设置为IO口输出模式
  DHT_Set_Output();
  //1、MCU开始起始信号
  DHT_ResetBit();
  delay_ms(25);   //拉低至少18ms
  DHT_SetBit();   
  delay_us(20);   //拉高20~40us
  //设置为IO口输入模式
  DHT_Set_Input();
  //2、读取DH21响应
  if(DHT_ReadBit() == Bit_RESET)
  {
    //等待80us的低电平
    cout = 1;
    while(!DHT_ReadBit() && cout++);
    //等待80us的高电平
    cout = 1;
    while(DHT_ReadBit() && cout++);
    //读取8bit的湿度整数数据
    H_H = DH21_ReadByte();
    //读取8bit的湿度小数数据
    H_L = DH21_ReadByte();
    //读取8bit的温度整数数据
    T_H = DH21_ReadByte();
    //读取8bit的温度小数数据
    T_L = DH21_ReadByte();
    //读取8bit的校验和
    Check = DH21_ReadByte();
    if(Check == (H_H + H_L + T_H + T_L))
    {
      DHT11.Hum_H = H_H;
      DHT11.Hum_L = H_L;
      DHT11.Tem_H = T_H;
      DHT11.Tem_L = T_L;  
      return 1;
    }
    else
    {
      return 0;
    }
  }
  return 0;
}
相关文章
|
4天前
|
传感器 数据采集 数据处理
基于STM32的温湿度监测系统设计与实现
基于STM32的温湿度监测系统设计与实现
247 1
|
4天前
|
存储 安全 生物认证
基于STM32的指纹识别系统设计与实现
基于STM32的指纹识别系统设计与实现
68 1
|
4天前
|
传感器 监控 安全
基于STM32的智能公交车辆管理系统设计与实现
基于STM32的智能公交车辆管理系统设计与实现
19 1
|
4天前
|
物联网 程序员 语音技术
STM32智能小车(循迹、跟随、避障、测速、蓝牙、wife、4g、语音识别)总结-3
STM32智能小车(循迹、跟随、避障、测速、蓝牙、wife、4g、语音识别)总结
STM32智能小车(循迹、跟随、避障、测速、蓝牙、wife、4g、语音识别)总结-3
|
4天前
|
传感器 语音技术
STM32智能小车(循迹、跟随、避障、测速、蓝牙、wife、4g、语音识别)总结-1
STM32智能小车(循迹、跟随、避障、测速、蓝牙、wife、4g、语音识别)总结
STM32智能小车(循迹、跟随、避障、测速、蓝牙、wife、4g、语音识别)总结-1
|
4天前
|
传感器 监控 数据挖掘
基于STM32的智能城市环境监测系统设计与实现
基于STM32的智能城市环境监测系统设计与实现
53 0
|
4天前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
|
4天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
114 3
|
4天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤