狄新宇, 唐梓芯, 庄子龙, 谢 超*
(南京林业大学机械电子工程学院,江苏 南京 210037)
马尾松是我国亚热带地区造林的先锋树种之一,面积约0.08 亿hm2,其生长迅速,木材产量高,而且板材质量较好,是优质的建筑、工业生产原材料,在市场上很受欢迎[1-2]。 在实验室内对马尾松生长进行研究,需要对马尾松的生长环境进行监测,以便改变相关环境使马尾松生长在最适宜其生长的环境下。 本文设计了一款基于ATmega328p 的马尾松实验室生长环境检测装置,可以检测马尾松生长环境中的温湿度、二氧化碳及有机挥发物浓度(甲醛,醇类)并将其显示到TFT 屏幕上,对于超出环境阈值进行报警。 装置还采用锂电池供电方案且配有充电模块,装置设计小巧,提高了便携性,避免了电源对装置位置的影响。 本文的设计可实现信息实时监测与智能分析,对异常数据进行智能预警等功能,符合电子设备智能化和人性化的发展趋势[3]。
系统硬件电路设计框图如图1 所示,系统硬件主要由锂电池充电模块、DHT11 温湿度传感器、SPG30 二氧化碳及挥发物传感器、蜂鸣器及TFT 屏幕组成。 其中,锂电池充电模块给锂电池充电,锂电池在有电情况下给主控制器及传感器、屏幕等进行供电;DHT11 通过单总线(OneWire),SPG30 二氧化碳浓度及挥发物传感器通过IIC 与ATmega328p 进行通信,将温湿度、二氧化碳及挥发物浓度等数据传递给主控制器;主控制器与TFT 屏幕模块通过SPI通信,将屏幕需要显示的数据传递给ST7735 芯片,ST7735 屏幕驱动芯片将数据进行显示;当超过固定阈值时,主控制器的GPIO 发生电平变化,进而控制蜂鸣器进行预警。
图1 系统硬件设计框图
该装置采用ATmega328p 单片机作为系统进行监测的主控制器。 ATmega328p 是一款高性能、低功耗的AVR 内核8 位微控制器[4],有GPIO、ADC、IIC、SPI、USART 等多种接口,性能可以达到16MIPS,可以满足系统所需要的接口及性能需求。 ATmega328p微控制器现有许多最小系统板可供使用,如Arduino NANO、Arduino UNO 等。 Arduino UNO 体积较大但接口较多,市面上有许多与其配套的面包板,主要用于ATmega328p 的学习及实验验证;Arduino NANO体积小,轻巧方便携带,主要用于实物制作,可以有效缩小实物的体积,提高实物的便携性。 因此,本文使用Arduino NANO 作为最小系统板,既满足系统所需要的接口和性能,又能有效缩小系统的体积。 Arduino NANO 的接口图如图2 所示,其中IIC 通信引脚为27-28 脚,SPI 通信引脚为15-17 脚,系统板内包含AMS1117-3.3 降压芯片、CH340C 的USB 转TTL 芯片。
图2 主控开发板引脚分布电路
该装置的数据采集电路主要由DHT11 温湿度传感器模块、SGP30 二氧化碳及有机挥发物传感模块组成。
温湿度采集电路如图3(a)所示,ATmega328p 使用单总线通信,通过DHT11 温湿度传感器模块获取温度,该传感器是一款含有已校准数字信号输出的温湿度复合传感器[5]。 其具有精度高、成本低、抗干扰性强、测量范围较宽等优势,电路设计时需注意在单总线数据传输引脚外加4.7 K 上拉电阻。
图3 传感器数据采集电路
图4 显示及蜂鸣器驱动电路
二氧化碳及有机挥发物采集电路如图3(b)所示,ATmega328p 使用IIC 通信,通过SGP30 二氧化碳及有机挥发物传感模块获取二氧化碳浓度及有机挥发物浓度,其标准电压为1.8 V,在程序编制时需要注意相关电压转换的内容。 本文使用已经封装好的SPG30 模块,仅需外接相关电源及IIC 接口即可,连接方便。
系统的显示及蜂鸣器驱动电路主要由TFT 屏幕和蜂鸣器组成。 显示屏幕采用ST7735 芯片驱动的1.8 寸彩色TFT 屏幕模块,选择使用通信较为稳定的SPI 通信,调配好通信时序,并传输相关指令,即可完成相关显示操作。 TFT 屏幕相较于SSD1306 驱动的OLED 显示屏等屏幕具有显示颜色不受限制、屏幕清晰不花屏、显示内容更多等优势;本文使用黑底,对界面显示使用三种颜色编辑有关界面,可以使界面数据读取更加清楚明了。 蜂鸣器选择使用无源蜂鸣器,使用单片机的IO 口输出方波进行驱动,无源蜂鸣器具有价格低廉、应用范围更广等优势。 由于使用IO 口直接驱动电流过小,需外加三极管进行驱动。
系统采用锂电池进行供电,使用TP4056 进行充电,TP4056 充电电路如图5(a)所示。 本文所用锂电池正常情况下电压为3.7 V,如果直接给Arduino NANO 供电,其上的AMS1117-3.3V 芯片压降约为0.6 V,会导致降压后的电源电压不足3.3 V,无法正常驱动ATmega328p 及其外设。 因此,本文选择使用先升压后降压的方式通过锂电池给系统供电,本文选择使用MT3608 升压芯片,其为DC-DC 升压芯片,具有电压稳定、性价比高的有点。 MT3608 将锂电池输出的3.3 V 电压升至5 V,接入开发板的VIN接口,通过开发板的AMS1117-3.3 降压芯片降压至3.3 V,此方案可满足部分模块需要的5 V 供电。
图5 系统程序设计框图
图5 充电模块电路
本文的马尾松实验室环境监测装置程序是在Arduino IDE 上,借助专门针对ATmega328p 开发的Arduino 环境平台进行编写。 Arduino 平台可以安装如STM32、ESP32、ESP8266 等MCU 的环境并通过已经封装好的相关函数进行编程,对初学者更加友好;兼容多种单片机,开发范围更广。 Arduino IDE 使用的C++相较于MicroPython、Arduino Block 等编程语言,编程可扩展性更强,逻辑更加清晰,因此本文选择使用Arduino IDE 进行编程。
Arduino 平台中有很多库函数及示例,可以帮助初学者更快地获取相关传感器数据及发送相关显示时序。 对于屏幕显示,本文使用Adafruit 公司在Arduino 平台开发的ST7735 库函数,首先进行实例化和引脚声明,在setup 函数中进行初始化后,在loop函数里进行背景颜色选择、字体及颜色选择、位置选择及数据打印,在打印完所有的数据后进行屏幕刷新。 对于DHT11 和SPG30,Arduino 平台同样有相关库函数,进行实例化、选型及引脚声明后,在setup 函数中进行初始化及传感器检测,如果不能与ATmega328p 建立通信,串口将会发送数据给电脑以告知用户,建立通信后,loop 函数里执行数据读取,并将读取数据通过函数返回值进行打印输出。
系统程序设计框图如图5 所示,程序初始化结束之后,系统进入低功耗休眠模式并进入按键监测状态,其中按键检测使用外部中断检测的方式。 由于使用锂电池进行供电,单片机休眠可以降低产品功耗,进而延长系统在断电情况下的使用时间。
如果按键按下触发外部中断,会使得按键的标志位进行改变,当标志位置为1 代表系统进入检测运行状态,标志位为0 是代表系统进入低功耗休眠模式,进行标志位判断即可进入相对应状态。 当系统进入监测运行状态时,DHT11 温湿度传感器以及SGP30 二氧化碳浓度传感器开始工作,获取温湿度和二氧化碳浓度后显示到TFT 屏幕上,当温湿度和二氧化碳浓度高出设定阈值时,蜂鸣器响,TFT 屏幕上显示预警信息。
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,包括一个电阻式感湿元件和一个NTC 测温元件[6]。 该传感器与ESP8266 之间使用单总线通信进行信号传输,具有使用IO 口少、传输距离长、传输数据稳定等优点。Arduino 平台有相关温湿度传感器的库函数,直接调用库函数进行实例化、初始化等操作,将返回值函数赋值于变量,即可在变量中得到相应的温湿度。
SGP30 二氧化碳及有机挥发物传感器,具有体积小、灵敏度高、低功耗的优势,可以轻松集成到空气净化器等产品中,该传感器还可根据环境中的温湿度优化二氧化碳浓度的测量,因而被广泛应用。SGP30 通过IIC 通信进行数据的传输,使用相应库函数,进行初始化、实例化等操作即可得到SGP30 传感器所测得的二氧化碳及有机挥发物浓度值,在ATmgega328p 中进行分析,进行相关操作。
经过串口打印测试,读取到了相关传感器检测的值。
本文选择使用ST7735 芯片驱动TFT 屏幕,主控使用SPI 通信与其进行数据传输,发送相关指令使ST7735 驱动屏幕进行相关操作,调试时需注意时序。在Arduino 平台中有相关库函数驱动ST7735,在进行初始化、清屏、显示等操作后本文实现了相关显示。
图6 为检测系统正在对马尾松生长实验室环境进行监测的照片,图7 为TFT 屏幕的传感器数据的显示界面。 可以看出,上述系统测试验证了本文设计方案的有效性。
图6 测试系统进行检测照片
图7 TFT 屏幕显示界面
随着科技的发展,在对室内环境的检测过程当中,需要利用现代化的技术进行室内环境检测[7]。本系统经过硬件设计、软件设计和系统测试,实现了通过ATmega328p 对温湿度、二氧化碳浓度数据的采集,同时将采集信息显示在TFT 彩屏上,并对超过阈值的实验室环境进行预警,从而实现了对马尾松在实验室生长环境的监测。 系统测试表明,本系统符合设计要求,并达到了预期效果。 后续,本系统还可进行升级改进,与物联网[8]、电化学传感器[9]、5G[10]、机器视觉、深度学习[11]等技术相结合,以适应科技的进步和满足对马尾松实验室环境监测的后续要求。