基于单片机控制的智能灌溉实验(仿真程序源文件+APP源文件+PDF原理图)

摘  要

随着全球人口的增长和农业生产的不断发展,粮食安全已经成为全球关注的焦点。然而,传统的农业生产方式存在诸多问题,如土壤质量下降、水资源浪费等。因此,实现农业生产的自动化控制,是提高农业生产效率和保障粮食安全的重要方法。

此次实验我们的研究是单片机控制的智能灌溉,然后再利用传感器去检测实时环境数据,并通过WIFI模块把数据上传至阿里云平台。此外,实验还配备了水泵和照明灯模块,当土壤湿度没有超过阈值时,水泵开始工作进行加水;当光照强度没有超过阈值时,LED灯开始工作进行补光。使用手机APP连接阿里云,用户可以远程控制水泵和LED灯的开关状态,同时可以实时监测土壤湿度和光照强度,进行科学合理的灌溉管理。

本研究的意义在于,利用单片机控制单元和物联网的方式,将农业生产的方式更便利化,这样也能够提高生产效率,更加方便了农民的生活,同时也为减少农业生产的资源浪费和保障粮食安全起到了重要作用。

关键词:STM32单片机;智能灌溉;传感器;物联网;数据采集

Intelligent irrigation experiment based on microcontroller control

Abstract

With the growth of global population and the continuous development of agricultural production, food security has become the focus of global attention. However, traditional agricultural production methods have many problems, such as decreased soil quality and waste of water resources. Therefore, achieving automated control of agricultural production is an important method to improve agricultural production efficiency and ensure food security.

Our research in this experiment is intelligent irrigation controlled by a microcontroller, and then using sensors to detect real-time environmental data,and uploads the data to the Alibaba Cloud platform through the WIFI module. In addition, the experiment was equipped with a water pump and lighting module. When the soil humidity did not exceed the threshold, the water pump began to work and add water; When the light intensity does not exceed the threshold, the LED light starts to work for supplementary lighting. By connecting to Alibaba Cloud using a mobile app, users can remotely control the switch status of water pumps and LED lights, and monitor soil moisture and light intensity in real-time for scientific and reasonable irrigation management.

The significance of this study lies in the use of microcontroller control units and the Internet of Things to make agricultural production more convenient. This can also improve production efficiency, make farmers' lives more convenient, and play an important role in reducing resource waste in agricultural production and ensuring food security.

Keywords: STM32microcontroller; Intelligent irrigation; Sensors; Internet of things; Data acquisition

目   录

第一章 绪  论

1.1研究背景和意义

1.2 国内外研究现状

1.3 研究的主要方法

1.4 研究工作安排

第二章 智能灌溉实验方案的设计

2.1 实验功能分析

2.2 设计要求

2.3 实验设计方案选择

2.4 总方案设计

第三章 智能灌溉实验的硬件设计

3.1 主控模块设计

3.1.1 单片机介绍

3.1.2 单片机电路设计

3.1.3 晶振电路设计

3.1.4复位电路设计

3.2 显示模块设计

3.2.1 显示模块介绍

3.2.2 OLED电路设计

3.3 按键模块设计

3.3.1 按键模块选型

3.3.2 按键电路设计

3.4 土壤湿度检测设计

3.4.1 土壤湿度检测原理

3.4.2 土壤湿度检测电路设计

3.5 光照强度采集模块设计

3.5.1 光照强度采集模块选型

3.5.2 光照强度采集电路设计

3.6 水泵模块电路设计

3.7 照明灯电路设计

3.8 WIFI模块设计

3.8.1无线通信模块选型

3.8.2 WIFI电路设计

3.9 电源模块电路设计

第四章 智能灌溉实验的软件设计

4.1软件介绍

4.2开发语言介绍

4.3 软件设计思路

4.4 实验总体工作流程

4.5 按键扫描的流程

4.6 OLED数据显示的设计

4.7 数据采集模块软件设计

4.7.1 土壤湿度传感器采集数据流程

4.7.2 光照强度采集程序设计

4.8 上位机程序设计

4.8.1 上位机工作流程

4.8.2 APP界面功能设计

第五章 测试与功能的验证

5.1 硬件调试

5.2 软件调试

5.3 调试结果

第六章 结论

致 谢

参考文献 31

附录

第一章 绪  论

1.1研究背景和意义

随着全球人口的不断增长和城市化进程的加速,粮食安全问题越来越受到关注[1]。农业生产中,灌溉是保证作物生长的重要因素之一。传统的灌溉方式通常是根据经验进行人工浇水,存在着水资源的浪费和不均匀灌溉等问题,同时农民需要大量的时间和精力进行灌溉,劳动强度较高[2]。因此,如何实现高效、智能化的灌溉方式,成为当前农业生产中的一个重要研究方向[3]。

随着单片机控制技术的不断发展和物联网技术的普及,基于单片机控制的智能灌溉系统应运而生[4-6]。这种智能化灌溉系统可以通过传感器对土壤湿度和光照强度进行监测,利用单片机控制水泵和灯光等设备的开关,实现智能化的自动化控制。同时,通过物联网技术,将监测数据上传至云端,实现远程实时监测和控制[7]。

基于单片机控制的智能灌溉实验系统具有多种优点,如降低了农民的劳动强度,减少了水资源浪费,提高了作物的生长效率,降低了灌溉成本,对保障粮食安全和推进农业现代化具有重要意义。因此,开展基于单片机控制的智能灌溉实验系统的研究具有重要的理论和实践价值。

1.2 国内外研究现状

智能灌溉控制系统是一种利用传感器、物联网、云计算等技术实现农田灌溉自动化的系统[8]。在国内外,智能灌溉控制系统的研究和应用已经逐渐成熟,并且在实际农田生产中得到了广泛应用。本文将分别介绍国内外智能灌溉控制系统的研究现状。

