DIY一个远程宠物投喂装置

简介

       最近一个月都没有更新,原因是开始忙毕设和一个嵌入式课程设计。最近终于完成了基础功能,打算总结一下这个设计的实现过程。至于为什么想到设计这样一个东西,主要是从实用方面考虑,家里有宠物的朋友估计也会希望能够远程投喂,因此我就想自己diy一个拿回家用。

       下面将会分四个方面:结构、MCU、服务器和安卓 来进行介绍。

结构

       本人不是机械专业的因此结构设计也是业余的,我一开始设计的结构是这样的:

在这里插入图片描述
       然而,这套装置私人定制会非常贵,全部3d打印也是不切实际的。因此,最终我把大件的使用现成材料代替(也就是生活中可以买得到的材料),而小零件则使用3d打印。

材料清单

原结构实现方式
饲料罐怡宝4.5L桶装水
四根支撑柱可定做也可现找
底座陶土自己捏
管道PVC胶管(很便宜)
小阀门3D打印
舵机架3D打印
罐子支撑板亚克力板定做(不贵)
MCU支撑板亚克力板定做
M3x8螺钉螺母T宝 x4
M3x20尼龙螺钉T宝 x4

需要3d打印的部分:
在这里插入图片描述
亚克力板定做部分:

在这里插入图片描述

几点说明:

  • 怡宝桶装水瓶口螺纹有两种(目前发现),我自己画的只支持单螺纹的,其他螺纹可能扭不紧,这个需要自己改改。
  • 支撑柱我是用一个干衣机配的支撑住拆下来的,这个自行解决把。
  • 用陶土捏出的底座非常结实,而且很好玩!!
  • 小阀门和舵机架与MG995舵机完美配合
  • 亚克力板的四个孔需要和你的支撑住直径配合。

实际做出来的结构

在这里插入图片描述


MCU

清单

  • 正点原子stm32f1开发mini板
  • MG995舵机
  • DHT11温湿度传感器
  • ALK8266 WIFI模组

几点说明:

  • 板子完全可以自制PCB,会有更大自由度,但我时间不够。
  • WIFI模组安利一下这个link。店家提供配网和远程通信的API,支持各种常见MCU,而且店家售后技术支持非常友好

Kernel

  • RT-Thread Nano

为了符合嵌入式课程的要求,我在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通信方式,就是通过一个处于公网的服务器中转的方式来实现。因此你需要一个服务器。p2p通信技术可以看看这个博客

在这里插入图片描述

Features

  • 使用Socket通信,服务器和客户端建立TCP连接。
  • 只支持两个客户端,一个是MCU,一个是Android。
  • 稳定运行只跟服务器有关,与客户端状况无关。

Code Structure

在这里插入图片描述

  • 初始化Socket
socket();
setsockopt();   //设置socket
bind();     // 绑定到端口
  • 等待客户端

    • 这里只允许两个客户端,使用资源量为2的信号量,当指定客户端都与服务器建立TCP连接后,使改线程挂起。
    • accept出错记得释放信号量。
    • accept之后需要确认客户端身份,MCU端连接后需要发送“mcu”,而Android端需要发送“and”。
  • 心跳线程

    • 服务器不断接收标记信号,并设置一个计数变量每秒加一。若收到一次标记信号变量置零。如果大于变量大于某个值,可以认为TCP连接断开。
  • 接收线程

    • 接收心跳标记信号。
    • 接收安卓端控制信号后,发送到MCU客户。
    • 接收MCU发送的温湿度信息,发送到安卓客户。

安卓

Recommend

安卓 9.0 +

Features

  • 与服务器建立TCP连接,并监听连接状态
  • 实时检测远端MCU与服务器的连接状态
  • 点击“投喂”按键,控制远端设备自动投喂
  • 点击“室内环境”按键,实时获取远端温湿度传感器的数据
  • 视频环境传送(未实现,待续)

Code Structure

在这里插入图片描述

Logical process

  • 点击app

    • 初始化工具栏菜单
    • 初始化网络环境监听
    • 初始化进度条通知
    • 初始化MCU状态监听器
    • 初始化按钮
  • 点击TCP连接

    • 启动心跳线程
    • 启动读数据线程
    • 若TCP断开,重置Socket
  • 点击投喂按钮

    • 发送投喂命令
    • 阻塞5s
  • 点击室内环境按钮

    • 启动发送获取温湿度命令线程,每5s发送一次
    • 当读到温湿度数据,更新列表

Screen

在这里插入图片描述


  • 1 --> TCP连接
  • 2 --> MCU状态
  • 3 --> 投喂按钮
  • 4 --> 室内环境按钮

在这里插入图片描述

Codes & Files

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值