夏长权,单佳杰,韩一帆,钱香香
(扬州大学 物理科学与技术学院,江苏扬州,225009)
随着物联网和嵌入式技术的不断进步,智能家居行业正在蓬勃发展,各种智能设备为人们的生活带来了高效便捷。温湿度计通常具备温湿度监测和时钟显示两项功能。传统的过道灯需要手动打开开关,而在黑夜中,由于能见度低并且对装修布局不熟悉,很难找到开关面板。此外,在黑暗中还容易发生绊倒等意外事件。因此,本文针对以上问题设计了一款环境监测系统。该系统可以实时监测并显示当前环境的温度和湿度,并且在光照条件不足时自动开启LED 灯,提供必要的照明。
本设计整体方案包括:微处理器、显示模块、温湿度和光照传感器模块、照明模块。系统框图如图1 所示。
图1 系统框图
1.2.1 微处理器方案选择
微处理器是整个系统的核心,负责处理系统运行过程中所有的数据。主控制器的特性,决定了系统的工作效率和稳定性。目前主流的微处理器有Atmel 公司AT89/AT91 处理器,意法半导体(ST)公司STM32/STM8 系列,可编程逻辑器件(FPGA)等。
方案一:采用51 单片机作为MCU。STC89C51 单片机功耗较低、性价比高、抗干扰能力与加密能力较好,但是性能较弱,拓展性差,需要采用寄存器开发方式,开发效率不高。
方案二:采用STM32 微处理器作为主控制器。STM32具有能耗比高,成本低的特点。STM32 是意法半导体(ST)公司基于ARM 架构的精简指令集处理器。本设计选用的是STM32F103C8T6 微处理器,主频为72Mhz。STM32 芯片不同的命名代表了不同的微处理器性能,F 代表通用型,C代表具有48 个引脚,8 表示ROM 为64KB。6 表示工作温度范围-40℃~85℃。STM32F103x 系列性价比高,处理能力强,片上资源齐全,符合本设计所要求的条件,且成本较低,便于大规模地投入市场使用。
综合经济成本,芯片性能强弱,软件开发难度等角度考虑,选择了方案二的STM32F103C8T6 微处理器作为主控制器。
1.2.2 显示模块方案选择
单片机系统中很多时候需要进行界面显示,主流的显示方案有8 段数码管、LCD 液晶、OLED 屏幕显示。
方案一:采用8 段数码管显示优点是简单成本很低,但是显示内容有限。无法显示字符,不符合本设计需求。
方案二:采用OLED 屏显示。OLED 显示的优点是支持64 位字符显示,而且具有良好的可视角度,刷新率较高,能够符合本设计的使用需求,但是功耗和成本都高。
方案三:LCD1602 是一款字符型液晶显示屏,可显示字母数字符号。LCD1602 液晶工作温度为0℃~+55℃,工作电压为-4.5~+5.5V,能够同时显示16 字符2 行的字母或数字[1]。成本低廉,编程容易,符合本设计的需求。
由于本设计只需要显示问候语,以及温湿度数据,故采用方案三。
1.2.3 传感器模块方案选择
方案一:传感器模块包括温湿度采集模块和光照传感器模块两个部分。采用DHT11 温湿度传感器作为温湿度采集模块,采用光敏电阻传感器作为光照检测模块。DHT11 温湿度传感器工作电压为3.3 ~5V[2],采用4 针单排直插的封装工艺,精度在±2℃,量程范围是0℃~50℃。
光敏电阻传感器采用4 针单排直插封装工艺,工作电压是3.3~5V,主要用于检测环境的亮度和光强,支持数字信号输出和模拟量输出。可以通过电位器调节检测灵敏度。编程简单,成本较低,适合本设计使用。
方案二:DS18B20 温度传感器采用单信号线通信,且可以双向传输数据。能够输出精确的数字信号,具有体积小巧,抗干扰能力强等特点。但是无法采集湿度,不符合本设计的需求。
使用照度传感器作为光照检测模块,照度传感器测量范围大,分布感应能力强,可以准确显示光强信息,但是成本高昂,适合用在手机、电脑、红外摄像机以及工业领域光照控制仪器上。
因为本设计倾向湿度信息的采集,不需要准确采集光照强度数值,所以出于成本和开发难度考虑,选择了方案一。
1.2.4 照明模块方案选择
在光照不足时,需要打开LED 灯来照明。照明模块选用的是白色高亮LED 灯,发光强度在10mcd 以上,且结构简单,使用寿命长。高亮LED 灯在节约了电路板空间的前提下,最大程度地改善了光照条件,适合本设计使用。
电路设计部分包括STM32 单片机最小系统电路、温湿度传感器电路、光照采集模块电路、显示模块电路、光照模块电路的设计与原理说明[3]。
STM32F103C8T6 的最小系统包括:STM32 芯片、时钟电路、复位电路、电源管理电路[4]。
2.1.1 STM32 芯片电路原理图
STM32 芯片电路原理图如图2 所示。
图2 STM32 芯片电路原理图
2.1.2 时钟电路
时钟电路原理图如图3 所示。
图3 时钟电路原理图
PD0_OSC_IN 和PD1_OSC_OUT 引脚可接4MHz~16MHz 的外部晶振,但是随着频率的提高,功耗也会提升。本文的最小系统核心板采用外部8Mhz 高速晶体,振荡产生脉冲信号,并联20pF 的滤波电容,组成主时钟电路。8MHz 的晶振经过锁相环(PLL)进行9 倍频到72MHz 主频。
内 部RTC 电 路 同 理,OSC321 和OSC322 引脚接32.768kHz 的晶体,并联20pF 的滤波电容。此处滤波电容一般在20~40pF,用来给直流电源滤波,让单片机有一个稳定的、低噪声的工作环境,提升了电路稳定性,减少谐波对电路影响。
这里对PLL 的工作原理做进一步说明。频率的大小取决于晶振频率,本设计采用的晶振是8MHz 但是时钟频率也就是主频却达到了72MHz。在STM32 单片机内部经过了PLL 的9 倍频,外部晶振与处理器中间经过锁相环(PLL)可实现这个功能。基础锁相环系统如图4 所示。
图4 锁相环系统示意图
基础锁相环由鉴相器、低通滤波器、压控振荡器(VCO)组成,VCO 受电压控制,可以根据电压变化输出不同的频率。输入频率f1,可以是晶振的输出频率,输出频率f2,输出频率会反馈给鉴相器。VCO 虽然可以实现倍频,但是依然需要鉴相器和低通滤波器,VCO 是由电压控制的,输入电压有很小的波动,VCO 的输出频率都会受到极大影响,但是处理器工作是需要稳定频率的,所以不能只用VCO 来实现倍频。在PLL 系统中,VCO 的输出有变化就会立刻反馈给鉴相器,鉴相器进行调整,使输出保持在一个相对稳定的频率,中间的低通滤波器让鉴相器输出的电平信号变得平滑。
2.1.3 复位电路
复位电路原理图如图5 所示。
图5 复位电路原理图
10k 的电阻R7,主要起限流保护电路作用,接VCC_3.3V, 串 联100pF的电容C9,并联按键开关SW1 组 成RC 复 位 电路,SW1 一端接地,一端接单片机NRST 引脚。SW1 没按下时,NRST 引脚呈低电平,按下SW1后NRST 引脚呈高电平使单片机复位。
2.1.4 电源电路
数据线一端连接电脑USB 接口,另一端连接单片机,给单片机提供5V 直流电,单片机工作电压是3.3V,因此需要电压转换。电压转换电路原理图如图6 所示。本文采用的是AMS1117-3 系列稳压器,可以将5V 直流电转化成3.3V[5],1 号引脚接GND,3 号引脚接5V 输入,2 号与4 号引脚输出3.3V 电压给MCU。
图6 电压转换电路原理图
DHT11 温湿度传感器电路原理图如图7 所示。
图7 DHT11 温湿度传感器电路原理图
在VCC 和DAT 引脚之间接入一个阻值4.7k 的电阻作为上拉电阻,如果不加上拉或者下拉电阻,DAT 引脚处于浮空状态,输出的数据将在0 和1 之间不断跳变,加入上拉电阻R1 之后,可以将电位钳制在高电平不会跳变,保证数据正确传输。DHT11 温湿度传感器的串行数据接口DAT 与PA0 引脚连接,电源引脚VCC 接5V 电源,接地引脚GND接地,3 号引脚不接。
光照传感器采用光敏电阻模块方案。光敏电阻模块电路原理图如图8 所示。
图8 光敏电阻模块电路原理图
4 号引脚VCC 为电源引脚,接5V 电压,3 号引脚接地,1 号AO 引脚输出模拟信号,本文中无需接单片机引脚,2号引脚DO 为数字量输出接口,用于输出经过内部比较器得到的0 或1 信号。DO 引脚与单片机PA3 引脚直接连接,通过输出高低电平,来检测光强变化。
显示模块由LCD1602 液晶和10k 的电阻组成。原理图如图9 所示。
图9 显示模块电路原理图
将一个10kΩ 的电阻PR1 连接LCD1602 的AO 引脚后接地,用来调节液晶显示对比度,让LCD1602 显示更加清晰。LCD1602 液晶的工作电压是4.5 ~5.5V。LCD1602 共有16 个引脚,显示屏用来显示温湿度值和问候语。STM32单片机的PB5-PB15 与LCD1602 连接,VDD 和A 接5V 电压,VSS 和K 接地。
LED 照明模块电路原理图如图10 所示。
图10 照明模块电路原理图
该电路由白色高亮LED 灯、一个NPN 型三极管和3 个电阻组成。高亮LED 灯的正极接100Ω 电阻R5 后连接5V电源,电阻R5 主要起限流作用,保护LED 灯不被烧毁。负极接在NPN 型三极管Q1 的集电极,三极管基极通过100Ω 的电阻R3 连接单片机PA1 引脚,电阻R3 是限流电阻,用来保护三极管,发射极接地。电阻R4 是下拉电阻,在单片机复位以后,PA1引脚处于浮空状态,跳变输出0与1,会对三极管导通与截止造成影响,无法使用。加电阻R4 可以将PA1 引脚电位钳制在低电平,此时三极管不会导通。当单片机PA1 引脚为高电平时,三极管导通,高亮LED 灯点亮。
程序采用C 语言编写。主程序需要通过使用while 循环来对各个模块代码进行不断循环执行。主程序流程图如图11 所示。
图11 主函数流程图
程序开始运行,先对时钟、I/O 口、定时器和USART串口进行初始化。初始化完成后,程序开始进入while 循环,单片机读取温湿度传感器采集的数据,进行光照条件判断,若环境光照低于程序设定阈值时,控制GPIO 引脚打开LED灯,通过LCD1602 显示当前的温湿度信息,程序进入下一次循环。
3.2.1 初始化程序设计程序开始执行后先对串口、时钟、I/O 端口初始化。初始化函数如表1 所示。
表1 初始化函数
3.2.2 DHT11 温湿度传感器程序设计
DHT11 采集数据时,先将I/O 引脚定义为输出,给总线18ms 的低电平信号,然后设置I/O 引脚为上拉输入模式。如果传感器工作正常,则拉低I/O 口80μs,将I/O 口拉高80μs。DHT11 程序流程如图12 所示。
DHT11 数字湿温度传感器采用单总线数据格式,单个数据引脚端口完成输入输出双向传输;其数据包由5Byte(40Bit)组成:数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11 的数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和,其中校验和数据为前四个字节相加[6]。在单片机接收DHT11 发送的四个字节时,以每一个字节为单位,从高到低依次接收,由于“0”为50μs 的低电平加26~28μs 的高电平,“1”为50μs 的低电平加70μs 的高电平。
3.2.3 光敏电阻传感器程序设计
本系统通过光敏电阻传感器采集光照信息,并通过LM393 比较器输出高低电平。因此定义如下函数,完成光照条件的判断。光照判断模块函数如表2 所示。
表2 光照判断函数
由电路原理图可知,光敏电阻传感器的2 号引脚DO与单片机的PA3 口连接,通过按键扫描函数和按键初始化函数可以检查用来实时检测PA3 引脚的高低电平状态,当check_light PAin(3)为1 时,光照标志Light_flag 置为L,代表此时外界光照条件为暗,否则为H,代表光照条件为亮。
3.2.4 LCD1602 液晶显示程序设计
驱动LCD1602 液晶需要定义函数,如表3 所示。
表3 LCD1602程序定义的函数
在main 函数中主要调用Lcd_Init()和Lcd_Puts()两个函数。LCD1602 液晶初始化程序流程图如图13 所示。
图13 LCD1602 液晶初始化流程图
本系统的问候语、温湿度和光照信息,在主函数中通过调用Lcd_Puts()函数进行显示。当需要写入字符进行显示时,首先执行Lcd_Init() 函数进行初始化,其次调用Lcd_Puts() 函数写入字符串。Lcd_Puts()函数调用写入数据函数Lcd_Write_Data()和设置位置函数Lcd_SetXY()。根据LCD1602 时序可知,设定E 为高脉冲,RS 为高电平,RW为低电平,可进行写数据操作。数据送至D0~D7,因此编写写入数据函数Lcd_Write_Data()。
3.2.5 LED 控制程序设计
当光照不足时,系统会根据程序打开LED 灯。由电路图可知,单片机PA1 引脚连接高亮LED 灯电路。定义如表4 所示的函数,来实现以上功能。
表4 LED灯控制函数
通过BIT_ADDR(GPIOA_ODR_Addr,n)函数配置GPIO引脚地址。若为1 则LED 灯打开,否则关闭。
将各个元器件的位置预先摆放好,确保元器件之间距离合适,防止背面焊接时引脚间距过短,导致焊接过程中出现短接的情况。其次在焊接二极管和三极管时应注意焊接时应选用20~75W 电烙铁,加热到300℃~350℃,每个管脚焊接时间应小于4s,并保证焊接部分与管壳间散热良好。二极管和三极管应安装牢固,尽量避免靠近电路中的发热元件。经过电压测量后可知供电正常,通电后5V 供电测试结果为5.1056V,3.3V 供电测试结果为3.3022V,硬件电路制作完毕。电压测量结果如图14 和图15 所示。
图14 5V 供电情况测试
图15 3.3V 供电情况测试
(1)液晶显示模块及DHT11 模块调试:开机后,DHT11 温湿度传感器电源指示灯亮起,说明供电正常。系统进行初始化,初始化完毕后,LCD1602 能够正确显示问候语、当前温湿度。如图16 所示。
图16 LCD1602 显示界面
(2)光敏电阻及高亮LED 灯模块调试:用瓶盖遮住光敏电阻,可以看到LED 灯能够根据程序设定自动打开。如图17 所示。
图17 高亮LED 灯打开
经过调试,本系统实现了温湿度监测并通过液晶显示以及光控LED 灯开关功能。但也存在一些不足之处,在焊接过程中要注意元器件布局问题,本次焊接过程中由于元器件位置摆放不好,增加了焊接难度。由于供电引脚集中在一起,焊接的时候容错率很低,VCC 焊接容易碰到GND,导致无法正常供电。DHT11 温湿度传感器模块和光照传感器模块,都是采用插在单排座上的方式,容易掉落,在不影响正常供电情况下,可以使用适量胶水固定。洞洞板焊接方式较为原始,但证明了设计的可行性,后续可以改成PCB 以及贴片电阻的方式,有利于批量生产,且系统更加稳定。