在国内,智能灌溉控制系统的研究和应用已经逐渐发展起来。中国农业大学开发了一种基于云计算和物联网技术的智能化灌溉系统[9-10]。该系统可以通过无线传感器网络实时采集土壤湿度、气象数据等信息,并且通过云计算平台进行数据分析和处理,进而实现精准灌溉。南京农业大学开发了一种名为“云农场”的智能灌溉控制系统[11]。该系统利用大数据分析技术,根据作物的生长状态和环境条件,自动调节灌溉量和时间,提高了农田的灌溉效率和生产效益。四川农业大学研发了一种智能化灌溉系统。该系统利用土壤水分传感器、气象站等设备采集农田环境数据,并通过云计算和物联网技术进行数据分析和处理,实现了自动化灌溉控制[12-14]。

在国外,智能灌溉控制系统的研究和应用已经比较成熟,以色列的Netafim公司开发了名为NetBeat的智能灌溉控制系统[15]。该系统利用土壤湿度、气象传感器等设备采集农田环境数据,并通过云计算和物联网技术进行数据分析和处理,实现了自动化灌溉控制。美国的The Toro Company公司开发了名为PrecisionSense的智能灌溉控制系统[16-17]。该系统利用土壤湿度、气象传感器等设备采集农田环境数据,结合云计算和移动应用程序,实现了智能灌溉控制。日本的东京大学研发了一种基于机器学习和人工智能技术的灌溉控制系统。该系统可以对农田环境数据进行建模和分析,并且自动调节灌溉量和时间,提高了农田的灌溉效率和生产效益[18]。

总体来说,国内外智能灌溉控制系统的研究和应用已经取得了一定的成果。随着新技术的不断涌现,智能灌溉控制系统将会更加智能化、精准化、自动化。同时,也需要克服一些技术难题,如数据传输和处理、传感器精度等问题。未来的研究方向将集中在进一步提高智能灌溉系统的稳定性和精度,减少人工干预,提高灌溉效率和生产效益,为现代化农业生产提供更加可靠和高效的技术支持[19]。

1.3 研究的主要方法

本设计为基于单片机控制的智能灌溉实验,实验研究的主要方法如下:

一、理论分析:在基于单片机控制的智能灌溉实验设计的研究中,理论分析是一个重要的方法。通过对单片机,传感器和各个模块的工作原理、相关技术以及研究领域的前期研究成果的分析,可以建立一个系统的理论框架。这些理论框架为后续的实验设计和模拟分析提供了基础,也可以为技术比较提供依据。

二、模拟分析:模拟分析是一个非常有效的方法,可以快速、准确地评估单片机系统的性能和可靠性。模拟分析通常使用计算机模拟单片机系统的工作情况,并进行多次试验,以确定系统的性能指标。这样可以大大减少实际实验的时间和成本,并为后续的实验设计提供重要的参考。

三、技术比较:不同的单片机设计方案可能具有不同的优缺点,技术比较是评估不同方案的有效方法。技术比较的结果可以帮助研究者选择最佳的方案,从而提高实验的效率和性能。

四、实验设计:对于基于单片机控制的设计中,合理的实验设计是研究的重要方法;在设计中,开发者在实际环境中对单片机系统进行试验,以验证研究结果的正确性。实验设计通常涵盖了多个方面,如单片机的程序设计、硬件设计、数据采集等。

1.4 研究工作安排

本文设计了一款基于单片机控制的智能灌溉实验,论文从绪论,方案设计,硬件设计,软件设计,测试与功能验证和结论对该实验进行详细的介绍,本文的主要工作安排如下:

一、绪论:首先,阐述了智能灌溉实验的重要性。其次,简述了现有的控制方法,并分析了存在的问题。阐述了智能灌溉实验研究的目的和意义。

二、方案的设计:首先我们确定实验产品所具备的各项功能,然后我们再选择实现这些功能所需要用到的硬件有哪些,再设计一下实验的步骤;

三、硬件设计:将硬件设计这部分分成几个模块,分别讲述各个模块的硬件电路,还有电路的原理图,方便用户理解;

四、软件设计:在软件设计部分,详细说明了软件的模块划分、功能实现、以及软件的整体架构和流程。

五、测试与功能的验证:在完成实验的设计之后,对其功能进行测试,包括对硬件电路的连接,硬件是否正常运行进行测试和对软件进行调试,并给出了实际的调试结果。

六、结论:总结了本文的研究结果,包括实验的整体设计方案、硬件电路设计、软件设计和测试与功能验证的结果,并对实验的性能进行了评价。最后,给出了未来的研究方向和展望。同时也对实验的可扩展性和适用性进行了评价,以便为未来的研究和改进提供参考。

第二章 智能灌溉实验方案的设计

2.1 实验功能分析

在进行实验的方案设计之前,首先对实验所需要实现的功能进行分析,综合当前市场上常见的智能灌溉功能,同时为了降低实验成本,可以将实验需要实现的主要功能分为以下几点:

1、通过按键设置环境土壤湿度和光照强度的阈值。

2、通过传感器采集我们想要的实时数据,并将这些数据上传到云平台。

3、在APP上将我们采集到的数据和设置的阈值显示出来,APP界面还可以控制水泵和照明灯的开关;

4、APP可以切换自动模式或者是手动模式,并且实时数据能够在OLED显示屏上显示。

5、当土壤湿度没有超过阈值时,水泵工作开始加湿,光照强度没有超过阈值时,打开照明灯(LED灯);

2.2 设计要求

