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一个远程宠物投喂装置相关推荐

  1. android喂狗检测,智能宠物投喂机上市:随时看见宠物 远程喂食

    对于家中有宠物的人来说,如果在外出时能够随时观察到萌宠在家里的状态,想必是件很有吸引力的事情,而如果更进一步,除了影像和声音以外,还可以对宠物进行远程喂食,那就更完美了.近日小编发现一款Petzi T ...

  2. 【DIY】制作一个刷卡进门装置

    摘要:本文主要介绍了如何通过Arduino和RFID射频卡外加一个舵机来DIY一个自动开锁作品 作者博客地址:http://www.yooongchun.cn/ 基本想法 宿舍里使用的是钥匙开门,近来 ...

  3. DIY一个测量心率装置

    运动时心跳会加速,平静时心跳会变慢 前段时间去爬山,想着出去走走呼吸新鲜空气,没想到体力透支,心跳加速 砰砰砰,我很好奇此刻心跳的有多快,心率值是多少 于是翻箱倒柜找到了一个心率传感器,计划DIY一个 ...

  4. 【毕业设计】基于STM32的宠物自动喂食装置

    目录 修改记录 1.摘要 2.整体功能分析 3.硬件选型 3.1 ESP8266 WIFI模块 3.2 STM32F103ZET6 3.3 CLS150TD舵机 3.4 压力传感器 3.5 HX711 ...

  5. 基于51单片机定时宠物投喂自动喂食器

    资料编号:143 视频讲解: 143-基于51单片机的定时宠物投喂自动喂食器(源程序+原理图+PCB+全套毕设资料) 题目要求:设计一个基于51单片机的宠物自动投喂装置 具体要求: 1.可以定时进行投 ...

  6. 怎么DIY一个粒子检测器

    01在家带娃能干什么?   最初是在今日头天-大数据文摘(2020-09-28)看到一篇文章 在家做核子研究:怎么DIY一个粒子检测器 ,介绍了Steve Foster(一个刚刚退休英国中央银行 TI ...

  7. 手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)

    XR32 [XR32]:完整型号[XR32F429] 是全志推出MCU芯片,听名字就知道,对标的是某tm/某sp32,可以用来做各自小板子.小车车.小电子设备.实验装置等等等 XR32F429 基于主 ...

  8. Java-使用多态实现主人给宠物投喂食物功能

    Java-使用多态实现主人给宠物投喂食物功能 1. Pet Class package cn.animal.output;import java.util.Scanner;/*** @author J ...

  9. 用树莓派就能DIY一个街机?这个新加坡工作室手把手教你完成

    来源:大数据文摘 本文约2100字,建议阅读5分钟 本文为你介绍用树莓派DIY一个街机. 都说男人的快乐很简单. 在充斥着虚拟现实.云游戏服务,动不动就是一场数百万美元的电子竞技比赛的时代,时不时还是 ...

最新文章

  1. java 继承先后顺序_Java中的继承关系的加载顺序
  2. java mysql 多表查询_解析Mysql多表查询的实现
  3. NoSQL(2)之 Redis配置与优化
  4. elementui图片上传php,vue+element-ui+富文本————图片上传
  5. linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具
  6. 记录 Linux crontab 的使用
  7. java pecs_Java 泛型: 什么是PECS(Producer Extends, Consumer Super)
  8. 骑马与砍杀是用python编的_骑马与砍杀编辑模式怎么用
  9. 在VS2013以及Linux系统中利用SVN自动更新版本号
  10. win10开机之后任务栏卡住了怎么办
  11. subsring 截取
  12. select2多选框无法手动排序问题[转载]
  13. openapi and light-4j
  14. 通用权限管理系统基类中数据库的连接
  15. 十进制进制法_进制转换方法(进制转换方法的口诀)
  16. python列表替换_Python 列表元素替换
  17. 编程:获取股票实时行情数据大全
  18. 计算机代表的数字,计算机中数的表示
  19. FTX交易平台与AZA Finance达成合作,推动非洲数字经济发展
  20. [解疑][VS]Visual Studio软件编程时,ID号的格式ID_,IDS_,IDC_,IDI_,IDB_,IDD_之间有什么区别?

热门文章

  1. 百度文库资料使用迅雷/快车软件下载失败的处理方法
  2. IDES ABAP/4破解及client copy [转]
  3. 图片转.eps格式的方法
  4. 协整检验该如何分析?
  5. 服务器数量从 21 台降至 3 台,TDengine 在跨越速运集团的落地实践
  6. JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  7. 三级pc技术_三级推广分销佣金模式解读
  8. 360战投哪吒汽车后,IT行业再起风云,这次的波及面更广
  9. 计算机无法删除u盘里东西,Win10系统电脑U盘里的文件夹无法删除怎么办?
  10. rabbitMQ配置外网连接