基于 STM32 神舟 IV 号开发板的自动浇水系统课程设计报告 - 代码详细分析
嵌入式基于 STM32 神舟 IV 号开发板的自动浇水系统课程设计报告
一、引言
本课程设计旨在设计一个基于 STM32 神舟 IV 号开发板的自动浇水系统。通过检测土壤湿度,当土壤湿度低于一定阈值时,系统自动浇水,保证植物的正常生长。
二、系统设计
-
系统硬件设计
本系统使用 STM32 神舟 IV 号开发板作为硬件平台,开发板上包括 LED 指示灯、蜂鸣器和电位器。其中,LED 指示灯用于指示系统状态,蜂鸣器用于报警,电位器用于模拟土壤湿度。
-
系统软件设计
本系统使用 C 语言进行编程,并使用 SZ_STM32F107VC_LIB 库进行硬件驱动。主要实现以下功能:
- 初始化 LED 指示灯、蜂鸣器和串口 2;
- 初始化 ADC 配置,用于读取电位器模拟信号;
- 循环读取电位器模拟信号,计算湿度百分比和等效电压;
- 当湿度低于一定阈值时,触发浇水操作,同时报警;
- 浇水过程中,周期性打印电压值;
- 系统每隔一定时间切换 LED 指示灯状态。
三、系统代码详细设计分析
-
主函数 main()
主函数主要进行系统初始化,并进入主循环。在主循环中,首先切换 LED1 指示灯状态,然后读取电位器模拟信号,计算湿度百分比和等效电压。如果湿度低于阈值,触发浇水操作,并进行报警。报警结束后,根据电压值打印提示信息。最后,延迟一定时间后进入下一次循环。
#include "SZ_STM32F107VC_LIB.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ void SysTick_Handler_User(void); /**------------------------------------------------------- * @函数名 main * @功能 主函数 * @参数 无 * @返回值 无 ***------------------------------------------------------*/ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /*!< 在系统启动文件(startup_stm32f10x_xx.s)中已经调用SystemInit()初始化了时钟, 所以main函数不需要再次重复初始化时钟。默认初始化系统主时钟为72MHz。 SystemInit()函数的实现位于system_stm32f10x.c文件中。 */ uint16_t ADCConvertedValueLocal, Precent = 0, Voltage = 0; int count; /* 初始化板载LED指示灯 */ SZ_STM32_LEDInit(LED1); SZ_STM32_LEDInit(LED2); SZ_STM32_LEDInit(LED3); SZ_STM32_LEDInit(LED4); /*初始化蜂鸣器 */ SZ_STM32_BEEPInit(); /* 注意串口2使用Printf时'SZ_STM32F107VC_LIB.c'文件中fputc定义中设备改为SZ_STM32_COM2 */ /* 串口2初始化 */ SZ_STM32_COMInit(COM2, 115200); printf("\n\r\n"); printf("\n\r www.armjishu.com论坛后续还会有更多精彩的示例,欢迎访问论坛交流与学习."); printf("\n\r 本示例为AD转换示例,串口输出转换结果,模拟信号来自板上的电位器! \n\r"); printf("\n\r 开发板上的电位器VR1连接到了STM32的PC0,调节电位器观察串口输出的AD转换结果\n\r"); printf("\n\r=============================================================================="); printf("\n\r"); SZ_STM32_ADC_Configuration(); /* Infinite loop 主循环 */ while (1) { /* LED1指示灯状态取反 */ SZ_STM32_LEDToggle(LED1); ADCConvertedValueLocal = GetADCConvertedValue(); Precent = (ADCConvertedValueLocal*100/0x1000); //算出百分比 Voltage = Precent*33; // 3.3V的电平,计算等效电平 /* 电压低于2V,表示土壤湿度低,需要浇水 */ if( Voltage <= 2000 ) { printf("\r\n电平小于2000,蜂鸣器报警响起,开始浇水\r\n"); delay(16000000); /* 警报信号开启 */ SZ_STM32_BEEPOn(); /* 浇水次数的阈值 */ count = 15; while (1) { printf("\r\n 正在浇水,电压值为:%d.%d%dV.\n\r ", Voltage/1000, (Voltage%1000)/100, (Voltage%100)/10); ADCConvertedValueLocal = GetADCConvertedValue(); Precent = (ADCConvertedValueLocal*100/0x1000); //算出百分比 Voltage = Precent*33; //3.3V的电平,计算等效电平,更新 count--; //浇水次数减一 if( Voltage >2000 ) break; //此时电压大于2V if( count == 0 ) break; //此时到达浇水次数上限 delay(16000000); } SZ_STM32_BEEPOff(); if( Voltage >2000 ) printf("电压高于2V,土壤湿度变高,浇水结束 \n"); if( count== 0 ) printf("浇水次数达到十五次,超时,浇水结束 \n"); } printf("\r\n 当前AD转换结果为:0x%X, 百分比为:%d%%,电压值:%d.%d%dV.\n\r", ADCConvertedValueLocal, Precent, Voltage/1000, (Voltage%1000)/100, (Voltage%100)/10); /* 延迟, 打印间隔 */ delay(16000000); /* 此处可以添加用户的程序 */ } } /**------------------------------------------------------- * @函数名 SysTick_Handler_User * @功能 系统节拍定时器服务请求用户处理函数 * @参数 无 * @返回值 无 ***------------------------------------------------------*/ void SysTick_Handler_User(void) { static uint32_t TimeIncrease = 0; if((TimeIncrease%100) == 0) { if((TimeIncrease%2000) == 0) //每2秒亮100毫秒 { LED4OBB = 0; } else { LED4OBB = 1; } } TimeIncrease++; } -
SysTick_Handler_User() 函数
该函数是系统节拍定时器服务请求的用户处理函数。在该函数中,通过判断时间的增加次数,控制 LED4 指示灯的亮灭,实现系统状态的显示。
四、总结
本课程设计基于 STM32 神舟 IV 号开发板,实现了一个简单的自动浇水系统。通过检测土壤湿度,并根据阈值判断是否需要浇水,实现了自动浇水的功能。通过 LED 指示灯和蜂鸣器的使用,可以实时显示系统状态和报警。本系统具有简单、可靠的特点,适用于小型植物的自动浇水。
原文地址: http://www.cveoy.top/t/topic/pFra 著作权归作者所有。请勿转载和采集!