考虑到本实验设计的是单片机控制的智能灌溉实验,不仅要对环境进行实时数据的检测,还要将数据在OLED上显示出来以及设备之间的通信,更要考虑用户的使用体验感,还有设计成本的高低和安全性因此为了本次实验的成功我们需要考虑以下几点:

一、智能性:实验需要做到数据更新快、适应能力强、数据处理智能性以及数据独立性。数据更新快是非常重要的,因为实时采集数据能够避免数据误差,提高实验的体验。适应能力强的设计也是必要的,因为实验需要适应各种环境条件。数据处理智能性是编写软件时需要考虑的方面,以保证实验的稳定性。数据独立性则是提高实验的复用性,以便于添加新功能。

  • 方便使用:实验的设计要简单易用,用户不需要太多的技术知识才能够使用该实验产品,否则会影响实验产品的普及度,降低用户体验。因此实验产品的操作流程要简单易懂,功能按键要分布合理。并且实验产品的故障报告需要清晰明了,方便用户排查故障。
  • 准确性高:数据的准确性非常重要,这是用户最关注的问题。因此,实验设计需要采用高精度的传感器,并经过精密的校准。此外,实验还需要对数据进行实时监测,保证数据的准确性。
  • 安全性高:本实验在采集和传输数据时需要保证数据的安全性。因此,实验设计需要考虑数据加密等安全措施,以防止数据被非法获取。实验的安全是非常重要的,需要考虑实验的信息安全,防止被非法入侵;同时,实验的可靠性需要保证,避免出现故障。实验的数据备份和恢复功能需要完善,以确保实验数据的安全。实验的数据传输要通过安全的网络通道,避免数据的泄露;实验产品的操作界面要安全可靠,防止未经授权的人员对其进行非法操作;实验产品的存储设备要定期备份,防止数据丢失。
  • 成本合理:实验需要兼顾技术与经济,使其的成本合理。如果成本过高,那么实验产品就会失去其市场竞争力;同时,设计需要考虑实验的可维护性和扩展性,以降低实验后期的运行成本。实验的设计还要考虑维护方便性,需要有详细的说明文档,方便技术人员进行维护。另外,需要考虑模块之间的分工和协作,使得实验产品能够方便维护。

2.3 实验设计方案选择

本次设计的单片机控制的智能灌溉实验,我们有两种核心控制电路的方案,我们将通过两种方案的比较进行如下选择:

方案一:非智能控制电路

非智能控制电路听起来就是比较不方便,它主要由很多不同的逻辑元器件构成,构成的电路可以实现温湿度的采集和监测,但它可能会有一些缺点:复杂的电路设计过程:由于电路里含有多种元器件,因此电路设计过程较复杂,不容易保证电路的稳定性。灵活性差:如果需要对实验的功能进行扩展,就需要对整个电路进行改动,这可能需要技术人员的协助,不易操作。

方案二:智能控制电路

这种方案采用了基于单片机的控制器作为核心,它具有以下优点:简单的电路设计:智能控制电路中电路图设计比较简洁,容易维护。灵活性高:控制器内部集成了运算器、控制器和存储器等功能,因此更容易实现实验的功能扩展。如果电路出现异常,可以更有针对性的进行排查,不至于摸不着头脑;

综上比较,第一我们需要考虑实验的稳定性、第二我们需要考虑实验的可靠性、第三我们需要考虑实验的便携性,所以我们采取方案二的智能控制电路作为核心控制电路来完成实验产品的开发。

2.4 总方案设计

完成实验的总体功能分析后,对实验的整体实现方案进行设计。根据我们想要实现的功能,我们这个实验设计包含了以下模块:主控的单片机模块、土壤湿度和光照强度模块、为了将数据显示还需要OLED显示屏模块、供电模块、水泵和照明灯模块、控制开关的继电器模块、将数据连接云平台需要用到的WIFI模块、设置阈值的按键等,土壤湿度传感器用来采集湿度数据,光敏电阻传感器用来采集光照强度数据。使用按键可以设置环境检测的阈值,显示模块用来显示湿度和光照强度数据。使用WIFI模块连接阿里云平台。继电器模块用来控制水泵模块工作,LED灯作为补光模块。本实验使用单片机作为主控芯片,据此分析可得实验的整体设计方案如图2-1所示。

图2-1 实验设计图

第三章 智能灌溉实验的硬件设计

3.1 主控模块设计

3.1.1 单片机介绍

STM32系列单片机是一款STM公司生产的单片机。它的功能性比较强、性能也很好而且功耗小。它是基于ARM Cortex-M3内核设计的,该处理器支持高效率的数据处理和算法运算。并且该单片机还具有许多功能和接口,可以满足大多数嵌入式系统的开发需求。其所有的产品都是根据内核架构的不同所划分的,由于其强大的内核架构,所以其同时在性能以及性价比方面具有强大的统治力,而且广泛的使用使其具有大量的学习资料以及开发经验,能够非常有效的缩短产品的开发时间,使得产品尽快上线。开发者根据实验产品的需求,选择适合自己实验设计的单片机型号,通过查看资料,我们知道STM32F103系列的单片机很不错,它能够达到72Mhz的时钟频率,价格方面相对低一点,性能却很强大;

STM32F103C8T6单片机。它具有20KB的SRAM内存,可以支持多种程序的并发运行。此外,它还有64KB的闪存,可以存储程序代码和数据。STM32F103C8T6单片机有37个GPIO,如UART,SPI,I2C,ADC,PWM等。这些接口与外部设备可以进行通信,实现各种功能。这些GPIO口可以根据实际需要进行不同类型的配置,单片机内部集成8MHz时钟晶振,如果系统需要使用更高的工作频率,单片机可以通过倍频将时钟频率达到64Mhz,同时我们也了解到有外部接入的方式,可以产生8Mhz的时钟频率提供给系统,然后再通过倍频的方式产生72Mhz的工作频率。STM32F103C8T6支持JTAG和SWD调试接口,可以方便开发人员调试程序。STM32F103C8T6单片机资料丰富,性能强大,深受嵌入式系统开发者的青睐。

