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

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

3天内不再提示

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

科技观察员 来源:circuitdigest 作者:潘卡伊·卡特里 2022-11-17 17:28 次阅读

今天,我们正在构建一个基于Arduino的自动宠物喂食器,它可以及时自动为您的宠物提供食物。它有一个DS3231 RTC(实时时钟)模块,用于设置宠物应进食的时间和日期。因此,通过根据宠物的进食时间表设置时间,设备会自动掉落或装满食物碗。

在本电路中,我们使用16*2 LCD通过DS3231 RTC模块和Arduino UNO显示时间。此外,伺服电机用于旋转容器以提供食物,4 * 4矩阵键盘用于手动设置喂食宠物的时间。您可以根据要提供给宠物的食物数量设置旋转角度和容器打开持续时间。食物的数量也可能取决于您的宠物,无论是狗、猫还是鸟。

所需材料

Arduino UNO

4*4矩阵键盘

16 * 2液晶显示器

按钮

伺服电机

电阻器

连接线

面包板

电路图

在这个基于Arduino的Cat喂食器中,为了获取时间和日期,我们使用了RTC(实时时钟)模块。我们使用 4*4 矩阵键盘在 16x2 LCD 的帮助下手动设置宠物的进食时间。伺服电机旋转容器并在用户设置的时间内放下食物。液晶屏用于显示日期和时间。完整的工作可以在最后给出的视频中找到。

poYBAGN1_raAUb2XAAEla2UuhJA901.png

pYYBAGN1_rmAAgh_AAD20S8PGec555.jpg

3D打印宠物喂食器模型

我们使用3D打印机设计了这款Arduino宠物喂食器容器。用于打印此模型的材料是 PLA。它有四个部分,如下图所示:

poYBAGN1_rqAFLXdAABZ5JAWsB4743.jpg

组装四个部件并连接伺服电机,如下图所示:

pYYBAGN1_ruAPiKUAABsrf8XQdw659.jpg

DS3231 RTC 模块

DS3231是RTC(实时时钟)模块。它用于维护大多数电子项目的日期和时间。该模块有自己的纽扣电池电源,即使主电源被移除或MCU经过硬复位,它也能保持日期和时间。因此,一旦我们在此模块中设置了日期和时间,它将始终跟踪它。在我们的电路中,我们使用DS3231根据宠物主人设置的时间喂宠物,就像闹钟一样。当时钟达到设定时间时,它操作伺服电机打开容器门,食物掉入宠物的食物碗中。

pYYBAGN1_r2AKMDoAABklFhj4XI898.jpg

注意:首次使用此模块时,您必须设置日期和时间。

在下面的代码中,我们定义了库,RTC模块的“#include ”,伺服电机的“#include ”,16 * 2 LCD的“#include ”和4 * 4矩阵键盘的“#include <键盘.h> ”。

#include
#include
#include
#include
在下面的代码中,我们为 4*4 矩阵键盘定义键盘映射,并为键盘的行和列分配 Arduino 引脚。

char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
by terow Pins[ROWS] = { 2, 3, 4, 5 };
byte colPins[COLS] = { 6, 7, 8, 9 };
在这里,我们将使用代码中的以下命令创建键盘。

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
分配 A4 和 A5 Arduino 引脚以连接 DS3231 的 SCL 和 SDA 引脚。此外,将引脚分配给 LCD 并初始化伺服电机。

DS3231 rtc(A4, A5);
Servo servo_test; //ini tialize a servo object f orthe connected servo
Liqu idCrystal lcd(A0, A1, A2, 11, 12, 13); // Creates an LC object. Pa ramete rs: (rs, enable, d4, d5, d6, d7)
在下面的代码中,我们将 t1 声明为 t6、键和数组 r[6],以及馈送。

int t1, t2, t3, t4, t5, t6;
boolean feed = true;
char key;
int r[6];
在下面的代码中,我们正在为启动设置所有组件。就像在这个代码“servo_test.att ach(10);”伺服器附在 10千Arduino的销钉。定义 A0、A1 和 A2 作为输出引脚并初始化 LCD 和 RTC 模块。

void setup()
{
servo_test.attach(10); // attach the signal pin of servo to pin9 of arduino
rtc.begin();
lcd.begin(16,2);
servo_test.write(55);
Serial.begin(9600);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
}
现在,循环如何工作是要理解的重要部分。每当按下按钮时,它都会变高表示 1,可以通过“按钮按下 = 数字读取(A3)”来读取。现在它进入“if”语句并调用“se tFeedingTime”函数。然后,它将实时时间和用户输入的时间进行比较。如果条件为真,这意味着实时时间和输入的时间相同,则伺服电机旋转至 100 度并倾斜 0.4 秒后返回其初始位置。

void loop() {
lcd.setCursor(0,0);
int buttonPress;
buttonPress = digitalRe ad(A3);

if (buttonPress==1)
setFeedingTime();
lcd.print("Time: ");
String t = "";

t = rtc.getTimeStr();
t1 = t.charAt(0)-48;
t2 = t.charAt(1)-48;
t3 = t.charAt(3)-48;
t4 = t.charAt(4)-48;
t5 = t.charAt(6)-48;
t6 = t.charAt(7)-48;

lcd.print(rtc.getTimeStr());
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(rtc.getDateStr());

if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true)
{
servo_test.write(100); //command to rotate the servo to the specified angle
delay(400);
servo_test.write(55);
feed=false;
}
}
在 void setFeedingTime() 函数代码中,按下按钮后,我们可以输入宠物喂食时间,然后我们必须按“D”以节省该时间。当保存的时间与实时匹配时,伺服开始旋转。

