版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前言1.1研究意义本设计的研究对于发展自动灌溉、提高自动灌溉水平具有重要的现实意义和理论意义。研究通过信息收集和分析,从理论结构上对自动灌溉技术进行了全面综合的评价,研究成果为自动灌溉的实际应用和操作提供了实证依据,强化了自动灌溉技术的理论基础,通过梳理和分析形成的理论结构拓展了现有的自动灌溉理论,有效填补了各研究领域的空白。本论文从现实意义的角度出发,对我国自动灌溉的发展提出了更加清晰的思路,为花卉、林业等相关部门进一步构建高效、合理的自动灌溉系统提供了建议,从而推动我国室内花卉自动灌溉的专业化、本土化发展,促进我国社会事业的发展。1.2国内外现状1.2.1国外研究现状:国外对基于STM32的室内花卉自动浇灌系统的研究起步较早,技术相比国内更加先进。许多研究机构和企业已经开发出了具有较高实用价值的自动浇灌产品。国外的研究更加注重用户体验和系统的可扩展性。许多研究团队在开发过程中会充分考虑用户的使用习惯和需求设计出友好、易用的用户界面。1.2.2国内研究现状:国内对于基于STM32的自动浇灌系统的研究逐渐增多。许多学者和科研机构针对不同的花卉种类和生长环境,设计出了一系列具有针对性的自动浇灌系统。这些系统大多集成了传感器技术、通信技术和控制技术,能够实现土壤湿度环境温度、光照等参数的实时监测,并根据监测数据自动调整浇水量和浇灌时间。然而,国内的研究大多集中在系统的硬件设计和实现上,对于系统软件的设计和优化、用户界面的开发等方面的研究相对较少。1.3主要研究内容本研究的主要内容是:由微控制器控制的室内花卉自动灌溉系统。即使用集水量、浇水量控制、液晶显示部分和光照强度均由微控制器单独控制。系统主要内容如下:对室内花卉自动浇灌系统的方案研究与设计。利用小程序设定土壤湿度的范围值及是否启动灌溉系统。使用DHT11传感器确定湿度。使用BH1750传感器检确定照强度。使用LCD屏幕显示该系统各模块信息。当检测到湿度不在预设范围时,发出提示信号并启动或关闭灌溉装置。当检测到光照强度不在预设范围时,发出提示信号并启动或关闭补光灯。
2方案设计与论证2.1总体方案论证该设计是以STM32单片机为主要硬件模块,通过软件编程实现对土壤温度、湿度、光照强度的多点传感,当测得的湿度(光照强度)实际值低于警戒值时,灌溉控制装置(补光灯)将启动进行自动浇水,系统还可实现随时手动改变浇水模式,从而也体现了多功能一体控制的现代性。以STM32微控制器为控制电路核心的模块化设计解决方案。所谓模块化设计,简单地说就是将具有特定功能的子系统、作为通用模块的子系统和其他产品元素以不同的方式组合起来,形成一个新的系统,生产出一系列功能不同或功能相同但特性不同的产品。意思是模块化设计是在传统设计基础上发展起来的一种新的设计理念,已成为一种广泛应用的新技术,特别是在信息时代,电子产品不断推陈出新,模块化设计产品应用空间无限。模块化设计广泛应用于机床、电子、航空航天等设计领域。模块化设计是绿色设计方法之一,它正从概念发展成为一种较为成熟的设计方法。设计分为六个模块:温湿度数据采集模块、光照强度检测模块、语音报警模块、控制和LCD模块以及WiFi模块。温湿度数据采集模块的核心是DHT11数字温湿度传感器,而光照强度检测模块则以BH1750光传感器为基础,用于检测土壤湿度和光照强度。在该系统中,湿度灌溉控制有两种模式:闭环控制和基于时间的控制,用户可以在这两种模式之间进行选择。在闭环控制模式下,湿度数据采集模块从用于确定各点温度和湿度的校准数字信号中合成数据,并将其发送给微控制器。微控制器将接收到的数据与微控制器存储器中的数据进行比较,如果接收到的数据低于预设值,则步进电机控制电路模块打开步进电机进行灌溉。同时,微控制器会在现实模块的屏幕上显示采集到的数据和系统的灌溉状态。灌溉在一定时间间隔后自动停止,该时间间隔由用户下载到微控制器的数据决定。用户可以通过灌溉模式切换键切换到时间控制模式。在时间控制模式下,用户通过键盘输入浇灌时间和浇灌间隔,并显示数据。这种灌溉模式主要用于特殊场合。总之,该系统不仅具有友好的人机界面,还具有良好的实时管理能力,能够及时响应用户需求。系统支持的灌溉方式灵活多样,用户可根据当前情况选择灌溉方式。系统架构简单,易于实现不同的功能,大大提高了系统的可靠性和实用性。系统的基本模块原理图如图2.1所示。继电器浇水继电器浇水WiFi模块STM32WiFi模块STM32单片机温湿度传感器液晶显示模块光照强度传感器液晶显示模块光照强度传感器控制模块蜂鸣器报警模块控制模块蜂鸣器报警模块图2.1室内花卉自动浇灌系统基本模块原理图2.2温湿度传感器的选取2.2.1温湿度传感器原理湿敏元件是最简单的湿度传感器。湿敏元件主要有两种:电阻器和电容器。当空气中的水蒸气进入湿敏层时,元件的电阻和电阻抗就会发生变化,这一特性可用来测量湿度。常见的聚合物材料包括聚苯乙烯、聚酰亚胺和醋酸酪蛋白纤维。随着环境湿度的变化,湿敏电容器的介电常数也会发生变化,电容值也会随相对湿度的变化而变化。测量湿度和温度的方法有很多,市面上也有多种类型的传感器,主要用于收集土壤含水量和环境温度,以便对灌溉系统进行智能控制。不过,由于土壤湿度传感器的复杂性和成本难以满足应用要求,而且需要采集土壤样本进行最终验证,因此本项目选择了土壤湿度和温度传感器作为替代方案。温度和湿度传感器分为模拟式温湿度传感器和数字式温湿度传感器。模拟式温湿度传感器在与单片机之间还需加上模数转换芯片,所以本设计采用数字温湿度传感器DHT11。2.2.2数字温湿度传感器DHT11DHT11是一种可输出数字信号的预校准温湿度传感器,采用先进的数字采集和模块化传感技术,可确保高度的可靠性和长期稳定性。该传感器由一个温度敏感元件和一个负温度系数(NTC)测量元件组成,并与一个高性能8位微处理器相连。DHT11因其高质量、快速响应、强大的抗噪能力和极具竞争力的价格而备受推崇。每个DHT1传感器都在精密校准室中进行了湿度校准,其校准数据存储在OTP(一次性编程)存储器中,可在信号处理过程中调用。单线串行接口简化了系统集成,DHT11体积小巧,功耗低,信号传输距离超过20米,适用于各种环境,包括要求苛刻的应用。2.3测控要求与性能指标花卉在生长周期内主要受室内空气温度、光照强度、土壤湿度等因素影响,所以,为确保符合特定要求,这些参数的测量和控制应按照标准进行,这些标准包括具体的测量和控制位置以及性能标准如表2-2所示。表2-2测控要求与性能指标检测量室内的温度检测范围:-40˜80°C检测精度:±2°C土壤中的湿度检测范围:0-100%RH检测精度:±5%RH室内光照强度检测范围:0~65535lx检测精度:2000lx控制量室内的温度控制范围:-20˜50°C控制精度:±2°C土壤中的湿度控制范围:60-80%RH控制精度:±5%RH
3系统硬件电路设计本设计采用嘉立创EDA进行原理图及布板,系统设计总原理图如图3-1所示:图3-1系统设计总原理图嘉立创布板图如图3-2,3-3所示:图3-2嘉立创布板图(正)图3-3嘉立创布板图(反)3.1主控制模块该设计的主控模块为STM32F103C8T6单片机,STM32系列微控制器专为要求高性能、高可用性和低功耗的嵌入式应用而设计,具有较为丰富的外设和存储资源。该芯片采用32位ARMCortex-M3内核,提供高性能计算能力,最高主频可达72MHz;拥有64KB的闪存(Flash)和20KB的静态随机存取存储器(SRAM),为程序存储和数据操作提供了充足的空间;包含7个定时器,其中1个16位PWM高级控制定时器用于电机控制,3个16位通用定时器,2个看门狗定时器(独立型和窗口型),以及1个24位自减型系统嘀嗒定时器;支持12位模数转换器(ADC),可进行多通道采样;支持多种外部通信接口,便于与其他设备或传感器进行数据传输和通信;提供多种功耗模式,可以根据实际应用需求选择不同的功耗模式,以实现低功耗设计;具备丰富的外设资源,包括多个GPIO端口、中断控制器、时钟控制器、看门狗定时器等;支持JTAG和SWD(SerialWireDebug)等多种编程和调试方式。综上所述,STM32F103C8T6单片机因其高性能、多功能以及广泛的应用场景,被广泛应用于工业控制、电子设备、智能家居、汽车电子等领域。它的高速处理能力、灵活的定时器配置、多样的通信接口以及低功耗特性使其成为许多嵌入式系统设计的理想选择。室内花卉自动浇灌系统主控制模块引脚使用情况简介如表3-4:表3-4单片机引脚功能介绍引脚连接设备功能PA0蜂鸣器报警PA1温湿度传感器监测土壤湿度PA2WiFi模块RXPA3WiFi模块TXPA4补光模块对植物进行补光PA5显示模块SCLPA7显示模块SDAPA8温湿度传感器检测土壤湿度PB6光照强度传感器SCLPB7光照强度传感器SDAPB10继电器IO5V继电器DC+3.2温湿度采集模块温湿度传感器DHT11特点:测量范围:温度测量范围为-20至+60摄氏度,湿度测量范围为5%至95%RH。精度与分辨率:湿度测量的精度为±5%RH,温度测量的精度为±2℃,并且拥有较高的分辨率,湿度为1%RH,温度为0.1℃。通讯方式:采用单总线数字信号进行通讯,简化了电路设计,使连接更方便。供电电压:工作电压范围为3.3至5.5VDC,适合多种电源环境。响应速度:响应时间小于5秒,能够迅速反应环境变化。抗干扰能力:具备较强的抗干扰性能,确保数据的准确性。体积与功耗:体积小巧,便于集成在各种设备中;低功耗设计,适合需要节电或长期监测的应用场景。稳定性:长期稳定性出色,适合持续监测环境条件。总之,DHT11温湿度传感器具有测量精度高、响应速度快、抗干扰能力强、系统操作简单等诸多特点。该设计中DHT11温湿度传感器原理图及实物如图3-5所示图3-5DHT11原理图及实物3.3光照强度检测模块光照传感器BH1750特点高精度测量:BH1750传感器的光谱响应特性类似于人眼的视觉灵敏度,这意味着它的测量结果与人眼对光线的感应非常接近。快速响应:该传感器具有快速的响应时间,能够迅速捕捉到光照强度的变化。数字输出接口:采用I2C总线接口,方便与微控制器或单片机进行通信,简化了硬件连接和数据读取过程。高分辨率:BH1750能够输出0至65535lx的高分辨率数字值,这使得它能够精确地测量从微弱到非常强烈的光照强度。低功耗设计:通过其功能针对低功耗和低电流运行进行了优化,非常适合需要长期监控的应用。光噪声抑制:具备50Hz/60Hz的光噪声抑制功能,能够在有人工光源干扰的环境中准确测量光照强度。误差控制:最小误差变动控制在±20%,保证了测量结果的稳定性。红外影响:BH1750传感器受到的红外线干扰较小,这提高了其在各种光照条件下的准确性。综上所述,BH1750光照传感器以其高精度、快速响应、易于集成和低功耗等优势。该设计中DHT11光照传感器原理图如图3-6所示图3-6BH1750原理图3.4蜂鸣器报警模块该设计使用有源蜂鸣器作为报警元器件,蜂鸣器按其工作原理可分为压电式和电磁式两大类。压电蜂鸣器的工作原理是压电效应,即当电流通过时,压电材料产生机械振动而发出声音。电磁式蜂鸣器通过电磁线圈和磁铁产生的交变磁场振动膜片而发声。根据是否需要外部磁源,还可分为主动磁源和被动磁源。无源蜂鸣器需要外部的振荡电路来产生音调,而有源蜂鸣器内置了振荡电路,可以直接产生音调。当出现特殊情况时发出警报。其原理图如图3-7蜂鸣器报警模块所示:图3-7蜂鸣器报警原理图3.5液晶显示模块该设计采用OLED显示屏,能够显示花盆内土壤湿度值、温度值和光照强度,该显示模块通讯方式为IIC,显示界面简单,支持3.3V-3.5V电压供电,上电后自动复位,功耗低。其原理图如图3-8显示模块原理图所示:图3-8显示模块原理图3.6补光模块该设计采用LED灯作为补光灯,当光照强度检测值低于预设阈值时控制打开补光灯,使花卉受到充分的光照,光照模块单独上电使用。其原理图如图3-9补光模块原理图所示:图3-9补光模块原理图3.7WiFi模块该设计WiFi模块使用ESP8266模块,该模块小巧轻便,成本较低,且支持STA模式、AP和STA+AP模式允许ESP8266作为客户端连接路由器上网,或作为接入点连接其他设备,或作为客户端和接入点使用;支持固件库烧录,允许开发者编写驱动程序以实现特定的功能。其原理图如图3-10WiFi模块原理图所示:图3-10WiFi模块原理图
4系统软件设计4.1程序设计程序设计是指开发、编码和调试代码的方法和步骤。程序设计并执行代码的主要目的是解决特定问题,通过编写一系列指令来告诉计算机如何执行任务。这个过程通常包括:分析、设计、编码、测试、排错几个阶段。程序设计的基础包括对程序设计语言、数据类型、表达式、函数、语句、语法等概念和方法的了解。程序设计语言是用于书写计算机程序的语言,它有语法、语义和语用三个要素。此外,程序设计可分为两大类:结构化程序设计和非结构化程序设计。结构化程序设计的特点是具有层次性,即通过基本结构构建更复杂的结构;与非结构化程序设计不同,结构化程序设计不遵循这种层次构建原则。根据使用的要求,程序设计也可以分为过程式和非过程式两种。模块化程序设计是一种将程序分解为独立、可交换的模块来处理不同功能或子任务的方法。其优点主要包括以下几点:(1)提高生产效率:模块化设计允许开发者并行工作在不同的模块上,这样可以缩短开发时间,提高整体的工作效率。(2)降低复杂性:通过将复杂的系统分解成更小、更简单的部分,模块化设计有助于控制程序设计的复杂性,使得管理和理解代码变得更加简单。(3)提升产品质量:所有模块可以单独开发和测试,这有助于提高最终产品的整体质量。同时,模块化设计还有助于提高产品的可靠性。(4)提升扩展性:模块化设计使得软件系统更易于扩展。可以方便地添加新的模块或替换现有的模块,而不会对其他部分产生影响。(5)适用性强便于维护:模块化设计有助于保持输出一致性,提高设计效率,且对于维护和协作都非常便利。综上所述,模块化程序设计是一种有效的软件开发方法,它通过将程序分解为独立的模块,有助于提高开发效率,降低复杂性,提升产品质量和可维护性,同时也促进了代码的重用和系统的扩展性。4.2主程序设计系统软件设计包括土壤湿度检测软件、花卉光照强度检测软件、总数据处理软件、湿度上下限设置软件、显示软件、蜂鸣器软件等。需要在主程序模块中完成各模块的接口配置。主程序流程图如图4-1所示。当接通电源时,自动灌溉控制系统启动,同时LCD液晶显示提示语,系统自动检测温湿度及光照强度并执行相应命令。图4-1系统流程图主程序如下:voidAD_Init(void){/**配置端口**/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);
/**ADC初始化**/
ADC_InitTypeDefADC_InitStructure;
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);//使能指定的ADC1
while(ADC_GetResetCalibrationStatus(ADC1)==SET);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1)==SET);}读取ADC值u16Get_Adc(u8ch)
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239CyclEs5);ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
//返回最近一次ADC1规则组的转换结果
returnADC_GetConversionValue(ADC1);
}在main函数中对数据进行处理adcx=Get_Adc_Average(ADC_Channel_1,10);temp=((float)adcx*(5.0/4096))*0.36-1.08;adcx=temp;temp=adcx-temp;temp*=1000;value=temp;4.2.1温湿度采集模块设计DHT11通过双向单线制接口输出温湿度数据。在微控制器如STM32上,需要配置相应的GPIO端口,用于与DHT11通信。通常这涉及到设置GPIO为输入或输出模式,并实现延时函数以符合DHT11的通信时序。读取温湿度数据时,该功能遵循DHT11设置的数据读取时间。它首先发送启动信号,等待DHT11响应,然后读取40位数据并进行数据检查。温湿度采集模块流程图如图4-2所示:图4-2温湿度采集模块流程图4.2.2光照度采集模块设计BH1750传感器模块通过I2C总线与微控制器或单片机进行通信。软件设计前需熟悉I2C通信原理,包括起始信号、地址发送、数据读写等过程。初始化代码包括设置I2C通信所需的引脚,配置相关的通信参数(如通信速率),以及启动I2C总线。根据BH1750的I2C通信协议,编写从传感器读取光照强度数据的函数。这通常涉及到发送正确的设备地址和命令,然后接收来自传感器的数据。从BH1750读取到的数据是数字形式的照度值(单位为lx),可能需要根据应用需求进行进一步的处理或单位转换。光照强度采集模块流程图如图4-3所示:图4-3光照强度采集模块流程图
5系统功能测试在确保电路连接正确无误,并且调试程序已成功烧录至STM32单片机后,接下来可以接通+5V电源开始进入调试阶段。建议采取分模块的调试策略:首先针对每一个功能模块进行单独测试,确保其独立运行时能够正常工作。如果在模块测试过程中遇到问题,需要细心检查相关程序代码以及电路设计,找出故障原因并进行修正。当所有单个模块均能正常运行,表明各自的程序和电路设计基本无误。此时,可以将整个系统的程序一并烧录至单片机,开始进行全面的集成调试。这一步骤至关重要,因为模块间的相互影响和作用可能引发新的问题。通过整体调试,可以验证系统各部分是否协同工作,满足设计要求。完成整体调试后,根据观察到的表现和结果,对系统进行必要的优化和调整。这可能包括程序的微调、电路的再优化等,以提升系统性能,确保最终实现一个稳定且高效的运行状态。系统连接WiFi,系统显示界面初始化,初始化显示界面显示土壤湿度、光照强度和土壤温度,土壤湿度检测到缺水,蜂鸣器报警模块发出警报:将土壤湿度传感器放入水中,土壤湿度传感器检测到湿度高于阈值,警报停止,显示器显示土壤湿度:光照传感器检测到光线强度低于系统设置阈值,系统开启补光灯,为花卉进行补光:对光照强度传感器施加光照,传感器检测到光照强度超过设定阈值,系统将补光灯关闭:
6结论本文针对传统室内花卉养护中存在的浇水管理不便、不精确以及人力资源浪费等问题,提出了一种基于STM32微控制器的室内花卉自动浇灌系统设计方案。通过综合应用电子技术、传感器技术和微处理器控制技术,该系统实现了对室内花卉水分供应的自动化管理,提高了浇灌的准确性和效率,同时也为花卉养护者提供了极大的便利。系统设计采用了土壤湿度传感器来实时监测花卉土壤的湿度状况,确保了只有在土壤干燥时才启动浇水程序,避免了过度浇水或缺水的状况出现。此外,结合定时控制和环境监测模块,本系统能够根据用户设定的时间表或者环境变化自动调整浇水计划,从而适应不同花卉的生长需求和不同的室内环境条件。在系统实现方面,STM32微控制器的高性能和低功耗特性为系统的稳定运行提供了有力保证。其丰富的外设接口和灵活的编程能力使得系统具有良好的扩展性和可定制性,能够方便地与各类传感器和执行器连接,满足不同用户的个性化需求。通过对系统进行测试和实验验证,结果表明本系统能够准确响应土壤湿度变化,自动执行浇水操作,且浇水量的控制精确,达到了设计预期的效果。同时,系统操作简单,用户界面友好,便于普通消费者使用和维护。综上所述,基于STM32的室内花卉自动浇灌系统不仅优化了室内花卉的养护过程,减少了人工干预,而且提升了水资源的使用效率和养护工作的智能化水平。未来的工作可以集中在系统的能耗优化、无线网络远程监控功能的开发以及对多种植物需水量的智能识别算法研究上,以进一步提高系统的普适性和智能程度。
参考文献[1]崔庆华,王金辉,陈祖栋等.基于STM32的智能花卉养护系统设计[J].科技视界,2020,(02):102-103.[2]刘阳京,钟永,周唯.基于STM32的园林植物光伏智能灌溉装置研究[J].智慧农业导刊,2023,3(22):14-17.[3]刘科明,何彩婷,葛金梅等.基于STM32沙漠智能灌溉系统的设计研究[J].轻工科技,2023,39(06):130-132.[4]赵瑞明,邓可心,吕文一等.基于STM32的自动灌溉系统设计[J].软件,2023,44(11):53-55.[5]林秋澧,段元梅.基于STM32技术的智能灌溉系统设计[J].电脑编程技巧与维护,2023,(06):119-121.[6]董佳,王志强,盖素丽等.基于STM32的自动灌溉控制系统设计[J].中国农机化学报,2023,44(06):196-201.[7]李焕然.基于STM32智能灌溉系统的设计与实现[J].电子制作,2023,31(03):38-41.[8]唐靖,宋志强.基于STM32的果园环境监测及灌溉系统设计[J].计算机时代,2023,(01):82-84.[9]李想.基于STM32的水稻大田智能灌溉系统设计与实现[J].微型电脑应用,2022,38(10):202-205.[10]曹鹏飞,肖志飞,文建博等.基于STM32的节水灌溉系统设计[J].电子设计工程,2022,30(06):16-19.[11]魏楚伟,侯露,黄健荣等.基于STM32的土壤湿度监控装置设计与试验[J].现代农业装备,2021,42(04):64-68.[12]曲颂.基于STM32的灌溉控制器设计与实现[D].黑龙江大学,2021.[13]毕延洁,李丽丽,刘康等.基于STM32的智能节水喷灌系统研究[J].南方农机,2020,51(17):53-55.[14]张鑫,许晓平.基于STM32的花园远程智能灌溉监控系统[J].信息技术,2020,44(08):89-92.[15]于浩,孟龙起,韩宇航等.基于32单片机控制的智能灌溉系统[J].科技视界,2020,(11):107-108.[16]HuX,SunX,LiQ,etal.Designandimplementationofintelligentirrigationsystem[J].E3SWebofConferences,2021,26003010-.[17]ChenR.ResearchonDripIrrigationSystemBasedonSelf-ControlledSystem[C]//EliwiseAcademy.Proceedingsofthe2022InternationalConferenceonComputingInnovationandAppliedPhysics(CONF-CIAP2022)(part1).ShanghaiQibaoDwightHighSchool;,2022:10.[18]RGC,APD,SID,etal.IoT-basedSmartGardeningSystem[J].JournalofPhysics:ConferenceSeries,2023,2601(1):[19]PereiraPG,ChaariZM,DarogeF.IoT-EnabledSmartDripIrrigationSystemUsingESP32[J].IoT,2023,4(3):221-243.[20]NM,UK,SS,etal.Impacthumiditymonitoringbasedwateringtoplantedtomatoes[J].JournalofPhysics:ConferenceSeries,2021,1783(1):012064-.
附录voidAD_Init(void){/**配置端口**/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);
/**ADC初始化**/
ADC_InitTypeDefADC_InitStructure;
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);//使能指定的ADC1
while(ADC_GetResetCalibrationStatus(ADC1)==SET);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1)==SET);}读取ADC值u16Get_Adc(u8ch)
{//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239CyclEs5);
//ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
//返回最近一次ADC1规则组的转换结果
returnADC_GetConversionValue(ADC1);
}对得到的数据进行求平均值u16Get_Adc_Average(u8ch,u8times){
u32temp_val=0;
u8t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
Delay_ms(5);
}
returntemp_val/times;}在main函数中对数据进行处理adcx=Get_Adc_Average(ADC_Channel_1,10);temp=((float)adcx*(5.0/4096))*0.36-1.08;adcx=temp;temp=adcx-temp;temp*=1000;value=temp;#defineBH1750_GPIO_PORT_I2C
GPIOB
#defineBH1750_RCC_I2C_PORT
RCC_APB2Periph_GPIOB
#defineBH1750_I2C_SCL_PIN
GPIO_Pin_6
#defineBH1750_I2C_SDA_PIN
GPIO_Pin_7
//BH1750的驱动在HardWord/BH1750,名为bh1750.c,以下代码为BH1750驱动如何获取温湿度,完整参考代码uint16_tBH1750_Read_Measure(void){
uint16_treceive_data=0;
i2c_Start();
i2c_SendByte(BH1750_Addr|1);
if(i2c_WaitAck()==1)
return0;
receive_data=i2c_ReadByte();
i2c_Ack();
receive_data=(receive_data<<8)+i2c_ReadByte();
i2c_NAck();
i2c_Stop();
returnreceive_data;
}//逐块解释发送地址i2c_SendByte(BH1750_Addr|1);if(i2c_WaitAck()==1){
return0;}读取高八位receive_data=i2c_ReadByte();i2c_Ack();读取低八位receive_data=(receive_data<<8)+i2c_ReadByte();i2c_NAck();i2c_Stop();returnreceive_data;//返回读取到的数据对得到的数据进行数据处理floatLIght_Intensity(void){
return(float)(BH1750_Read_Measure()/1.1f*Resolurtion);}main函数代码在main函数中引用驱动并定义光照强度的变量#include"bh1750.h"floatLight=0;初始化BH1750BH1750_Init();获取光照强度数据并赋值给对用变量Light=LIght_Intensity();配置DHT11,使用PA8端口u8DHT11_Init(void){
GPIO_InitTypeDef
GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
DHT11_Rst();//复位returnDHT11_Check();//等待回应}//DHT11的驱动在HardWord/DHT11,名为dht11.c,以下代码为DHT11驱动如何获取温湿度,完整参考代码u8DHT11_Read_Data(u8*humiH,u8*humiL,u8*tempH,u8*tempL)
{
u8buf[5];
u8i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humiH=buf[0];
*humiL=buf[1];
*tempH=buf[2];
*tempL=buf[3];
}
}elsereturn1;
return0;
}//逐块解释定义一个buf数组,当DHT11存在时,使用for循环循环读取并依次赋值到数组内for(i=0;i<5;i++){
buf[i]=DHT11_Read_Byte();}然后通过指针依次指向数组内的值if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humiH=buf[0];//湿度整数部分*humiL=buf[1];//湿度小数部分*tempH=buf[2];//温度整数部分*tempL=buf[3];//温度小数部分}main函数代码在main函数中引用驱动并定义温湿度的变量#include"dht11.h"u8temperatureH;u8temperatureL;u8humidityH;u8humidityL;初始化dht11DHT11_Init();获取温湿度数据并赋值给对用变量DHT11_Read_Data(&humidityH,&humidityL,&temperatureH,&temperatureL);配置OLED/*引脚配置*/#defineOLED_W_SCL(x)
GPIO_WriteBit(GPIOA,GPIO_Pin_5,(BitAction)(x))#defineOLED_W_SDA(x)
GPIO_WriteBit(GPIOA,GPIO_Pin_7,(BitAction)(x))/*引脚初始化*/voidOLED_I2C_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_Init(GPIOA,&GPIO_InitStructure);
OLED_W_SCL(1);
OLED_W_SDA(1);}main函数代码在main函数中引用驱动并定义温湿度的变量#include"oled.h"charPUBBuf[20];初始化oledOLED_Init();OLED_ColorTurn(0);OLED_DisplayTurn(0);OLED_Clear();首先将显示数据放入oledBuf内,然后调用OLED_ShowString将oledBuf放入显存内,最后调用OLED_Refresh()将显存内数据显示出来,方法如下:sprintf(oledBuf,"Welcome");OLED_ShowString(32,0,(u8*)oledBuf,16);sprintf(oledBuf,"Light:%.1fLx",Light);OLED_ShowString(0,32,(u8*)oledBuf,16);//8*16¡°ABC¡±sprintf(oledBuf,"Temp:%d.%dC",temperatureH,temperatureL);OLED_ShowString(0,48,(u8*)oledBuf,16);OLED_Refresh();蜂鸣器代码驱动函数端口配置voidBEEP_Init(void){GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_ResetBits(GPIOA,GPIO_Pin_0); }main函数蜂鸣器为高电平触发,将土壤湿度0设为临界值,当酒精浓度大于1时,将蜂鸣器标志位置0,并显示当前土壤湿度,反之置1,显示LACK(缺水),中断检测到标志位为1开始报警,提醒需要浇水,此时可以通过微信小程序远程启动水泵浇水if(temp>1){alarmFlag=0;sprintf(oledBuf,"SoilHum:%.1f",temp);OLED_ShowString(0,16,(u8*)oledBuf,16);}if(temp<0){sprintf(oledBuf,"SoilHum:LACK!");OLED_ShowString(0,16,(u8*)oledBuf,16);alarmFlag=1;}voidTIM3_IRQHandler(void){if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){TIM_ClearITPendingBit(TIM3,TIM_IT_Update);i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年个人职业发展计划制定与策略探讨题
- 关于领导力的演讲稿
- 2026年散打教练员招聘面试拳腿组合与实战对抗指导
- 2026年全国大学生工程训练综合能力竞赛方案
- 2026年电力交易员面试技巧与准备
- 2026年管理学基础知识学习指南
- 白色橄榄树演讲稿英文
- 幼儿冬季护理培训
- 2026年中小学教师招聘考试学科专业知识题库
- 2026年健康中国建设专题题库
- 2026年河湖长制履职应知应会测试题及答案
- 2026中国中煤能源集团有限公司春季招聘备考题库及答案详解1套
- 初中道德与法治八年级下册第三单元第六课我国国家机构整体教学设计
- 2026年及未来5年市场数据中国微晶石行业市场深度分析及投资潜力预测报告
- 2026年陕西事业单位招聘考试题目及答案
- 血管活性药物
- 2026年医用耗材培训考试试题及答案
- 结直肠癌筛查与早期诊断
- 幼儿园故事小马过河
- 行政执法培训课件
- 糖尿病骨质疏松管理的医患协同策略
评论
0/150
提交评论