基于FreeRTOS的丰年虾卵自动孵化投食系统方案设计

2022-04-16 06:23张振宇侯奕辰陈哲奕
科技创新与应用 2022年9期
关键词:加热棒投食丰年

张振宇,侯奕辰,陈哲奕,汪 烨

(上海电机学院 机械学院,上海 201306)

丰年虾是一种营养价值非常高的鱼饲料,以鱼饲料为目的的丰年虾孵化需要用淡盐水进行,盐度为10‰,最适宜的温度在30℃左右,期间适当的给予光照,孵化时间大约为22 h[1]。最好在孵化时给予充足的氧气,孵化完后需要立刻当作饲料进行喂食,否则营养价值会大大流失[2]。但目前市场上都只有单纯的孵化设备,并且需要人工自己控制丰年虾卵的投放量和盐的投放量,无法做到自动喂养,不够自动化也不够人性化。本文基于以上几个问题进行了丰年虾卵自动孵化投食系统的设计。

1 结构设计

结构示意图如图1所示,丰年虾卵储存在装置上部,步进电机安装在转盘上,通过步进电机的转动可以使丰年虾卵落入下方孵化仓内;舵机通过电机伸出轴来控制加盐仓的开关;排水口与投食口分别与不同的电磁夹紧阀相连。

图1 结构示意图

2 系统方案设计

2.1 硬件设计

STM32F429IGTx:32位MCU,最高主频180 MHz,拥有2 M的闪存和256 K的SRAM[3]。

步进电机:二相四线制直流无刷步进电机,额定电压为5 V,步距角1.8°,通过四拍方式控制步进电机进行特定角度的旋转,在本方案中以旋转一周360°为单位。

舵机:可控制角度的舵机旋转角度范围为0°~180°,使用PWM控制正反转以及转动的角度,一个周期为20 ms,控制脉冲内的高电平时间以达到控制旋转的角度,也就是控制占空比。高电平时间可在0.5~2.5 ms内选择,0.5 ms代表旋转0°,2.5 ms代表旋转180°。

温度传感器:用于实时监控孵化仓内水温的变化,温度传感器使用的型号为DS18B20,使用OneWire通信协议,需外接上拉电阻。

加热棒:用于孵化仓内的温度控制以达到恒温的目的,额定电压12 V,单片机通过直流继电器来控制加热棒的开关闭和。

水泵:单片机通过直流继电器控制水泵的开关闭合。

气泵:单片机通过直流继电器控制气泵的开关闭合。

RGB屏幕:RGB电容屏用于人机交互并显示信息,使用STM32F429的LTDC和DMA2D进行控制,STM32的LTDC是专门用于显示图像的硬件设备而DMA2D则是LTDC专用的DMA设备,可以提高数据传输速度。

电容触摸屏:电容触摸屏采用GT5688触摸控制芯片,使用IIC协议,STM32F429可通过特定的设备地址来访问GT5688,并使用发送命令的方式来读取触点的坐标以及大小。

SDRAM:STM32F429IGTx系列只拥有256 kB的内部SRAM,显示一幅大小为480*272,色深为RGB888的图像需要的显存通过下式可计算得出:

可知STM32F429IGTx内部SRAM空间无法提供充足的显存去支持图像的显示。为了解决显存不足的问题需要外扩SDRAM,STM32F429IGTx系列拥有FMC设备去外扩SDRAM。

FLASH:STM32F429IGTx系列拥有的内部Flash空间为2 MB,为了支持更高品质的UI效果应该将图片、字模等需要占据大量储存空间的数据移至外部储存器,所以可以通过外扩FLASH的方式将需要被作为图像显示的数据集中存储到外部空间内,内部FLASH可以只储存代码,这样能够更高效地利用单片机的内部FLASH。

2.2 软件设计

2.2.1 FreeRTOS

FreeRTOS是一个开源的实时操作系统,提供的功能包括任务管理、时间管理、信号量、消息队列和内存管理,可基本满足较小系统的需要[3]。操作系统的任务调度器会决定在某一时刻处理器应该执行哪个任务,所以多个任务同时运行并不代表着处理器在同一时刻真的执行了若干个任务,由于切换任务的时间非常短,并且通常情况下一个任务并不会占用太多的时间,所以从人类的角度去看就像是处理器在同时执行多个任务一样。

FreeRTOS是一款非常小型且轻量化的实时操作系统,内核文件仅有3个.c文件,只需要6 K~12 K的ROM占用空间[4]。

在本方案中,UI界面拥有人机交互的功能需要接受用户的点击,拥有特定的定时要求,并且需要与后端硬件进行交互,为了支持流畅的用户界面图形引擎需要不断地进行帧刷新,在这种复杂的情景下图形引擎很有可能因为忙于刷新新的图像帧而导致处理器无法及时处理别的任务,同时也有可能因为正在执行某个实时性并不需要强的任务而导致图像没有及时刷新而产生卡顿感,在这种情况下使用RTOS去调度或者同步这些若干个任务会显得更加高效和方便,避免上述产生的问题[5]。

