亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 Arduino 的DIY自动喂鱼器

发布时间:2021-10-31
分享到:

基于 Arduino 的DIY自动喂鱼器

发布时间:2021-10-31
分享到:

本方案是基于 Arduino 的DIY自动喂鱼器,可以使您了解如何使用 Arduino 自动创建您的 DIY 喂鱼器。

对于任何想要照顾鱼的人来说,带有 Arduino 的自动喂鱼器是一个好主意。通过此工具,您的鱼就能够得到稳定的食物需求。

在一定的时间间隔内,系统会向水族箱中的所有鱼释放食物。您想了解该系统的工作原理并制作自己的系统吗?

如果是,那么请来学习构建此项目的所有分步步骤。

有关该项目及其部分的一些图像,请参见下文。

现在,让我们了解该项目是如何运作的。让我们开始吧!

喂鱼器机制是如何工作的?
Arduino DIY 喂鱼器的设计如下图所示。

接下来,我们将介绍构成其结构的部分。

Arduino DIY 喂鱼器的基础
底座是为了便于在任何位置安装馈线框架而创建的部件。底座部分如下图所示。

在这件作品的结构中,我们将固定鱼饲料颗粒的传输管。

用 Arduino 运输鱼饲料谷物的管
管子如下图所示。它的结构借助一个用 M3 螺钉安装的轴环安装在基件上。

在管体上有一个螺纹孔。该孔用于固定鱼饲料槽。

使用 Arduino DIY 喂鱼器饲料水箱
进料罐的尺寸约为 95 x 95 x 126 毫米。其结构将通过螺纹连接到输送管。

饲料将通过孔向下流动,并通过阿基米德螺旋输送到出口。你知道阿基米德螺丝的工作原理吗?

阿基米德螺杆的工作原理
阿基米德螺旋桨是一项非常古老的发明,被多个文明用于在灌溉系统中输送水。

其结构如下所示。

手动移动螺杆以将水从一层输送到另一层。

多年来,该机制得到了改进,现在使用发动机来移动它。除了输送液体外,该系统还允许输送固体。

下图显示了在其结构内部安装了螺钉的管系统。

在剖视图中,可以观察到用于食物进入的螺纹区域及其通过管到达出口位置的运动。

为了传递运动,我们使用与阿基米德螺杆相连的连续旋转伺服电机。

连续旋转伺服电机
在这个项目中,您可以使用直流电机或伺服电机。

为便于工程施工,降低电路复杂度,便于编程,采用了连续旋转的伺服电机。

在下图中,我们有 MG996 伺服电机。

伺服电机将粘在螺杆框架上。见下图。

伺服电机将借助螺钉安装在电机的支撑件上。该部分如下图所示。

在零件的结构中,有 2 个孔可以将其安装到底座零件上。

最后,我们有用于安装饲料输送管的支撑环。

现在,让我们学习如何使用 Arduino 控制逻辑创建 DIY 喂鱼器。

用Arduino开发DIY喂鱼器的编程逻辑
逻辑是每 4 小时向鱼释放一次饲料。该值是在代码中选择的,但您可以更改它。

使用 Arduino 控制 DIY 喂鱼器的代码如下所示。

#include "Servo.h"       
#include <DS1307.h>
#include <Wire.h> //Biblioteca de Comunicacao I2C 

int DataTime[7];

int actual_hour = 0, last_hour = 0;
int cont = 0;

Servo myservo;

void setup() 
{  
  
Wire.begin(); //Inicializacao da Comunicacao I2C
DS1307.begin();

DS1307.getDate(DataTime);

actual_hour = DataTime[4];
last_hour = DataTime[4];

myservo.attach(9);

}

void loop() 
{

  DS1307.getDate(DataTime);
  actual_hour = DataTime[4];

  if(actual_hour != last_hour)
  {
    cont++;
    last_hour = actual_hour;  
  }

  if(cont == 2)
  {
    myservo.write(180);  
    delay(30000);
    myservo.write(90);

    cont = 0;

    last_hour = actual_hour;   
  }
  
}

接下来,我们将解释所有开发的编程逻辑。

首先,对项目中使用的元素库进行声明。在这个项目中,一个伺服电机被用来转动螺丝和一个 DS1307 实时时钟来计算小时。

为了执行 RTC 的串行通信,使用了 wire.h 库。

声明项目中使用的所有变量和向量。DataTime 数组用于存储 RTC 返回的 7 个日期和时间参数。

变量 actual_hour 和 last_hour 是使用的变量,以便我们可以计算释放喂鱼器的小时数。

最后,在编程中创建 myservo 对象来操纵伺服电机。

void 设置函数

void setup 函数用于设备初始化和其他设置。请参阅下面的代码部分。

初始化串行通信和 DS1307 实时时钟模块。

然后从 RTC 捕获数据并将其存储在 DataTime 向量中。

将时间存储在 current_hour 和 last_hour 变量中。

最后,设置引脚 9 用于伺服电机控制。

现在我们来看看void loop函数的控制逻辑。

void循环函数中的逻辑

void 循环函数提供了使用 Arduino 控制 DIY 喂鱼器的完整逻辑。请参阅下面的代码部分。

在每个代码周期中,您必须捕获 RTC 数据。

小时信息存储在变量 actual_hour 中。

接下来,我们必须检查时间是否有变化。此过程是通过将读取的小时值与用作参考的小时值 (last_hour) 进行比较来完成的。

如果当前小时与作为引用存储的上一小时(last_hour)不同,则变量 cont 将递增,并将当前小时值分配给变量 last_hour。

此值将用作新小时更改的参考。

下一个条件用于检查变量 cont 的值是否等于 4。

如果此值为真,则表示已经过去了 4 小时,DIY 喂鱼器需要为鱼释放饲料。

舵机将顺时针驱动 30 秒并停止。在此间隔期间,食物将被螺杆移动并释放给鱼。

之后,变量 count 将收到值 0。

此操作对于允许变量重新启动下一次提要发布的小时计数是必要的。

最后,我们将当前小时分配作为对 last_hour 变量的引用。

之后,代码流返回到循环函数的开头,并重复本方案中介绍的整个过程。

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论