聚丰项目 > 基于FreeRTOS嵌入式系统的智能盆栽系统设计

基于FreeRTOS嵌入式系统的智能盆栽系统设计

本设计以基于FreeRTOS嵌入式操作系统的智能盆栽系统为对象,拟设计以stm32单片机为控制核心,采用IDT FS2012流量传感器,通过使用FreeRTOS系统的创建任务、消息队列、二值信号量、软件定时器、低功耗模式等API函数实现智能盆栽系统的功能设定。主要实现的功能有:定时检测土壤湿度值和供电电池电量值,并具有低压报警功能,智能进入低功耗模式,可实现较为精确的定时或定量浇灌,并在OLED 屏幕上显示系统的各状态信息。

墨麟x 墨麟x

分享
1 喜欢这个项目
团队介绍

墨麟x 墨麟x

团队成员

王晓 学生

分享
项目简介
本设计以基于FreeRTOS嵌入式操作系统的智能盆栽系统为对象,拟设计以stm32单片机为控制核心,采用IDT FS2012流量传感器,通过使用FreeRTOS系统的创建任务、消息队列、二值信号量、软件定时器、低功耗模式等API函数实现智能盆栽系统的功能设定。主要实现的功能有:定时检测土壤湿度值和供电电池电量值,并具有低压报警功能,智能进入低功耗模式,可实现较为精确的定时或定量浇灌,并在OLED 屏幕上显示系统的各状态信息。
硬件说明

本设计共分为五个模块,分别为电源供电模块,土壤湿度和电池电量采集模块,浇灌模块,数据处理与显示模块,低压报警模块。

1、电源供电模块:将3.7v锂电池的供电电压采用先升压后降压的策略为整个系统供电,因为锂电池的输出电压电流总是不稳定的,所以使用DM13升压模块将电压升到5v,然后使用DM07降压模块将5v降压到3.3v。其中5v是给FS2012流量传感器供电,3.3v给其余的模块供电。


2、土壤湿度和电池电量采集模块:使用电容式或电阻式的土壤湿度传感器,输出电压模拟信号供单片机获得土壤湿度信息,使用两个100k的电阻串联将锂电池电压分压到stm32单片机ADC能采集的范围内,然后使用算法计算锂电池的电量值。给系统提供智能浇灌和低压报警的前提条件。


3、智能浇灌模块:此部分分别由电机驱动、供水水泵、FS2012流量传感器组成,单片机通过输出PWM使电机驱动模块控制水泵的转速进而控制水流速度,使用FS2012获得水流的流速信息,处理传感器的流速信息即可实现定量浇灌的作用,也就解决了市面上常见自动浇花器浇灌不可定量的问题。在低功耗模式时,使用stm32单片机控制MOS管断开电机驱动和FS2012传感器的供电,进而达到节能的目的。


4、数据处理与显示模块由stm32单片机最小系统和OLED屏幕组成,使用stm32单片机处理数据控制整个系统的运行并在OLED 屏幕上显示系统状态信息。


5、低压报警模块是采用有源蜂鸣器和发光led组成,当电池电压过低时,系统发出声光警报。


软件说明

本设计使用keil5软件为整个系统编写程序代码,共分为四个部分。分别是裸机底层驱动部分,中断处理函数部分及FreeRTOS任务部分和逻辑处理部分。


1、首先编写各底层驱动代码,如采集土壤湿度和电池电量原始值的ADC底层驱动代码,存储用户首次使用设定数据时的flash驱动代码,记录用户选择定时模式时记录时间的定时器时基代码,和定时唤醒系统进行监测使用的RTC闹钟事件驱动代码,控制OLED 屏幕显示的SPI驱动代码和采集FS2012流量传感器数据的软件I2C通信代码,控制电机驱动的PWM底层驱动代码等。


