0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Arduino Uno制作一个智能的自动宠物喂食器

王越建 来源:DevicePlus 作者:DevicePlus 2023-02-24 15:12 次阅读

这篇文章来源于DevicePlus.com英语网站的翻译稿。

poYBAGPzFvGALOu_AAH7tmSZSiA559.jpg

你曾懒得喂你家宠物吗?我们爱我们的宠物,但有时我们也希望能让喂宠物这件事变得自动化一点。今天我们将使用Arduino Uno做一个智能自动宠物喂食器!该项目的主要组件包括一个用来追踪时间、管理喂养计划的RTC模块,一个用来监控食物水平的距离传感器,一个用来区分白天黑夜的光敏传感器,一个用来识别宠物的RFID。好了!让我们开始吧!

硬件

Arduino Uno

TEMT6000 光敏传感器

GP2Y0A21YK 夏普距离传感器

RFID MFRC522

蜂鸣器

SG90 电机

RTC DS1307

软件

Arduino IDE

https://github.com/todeilatiberia/AutomaticFeeder

工具

瓶子(或任何食物容器)

金属板 35×25 厘米

第1步:连接光敏传感器

我们使用SparkFun光敏传感器TEMT6000来检测白天和黑夜。之所以需要区分这两者,主要原因是因为我们要确定何时需要投放食物,两次食物投放之间需要间隔多久。TEMT6000光敏传感器有3个引脚:SIG,GND,VCC。将这个传感器接到Arduino板上的步骤非常简单:VCC连接到5V引脚;GND到板上的GND引脚,然后SIG需要接到模拟输入上。我选择了A0引脚。输出引脚SIG的作用就好像一个晶体管,因此在传感器附近的光越亮,引脚输出的电压就越高。

下图显示了TEMT6000感知到的电流和照度之间的关系。照度是总光通量(即光源发出的可见光,以lm为单位)除以面积(m²)的量度。一般来说,1照度(Ix) = 1 / m²。TEMT6000可以识别典型的人类可见光光谱,波长在390-700纳米之间。

TEMT6000技术规格书: https://www.sparkfun.com/datasheets/Sensors/Imaging/TEMT6000.pdf

pYYBAGPzFvOAZwltAAGGxOqCMBk305.jpg

图1:集电极电流vs照度/©Sparkfun

pYYBAGPzFvWABqlVAADZh2iTJVA459.jpg

图2:TEMT6000光敏传感器与Arduino Uno的接线图

pYYBAGPzFvmAGK9YAATOVv3jNjI776.jpg

图3:TEMT6000和Arduino Uno之间的接线图

由于该传感器连接在模拟引脚上,而模数转换器的分辨率是10位的,所以其最大值为1023。例如,当传感器接收到来自我手机闪光灯的最亮照射时,从传感器读出的值大约是1023。

poYBAGPzFvuAAbm3AAC31lyNh84051.jpg

图4:Arduino显示传感器最大值的串口监视器

光敏传感器的代码:

int lightSensor = 0;

void setup() {

Serial.begin(9600);

}



void loop() {

int valueFromLightSensor = analogRead(lightSensor);

Serial.println(valueFromLightSensor);



delay(1000);

}

第2步:添加距离传感器

为了测量距离,我选择了一个模拟传感器(Sharp GP2Y0A21YK),因为与其他距离传感器相比,它的效果最好。其工作原理如下:首先发出一个信号,当它发现路上有障碍物时,它也会发回一个信号(一个电压值,该电压值随障碍物的远近而变化),这个电压会转换成距离。

GP2Y0A21YK将被安置在食物容器上方,在开启自动喂食功能前,需要先测量瓶子里的剩余空间(即食物的多少)。有了这个距离传感器,系统将检测食物容器(或瓶子)是满的还是空的。具体工作方式如下:

距离较小: 自动系统只会增加一小部分食物;

中等距离: 您的宠物将获得一半食物;

距离较大: 自动系统将投喂全部食物。

这里的距离表示从安装距离传感器的位置到食品容器底部的距离。由于传感器的量程为10-80 cm,所以传感器需要在食品容器顶部以上10cm处才能读取正确的距离值。

如何确定传感器的最佳拟合线:

摘自 Pololu.com

传感器的输出电压与测量距离的倒数之间的关系在传感器的可用范围内近似线性。您可以使用此图将传感器输出电压转换为一个近似的距离,方法是创建一条最佳拟合线,将输出电压(V)的倒数与距离(cm)联系起来。线性化方程的最简形式可以表述为到反射物体的距离约等于一个常数尺度因子(~ 27v *cm)除以传感器的输出电压之后的数值。因此增加一个恒定的距离偏移量并修改缩放因子可以改善这条线的拟合。