3.1.2 单片机电路设计

STM32F103C8T6单片机电路中的VCC和GND分别是供电电源和电源接地;PA和PB端口是模拟输入、数字输入输出引脚,可以用于ADC、UART、I2C等外设;PC13-PC15是数字输入输出引脚,经常用作控制电源;BOOT0,BOOT1设置启动模式的引脚;NRST是单片机上的复位引脚,用于重置微控制器;OSC IN,OSC OUT是晶体振荡器引脚,用于外部晶体振荡器驱动;SWDIO,SWCLK是调试引脚,用于连接ST-LINK调试器。STM32F103C8T6的各个引脚是单片机的核心部分,它们与外部设备的连接是单片机实现功能的关键。最终设计出的单片机主控电路如图3-1所示。

图3-1 主控芯片电路图

3.1.3 晶振电路设计

STM32F103C8T6芯片的晶振电路是单片机系统的组成部分,它是单片机系统的核心,它可以稳定的给单片机提供时钟信号,这是确保单片机正常运行的关键。晶振电路的构成要素是石英晶体振荡器和两个微调电容。这两个电容是必须的,因为它们能够对石英晶体的频率进行调整,以确保生成的时钟信号的稳定性。

晶振电路的石英晶体振荡器和两个微调电容通过OSC IN和OSC OUT引脚连接到单片机上,给两个微调电阻取值22pF,晶振频率的取值范围一般在1.2 MHz 至 12 MHz 之间。通过这种连接方式,晶振电路的输出信号就是时钟信号,单片机上的各种操作离不开这个时钟信号。

晶振电路能够生成稳定的时钟信号,单片机芯片内部的高增益的反相放大器起了至关重要的作用,为单片机的各种操作提供时钟控制。无论是单片机内部的指令执行还是外部设备的数据读写,都需要在这个时钟信号的控制下进行,以保证整个系统的顺利运行。设计出的时钟电路如图3-2所示。其中OSC IN以及OSC OUT接入的8Mhz晶振为实验提供主工作频率。

图3-2 晶振电路图

3.1.4复位电路设计

STM32F103C8T6芯片的复位电路主要作用是当单片机在实验过程中如果出现程序卡死,无法进行下一步操作的过程中,复位电路可以帮助单片机系统立刻回到最初始的状态,最重要的作用就是保证单片机在实验过程中能够正常工作,查阅资料,我们知道单片机芯片的复位电路由复位电路和复位按钮组成。当单片机处于复位状态时,它的所有状态寄存器、程序计数器、堆栈指针等都会重新设置为初始状态,从而使单片机能够正常工作。此外,复位电路还可以控制单片机的访问存储器的方式,以确保单片机在复位时能够正常访问存储器。

STM32F103C8T6的NRST引脚接入电阻与电容,这样就构成了一个复位电路,电路的构成以及电阻和电容是如何连接的如图3-3所示,这样形成一个RC放电回路。单片机能够完成复位工作。电阻和电容的值大多是固定的,比较典型的阻值和容值分别为10K、10UF。

图3-3 复位电路图

3.2 显示模块设计

3.2.1 显示模块介绍

OLED显示器是比较便捷的一款显示器屏幕,它的厚度比较薄,对比度较高,具备自发光的性质并且不需要背光源。给OLED上电后,当有电荷通过有机材料时,材料就会根据特定的化学性质发出亮光,与传统显示器件不同, 同时OLED视角广,功耗也非常低,反应速度快,而且OLED的驱动电压低、能耗低、可以和太阳能电池以及集成电路相匹配。

3.2.2 OLED电路设计

OLED显示屏的VCC引脚接上单片机VCC引脚,为显示屏正常工作提供电源,GND引脚接单片机上的GND引脚。OLED显示屏的SCL引脚与单片机的PB10相接,SCL引脚是提供时钟信号的。显示屏的SDA端口为总线数据信号,用于传输数据,连接至STM32单片机的PB1端口。本实验使用的OLED与单片机之间通过并行串口通讯方式进行数据的交换功能,通过控制其读写引脚的时序来完成读数据、写数据、写字节等操作,OLED显示电路图如图3-4所示。

图3-4 显示电路

3.3 按键模块设计

3.3.1 按键模块选型

使用独立按钮。独立按钮简单易操作,在单片机设计中独立使用,不需要其他附属设备,操作简单方便;并且独立按钮的成本低,不用额外的元件,可以降低设计成本;独立按钮也容易调试。但是其容易受到外界的干扰而失效,并且独立按钮只能完成基本的功能,不能进行复杂的数据处理和控制。

3.3.2 按键电路设计

按键模块电路是由五个按键和单片机的输入引脚构成,按键一端接入单片机的输入引脚,另一端接入GND,通过读取与各个按键相匹配的单片机输入引脚的高低电平,如果按键按下,那输入引脚就是低电平,如果没有按下,那就是高电平。如图3-5所示。

图3-5 按键电路图

3.4土壤湿度检测设计

3.4.1 土壤湿度检测原理

土壤湿度传感器能够检测到土壤里的水分含量,它将检测到的土壤水分含量转换成电信号输出。它的工作原理是基于水分含量与电容值的相关性。一般来说,当土壤水分含量越高,土壤对电流的导电能力也就越好,因此电容值也就越大。土壤湿度传感器利用这一原理,将电极插入土壤中,测量电极与土壤之间的电容值,然后将电容值转换为电信号输出。

