×

自动宠物喂食器开源硬件

消耗积分:2 | 格式:zip | 大小:0.98 MB | 2022-12-23

479809

分享资料个

描述

我们在家里面临的问题有两个:

1.我们家的猫只要好吃什么都吃,导致它们体重超标。兽医表示需要少喂它们并监测它们的食物摄入量。

2. 当需要按照我们监控的时间表喂养他们时,他们会变得有需要并喵喵叫提醒我们时间快到了,即使用餐时间还有几个小时。这导致训练有素的猫在饥饿时会喵喵叫,并给我们的家庭带来压力,随后猫的主人无视它们并忘记喂它们。

我的想法源于这两个问题。我想构建一个宠物喂食器,提供测量饮食、管理食物摄入和安排食物供应的解决方案。它还通过记录宠物进食时间和进食尝试,提供有关家庭宠物习惯的分析和信息。

我要用来让这个喂食器工作的第一项技术是 RFID,以便识别宠物。这些 ID 标签足够小,可以制作成可以贴在项圈上并且可以识别宠物的方式。

我要使用的第二项技术是伺服电机来移动滑动门,这对宠物来说是安全的,但也能防止它们轻易接触到食物。如果宠物试图打开里面的食物,我们会想要使用滑动门系统来防止对宠物造成任何伤害。例如,我们现在有一个装食物的手提袋,很早以前我不得不从里面救出我们的一只猫,因为他的爪子卡在了手提袋里,因为手提袋靠近了他。然后,他的爪子就抽不出来了。滑动门可以防止宠物爪子卡住。为了让每只宠物都能打开滑动门,需要移动比宠物能够打开的更大的整个板条系列。为了确保宠物在使用喂食器时的安全,随附的编程和阻力监视器可以重新打开滑动门以释放任何可能被卡住的宠物。如果任何板条发生任何损坏,更换将很简单。您只需更换损坏的板条。

这种支持 RFID 的宠物喂食器的另一个特点是重量和测量系统。它位于碗下方,可以监控和计量向宠物提供食物。随附的计量系统以及 RFID 和门系统将使我们能够制定喂养宠物的时间表。

为了加强宠物喂食器系统的一致性,每个喂食器都可以配备摄像头和扬声器,以允许主人/家人与使用喂食器的宠物进行交流。鉴于宠物有可能未经授权尝试进入喂食器或以某种方式在预定限制之外访问喂食器的内容,相机和扬声器将帮助重定向宠物。家人可以通过移动设备或互联网直接与宠物交流,向宠物发送自定义语音消息或预先录制的消息,以实现所需的训练效果。

我还想让这个喂食器与其他喂食器配对。如果你的房子是多只宠物的房子,喂食器将能够通过使用 RFID 标签(在项圈中)识别宠物,允许每个宠物单独的时间表和监控。

该硬件附带的软件将使用 Azure 网站启用云,Azure SQL 用于保存 WebAPI,网站前端允许您注册您的宠物、设置时间表、监控以及计量提供给的食物您的宠物,拍照并存储有关您宠物的个人信息。如果您的宠物迷路或逃跑,这会很有用。每个 Feeder 都带有自己的 Web 界面,允许它是自主的,但如果您愿意,它仍然可以连接。如果馈线未连接到互联网,则某些功能(如远程监控或其他功能)将不可用。我还会使用 Azure 移动服务为手机制作一个配套应用程序,以帮助家人了解他们宠物的饮食习惯、管理他们的宠物、他们的日程安排和其他与宠物相关的信息。

在设计自动宠物喂食器时,我一直想问的一个问题是:当有些宠物无法完全训练时,您如何训练您的宠物?对我自己的两只猫说,我们已经训练它们在饥饿时喵喵叫。因此,有可能训练他们在可靠的时间表内进食,每次他们到达时分配一点食物。一旦猫显示出熟悉其喂食时间表的迹象,就可以实施更改,例如允许摄入量限制变得更加宽松,因为家庭度假时间的原因是主人无法监控摄入量和生病的宠物谁需要区别对待。

我们的猫是竞争者。当一只猫离开吃东西时,另一只猫会移到另一个碗里开始吃东西。从两个碗里吃东西的同一只猫稍后会返回并保护两个碗,以防止另一只猫吃东西。在这里,我们也可以通过使用 RFID 标签来解决这个问题。如果一只猫在不同的碗里“签到”并试图在另一个碗里签到,喂食器会关闭他们试图从中进食的新碗,并让另一个碗打开一段时间。如果另一只猫试图检查已经打开的碗,但不在他们吃东西的时间内,碗会轻轻关闭。

 
poYBAGOkFaGAMMVKAAQJeRg29Sc095.png
完整布局图
 
 
poYBAGOkFaeASi5zAAFTnG32SKw622.png
完整示意图
 

