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'}
};
byte rowPins[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; //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)
在下面的代码中,我们将 t1 声明为 t6、键和数组 r[6],以及馈送。

int t1, t2, t3, t4, t5, t6;
boolean feed = true;
char key;
int r[6];
在下面的代码中,我们正在为启动设置所有组件。就像在这个代码“servo_test.attach(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”语句并调用“setFeedingTime”函数。然后,它将实时时间和用户输入的时间进行比较。如果条件为真,这意味着实时时间和输入的时间相同,则伺服电机旋转至 100 度并倾斜 0.4 秒后返回其初始位置。

void loop() {
lcd.setCursor(0,0);
int buttonPress;
buttonPress = digitalRead(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 A0analog pin 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; }

}

}

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

    关注

    2

    文章

    51

    浏览量

    23834
  • Arduino
    +关注

    关注

    188

    文章

    6469

    浏览量

    186969
  • 喂食器
    +关注

    关注

    1

    文章

    23

    浏览量

    3063
收藏 人收藏

    评论

    相关推荐

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

    对于宠物定时自动喂食器感兴趣的小伙伴看过来了,电路原理图、程序、元器件资料都给你准备好了,现在就动动你的小手,用手中的单片机板子给自己的宠物设计
    发表于 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 5472次阅读
    制作<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 3396次阅读
    基于物联网的<b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>

    设计宠物NFC定时喂食器

    我设计并制造了这款自动喂食器,以帮助我的糖尿病猫控制他的喂食并防止我的另只猫吃他的食物。该喂食器可能对需要监控
    的头像 发表于 08-06 16:15 2547次阅读
    设计<b class='flag-5'>一</b><b class='flag-5'>个</b><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 9次下载
    智能<b class='flag-5'>自动</b>鱼/<b class='flag-5'>宠物</b><b class='flag-5'>喂食器</b>开源分享

    自动宠物喂食器开源硬件

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

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

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

    宠物自动喂食器主控芯片DSH3186

    宠物在现代人的生活中占有极大的比重,甚至愿意将宠物当做孩子精细地养活。也正因为如此,由宠物而衍生出来的产业链涉及方方面面,不但解决了宠物主人的烦恼,也给
    的头像 发表于 11-01 16:26 303次阅读