3.4.2 土壤湿度检测电路设计

土壤湿度传感器是专用于检测土壤湿度的高精度传感器,它的电路构成简单,一般由一个电极和电路板组成;在本设计中,将电路板连接到STM32芯片上可以实现实时监测土壤湿度的功能。将传感器的电路板中的VCC引脚与单片机的3.3V引脚相连。传感器中的GND引脚连接到单片机的GND引脚。

传感器的输出OUT引脚连接到STM32芯片的PA7上。连接完成后,可以通过编写相应的程序来读取传感器输出的模拟信号并将其转换为数字信号。通常,通过采集一段时间内的数据,并计算其平均值,可以得到更准确的土壤湿度值。这样,就可以实现对植物生长环境中土壤湿度的实时监测和控制。其电路图如图3-6所示。

图3-6 土壤湿度检测电路

3.5 光照强度采集模块设计

3.5.1 光照强度采集模块选型

想要采集环境的光照强度,我们需要使用到光敏传感器,这次我们选择的光敏传感器是一种基于双路比较器芯片的光敏电阻模块,这个传感器使用光敏电阻作为感光原件,通过感知光照强度的变化来影响传感器内部的输出状态,实现了对光照强度的检测。光敏传感器模块的主要特点:能够检测到很低的光照强度,支持5V和3.3V供电,适用于多种电路设计,可调节阈值:可以通过旋转电位器来调节输出阈值,模块体积小,便于集成到各种设备中,工作电流小,可以实现长时间稳定工作。

3.5.2 光照强度采集电路设计

光敏电阻传感器连接在单片机的输入端,形成一个光敏电阻电压分压电路。当光照强度增强时,光敏电阻阻值减小,它俩是成反比的,所以输出也是一个与光照强度成反比的电压信号。单片机通过输入端读取这个电压信号,然后利用单片机的模数转换器(ADC)将其转换为数字量,进而实现对光照强度的检测。简要叙述一下电路的连接:VCC与VCC相连,GND与GND相连,然后单片机的引脚PA6再连接到传感器的AO端引脚。其电路图如图3-7所示。

图3-7 光照采集电路图

3.6 水泵模块电路设计

在本设计中,使用继电器控制水泵,因为水泵电机的功率太大,单片机的电源不够,容易导致程序乱掉,因此需要另接电源。水泵电路的工作是由LED灯、光敏传感器和继电器三个模块形成一个开关控制的;为了让水泵电路能够独立出来,我们使用单片机PA10引脚去控制LED灯的亮灭去控制光敏传感器的输出状态,让光敏电阻传感器输出端(DO端)与继电器的输入端(IN端)相连,当LED灯亮时光敏传感器的DO端输出低电平,继电器的IN端接收到来自DO端的低电平则会吸合,这时水泵就会开始工作。相反如果LED灯灭,水泵就会停止工作。其电路图如图3-8所示。

图3-8 水泵模块电路

3.7 照明灯电路设计

本设计中使用LED灯作为照明模块。将LED负极连接到STM32芯片的输出引脚PB4,将正极连接到电源,同时需要加上合适的限流电阻以防止LED过电流损坏。但是在实际应用中,因为照明灯的功率较大,肯定需要继电器控制,这里我们模拟使用PA9来控制照明灯的继电器,其电路图如图3-9所示。

图3-9 补光电路设计

3.8 WIFI模块设计

3.8.1无线通信模块选型

ESP-01S模块是ESP8266系列的一款可以进行无线透传的WIFI芯片,同时呢它可以实现多个模块之间的通讯,在实现WIFI网络的搭建过程中也具有独立性,能独立运行也可以作为slave依附其他host运行,ESP-01S模块的内部集成了微处理器,它可以直接从外接的闪存中启动,从而降低系统的存储需求,也有效的提高了运行速度,有强大的处理数据能力,同时也可以作为存储器件,外接的GPIO口可以有效的降低系统资源占用,ESP-01S在用作数据无线传输时,可以与任何微处理器的通讯接口相连,一般通过SPI通讯实现数据的上传功能。ESP-01S同样支持用户对其内部参数进行定义,用户可以通过AT指令修改芯片的工作模式,同样可以自主编写rom下载入ESP-01S,将ESP-01S作为客户端或者WIFI热点使用。

3.8.2 WIFI电路设计

我们使用WIFI模块,目的就是通过它来连接阿里云平台,ESP-01S就是连接WIFI的芯片,而实验中ESP-01S与单片机的通信是是使用串口2进行通信的。我们可以在单片机通过USART口向WIFI模块传输数据,我们使用芯片内部的固件程序可以实现该功能,然后再收到反馈的消息,这样就能实现通信了。电路的连接为VCC连VCC,GND连GND,TX引脚连的是单片机的PA3引脚(RX),然后其作用是串行数据输出,RX引脚连接到单片机PA2(TX)引脚,其作用是串行数据输入。最终得到的ESP-01S模块电路如图3-9所示。

图3-9  ESP01S模块电路

3.9 电源模块电路设计

在实验设计中我们使用5V电压的供电电源,因为单片机具有5V转换3.3V的能力,所以电源输入端直接接到单片机5V引脚进行供电;而使用AMS1117稳压芯片进行5V到3.3V的电路设计是为了给水泵电路的模块进行供电。电路设计中,需要将供电的5V引脚连接到AMS1117的输入端,将输出端连接到其他模块的3.3V引脚。AMS1117稳压芯片是一款高效的线性稳压器,具有低静态电流、低压差和高负载能力等优点,可以实现高效、稳定的电压转换。说到这里,我们应该知道AMS1117稳压芯片的功能就是将5V的输入电压转换为3.3V的输出电压来供各个模块工作。同时,它还可以起到过压保护和短路保护的作用,确保实验的稳定性和安全性。C1,C2输入电容,是为了防止断电后出现电压倒置。然后C3和C4的作用是为了进行滤波操作。其电路图如图3-10所示。