集会

实施顺序

实施顺序:[请参阅引脚输出示意图]

1. 面包板设置:将电源和接地节点固定到面包板两侧的导轨上,如上面的完整布局图所示。

2. 电阻器:将它们放在第一位可以让您有机会犯错,而不必撕开整个面包板才能在之后找到它们。

3. 将 GPIO 引脚从 RiPI2 连接到面包板,(建议:我不会在这一步开始连接其他组件,而只做 RiPi2 接线,因为小东西彼此靠近和面包板的本质。如果你这样做会断开连接。展开,如图所示使用整个面包板,并尝试按功能组织事物。这在尝试排除故障时会有很大帮助。)

4. Easy Driver:  https ://learn.sparkfun.com/tutorials/easy-driver-hook-up-guide

 
pYYBAGOkFamACoVyAACECVw7u5c517.jpg
 

(建议:首先简单是让整天感到沮丧的最好方法,让我们先做一些更大更复杂的部分,这样如果我们感到沮丧,我们可以做一些简单的事情来让我们继续前进并取得成就)如图所示连接 Easy Driver 连接,(图中门电机下方的红色 PCB 板)请勿将外部电源连接到 Easy Driver。这样做可能会导致问题,最值得注意的是,如果步进电机间歇性地断开连接,您将炸毁 Easy Driver Board。有关详细信息,请参阅 Easy Driver 的 Spark 趣味页面

5、步进电机: 

无论您使用的是 4、6、8 极步进电机,都从每个线圈中取出正极引线和负极引线,并将它们连接到简易驱动器上,如图所示。(为了简单驱动程序的安全:建议焊接这些连接,或者至少在两端使用螺丝销以确保触点在操作过程中始终保持连接状态。)

6. 食品搅拌器:这个简单的伺服器可以随时连接(不像步进器)

7. RFID 读/写模块:这也是简单的串行接口,您应该使用额外长度的电缆。(额外的长度用于测试)

 
poYBAGOkFa2ABevqAAAXalZXTso037.png
 

8. Textile Pressure Resistor 和 Flex Resistor,分别用于食品称重和门位。

[压力]

 
pYYBAGOkFbCAY076AABKpedC55w322.jpg
Fliexiforce 压力传感器 [https://www.sparkfun.com/products/11207]
 

9. 按钮:此按钮用于“覆盖”功能。它的目的是在按下时打开喂食器的门一段给定的时间(秒到分钟),其目的是释放动物或在他们的时间表之外喂食它们。

 
pYYBAGOkFeqAepiuABBCP27kbWw229.jpg
Catfeeder Electronics 完全组装好:简易驱动器的问题导致我用辅助驱动器替换了那个步进器。(我炸了步进电机和简易驱动器注意警告使驱动器和电机连接牢固!) 
 

一旦我拥有所有零件,我将更新这些图片。我不得不更换 Easy Driver 和步进电机。 

注意:图像中缺少纺织电阻器。

 
poYBAGOkFhiAHDhxAAxn8hfA2ZY973.jpg
射频识别阅读器
 
 
poYBAGOkFkmAIrObAA3wnOJ_xDc369.jpg
仔细看看面包板。
 

 

外壳

外壳由塑料制成,包含多个组件。

1. 3D 打印门板条(这里是粗糙的手绘图,我已经准备好 CAD 图像,可以进行 3D 打印了。)

2. CNC 铣削塑料面板

外壳组装

1. 取出板条并将它们堆叠放置,就像您希望看到的那样(没有顶部或底部,只需确保组装时 Flex Resistor 插槽排列在同一侧。)取出每个板条并将板条滑入下一个直到你有一系列的板条

2. 将外壳的一侧朝上放在里面,将板条放在轨道中。将三个支撑塑料件放在各自的位置,并将剩余的面放在顶部对齐轨道(我知道这比告诉你要难得多,但你可以做到:))

3.拿起硬件托盘并将硬件放在上面[PCB板]连接电源并将托盘滑入现在打开的容器背面。

4. 拿起伺服搅拌器组件并将 t 滑入碗进料槽

5. 将伺服搅拌器组件插入硬件托盘。

