发新帖本帖赏金 0.50元(功能说明)我要提问
返回列表
打印

【花卉生长任务书】Suaig的花卉生长控制系统,代码+视频

[复制链接]
3322|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suaig|  楼主 | 2018-5-30 14:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1.系统实现的基本思路
       系统基本思路框图如图1.0所示:
图1.0:系统的整体设计思路
1.1下位机设计思路
       硬件:下位机硬件主要需要实现的是显示功能,光照采集功能,和灯光控制功能(按钮和灯),以及串口收发协议解析,在硬件上就需要一个显示设备, 还需要能够根据光照强度变化的传感器,也需要有人机交互的按键等。
       软件部分:下位机的软件子功能主要分为按键的长按短按操作和LED的切换显示,LCD的驱动,以及串口的收发驱动,和计时功能。



2.系统硬件框图
       系统硬件主要由微控制器,ADC0832,光敏电阻,按键,LCD1602以及串口转USB组成,硬件框图如图2.0所示:
图2.0:系统硬件框图
这里的显示设备选用LCD1602,显示效果比数码管更好,更丰富。可以在屏幕上指示模式和时间,以及一些界面切换的文字。光照采集部分使用低成本又简单可靠的光敏电阻方案,直接光敏电阻和电阻串联分压,根据电压不同检测光照不同,光敏电阻电阻不同。串口部分使用单片机的串口转USB和电脑上位机通讯,通讯协议自定。按键采用的是简单的弹簧按钮。灯光使用绿色LED代替。电源使用5V电源。


3.系统的软件框图
       下位机:系统软件主要由四部分组成,计时,串口协议处理,光照检测,人机交互(按键和显示),具体流程如图3.0所示:
图3.0下位机软件流程图



上位机:整个系统由事件响应构成,在串口打开的情况下,定时器会定时发送心跳包,检测下位机是否连接,串口事件负责解析协议并刷新状态以及时间显示和状态灯光显示。

按钮事件主要是打开功能和发送命令系统软件流程图如图3.1所示:
图3.1上位机系统软件流程图




3.1通讯协议说明
       通讯协议采用的是不定长编码方式由起始帧,命令位,数据,校验和,以及结束帧构成
起始帧使用两个连续的0Xff来表示。
       命令位为一个字节0x00-0xfe可以有255个命令可以使用
       数据部分不定长,从命令位开始到校验和都可以是数据
       校验和为从命令位加到所有数据为的和
       结束帧由0Xaa,0Xbb组成

       协议举例:
心跳包0x00:
       下位机FF FF 00 00 00 AA BB
       上位机FF FF 00 01 01 AA BB
上位机发送心跳包,下位机回复心跳包

查询数据0x01:
       下位机:FF FF 01 hour min sec vokt(高八位) volt(低八位) 模式 灯 校验和 AA BB
上位机:FF FF 01 0001 AA BB
上位机发送查询,下位机回复数据

命令0x02:
       下位机:FF FF 03 01 AA BB
       上位机:FF FF 03 00 AA BB
上位机发送指令,下位机执行完成后回复上位机指令。
特点与创新
       上位机部分在项目原有的基础上增加了心跳包功能,用于检测连接状况。

       下位机采用模块化对象化编程,里面的子模块都是我以前写的通用模块,允许在任何支持C语言的单片机,甚至树莓派上调用,使用面向对象思想去完成整个程序,使程序解耦,,底层采用的是函数接口去和具体单片机连接,调用之前实例化一个对象,既可使用,我觉得里面最创新的应该是串口部分,采用了FIFO的环形缓冲区作为串口的缓冲区,读写指针分别操作,无需进行互斥保护就可以安全操作缓冲区,发送和接受都是使用中断发送,大大释放单片机,以前发送一个字符9600波特率差不多要1ms一字节,现在只需要压入缓冲区,不需要管发送和接受状态,接收部分也可以等一个数据包接受完成再去读出整个数据包解析。键扫描采用的是状态机按键扫描和下降沿扫描结合的方式,不再需要按键消抖。任务与任务之间宏观上是并行运行的,这得益于采用了基于事基和状态机的编程框架。这是我觉得我很创新的地方。
下位机程序结构说明,main.c里主要是事基的初始化,以及开启调度器轮询。
PT_OS.c是时基调度器里的时基。
HardwareSerial.c是串口缓冲区的封装
Serial_One.C是串口封装的实例化,对串口1对象化
Keyboard.c是按键的封装
APP.c是应用程序或者称之为任务的实现,主要程序都在这
ADC083X.c是ADC0832的驱动封装
LCD1602.C是对1602的驱动封装


Button.c是按钮的实例化,以及按键事件回调函数的回调函数在里面。主要的按键响应,例如长按,断按,都在回调函数中实现。
完整电路:




Demo.zip (6.05 MB)

视频链接:
B站: https://www.bilibili.com/video/av24137898/
优酷:

打赏榜单

山东电子小菜鸟 打赏了 0.50 元 2018-05-30

相关帖子

沙发
caijie001| | 2018-5-30 14:33 | 只看该作者
不错啊,支持一下

使用特权

评论回复
板凳
caijie001| | 2018-5-30 14:34 | 只看该作者

使用特权

评论回复
地板
caijie001| | 2018-5-30 14:34 | 只看该作者
不错啊,支持一下

使用特权

评论回复
5
婆娑| | 2018-5-30 14:37 | 只看该作者
腻害腻害

使用特权

评论回复
6
21ic小喇叭| | 2018-5-30 14:44 | 只看该作者

支持!第一位提交作业的同学,加10分!

使用特权

评论回复
7
henangongda123| | 2018-5-30 15:34 | 只看该作者
666!

使用特权

评论回复
8
gujiamao12345| | 2018-5-30 16:55 | 只看该作者
厉害厉害!

使用特权

评论回复
发新帖 本帖赏金 0.50元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

2

粉丝