图3-10 电源模块

第四章 智能灌溉实验的软件设计

4.1软件介绍

本次实验选用的编程软件是KEIL编程软件。Keil是一款专门用于嵌入式系统开发的软件,包括编译器、调试器、模拟器等工具。它是一个综合的开发环境,适用于微控制器和微处理器的开发。Keil软件支持多种嵌入式系统的开发,包括单片机、DSP和微处理器,以满足不同项目的需求。它主要用于对C语言和汇编语言的编程、编译、调试和仿真。Keil软件还支持各种设备的驱动程序开发,同时它还具有高效的代码编译速度和完整的代码错误检测功能。此外,Keil还支持代码烧录,可以在线调试程序,并提供了强大的调试工具,便于技术人员快速定位问题,并提供大量的文档和教程帮助开发人员更好地利用软件进行开发。Keil的易用性和强大的功能是其受欢迎的原因之一,

初学者能够通过对该款软件学习汇编语言,了解程序运行的底层逻辑,在对单片机开发有了一定了解之后能够改用C语言开发来提升开发效率。

4.2开发语言介绍

在单片机设计开发过程中,汇编语言和C语言占据了主流位置。作为一种面向机器的语言,汇编语言只需通过一次转换即可生成能够在机器中运行的机器语言。因此在开发过程中,汇编语言具有占用内存少、运行效率高等优点。在单片机的学习过程中,初学者运用汇编语言能够有效的提高初对芯片内部加法器,寄存器等元素的认知。但是在进一步的开发中,汇编语言相比较与C语言显得更加繁琐和复杂,不利于算法的设计。因此改用更加简便、直观的高级程序设计语言。相比较与C++、java而言,C语言是一种面向过程的语言,它不仅具备了高级语言的优点,同时对于同一项工程,它比汇编语言使用起来更迅速、更有较强的可读性,容易调试,方便开发者的软件开发。因此在单片机开发中,C语言的运用要更加广泛。综上所述,本次设计采用C语言进行开发。

4.3 软件设计思路

实验的软件开发是一个循序渐进的过程,单片机需要与各个模块之间进行大量的数据交换并实现各个电路的控制功能,为了最大限度地避免程序开发过程中出现的未知问题,一般在进行开发时采用模块化编程方式,首先将实验的各个模块分别与单片机之间进行设计,确定单片机可以正确实现与各个模块之间的信息交互以及控制功能,将每个信息获取以及控制功能封装为单个函数,在使用时直接调用该函数进而实现功能,可以有效降低实验的开发难度,提高开发效率,而且在后续进行错误排查或者二次开发时,开发人员可以直接通过模块化编程的思路定位错误位置或开发位置,在不影响其他模块的前提下对单个模块进行修改,有效的改善代码结构,提高实验整体性能。

4.4 实验总体工作流程

实验在开始工作之前首先需要进行初始化操作,接上电源,给系统供电正常使用,使用WIFI模块连接阿里云平台,然后手机APP连接阿里云,然后土壤湿度传感器和光照传感器采集实时数据,将采集到的数据通过ADC转换成数字量,上传给单片机,单片机在收到数据信号之后通过一些处理,将数据以百分制的形式显示在OLED屏幕上,使用了五个按键来设置环境阈值,接着将检测到的数据通过云平台传输给手机APP,并在APP上显示我们想要的数据,而且APP 也可以控制单片机,它可以随时切换自动或者是手动模式。在自动模式下,如果湿度低于阈值,则STM32单片机点亮PA10脚控制的LED灯,光敏电阻采集光照强度,然后输出低电平,从而控制继电器吸合,水泵进行工作。当环境的光照强度低于阈值时,则控制照明灯点亮进行补光。在手动模式中:手机APP上可以控制水泵和照明灯的开启和关闭。实验的总体流程图如4-1所示。

图4-1 系统总流程图

4.5 按键扫描的流程

按键测试的基本原理十分简单,通过读取单片机I/O口的电平状态,就会知道按键是否被按下,读取到低电平时则按下,读取到高电平则没有按下,但按键是机械开关,存在弹力效应,开关在闭合和断开时不能立即平稳连接到一块,所以在闭合和断开时会出现噪声。为了避免产生此类现象,我们需要对按键进行消抖处理,当按键被按下时,通过延时短暂的时间,再对按键进行检测,去判断I/O口的电平状态,低电平表示按键被按下。其流程图如图4-2所示。

图4-2按键扫描流程

部分代码如下:

if((EXTI_GetITStatus(EXTI_Line13)!= RESET)){     //==左

      switch(cursor1){

case 1:SetLightH-=5;break;

case 2:SetRoilHumiH-=5;break;

}

EXTI_ClearITPendingBit(EXTI_Line13);

}

else if((EXTI_GetITStatus(EXTI_Line12)!= RESET)){//==下

      cursor1++;

  if(cursor1==3)cursor1=1;

EXTI_ClearITPendingBit(EXTI_Line12);

}

else if((EXTI_GetITStatus(EXTI_Line14)!= RESET)){//==翻面

      IsShuaXin=1;

  PageNum++;

  if(PageNum==3)PageNum=1;

EXTI_ClearITPendingBit(EXTI_Line14);

}

  else if((EXTI_GetITStatus(EXTI_Line15)!= RESET)){ //==右

      switch(cursor1){

case 1:SetLightH+=5;break;

case 2:SetRoilHumiH+=5;break;

}

EXTI_ClearITPendingBit(EXTI_Line15);       

}

}

4.6 OLED数据显示的设计

