DIY一个远程宠物投喂装置
DIY一个远程宠物投喂装置
- 简介
- 结构
- 材料清单
- 实际做出来的结构
- MCU
- 清单
- Kernel
- Features
- Code Structure
- 服务器
- Features
- Code Structure
- 安卓
- Recommend
- Features
- Code Structure
- Logical process
- Screen
- Codes & Files
简介
最近一个月都没有更新,原因是开始忙毕设和一个嵌入式课程设计。最近终于完成了基础功能,打算总结一下这个设计的实现过程。至于为什么想到设计这样一个东西,主要是从实用方面考虑,家里有宠物的朋友估计也会希望能够远程投喂,因此我就想自己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
- 代码和文件:
https://github.com/Rick0514/AutoPet
https://github.com/Rick0514/AutoPet-MCU
https://github.com/Rick0514/AutoPet-Server
https://github.com/Rick0514/AutoPet-Android
DIY一个远程宠物投喂装置相关推荐
- android喂狗检测,智能宠物投喂机上市:随时看见宠物 远程喂食
对于家中有宠物的人来说,如果在外出时能够随时观察到萌宠在家里的状态,想必是件很有吸引力的事情,而如果更进一步,除了影像和声音以外,还可以对宠物进行远程喂食,那就更完美了.近日小编发现一款Petzi T ...
- 【DIY】制作一个刷卡进门装置
摘要:本文主要介绍了如何通过Arduino和RFID射频卡外加一个舵机来DIY一个自动开锁作品 作者博客地址:http://www.yooongchun.cn/ 基本想法 宿舍里使用的是钥匙开门,近来 ...
- DIY一个测量心率装置
运动时心跳会加速,平静时心跳会变慢 前段时间去爬山,想着出去走走呼吸新鲜空气,没想到体力透支,心跳加速 砰砰砰,我很好奇此刻心跳的有多快,心率值是多少 于是翻箱倒柜找到了一个心率传感器,计划DIY一个 ...
- 【毕业设计】基于STM32的宠物自动喂食装置
目录 修改记录 1.摘要 2.整体功能分析 3.硬件选型 3.1 ESP8266 WIFI模块 3.2 STM32F103ZET6 3.3 CLS150TD舵机 3.4 压力传感器 3.5 HX711 ...
- 基于51单片机定时宠物投喂自动喂食器
资料编号:143 视频讲解: 143-基于51单片机的定时宠物投喂自动喂食器(源程序+原理图+PCB+全套毕设资料) 题目要求:设计一个基于51单片机的宠物自动投喂装置 具体要求: 1.可以定时进行投 ...
- 怎么DIY一个粒子检测器
01在家带娃能干什么? 最初是在今日头天-大数据文摘(2020-09-28)看到一篇文章 在家做核子研究:怎么DIY一个粒子检测器 ,介绍了Steve Foster(一个刚刚退休英国中央银行 TI ...
- 手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
XR32 [XR32]:完整型号[XR32F429] 是全志推出MCU芯片,听名字就知道,对标的是某tm/某sp32,可以用来做各自小板子.小车车.小电子设备.实验装置等等等 XR32F429 基于主 ...
- Java-使用多态实现主人给宠物投喂食物功能
Java-使用多态实现主人给宠物投喂食物功能 1. Pet Class package cn.animal.output;import java.util.Scanner;/*** @author J ...
- 用树莓派就能DIY一个街机?这个新加坡工作室手把手教你完成
来源:大数据文摘 本文约2100字,建议阅读5分钟 本文为你介绍用树莓派DIY一个街机. 都说男人的快乐很简单. 在充斥着虚拟现实.云游戏服务,动不动就是一场数百万美元的电子竞技比赛的时代,时不时还是 ...
最新文章
- java 继承先后顺序_Java中的继承关系的加载顺序
- java mysql 多表查询_解析Mysql多表查询的实现
- NoSQL(2)之 Redis配置与优化
- elementui图片上传php,vue+element-ui+富文本————图片上传
- linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具
- 记录 Linux crontab 的使用
- java pecs_Java 泛型: 什么是PECS(Producer Extends, Consumer Super)
- 骑马与砍杀是用python编的_骑马与砍杀编辑模式怎么用
- 在VS2013以及Linux系统中利用SVN自动更新版本号
- win10开机之后任务栏卡住了怎么办
- subsring 截取
- select2多选框无法手动排序问题[转载]
- openapi and light-4j
- 通用权限管理系统基类中数据库的连接
- 十进制进制法_进制转换方法(进制转换方法的口诀)
- python列表替换_Python 列表元素替换
- 编程:获取股票实时行情数据大全
- 计算机代表的数字,计算机中数的表示
- FTX交易平台与AZA Finance达成合作,推动非洲数字经济发展
- [解疑][VS]Visual Studio软件编程时,ID号的格式ID_,IDS_,IDC_,IDI_,IDB_,IDD_之间有什么区别?
热门文章
- 百度文库资料使用迅雷/快车软件下载失败的处理方法
- IDES ABAP/4破解及client copy [转]
- 图片转.eps格式的方法
- 协整检验该如何分析?
- 服务器数量从 21 台降至 3 台,TDengine 在跨越速运集团的落地实践
- JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
- 三级pc技术_三级推广分销佣金模式解读
- 360战投哪吒汽车后,IT行业再起风云,这次的波及面更广
- 计算机无法删除u盘里东西,Win10系统电脑U盘里的文件夹无法删除怎么办?
- rabbitMQ配置外网连接