2.2.2 TouchGFX

TouchGFX是一款图形软件框架,为嵌入式设备设计图形用户界面而生,使用C++进行开发。TouchGFX框架包括TouchGFX设计器(TouchGFXDesigner)和TouchGFX引擎[6]。

TouchGFX用户界面遵循称为模型-视图-演示者(MVP)的架构模式,这种架构模式可以将不同功能的代码区分开来,将UI的逻辑与可视层分离,方便进行单独测试。MVP架构模式总共由3个部分组成:

Model:Model用于和开发板的非UI部分硬件进行通信,Model既可以从UI中接收事件将其反馈到底层硬件,也可以从底层硬件接收信息并通过Presenter来更新View中的UI界面。

View:View用于负责显示UI界面,接收来自触摸屏的点击,并可以将事件传送至Presenter,同时也可以接收从Presenter带来的信息。

Presenter:连接Model与View的中间层,负责当前View显示的Screen的逻辑,接收来自View的点击事件以及来自Model的数据。

TouchGFX[6]软件包中拥有专门的操作系统接口,这些接口在OSWrappers.c中:

signalVSync():垂直同步信号,使显示器为下一帧做好准备,可以使用FreeRTOS的信号量进行同步。

waitForVSync():等待垂直同步,这个函数会阻塞直到信号量可以被使用。

takeFrameBufferSemaphore():图形引擎直接访问帧缓冲区。

giveFrameBufferSemaphore():安全地释放帧缓冲区信号量。

2.2.3 系统设计

系统框架如图2所示,FreeRTOS会根据优先级来调度所有的任务并控制STM32F429IGTx对所有的硬件进行驱动。

图2 系统框架图

用户可以通过LCD上设置的UI界面来控制需要连续孵化几次并选择是否开始孵化,UI界面如图3所示。

图3 UI界面

当用户按下开始孵化键后,整个装置会以如图4所示流程图的方式进行自动供卵的操作:

图4 孵化流程图

首先开始供卵,步进电机会旋转360°让丰年虾卵落入孵化仓,然后启动舵机开始加盐,加完盐后启动水泵,这些步骤与孵化丰年虾卵相比并不会持续太长的时间,然而在水泵向孵化仓加满水后需要打开温度传感器和加热棒并且同时打开气泵,这3个并行任务是要在孵化过程中持续进行的,所以启动步进电机、启动舵机、启动水泵这3个步骤属于一个任务,并将其称为Task1,而打开温度传感器、启动气泵以及打开加热棒这3个并行步骤属于另一个任务,将其称为Task2,Task2接收来自Task1执行完毕后释放的二值信号量Semaphores1进行同步。

STM32F429IGTx拥有RTC设备,这是一款专门用于长时间定时的时钟,在有纽扣电池的情况下还能保持掉电运行,通过RTC可以精准控制孵化的时间,等时间到后进入中断并释放另一个二值信号量Semaphores2将Task2重新设为阻塞态。

二值信号量Semaphores2也会被Task3接收到,这时Task3会先打开位于投食口的电磁阀,喂养完毕后再打开排水口的电磁阀。

用户可以在设置次数页面设置需要自动孵化并喂养的次数,在设置完毕后,次数将会被作为列表项写入队列List中,并且所有任务都会接收到List中的信息,这样所有的任务就会知道它们需要被执行多少次。Task1在接收到List不为NULL后开始执行任务并依次执行下去直到Task3被执行完毕,而Task3被执行完毕后同样会释放一个二值信号量Semaphores3给Task1以此来同步循环已经结束可以开始进入下一个循环(如果有的话)。

3 实验与评估

通过实验可以确保整套方案是可行的,并且能够做到人机交互和整个流程自动化的功能,与人工养殖丰年虾卵相比更加方便,实物如图5所示。

图5 实物演示图

经过评估,本方案通过运用FreeRTOS来统筹管理所有的任务,能够做到实时性并且电子元器件之间能够互相配合。通过步进电机做到自动供卵的功能以及使用舵机完成自动加盐的功能,同时通过温度传感器和加热棒完成恒温的功能,STM32F429也能保证22 h后结束孵化步骤并控制电磁夹紧阀来完成喂养和排水。

4 结束语

本方案讨论了当今丰年虾养殖的现状,并根据现状提出了一种自动孵化并投食丰年虾的方案,弥补了当今在丰年虾养殖方面自动化的空白。但是本方案依旧处于实验室阶段,不足以进行市场化且仍有改善的空间,主要问题有设备过于笨重,如果做成独立的设备会造成安装难的问题,解决方法可以将方案中的电子元器件小型化或者直接将本方案与鱼缸或者养鱼设施集成在一起成为一个整体。

猜你喜欢
加热棒投食丰年
丰年(油画)
投食瞬间
稻花香里说丰年
稻花香里说丰年
压缩机组油箱故障原因分析及改进方案
瑞鼠丰年
高温润滑系统的改进设计
投食
热水器的镁棒常换可省电
“投食”下的阅读饥饿(外二篇)