该毕业设计是使用全志D1-H哪吒开发以及XR806开发板,再辅以外围的各种电路和传感器原件,制作而成的一个名贵植物监控装置。
该装置使用了XR806开发板构成一个网络节点,作为采集端,并且还连接了多个传感器进行环境参数的采集,并使用socket服务将采集到的数据发送到服务端。另一边使用了D1-H哪吒开发板作为服务端,D1-H哪吒开发板连接了摄像头实时采集图像,并使用基于yolov5的方法分析叶片状态,判断叶片的健康度并作为服务器,将传感器传回的数据进行分析与显示。服务器根据分析的结果,能够对XR806发出指令,在缺水的时候能够及时补水,光照不足的时候进行补光。
技术栈运用
D1-H开发板负责完成服务器收发信息、信息显示、光照控制、图像处理,涉及技术内容:
- LVGL图形框架
- Linux下Socket接口
- Linux下多线程技术
- cJSON解析器
- YOLOV5目标检测
- ......
XR806开发板负责完成环境参数采集、光照控制、水泵控制,涉及技术内容:
- LwIP协议栈
- IIC总线
- DHT11单总线
- PWM调制
- ADC采集
- ......
XR806端设计
XR806主控的系统由传感器采集部分、电源部分和控制部分组成。传感器部分负责采集环境信息,电源部分主控供电,控制部分则根据系统的信息对特定的环境参数(LED灯,水泵)进行控制。
充电电路
因为电池的电压会随着点亮的变化会有一定幅度的改变,所以需要将其稳定下来才能使用。电源部分就是使用了一个AMS1117芯片,将锂电池输出的不稳定电压稳定到3.3V,给XR806开发板及传感器供电。AMS1117是一个正向低压降的线性稳压器,压降较小。其内部集成了过热保护功能与限流电路,能有效地保护电路的正常运行,是便携式设备稳压器的理想选择。
光线、温湿度控制
补光控制主要使用了PWM调光技术。控制代码主要是控制PWM输出的占空比来调节光照的强度。在XR806中,首先初始化PWM的硬件,使用的是pwm_cycle_mode_Set(0)和pwm_capture_mode_set()函数。函数里主要配置的是相关的初始化结构体参数、PWM的频率、输出模式和占空比。初始化结束后,只要调用设置占空比的函数,即可设置占空比。结合光照传感器的控制,就可以将局部的光强控制在一定的范围内,也就是植物合适的光照。
补水部分主要配合土壤湿度传感器来进行工作。土壤湿度传感器获取到土壤湿度数据后,XR806中会进行一个判断,如果ADC采集到的电压大于一定的阈值,则启动继电器,驱动水泵进行工作,将水抽到花盆中。而显示屏上,就可以看到土壤上是处于湿润还是干燥的状态。
温湿度、光照、土壤传感器均连接在XR806上,这里取三组传感器的采集数据与标准仪器采集的数据进行比对,由两个测试点作为对照,测量出两组光照强度。对比可以看出,总体误差不大,满足了装置的要求。
D1-H与XR806通信
TCP服务器的设计主要是能够保证D1-H与XR806稳定地进行连接,并在XR806断开后还能够继续等待XR806的重新连接。这边借鉴了github上的一个开源的socket服务器代码,它使用了多线程的技术,并能够承受住较大的服务器压力,非常适合本装置的使用。
调试的基本过程如下,首先使用D1-H开发板连接上一个WiFi,然后用XR806也连接上同一个WiFi,在D1-H上启动服务器的代码,然后,启动XR806作为客户端进行连接。经过多次测试,D1-H开发板这边服务器运行非常稳定,下位机断开后会重新等待连接,在下位机重新启动后能非常迅速的进行重连。并且,在Linux下,可以使用system(wifi_info)函数来调用命令行,只需要将命令作为一个字符数组保持,就可以在程序中使用命令行操作,非常方便。本装置中连接WiFi的部分就是用这个方法,调用命令行来连接WiFi的。
D1-H服务端设计
D1-H主控的服务端软件设计根据项目所需要的功能分为三大部分。第一部分是图形界面的设计,采用的是LVGL,主要用于显示温度、湿度等数据;第二部分是TCP服务器的设计(已于上一部分介绍),用于上下位机之间的数据传输与通信;第三部分是图像处理部分,使用了YOLOV5+NCNN。
数据显示界面
图形界面使用的是LVGL。LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,具有很强的兼容性(并且与C++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,成为广大开发者在选择GUI时的第一选择。
根据系统的需求,图形界面需要能够显示下位机传上来的数据,而LVGL中可以使用文本控件进行数据的显示。显示图片可以使用一个图像控件配合PNG解码器进行显示。首先,需要创建两个基本控件对象,一个用于停靠采集处理后图像的图像控件,一个是停靠数据显示子控件的控件。在图像控件上,停靠了一个图像,即采集处理后的图像;在数据显示区上,放置了一系列的控件来展示环境参数信息;上边还有用于控制光照强度和水泵的开关。
图像处理
图像处理部分主要是YOLOV5的使用。使用之前,首先要训练针对特定场景的模型。首先需要创建自己的数据集,数据集分为两个部分,图像文件和标签文件。图像文件就是包含了待检测目标部分的图片和不带待检测目标的图像,分别作为正负样本进行训练。标签文件包含了检测目标的信息,标签文件的形式如下表4.2所示。一行数据代表了图像中的一个目标,若文件中含有多行数据,则表明图像中有多个目标。标签文件需要自己对需要检测的目标做标注。
有一个比较特别的是,YOLOV5的标签格式是txt后缀的,不是我们常见的xml格式后缀的,需要自己编写代码进行转换。准备好了图像和标签后,还需要保证每个标签与图像的名称一致。准备就绪后,就可以调用train.py文件进行训练。在训练的时候,需要指定一些参数,如下图所示
启动训练后,电脑会自动开始训练。训练完成后,我们可以看到目标训练结果保存的位置,有一个pt格式的文件。然后可以用detect.py文件来做一个测试,将加载的权重文件换成刚刚训练结束生成的权重文件。detect程序会使用这个文件进行检测,最后会输出一张结果图。从结果图中就可以看出目标检测的结果。
毕设开题PPT、答辩PPT、论文全文及相关源码将在以下地址开源:https://bbs.aw-ol.com/topic/1826/