poYBAGPzFvyAAkLHAAB0P5-qcF0035.jpg

图5:距离传感器的特性 / ©Pololu.com

摘自 Phidgets.com

基于夏普的“典型值”,将传感器值转换为距离的公式(公式仅适用于传感器值在80 – 500之间)为:

距离 (cm) = 4800/(传感器值 – 20)

这种传感器可以找到离物体的距离,这些物体呈现出非常窄的边缘,比如角度非常尖锐的墙壁。

注: 该传感器的输出因单元而异,并取决于目标的特性(反射率、尺寸、运动方向、目标对准)。

poYBAGPzFv6AdiicAAH0qupD3pw044.jpg

图6:夏普GP2Y0A21YK与Uno之间的接线图

pYYBAGPzFwGAcUdsAATAKA6INAc774.jpg

图7:夏普距离传感器、TEMT6000、Uno之间的接线图

代码:

int lightSensor = 0;

int distanceSensor=1;



void setup() {

 Serial.begin(9600);

}



void loop() {

 int valueFromLightSensor = analogRead(lightSensor);

 Serial.print("Light Value= ");

 Serial.print(valueFromLightSensor);

 Serial.println("");

 Serial.print("Distance Value= ");

 int valueFromDistanceSensor = analogRead(distanceSensor);

 int distance= 4800/(valueFromDistanceSensor - 20);

 Serial.print(distance);



 delay(1000);

}

第3步: 确定时间

RTC DS1307模型将被用来确定时间。一个实时的时钟系统承担了确定时间的功能。该电路基于一个频率为32.768 kHz的晶体振荡器展开工作。其原理与手表类似。一个基于晶体振动的机械共振的电子振荡器能产生精确的频率。此频率用来追踪源自计算机的日期和时间。

这是一个实用模块,即使在系统关闭时,上面所配备的电池也能保证系统工作的连续性。

poYBAGPzFwKAZNYfAAJvwpMPLdw750.jpg

图8:RTC模块接线图

poYBAGPzFwSAdvS8AASWGoksa8g716.jpg

图9:RTC、夏普距离传感器、TEMT6000、Uno之间的接线图

为了获得最佳的使用效果,需要为模块添加两个库。

这两个库可以在我的网址 https://github.com/todeilatiberia/AutomaticFeeder上找到:

DS1307RTC

时间

连接线(这个库已经包含在Arduino IDE中,因此添加起来很容易)

我们将运行一个测试代码来检测模块。当我们将程序上传到Arduino board时,串口监视器会显示当前的日期和时间。这两个库有一个用于查找日期和时间的示例代码,称为 “SetTime”。

找出设置时间:

点击 Arduino IDE → 文件 → 示例 → DS1307RTC → 设置时间

poYBAGPzFwaAYn0oAALeGsTu174077.jpg

图10:在Arduino IDE上查找设置时间

在图11中,您将看到模块在显示当前日期和时间时正常工作。

pYYBAGPzFwiAL4krAAF4AP6iJvA559.jpg

图11: 正确显示当前的日期和时间

在这里,我们将只测量小时的运行情况。为此,我们需要从RTC模块中提取确切的时间。这将通过名为“setSyncProvider(RTC.get)”的RTC简单函数来完成。在实现此功能后,您将能够同时看到串口监视器上的小时数以及距离传感器和光敏传感器上的数值。

代码:

#include 

#include 

#include 



int lightSensor = 0;

int distanceSensor=1;



void setup() {

 Serial.begin(9600);

 setSyncProvider(RTC.get);

}





void loop() {

 int valueFromLightSensor = analogRead(lightSensor);

 Serial.print("Light Value= ");

 Serial.print(valueFromLightSensor);

 Serial.println("");

 Serial.print("Distance Value= ");

 int valueFromDistanceSensor = analogRead(distanceSensor);

 int distance= 4800/(valueFromDistanceSensor - 20);

 Serial.println(distance);

 

 Serial.print("Hour= ");

 Serial.println(hour());

 delay(1000);

 

}

pYYBAGPzFwqAI5RRAADVxAhmE9Q044.jpg

图12:所显示的小时

继续阅读 >

pYYBAGPzDmSAfn_UAAAF-_P5AGo881.jpg