2、将FreeRTOS嵌入式操作系统移植到本设计中,创建四个任务,分别为土壤湿度和电池电量检测任务、系统信息显示任务、智能浇灌任务、报警任务。 土壤湿度检测任务在获取由WK_UP按键中断、RTC定时器闹钟事件发送的二值信号量后,由阻塞态变成运行态(因为检测任务的优先级最高,所以在获得信号量之后直接进入运行态)获取土壤湿度值和电池电量值,然后进行解析通过消息队列的方式发送给显示任务。系统信息显示任务在获取由检测任务发送的消息队列后,将发送来的信息进行判断和解析,若湿度值达到设定的阈值,则释放智能浇灌任务的二值信号量,若电池电压值低于阈值,则发送报警任务的二值信号量。若两者都处于较安全的状态,则OLED 屏幕显示3秒后关闭,并进入睡眠模式。智能浇灌任务在接收到浇灌任务的二值信号量若发生了任务切换,则从阻塞态变为运行态,根据用户设定的数据,进行定时或定量的浇灌,并于OLED 屏幕上显示水流流速,浇灌完毕30秒后再释放一次检测任务的信号量查看土壤湿度是否处于合适的范围。报警任务在获取到系统信息显示任务释放的警报二值信号量之后,通过蜂鸣器和发光LED实现声光报警,提示用户更换电池或进行充电。


3、编写WK_UP按键和用户按键对应的外部中断处理函数的代码。在中断处理函数中分别设置唤醒系统、发送检测任务的二值信号量、设置智能盆栽系统的浇灌模式(定时、定量)及确定每次定量浇灌的流量值。设置RTC定时器的闹钟事件,RTC闹钟处理函数中每5小时发送一次检测任务的二值信号量。


4、逻辑处理部分配合上文编写的各功能代码,实现智能盆栽系统的功能设定,完成此系统的设计。


演示效果

图片1.png

图片2.png

启动后,首先会出现欢迎语,待系统初始化之后默认进入检测模式,如图:

图片3.png

图片4.png

首次启动,需要进行模式设置。


1、长按 WK_UP 按键设置为定量浇灌模式,K1 按键增加设定量,K2 按键减少设定量,精度为 10ml,设定完毕之后,再单击 WK_UP 按键保存数据到 flash 中。即设置固定的水量使用水泵和 FS2012 流量传感器计算浇灌的时间,然后使用 FreeRTOS 的软件定时器进行监控浇灌,如图:


图片5.png

图片6.png

2、双击 WK_UP 按键设置为定时浇灌模式,K1 按键开始计时,K2 按键停止计时,精度为 500ms,注意此模式会自动打开水泵进行浇水,即首次使用会进行记录浇灌的时间,以适应对容量并不熟悉的用户,浇灌完毕之后即可按 K2 止计时和浇灌。记录完毕之后,再单击 WK_UP 按键会将计时时间保存到flash 中,再次充上电时不需要再次计时。如图:


图片7.png

图片8.png

图片9.png

非首次启动时,不需要重复设置模式,因为会自动的进入日常使用模式,自动检测并显示土壤湿度值和电池电量值,若不需要浇灌,屏幕显示三秒之后会自动进 FreeRTOS 的低功耗模式,OLED 显示屏会进入熄灭状态,流量传感器 FS2012会关闭,水泵与电机驱动也将关闭,整个系统进入低功耗模式,等待定时时间到或等待 WK_UP 按键被按下唤醒系统进行检测。

图片10.png

当系统被唤醒之后,会自动检测土壤湿度值和电池电量值,然后判断是否需要进行浇灌和电池低压报警,若需要进行浇灌则读取 flash 中的数据。打开水泵和流量传感器按照用户的设定值进行浇灌,并在显示屏上显示流速。若电池电量较低,则开启电池低压的声光报警,提示用户进行充电或更换电池。进入低功耗模式之后,只有用户按下 WK_UP 按键或 RTC 定时器闹钟事件响应时,才会再次检测土壤湿度及电池电量值,并在 oled 屏幕上显示系统状态。

11.png


因视频文件过大,所以上传到其他网站,并将链接放置于此:https://www.bilibili.com/video/av39282581

请配合“智能盆栽浇灌系统说明书”文档一起观看,效果会更好。

智能盆栽浇灌系统说明书.pdf


附件

(1.33 MB)下载

评论区(0 )