文章目录
- 0 前言
- 1 简介
- 2 主要器件
- 3 实现效果
- 4 设计原理
- 5 部分关键代码
- 5 最后
0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 基于stm32的远程智控制浇花灌溉系统
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:4分
1 简介
通过wifi模块,结合云服务,实现远程控制浇花。这对于经常需要出差,但有偏爱花草的人来说,比较便利。
2 主要器件
- STM32RBT6
- WiFi模块
- 温湿度传感器
- 电机驱动
3 实现效果
4 设计原理
系统框架
实现原理
本系统硬件主要部件由STM32单片机,WiFi模块,传感器,电机驱动四部分组成。
其中STM32是整套系统的主控制器,负责整个系统的工作。
WiFi模块内部烧录好能够连接云端的SDK,这样能够保证系统正常的连接到云端,顺利的将数据上传到云,并且WiFi模块能够接受远程设备推送来的消息,然后将其传给STM32,从而使整套系统可以与云端对话。
传感器是本套系统的触觉系统,能够感知花瓶土壤表面的温湿度信息。
电机驱动是本套系统的执行部分,负责完成远程的控制命令。
将这几部分结合到一起就实现了一个简单的智能系统。
工作过程
- 系统定时3S上传一次温度和湿度信息到云端,通过远程手机客户端便可以查看花瓶当前的温湿度情况。
- 系统可以随时接手远程(手机客户端)发送来的控制命令,并且执行相应的命令。
- 结合云端的阈值报警功能,可以设置湿度低于某一值之后通过邮件或者短信等形式告知用户,然后用户在决策要不要浇花,如果需要就可以打开手机客户端,立刻给心爱的花草浇水了。
主要原理图
5 部分关键代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static uint32_t eventTimeCount; //定时事件计数器static uint32_t motorTimeCount;//监控事件计数器static char ledState; //LED灯状态翻转//tim1负责定时上传事件if(htim->Instance == htim1.Instance){eventTimeCount++;if(eventTimeCount >3000){eventTimeCount = 0;eventIsRun = 1; //开始执行相应任务}}//tim2负责浇水时间管理和液晶屏时间显示if(htim->Instance == htim2.Instance){motorTimeCount++;if(motorTimeCount >1000){motorTimeCount =0;//翻转LED灯状态ledState = ~ledState;if(ledState)HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);elseHAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);if(flowerFlag)//是否有浇水命令,若有命令,启动浇水{start_flower();flowerCnt++;}if(flowerCnt > 4)//浇水时间到{stop_flower();flowerCnt = 0;flowerFlag = 0;}updateTimeCnt++;if(updateTimeCnt>10)//超时,则更新液晶屏时间{updateLcdIsRun = 1;updateTimeCnt=0;}} }
}
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "key.h"
#include "spi.h"
#include "malloc.h"
#include "DCConfig.h"
#include "text.h"
#if (COMMUNICATION_MODE==0)
#include "common.h"
#elif (COMMUNICATION_MODE==1)
#include "bc26.h"
#endif
#include "usart2.h" #if (CODE_TYPE==2)
#include "dht11.h"
#include "soil.h"
#include "light.h"#endif
#if (CODE_TYPE==3)
#include "fire.h" //Fire
#include "mq_25.h" //MQ25
#include "mq_135.h"
#include "pm25.h"
#endifint main(void){
// u8 key,fontok=0; delay_init(); //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为9600 USART2_Init(115200); //初始化串口2波特率为115200 ,WIFI模块SPI2_Init(); //初始化SPILCD_Init(); //初始化液晶 LED_Init(); //LED初始化 KEY_Init(); //按键初始化 #if (CODE_TYPE==2)DHT11_GPIO_Config();Adc_Init_Light();Adc_Init_Soil();#elif (CODE_TYPE==3)Adc_Init_Fire();Adc_Init_MQ25();Adc_Init_MQ135();Adc_Init_PM25();#elif (CODE_TYPE==4)#endif //初始化空气质量检测传感器mem_init(); //初始化内存池 Lcd_Clear(WHITE); LCD_ShowString(5,20,128,16,16,"System Success!");delay_ms(1500); Lcd_Clear(WHITE);//清屏 #if (COMMUNICATION_MODE==0)atk_8266_test(); //进入ATK_ESP8266测试#elif (COMMUNICATION_MODE==1)Set_up_NBiot();#endif
}