摘要:随着计算机技术及网络技术的不断发展,越来越多的智能化系统应用到人们的生活之中,智能灌溉系统就是为了节约水源、提高灌溉效率、节省人力而提出的。本设计以STM32F407为主控板,选用DHT11传感器检测植物生长环境温湿度,选用YL-69传感器检测绿植土壤湿度;在KeilC51环境下完成各功能模块的软件设计,通过硬件端口配置及驱动测试,最终实现了系统的自动浇水功能。用户在系统中可以根据不同花卉的特点设置浇水的阈值,系统将检测到的参数与设置的阈值进行对比,当检测的参数小于设置的阈值时,主控板启动水泵实现自动浇水,并将获取到的温湿度数据显示在OLED屏上。经测试,系统各模块运行正常,能够根据用户设置的湿度阈值实现自动浇花的功能,提高了绿植养护的自动化和智能化水平。
关键词:STM32; 土壤湿度检测; DHT11; OLED; 智能灌溉;
作者简介: 张伟(1981-),男,硕士,副教授,主要从事嵌入式系统与物联网方面的教学和科研工作;; 宋梓源(1999-),女,研究方向为物联网技术应用。;
基金: 陕西省教育科研项目(18JK0838); 陕西省教育科学“十三五”规划课题(SGH18H373); 陕西省大学生创新创业项目(2019036);
Design and Implementation of Intelligent Irrigation System Based on STM32
Abstract:With the continuous development of computer technology and network technology,more and more intelligent systems are applied in people's life. Intelligent irrigation system is designed to save water,improve irrigation efficiency and save manpower. We take the STM32 F407 as main control board,select the DHT11 sensor to detect temperature and humidity of plant growth environmental and YL-69 sensors to detect soil moisture of green plant. All software of each function module have been designed in the KeilC51 environment,and the automatic watering function of the system is finally realized through hardware port configuration and driver testing. Users can set watering threshold according to the characteristics of the different flower in the system where the detected parameters are compared to the set threshold. When the detected parameters are less than the setting threshold,main control board will start the water pump automatically,and the temperature and humidity data will be displayed on the OLED screen. After the test,the system modules run normally,and can realize the function of automatic watering according to user setting humidity threshold,which improves the automatic and intelligent level of the green plant maintenance.
Keyword:STM32; soil moisture detection; DHT11; OLED; intelligent irrigation;
引 言
随着生活水平的提高,人们在生活质量方面也有了更高的需求。在家庭及工作场所养殖绿植已成为人们改善室内环境的主要方式,但由于生活节奏的加快人们时常忘记按时浇灌绿植,从而导致绿植枯萎死亡的现象时有发生。为了提高盆栽绿植浇水的智能化,设计一款基于STM32的盆花自动浇水系统,该系统可以检测绿植生长环境的温湿度以及土壤湿度情况,当检测到环境参数值低于设定的阈值时,自动启动盆花浇水功能,从而减轻了人们养护绿植的工作量。
1、系统总体结构
智能灌溉系统设计的主要目的是为了解决浇水不及时、养护不当而导致绿植枯萎死亡的问题。系统选用DHT11[1]传感器检测室内温湿度数据,土壤湿度传感器实时监测绿植的土壤湿度情况,从而实现对绿植环境参数的监测。
系统的整体设计思想是:将温湿度传感器检测到的室内温湿度数据显示在串口调试工具上;利用土壤湿度传感器采集土壤湿度数据,并将数据传送给主控板并显示在OLED显示屏上;水泵及电机驱动通过获取到的土壤湿度数据来控制水泵的开关,并在OLED显示屏上显示浇水状态。系统的主控板选用的是STM32F407[2],主要对温湿度传感器、土壤湿度传感器、OLED及水泵进行控制,以实现自动浇水功能。系统的设计分硬件与软件两部分,系统总体框架如图1所示。
图1 系统框架
2、系统硬件设计
2.1 土壤湿度传感器
土壤湿度传感器[3]由土壤探头和湿度处理模块组成,通过杜邦线将它们相连。将土壤探头插入土壤当中检测数据,湿度处理模块将土壤探头检测到的信息进行分析得到具体数据,然后将数据传送给主控板,主控板将接收到数据与设置的土壤阈值比较,如果数据小于设定的阈值,启动水泵以实现自动浇水的功能。蓝色电位器在模块中可以调节土壤湿度阈值,顺时针旋转湿度阈值变大,逆时针旋转时湿度阈值变小,模拟量输出D0可以与继电器相连,直接控制继电器的转动,模拟量输出AO可以和STM32的ADC转换接口相连,通过ADC转换,获得具体的土壤湿度数值。土壤湿度传感器引脚接口如图2所示,GND为电源接地,VCC为电源正极(3.3 V),A0接ADC1通道5的PA3引脚,D0置空。
该系统选择的是YL-69[4]土壤湿度传感器,该湿度传感器是由不锈钢探针和防水探头构成的,土壤检测探头感应面积大大提高了导电性,表面镀镍防止生锈,可长期埋置于土壤内使用。
图2 土壤湿度传感器引脚定义
2.2 温湿度传感器
系统中选用STM32F407开发板上自带的DHT11温湿度传感器,其连电路连接如图3所示。引脚PG9用于处理器与DHT11间的同步和通讯,数据格式为单总线方式,通信时间约为4 ms,一次传输40个bit,格式定义如下[5]:
数据格式:湿度(8位整数)+湿度(8位小数)+温度(8位整数)+温度(8位小数)+8位校验和。
发送开始信号后,先设置为输出模式,然后拉低电平,持续至少18 ms,然后再拉高电平,持续20 μs~40 μs,在设置为输入模式时,检查DHT11的响应信号,低电平持续80 μs,高电平持续80 μs,即DHT11有响应,如果没有响应,就一直为高电平。保持输入模式时,识别低电平为50 μs时,高电平26 μs~28 μs,就为bit0;当识别低电平50 μs,高电平70 μs,就为bit1.然后继续识别低电平50 μs,再变为输出模式,输出高电平,一次数据采集完成,当没有接收到下一次开始信号时,保持原状态不变。
图3 温湿度传感器电路连接图
2.3 L298N电机驱动
由于在系统中各模块之间电压大小不同,所以需要一个驱动来调节电压,使系统电路电压稳定,因此选择L298N电机驱动作电压调节器。L298N的主要功能:提供了12 V的电源输入,5 V的电源输出;逻辑控制输入电路,设置IN1和IN2的电位能够控制电机正反转和停止;该驱动器可以使能2个电机,ENA、ENB使能两个输出端口。L298N引脚接口[6]如图4所示,接上跳线帽,采用5 V板载使能,将外部12 V电源供电给模块,并输出5 V电源到STM32开发板,IN1接PE5引脚,IN2接PB6引脚,输出端口out3、out4接上水泵。
图4 L298N引脚定义
2.4 OLED
由于OLED[7]具有自发光功能,且其反应速度快,厚度小于LCD屏幕,视角宽,对比度高,同时可以使用柔性面板,模块温度检测范围大,构造简单及高分辨率等特点。因此,系统中选择OLED显示屏来显示数据。本次设计采用的是0.96寸OLED显示屏,其主要特征如下:
0.96英寸OLED提供三种颜色,即黄色、白色和蓝色;黄色光占前面1/4,蓝色光占后面3/4;OLED屏幕的固定区域显示固定颜色,颜色和显示区域不能被修改,OLED分辨率为128*64.
本设计中OLED屏采用IIC接线形式,引脚接口如图5所示,GND接地,VCC接电源正极(3 V~5.5 V),OLED的D0(SDA)引脚,在IIC通信协议中为数据管脚,这里接上开发板的PB8引脚,OLED的D1(SCL)引脚,在IIC通信协议中为时钟管脚,这里接上开发板的PB9引脚,RES接PC7引脚,DC接PC11引脚,CS接PC8引脚。
图5 L298N接口引脚
2.5 水 泵
系统中水泵是用来实现浇水的设备,本次开发中选用的是小型水泵,它的工作电压为2 V~16 V,工作电流为1 A,系统使用12 V电压供电,利用L298N电压放大模块进行电压控制[8].储水设备使用瓶子装水,便于加水及水泵抽水。
3、系统软件设计
该系统软件部分是在Keil C51[9]环境下开发完成的,主要包括环境温湿度、土壤湿度、自动浇水功能以及显示等模块的软件设计与配置,其系统操作流程如图6所示。
图6 系统操作流程
3.1 土壤湿度传感器模块
土壤湿度模块软件设计分为三个部分,其主要步骤如下:
(1)模拟信息输出端口的配置。
对YL-69的接口初始化进行配置,GPIO A端口[10]为PA3,设置为模拟输入模式,获取采集到的模拟信号,模拟信息输出端口配置如下:
RCC_AHB1_PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能端口A时钟
RCC_APB2_PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; //配置ADC1的3号通道模拟输出
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN; //设置引脚具有模拟输入或输出功能。
(2)ADC初始化,设置ADC的相关参数。
采用独立工作模式[11],在当前的通道5只采用ADC硬件工作,ADC的工作时钟设置42 MHz,禁止DMA;ADC的工作模式设置为12位精度,不需要连续扫描,模数转换器连续工作,禁止触发检测,不需要PWM脉冲触发工作,存储ADC的结果值采用右对齐,执行一次转换结果,最后使能ADC1.
ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div2;//设置ADC扫描方式
ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;//精度设置
指定ADC1常规通道5的采样时间,3个ADC时钟时间,采样时间计算方法:采样时间=3个ADC时钟时间=3*(1/42 MHz)。
(3)采集转换电压。
最后读取传感器的值,根据该电压数值转换为百分比的形式返回,读取到的是湿度的百分比值,将float型转换为int型输出。计算方法:电压百分比=采集到的电压值/最大电压值,具体如下[12]:
将采集到的数据转换为电压值数据,ADC设置为12精度工作模式,计数范围为0~4 095,供电电压为3.3 V,计算方法:电压=采集到的数值/4 095*3.3,具体如下:
adc_vol=(float)adc_vol*3.3/4 095 (2)
3.2 温湿度传感器模块
DHT11温湿度模块软件设计部分,先对GPIO输入输出进行配置,然后判断DHT11工作与否,若正常工作,则获取所读8位字节数据,将所获取的字节数据转换为温室度数据,并对读取数据进行校验和。
(1)对DHT11的GPIO口进行初始化,使能GPIOG时钟源,PG9为输出模式。
RCC_AHB1_PeriphClockCmd(RCC_AHB1_Periph_GPIOG, ENABLE);// G组端口初始化
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;//配置PE5
(2)调用uint32_t dht_start()函数[13]开启DHT11工作,并将其设置为输出模式,PG9输出低电平并延时20 ms,接着PG9输出高电平并延时25 ms,再将输出模式调为输入模式,检测引脚电平、模块响应信号。
(3)调用dht_read_byte()函数获取8位数据,调用dht_read_data(data)函数获取温湿度数据,通过数组依次获取湿度的小数、整数,温度的小数、整数,并计算校验和,最终将获取的温湿度数据输出显示。
3.3 电机驱动模块
L298N电机驱动模块软件设计主要是为了进行电压转换及供电,将水泵与L298N进行连接,只需对两个引脚进行配置,然后对开启关闭电机条件进行判断。
对L298N的GPIO口进行初始化,初始化B、E组端口,使能GPIOB时钟源、GPIOE时钟源,配置PE5,PB6为输出模式,作为IN1,IN2的使能引脚,设置如下:
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_5;//配置PE5,PB6为输出模式
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//设置为输出模式
当湿度低于设定值之时,把IN1置0,IN2置1,驱动电机转动;当湿度高于设定值之时,将IN1置0,IN2置0,停止电机转动,并调用OLED_ShowString()函数进行水泵开关显示。
3.4 OLED模块
OLED模块软件设计部分需要配置IIC接口[14]以及对OLED进行寄存器初始化,在头文件中对汉字显示进行点阵配置等。
(1)设置OLED的开关状态。
在OLED_WR_Byte()函数中进行开启关闭配置,当第一个参数为0X14时为开启OLED显示,当第一个参数为0X10时为关闭OLED显示,通过调用void OLED_Display_On()函数开启OLED显示,调用void OLED_Display_Off()函数关闭OLED显示。
(2)配置IIC接口,初始化B、C组端口,使能GPIOB、GPIOC时钟源,配置PB8,PB9为输出模式,PB8引脚作为IIC的SDA,PB9引脚[15]作为IIC的SCL,具体操作如下:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOB、GPIOC时钟源
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; //配置PB8,PB9为输出模式
(3)对OLED相关寄存器进行初始化,使用OLED_WR_Byte()函数对OLED寄存器进行初始化配置。
调用void OLED_ShowString()函数显示英文,调用void OLED_ShowCHinese()函数显示中文。函数中设置三个参数分别为u8 x,u8 y,u8 *chr,第1个参数为x轴分辨率,第2个参数为y轴页码,64分辨率分为8个页码,第3个参数为需要显示的字符串信息,使用时要强制转换为无符号短整型。
4、系统测试
4.1 土壤湿度传感器电压值测试
在对湿度传感器特性进行测试时测量的是模拟量输出电压值,根据输出情况对传感器的特性进行分析。当测试环境参数低于设定阈值时,将通过串口1中断服务程序将其测试结果显示在串口调试助手上,经过多次测试,测试结果为湿度数据会随着电压值的增大而减小,总体变化波动不大,电压值、湿度数据基本稳定。
4.2 室内温湿度数据测试
对DHT11检测到室内的温湿度数据进行测试,data数据由8 bit组成,每两bit组成一个字符,共四字符,前两位字符组成温度数据值,后两位字符组成湿度数据值,同样通过串口1中断服务程序将其测试结果显示在串口调试助手上。经过多次检测结果可知,该DHT11传感器检测结果准确,温度值相比湿度值更加稳定,总体变化波动不大。
4.3 自动浇水测试
自动浇水部分由水泵和电机驱动组成,水泵接收到电平信号从而控制开关,测试中用纸杯装满水来提高环境湿度,土壤湿度设定的最低湿度阈值为30 RH,最高为50 RH,经过系统多次测试,当低于30 RH时,水泵自动浇水,当高于50 RH时,显示湿度正常,自动浇水模块测试成功,如图7所示。
图7 水泵工作测试
经过测试,该系统实现了自动浇水功能,测得土壤湿度数据及室内温湿度数据、水泵正常抽水等信息可显示到OLED端,系统实物如图8所示。
图8 系统实物图
5、结束语
基于STM32的智能灌溉系统以STM32F407为主控板,通过在其上搭建土壤温湿度传感器、温湿度传感器、电机驱动及OLED显示屏等以实现硬件功能;在KeilC51环境下开发完成各软件功能模块的设计及配置。经测试,系统运行稳定,可根据不同绿植设置的阈值自动启动盆花浇水的功能,达到了预期设计目标,提高了绿植养护过程中的自动化和智能化水平。
参考文献
[1] GAY W W.DHT11 sensor[J].Experimenting with Raspberry Pi,2014(6):1-13.
[2] HUANG Jian.Development of temperature acquisition system based on STM32[J].IOP Conference Series:Materials Science and Engineering,2017,242:012127.
[3] 李阳。基于物联网的智能花卉养护系统的研究[D].哈尔滨:黑龙江大学,2017.
[4] SU B,HUANG L,GAO Z,et al.Agricultural environmental information collection device based on raspberry Pi[C]//International conference on computer and computing technologies in agriculture.Cham:Springer,2015.
[5] 孙攀,胡泽,叶万聪。仓库环境控制系统的设计[J].仪器仪表用户,2012,19(3):11-14.
[6] 殷留留,韩森,王芳,等。基于L298N的直流电机调速系统的设计与应用[J].信息技术,2017(6):104-106.
[7] 陈文明,沈健,冯森,等。硅基OLED头盔数字像源的驱动电路设计[J].光电子技术,2018,38(2):132-136.
[8] 吴腾龙,王振宇,郑俊浩,等。基于ARDUINO的智能花盆设计[J].农业网络信息,2016(2):34-37.
[9] VAMSI T S,RAJU G R L V N S.ARM-based industrial circuitous like robotic implementation using CAN bus for surveillance[C]//Proceedings of 2nd international conference on micro-electronics electromagnetics and telecommunications.Singapore:Springer,2018.
[10] GAY W.Physics of the GPIO Interface[M]//Exploring the Raspberry Pi 2 with C++.[s.l.]:Apress,2015.
[11] 廖应生。基于STM32的花卉智能浇水系统的设计[J].木工机床,2017(4):9-11.
[12] ZHANG H,WEI K,PROCS J.Design of the data acquisition system based on STM32[J].Procedia Computer Science,2013,17:222-228.
[13] 聂明旺,孙旭飞,刘杰。基于STM32的智能盆栽浇水系统设计[J].南阳理工学院学报,2016,8(6):23-26.
[14] 王晓丽,姜川,于跃。基于STM32的校园能耗监控系统的以太网接口设计[J].吉林建筑大学学报,2015(1):76-79.
[15] 李统乐。传感技术的应用与发展趋势展望[J].电声技术,2018,42(4):63-65.