void setFeedingTime()
{
feed = true;
int i=0;

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set feeding Time");
lcd.clear();
lcd.print("HH:MM");
lcd.setCursor(0,1);
while(1){
key = kpd.getKey();
char j;

if(key!=NO_KEY){
lcd.setCursor(j,1);
lcd.print(key);
r[i] = key-48;
i++;
j++;

if (j==2)
{
lcd.print(":"); j++;
}
delay(500);
}

if (key == 'D')
{key=0; break; }
}
}

自动宠物喂食器的工作原理

poYBAGN1_r6APEWmAACKwqD-fTQ316.jpg

将代码上传到Arduino Uno后,时间和日期将显示在16 * 2 LCD上。当您按下按钮时,它会询问宠物的喂食时间,您必须使用 4*4 矩阵键盘输入时间。显示屏将显示输入的时间,当您按“D”时,它会节省时间。当实时时间和输入时间匹配时,它将伺服电机从其初始位置旋转 55⁰ 到 100⁰,并在延迟后再次返回到其初始位置。因此,伺服电机连接到食品容器门,因此当它移动时,门将打开,一些食物落入碗或盘子中。延迟0.4秒后,伺服电机再次旋转并关闭闸门。整个过程在几秒钟内完成。这就是您的宠物在您输入时自动获得食物的方式。

#include

#include

#include

#include


const byte ROWS = 4; // Four rows

const byte COLS = 4; // Three columns


// Define the Keymap


char keys[ROWS][COLS] = {


{'1','2','3','A'},


{'4','5','6','B'},


{'7','8','9','C'},


{'*','0','#','D'}


};


// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.


byte rowPins[ROWS] = { 2, 3, 4, 5 };


// Connect keypad COL0, COL1 and COL2 to these Arduino pins.


byte colPins[COLS] = { 6, 7, 8, 9 };


// Create the Keypad

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );





DS3231 rtc(A4, A5);

Servo servo_test; //initialize a servo object for the connected servo

LiquidCrystal lcd(A0, A1, A2, 11, 12, 13); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)


//int angle = 0;

// int potentio = A0; // initialize the A0analogpin for potentiometer

int t1, t2, t3, t4, t5, t6;




boolean feed = true; // condition for alarm


char key;

int r[6];



void setup()

{

servo_test.attach(10); // attach the signal pin of servo to pin9 of arduino

rtc.begin();

lcd.begin(16,2);

servo_test.write(55);

Serial.begin(9600);

pinMode(A0, OUTPUT);

pinMode(A1, OUTPUT);

pinMode(A2, OUTPUT);



}



void loop()

{


lcd.setCursor(0,0);

int buttonPress;

buttonPress = digitalRead(A3);


if (buttonPress==1)

setFeedingTime();




//Serial.println(buttonPress);


lcd.print("Time: ");

String t = "";

t = rtc.getTimeStr();

t1 = t.charAt(0)-48;

t2 = t.charAt(1)-48;

t3 = t.charAt(3)-48;

t4 = t.charAt(4)-48;

t5 = t.charAt(6)-48;

t6 = t.charAt(7)-48;



lcd.print(rtc.getTimeStr());

lcd.setCursor(0,1);

lcd.print("Date: ");

lcd.print(rtc.getDateStr());



if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true)

{

servo_test.write(100); //command to rotate the servo to the specified angle

delay(400);

servo_test.write(55);

feed=false;

}

}


void setFeedingTime()

{

feed = true;

int i=0;


lcd.clear();

lcd.setCursor(0,0);

lcd.print("Set feeding Time");

lcd.clear();

lcd.print("HH:MM");

lcd.setCursor(0,1);




while(1){

key = kpd.getKey();


char j;



if(key!=NO_KEY){



lcd.setCursor(j,1);



lcd.print(key);



r[i] = key-48;

i++;

j++;


if (j==2)

{

lcd.print(":"); j++;

}

delay(500);

}


if (key == 'D')

{key=0; break; }

}

}

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

    关注

    2

    文章

    51

    浏览量

    23784
  • Arduino
    +关注

    关注

    186

    文章

    6452

    浏览量

    185768
  • 喂食器
    +关注

    关注

    1

    文章

    23

    浏览量

    2814
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    如何设计宠物喂食器

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

    自制宠物喂食器

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

    自动喂食器的设计原理图

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

    宠物定时喂食器设计资料

    宠物定时 喂食器设计资料,很好设计资料,快来学习吧。
    发表于05-09 17:10 0次下载

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

    这是 易于使用的 自动 宠物 喂食器,带有 些 3D 打印部件、可调节的
    的头像 发表于06-28 17:18 5083次阅读
    制作<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>

    基于物联网的宠物喂食器

    我们正在 构建 简单、高效且经济的基于物联网的 宠物 喂食器。使用这款 自动
    的头像 发表于07-25 17:29 3129次阅读
    基于物联网的<b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>

    设计宠物NFC定时喂食器

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

    Arduino遥控宠物喂食器

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

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

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

    Arduino自动喂食器开源分享

    德赢Vwin官网 网站提供《 Arduino 自动 喂食器开源分享.zip》资料免费下载
    发表于11-09 09:14 6次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>自动</b><b class='flag-5'>喂食器</b>开源分享

    自动宠物喂食器开源硬件

    德赢Vwin官网 网站提供《 自动 宠物 喂食器开源硬件.zip》资料免费下载
    发表于12-23 17:06 3次下载
    <b class='flag-5'>自动</b><b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>开源硬件

    ArduinoUno制作智能的自动宠物喂食器

    你曾懒得喂你家 宠物吗?我们爱我们的 宠物,但有时我们也希望能让喂 宠物这件事变得 自动点。今天我们将使用 A
    的头像 发表于02-24 15:12 3938次阅读
    用<b class='flag-5'>Arduino</b> Uno制作<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>