本文共 2182 字,大约阅读时间需要 7 分钟。
简介
最近一个月都没有更新,原因是开始忙毕设和一个嵌入式课程设计。最近终于完成了基础功能,打算总结一下这个设计的实现过程。至于为什么想到设计这样一个东西,主要是从实用方面考虑,家里有宠物的朋友估计也会希望能够远程投喂,因此我就想自己diy一个拿回家用。
下面将会分四个方面:结构、MCU、服务器和安卓 来进行介绍。
结构
本人不是机械专业的因此结构设计也是业余的,我一开始设计的结构是这样的:
然而,这套装置私人定制会非常贵,全部3d打印也是不切实际的。因此,最终我把大件的使用现成材料代替(也就是生活中可以买得到的材料),而小零件则使用3d打印。
材料清单
原结构 | 实现方式 |
饲料罐 | 怡宝4.5L桶装水 |
四根支撑柱 | 可定做也可现找 |
底座 | 陶土自己捏 |
管道 | PVC胶管(很便宜) |
小阀门 | 3D打印 |
舵机架 | 3D打印 |
罐子支撑板 | 亚克力板定做(不贵) |
MCU支撑板 | 亚克力板定做 |
M3x8螺钉螺母 | T宝 x4 |
M3x20尼龙螺钉 | T宝 x4 |
需要3d打印的部分:
亚克力板定做部分:
几点说明:
- 怡宝桶装水瓶口螺纹有两种(目前发现),我自己画的只支持单螺纹的,其他螺纹可能扭不紧,这个需要自己改改。
- 支撑柱我是用一个干衣机配的支撑住拆下来的,这个自行解决把。
- 用陶土捏出的底座非常结实,而且很好玩!!
- 小阀门和舵机架与MG995舵机完美配合
- 亚克力板的四个孔需要和你的支撑住直径配合。
实际做出来的结构
MCU
清单
几点说明:
- 板子完全可以自制PCB,会有更大自由度,但我时间不够。
- WIFI模组安利一下这个。店家提供配网和远程通信的API,支持各种常见MCU,而且店家售后技术支持非常友好。
Kernel
为了符合嵌入式课程的要求,我在stm32f103上移植了一个迷你的os内核——RT-Thread Nano。
Features
- USART1串口用于输入输出调试信息,RT-Thread的msh/finsh命令行工具支持命令行查询运行状态。搭配正点原子的XCOM串口调试助手使用。
- 通过舵机控制投喂阀门的开启。
- 通过温湿度传感器获取环境温湿度。
- WIFI模组目前还没发挥其高速传输的优势,因为图片/视频传输还没开发。配合AutoPet/Server和AutoPet/Android,实现远程控制。
Code Structure
-
Modules init
- 延时初始化
- 串口初始化
- PWM初始化
- DHT11初始化
- wifi模块初始化
-
SetupTCP
- 建立TCP连接需要指定远端的服务器IP和端口,连接上以后需要发送身份码表明客户身份,否则会拒绝连接。
-
发送和接收线程
- 初始化操作完毕后启动
- 接收线程接收服务器发送的消息,通过邮箱与发送线程通信。
- 发送线程接收到投喂指令则执行投喂函数,接收到获取温湿度指令则读取温湿度传感器并发送给服务器。
-
检查连接线程
- 初始化操作完毕后启动
- 隔一段时间检查一次模组的工作状态和TCP连接状态,进行异常排除。
服务器
我这里使用最简单的一种p2p通信方式,就是通过一个处于公网的服务器中转的方式来实现。因此你需要一个服务器。
Features
Code Structure
socket();setsockopt(); //设置socketbind(); // 绑定到端口
-
等待客户端
- 这里只允许两个客户端,使用资源量为2的信号量,当指定客户端都与服务器建立TCP连接后,使改线程挂起。
- accept出错记得释放信号量。
- accept之后需要确认客户端身份,MCU端连接后需要发送“mcu”,而Android端需要发送“and”。
-
心跳线程
- 服务器不断接收标记信号,并设置一个计数变量每秒加一。若收到一次标记信号变量置零。如果大于变量大于某个值,可以认为TCP连接断开。
-
接收线程
- 接收心跳标记信号。
- 接收安卓端控制信号后,发送到MCU客户。
- 接收MCU发送的温湿度信息,发送到安卓客户。
安卓
Recommend
安卓 9.0 +
Features
Code Structure
Logical process
-
点击app
- 初始化工具栏菜单
- 初始化网络环境监听
- 初始化进度条通知
- 初始化MCU状态监听器
- 初始化按钮
-
点击TCP连接
- 启动心跳线程
- 启动读数据线程
- 若TCP断开,重置Socket
-
点击投喂按钮
-
点击室内环境按钮
- 启动发送获取温湿度命令线程,每5s发送一次
- 当读到温湿度数据,更新列表
Screen
- 1 --> TCP连接
- 2 --> MCU状态
- 3 --> 投喂按钮
- 4 --> 室内环境按钮
Codes & Files
转载地址:http://ooklf.baihongyu.com/