博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DIY一个远程宠物投喂装置
阅读量:2051 次
发布时间:2019-04-28

本文共 2182 字,大约阅读时间需要 7 分钟。

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模组安利一下这个。店家提供配网和远程通信的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通信方式,就是通过一个处于公网的服务器中转的方式来实现。因此你需要一个服务器。

在这里插入图片描述

Features

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

Code Structure

在这里插入图片描述

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

    • 这里只允许两个客户端,使用资源量为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

  • 代码和文件:

转载地址:http://ooklf.baihongyu.com/

你可能感兴趣的文章
Kubectl 的替代品:kubeman
查看>>
以后别人再问你什么是 Istio,就把这篇文章甩给他
查看>>
新书推荐 |《Prometheus监控实战》
查看>>
Tekton Pipeline 教程
查看>>
Istio 1.3 发布,HTTP 遥测不再需要 Mixer
查看>>
Kubernetes Dashboard 终结者:KubeSphere
查看>>
AdGuard Home 安装使用教程
查看>>
Porter:面向裸金属环境的 Kubernetes 开源负载均衡器
查看>>
Kubernetes Dashboard 终结者:KubeSphere
查看>>
手把手教你部署 Istio 1.3
查看>>
CentOS 8 都发布了,你还不会用 nftables?
查看>>
一点也不流氓的搜狗输入法皮肤
查看>>
Grafana 6.4 正式发布!
查看>>
etcd 性能测试与调优
查看>>
Docker 大势已去,Podman 万岁
查看>>
Podman 使用指南
查看>>
国内 2018 年 12 月 XX 站访问百强榜单
查看>>
Linux Capabilities 入门教程:概念篇
查看>>
Linux Capabilities 入门:让普通进程获得 root 的洪荒之力
查看>>
为什么我会了SOA,你们还要逼我学微服务?
查看>>