Tiberia Todeila

Tiberia目前是布加勒斯特理工大学电气工程学院的大四学生。她非常热衷于智能家居设备的设计和开发,旨在让我们的日常生活更加轻松。

审核编辑黄宇

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

    关注

    2526

    文章

    48093

    浏览量

    740061
  • 测量
    +关注

    关注

    10

    文章

    4215

    浏览量

    109733
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184834
收藏 人收藏

    评论

    相关推荐

    构建一个基于Arduino自动宠物喂食器

    今天,我们正在构建一个基于Arduino自动宠物喂食器,它可以及时自动为您的宠物提供食物。它有
    的头像 发表于 11-17 17:28 2135次阅读
    构建一个基于<b class='flag-5'>Arduino</b>的<b class='flag-5'>自动</b><b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>

    基于单片机的宠物定时自动喂食器设计(原理图&程序)

    对于宠物定时自动喂食器感兴趣的小伙伴看过来了,电路原理图、程序、元器件资料都给你准备好了,现在就动动你的小手,用手中的单片机板子给自己的宠物设计
    发表于 08-25 16:36

    怎么实现宠物自动喂食器的设计?

    怎么实现宠物自动喂食器的设计?
    发表于 06-15 07:01

    开源:智能宠物弹射喂食器连载贴之步进电机控制(二) 相关资料分享

    想要从云端控制宠物自动喂食器,最重要的部分就是电机啦,电机的作用就是用于将装在食物储物槽里的食物倒出来供宠物食用,如下图所示,这是某宝常见的
    发表于 07-06 06:26

    怎样去设计种基于STM32F103+涂鸦三明治的宠物自动喂食器

    基于STM32F103+涂鸦三明治的宠物自动喂食器有哪些功能呢?怎样去设计种基于STM32F103+涂鸦三明治的宠物
    发表于 12-13 06:01

    如何实现宠物喂食器的设计?

    如何实现宠物喂食器的设计?
    发表于 12-21 07:54

    如何设计宠物喂食器

    如何设计宠物喂食器
    发表于 02-09 07:49

    自制宠物喂食器

    :(划掉虚假的)你参加了聚会/你工作了/你的孩子不让你睡觉。这只是远程馈线派上用场的例子。与您家中的智能系统集成的
    发表于 07-22 07:43

    自动喂食器的设计原理图

    自己设计的一个自动喂食器的设计,家庭宠物的需要。
    发表于 12-30 15:55 35次下载

    基于涂鸦智能宠物喂食器

    基于涂鸦智能宠物喂食器
    发表于 12-04 18:36 27次下载
    基于涂鸦<b class='flag-5'>智能</b>的<b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>

    制作一个易于使用的自动宠物喂食器

    这是一个易于使用的自动宠物喂食器,带有一些 3D 打印部件、可调节的喂食时间和可调节的喂食部分。
    的头像 发表于 06-28 17:18 4640次阅读
    <b class='flag-5'>制作</b>一个易于使用的<b class='flag-5'>自动</b><b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>

    设计一个宠物NFC定时喂食器

    我设计并制造了这款自动喂食器,以帮助我的糖尿病猫控制他的喂食并防止我的另一只猫吃他的食物。该喂食器可能对需要监控宠物
    的头像 发表于 08-06 16:15 1996次阅读
    设计一个<b class='flag-5'>宠物</b>NFC定时<b class='flag-5'>喂食器</b>

    Arduino遥控宠物喂食器

    电子发烧友网站提供《Arduino遥控宠物喂食器.zip》资料免费下载
    发表于 10-24 10:28 4次下载
    <b class='flag-5'>Arduino</b>遥控<b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>

    智能自动鱼/宠物喂食器开源分享

    电子发烧友网站提供《智能自动鱼/宠物喂食器开源分享.zip》资料免费下载
    发表于 10-24 09:23 8次下载
    <b class='flag-5'>智能</b><b class='flag-5'>自动</b>鱼/<b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>开源分享

    Arduino Uno制作一个智能自动宠物喂食器(续)

    第4步:添加 RFIDRFID是该系统的核心。当你的宠物靠近喂食器时,RFID将读取标签上的值,并决定是否提供更多的食物。
    的头像 发表于 02-24 14:40 1271次阅读
    用<b class='flag-5'>Arduino</b> <b class='flag-5'>Uno</b><b class='flag-5'>制作</b>一个<b class='flag-5'>智能</b>的<b class='flag-5'>自动</b><b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>(续)