在本次实验设计过程中,我们使用OLED显示屏来显示数据,首先我们需要对OLED屏幕进行初始化。之后将传感器采集到的数据通过数据传输显示到OLED屏幕上,然后对数据渲染,就是单片机在接收到OLED显示屏返回的数据进行渲染,将渲染后的图像显示在屏幕上。根据渲染后的图像数据,单片机控制OLED显示屏进行图像显示。不断更新数据,使显示的内容保持最新。其流程图如图4-3所示。

图4-3 显示屏工作流程

部分代码如下:

//==显示实时画面

if(PageNum==1){

OLED_ShowCH(23,0,"实时参数");

sprintf((char*)str333,"光照强度:%.0f% ",Light);

OLED_ShowCH(0,2,str333);

sprintf((char*)str333,"土壤湿度:%.0f% ",RoilHumi);

OLED_ShowCH(0,4,str333);

 if(mode==0)

OLED_ShowCH(0,6,"当前模式:自动");

else  

OLED_ShowCH(0,6,"当前模式:手动");

 }

4.7 数据采集模块软件设计

4.7.1 土壤湿度传感器采集数据流程

本设计中,使用湿度传感器采集数据,首先在程序开始执行前,初始化单片机和传感器。包括配置单片机的外设,如ADC和I2C接口,通过对这些外设进行设置采样率和数据格式等。然后传感器采集数据,单片机内的外设ADC再去读取传感器采集到的数据,然后将数据进行处理存储到单片机内存中,以备后用。使用单片机的通信接口将处理后的数据发送到显示屏进行数据处理。之后等待一段时间,以便在下一次采集数据前给传感器一些时间更新数据。其工作流程图如图4-4所示。

图4-4 采集流程图

部分代码如下:

RoilHumi=100*(1-Get_Adc_Average(7,5)/4096.0);//==土壤湿度

4.7.2 光照强度采集程序设计

使用光敏电阻来采集光照强度的具体流程如下:在单片机程序中,首先需要初始化ADC,包括设置采样率、参考电压、采样位数等参数。然后启动ADC转换,将采集到数据转换成数字量,这个时候我们可以通过检查ADC状态寄存器的标志位来看ADC有没有转换完成,一旦转换完成,就读取ADC转换的值。将ADC转换值转换为实际的光照强度值,可以根据光敏电阻的响应曲线和实际光照强度之间的关系进行计算。其工作流程图如图4-5所示。

图4-5光照强度采集流程

部分代码如下:

Light=100*(1-Get_Adc_Average(6,5)/4096.0);//==光照强度

4.8 上位机程序设计

4.8.1 上位机工作流程

使用APP inventer制作手机APP。在本次设计中,使用ESP-01S连接云平台并配合手机APP控制下位机时,如果手机开启了热点,并且ESP-01S连接到该热点成功,其具体的软件工作流程如下:

  1. 手机打开热点。这个时候打开我们手机里的热点,密码和名称设置好,一定要和程序里相同,然后ESP01S连接到手机热点上。

(2)ESP01S连接热点。在ESP01S上运行WiFiClient库,使用WiFiClient类连接到手机热点。需要设置热点名称和密码。连接成功后,ESP01S会获取到IP地址。

(3)单片机与云平台通信。单片机通过WIFI连接云平台,在阿里云平台创建的产品下创建一个设备1,创建的产品再配置相应的功能,通过订阅和发布话题实现相互通信,将检测的数据传输到云平台上。

(4)APP与云平台通讯。用户APP发起请求,请求指令通过订阅的话题传递给云平台产品下的设备2,而云平台的设备2也可以通过话题对APP进行数据的传输,这样APP与设备2实现相互通讯;

(5)云流转。在阿里云平台上创建的产品里设备1和设备2通过云流转,对两个设备配置相应的参数,这样就能够实现通信;

(6)APP控制设备。通过上述阿里云平台上的操作以及程序中参数的配置就能实现APP与单片机的相互通信;通过APP向ESP01S发送指令,ESP01S根据指令控制水泵和照明灯的开关。其程序流程图如图4-6所示。

图4-6 无线通信流程图

部分代码如下:

void Aliyun_Init(void)

{

char temp[128];

memset(ClientID,0,128);              //==客户端ID的缓冲区全部清零

sprintf(ClientID,"%s|securemode=3,signmethod=hmacsha1|",DEVICENAME);  //==构建客户端ID,并存入缓冲区

ClientID_len = strlen(ClientID);     //==计算客户端ID的长度

memset(Username,0,128);         //==用户名的缓冲区全部清零

sprintf(Username,"%s&%s",DEVICENAME,PRODUCTKEY);

Username_len = strlen(Username);    //==计算用户名的长度

memset(temp,0,128);             //==临时缓冲区全部清零

sprintf(temp,"clientId%sdeviceName%sproductKey%s",DEVICENAME,DEVICENAME,PRODUCTKEY);     //==构建加密时的明文   

utils_hmac_sha1(temp,strlen(temp),Passward,DEVICESECRE,DEVICESECRE_LEN);                 //==以DeviceSecret为秘钥对temp中的明文,进行hmacsha1加密,结果就是密码,并保存到缓冲区中

Passward_len=strlen(Passward);          //==计算用户名的长度

memset(ServerIP,0,128);  

sprintf(ServerIP,"%s.iot-as-mqtt.cn-shanghai.aliyuncs.com",PRODUCTKEY);                  

ServerPort=1883;          //==服务器端口号1883

}

4.8.2 APP界面功能设计

本文设计的上位机APP功能结构流程图如图4-7所示。整个界面主要的功能包括以下几个部分组成:分别是连接状态、阈值显示、湿度数据监测、光照强度数据监测、工作模式设置、控制水泵、控制照明灯。