6. 将步进电机放在顶部托盘中,并将风轮安装到步进电机上。并到达板条的顶端。

7. 将步进电机插入下方硬件托盘中的 PCB 板。

代码

[提议的功能:不完整]

这是事情变得非常复杂的地方。而且我的代码不完整。

首先让我们谈谈项目的布局。我试图让每个单独的组件单独工作,然后在每个组件工作后将它们全部放在一起,我建议您也这样做。连接所有组件,但在运行完整程序之前单独测试每个组件的正确功能(这在我的代码库中是不完整的)

我已经在应用程序中安装了“Application Insights”,我建议您对远程监控和故障排除也这样做。

接下来,让我们处理 Azure 接口。我们正在尝试做的是称为发布者订阅者接口。简单地说,创建了一个发布者(Azure 服务),其中包含来自所有馈线的所有消息。消息可以包含您希望喂食器知道的任何信息,例如是否有新动物可用并允许进食。有可用的新计划,或已应用更新。Subscriber 是实际的 Pet Feeder 本身,当经过适当的身份验证并与帐户关联后,它将订阅您的“Feeder Group”的活动提要,这将允许您在一个帐户下拥有许多喂食器,并使您变得简单添加、编辑和更新与您的供料器关联的所有软件。

如果您选择不将喂食器连接到云服务,您仍然可以拥有多个猫喂食器。不过反过来,如果没有云服务,即使不是全部,大部分分析也将不可用。甚至来自馈线的信息输出也可以 CSV 格式提供。(诸如进食尝试、签到时间[进食和最后一次出现]、进食量等信息。)

这里列出了使用云服务和不使用云服务的区别。

1.分析

2. Feeder Group Management(如果没有这个:每对只能使用一个组)

3. 支持互联网的馈线管理(没有这个:它只能从本地网络使用)

4. Internet Enabled Feeder(任何地方的馈线)

一种。这个想法是,如果您有一个农场,并且您希望您的宠物在某些地方(例如谷仓或屋内)进食。您可以将馈线放在任何有互联网连接的地方。无论是房子、谷仓还是马厩。

5. 多用户:用户管理(没有这个:一个用户被授权。)

现在到脏代码。首先是程序概述。

该应用程序有一个用户界面,因为您可能希望将它安装在带有显示器的物联网设备上(RiPi 2 有一个 HDMI),这也有助于简化馈线的设置,但它需要您有可用的键盘和鼠标.

初始启动将要求您连接到 WiFi(如果您尚未连接)或连接到以太网 [建议使用 WiFi,因为您不会被以太网电缆束缚]连接到互联网后,您将看到 Initial Cat Feeder Program 的配置选项。您将选择在何处注册在线服务或与另一个与在线服务断开连接的馈线配对。

配对完成后,系统会要求您配对标签。

您可以使用 Pill 125khz RFID 标签和计算机对 Feeder 进行编程。需要插入 RiPi2 并启动到 Cat Feeder 应用程序,您将在其中看到应用程序配置屏幕。您需要检查每个药丸并将其注册为新宠物,同时填写表格并填写基本信息(猫名和其他身份信息),完成每个药丸的注册后,您可以将药丸附在项圈上你的宠物。您可以选择设置您的馈线 

安排或让您的宠物适应新的喂食器。(建议您让喂食器保持打开状态,并继续照常喂食至少一周。)将有一个设置,喂食器会随机发出噪音,以帮助宠物接受喂食器,这样它们就不会变得害怕它。在此期间门不会打开或关闭。但它可能会抖动。

我已将代码组织到控制器中,每个控制器都是其各自硬件部分的接口。所以步进电机有一个“EasyDriver”控制器(因为代码中没有与步进电机的直接接口。还有一个 RFID 串行控制器(因为它是一个串行接口)等等。

这将允许您测试每个组件并进行调整而不会干扰其他控制器。

我还包含了我的 Azure 服务项目。启用了排队的工作项目。和一个网站项目。这些将是您的宠物喂食器的注册和持续通信的界面。不用说,我在这些方面做得很少,但我的想法是使用发布者订阅者通信方法。(因此长时间断开连接的馈线可以快速赶上并与其他馈线共享数据。)这种模式将在馈线到馈线配置中复制,但在该馈线到馈线中交换的信息将是最小的(谁和多少,以及何时) 

 

最后,如果您有任何关于喂食器或任何问题,请联系我。我很乐意尽我所能提供帮助和指导。 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'自动宠物喂食器开源硬件',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);