图4-7 上位机功能结构子程序流程图

第五章 测试与功能的验证

5.1 硬件调试

焊接完成之后通电检查焊接表面以及实验整体的工作情况,若发现某一个模块无法正常工作,需要测试此模块的电压,确保模块的供电正常,首先测量电源电压是否正常,将万用表调至直流电压20V档位,将红表笔与电源模块VCC连接,黑表笔与GND连接,发现万用表的示数为5V,说明电源模块供电正常。

实验使用STM32单片机进行设计,该模块的正常供电电压应该为3.3V,首先使用万用表测量单片机VCC引脚电压是否为3.3V,如果电压不正常则立刻断电,防止芯片损坏,如果工作电压正常,则依次测量单片机其他引脚,首先测量单片机的GND引脚是否为0V,如果不是0伏则说明系统电路中存在短路情况,需立刻断电排查,测量单片机其他双向I/O口电压,正常情况下,双向I/O口电压应与单片机的电源电压保持一致,如出现电压过低情况,仔细排查该引脚的连接电路是否出现短路情况,直至各引脚电压正常。继续测量其他电路的供电电压,均为正常状态。

由此可知,在进行硬件调试时,需要注意:若供电电压不在芯片或者模块的允许电压范围内则用万用表的蜂鸣器挡位测量,再判断模块或者芯片是否已经烧毁。在确认模块没有烧毁之后,再观察电路板上的焊接点是否虚焊,因为虚焊能保证实验在某个时间点能够正常工作,而过了这个时间点由于虚焊的问题可能实验就变得不可靠,甚至不能够正常工作。

5.2 软件调试

当我们把硬件电路调试完成,确保硬件电路可以正常工作,这个时候我们就可以对软件编程进行测试,我们可以单独对各个电路模块进行软件调试,当出现异常时,这样做我们能够及时得知哪个环节出现问题。软件调试的步骤如下:

  1. 打开KEIL软件,在里面新建工程,这步操作很容易,我就简述如下,点击“New project”选项,输入名称,完成以上操作即可完成建立软件工程。
  2. 将实现各个功能函数单独封装在.C文件,将这些文件再整合在一个目录下,可以由主函数进行调用和处理。
  3. 最后当各个功能的程序都调试完成,点击软件界面中的“Build”选项,确认各个子函数程序都没有错误情况;这个时候我们对整个工程进行编译,点击“Rebuild”选项,这个时候会对整个代码进行编译,并且生成单片机可执行的hex文件,如图5-1所示。

图5-1 工程编译示结果图

(4)将程序烧录到单片机的过程,ST-LINK是一款烧录程序非常好用的工具,这里我们就采用了它来烧录程序。如图5-2所示。

                  

图5-2 ST-LINK工具图

5.3 调试结果

完成实验的软硬件调试后,按照实验的整体工作流程编写主函数,下载入单片机进行最终测试,按照预期设计开始测试实验功能,首先给其上电,测试结果如图5-3所示。

图5-3实验整体图

使用按键模块来设定环境检测的阈值,其测试图如图5-4所示。

图5-4 按键测试图

实验通过传感器采集周围环境的土壤湿度和光照强度数据,并显示在OLED屏幕上。其测试图如图5-5所示。

图5-5 采集测试图

当采集的湿度数据低于阈值时则启动水泵进行加水,其测试图如图5-6所示。

图5-6 加水测试图

当采集的光照强度数据低于阈值,则开启照明灯,其测试图如图5-7所示。

图5-7 照明灯测试图

    使用WIFI模块连接阿里云平台,然后把采集的数据和设置的阈值上传到云平台中,之后使用手机APP连接阿里云,可以在手机APP上看到采集的数据和设置的阈值,并且可以在手机APP上设置实验的工作模式,以及控制水泵和照明灯。其测试图如图5-8所示。

图5-8手机APP测试图

第六章 结论

经过了两个月的努力,本次基于单片机控制的智能灌溉实验的设计终于完成,方案设计所提出的需求和功能都已经基本实现并且可以稳定运行。在设计过程中出现了许多问题,但最终在老师和同学们的帮助下都相继解决,下面对整个过程做出以下总结:

我们这次实验使用的主控系统是STM32F103C8T6单片机,通过按键设置实验周围环境的土壤湿度和光照强度阈值。使用传感器模块自动采集土壤湿度和光照强度数据,并上传到云平台。在手机APP中可以查看采集的实时数据和我们设置好的阈值,并且通过APP可以控制水泵和LED灯的开关,还可以切换手动或自动模式。在显示屏上显示出采集的数据。自动模式中,当土壤湿度没有超过设置的阈值时,打开水泵。当光照强度没有超过阈值时,则开启LED灯进行补光。本设计对智能灌溉控制具有非常大的帮助,并且设计成本低,运行稳定。

接下来总结以下设计的过程:首先,通过对智能灌溉实验的需求分析,提出了设计目标,并对其功能、性能和特点都进行了详细的说明。其次我们介绍了使用单片机在该实验的应用以及好处,接着我们就实验的硬件和软件是怎么设计的,并结合实际情况进行了调整。最后对该实验产品进行了详细的测试,并对其结果进行了分析和评估。经过对该实验产品的研究和开发,证明了这种基于单片机的智能灌溉实验是一种简单、实用和有效的解决方案。这种实验产品具有较高的稳定性和可靠性。

在未来的工作中,将继续对该实验产品进行改进和升级,以提高其功能性。本实验虽然实现了检测土壤湿度、光照强度等功能,但在一些方面仍具有一定缺陷,例如无法实现检测其他的环境参数,所以未来可以监测更多的情况来提高产品的竞争力。

附录

系统总原理图

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值