使用Arduino的自动宠物喂食器
原文:https://circuitdigest.com/microcontroller-projects/automatic-pet-feeder-using-arduino
使用Arduino的自动宠物喂食器
所需材料
- Arduino UNO
- 4 * 4矩阵键盘
- 16 * 2液晶屏
- 按钮
- 伺服马达
- 电阻器
- 连接线
- 面包板
电路图
在此基于Arduino的Cat Feeder中,为了获取时间和日期,我们使用了RTC(实时时钟)模块。我们使用4 * 4矩阵键盘通过16x2 LCD手动设置宠物的进餐时间。伺服电机旋转容器,并在用户设定的时间将食物放下。LCD用于显示日期和时间。可以在末尾的视频中找到完整的工作。
3D打印的宠物喂食器型号
我们使用3D打印机设计了Arduino Pet Feeder容器。您也可以通过从此处下载文件来打印相同的设计。用于打印此模型的材料是PLA。它分为四个部分,如下图所示:
组装四个零件,然后如下图所示连接伺服电动机:
如果您不熟悉3D打印,则这里是入门指南。您可以在此处下载该宠物喂食器的STL文件。
DS3231 RTC模块
DS3231是一个RTC(实时时钟)模块。它用于维护大多数电子项目的日期和时间。该模块具有自己的纽扣电池电源,即使断开主电源或MCU进行了硬复位,它也可以使用该电源来维持日期和时间。因此,一旦我们在此模块中设置了日期和时间,它就会始终对其进行跟踪。在我们的电路中,我们正在使用DS3231根据宠物主人设置的时间(如警报)喂食宠物。当时钟达到设定的时间时,它将操作伺服电动机以打开容器门,并且食物会落入Pet的食物碗中。
**注意:**首次使用此模块时,必须设置日期和时间。您还可以使用 RTC IC DS1307与Arduino读取时间。
代码和解释
最后给出了自动宠物喂食器的完整Arduino代码。
Arduino具有用于使用伺服电机和LCD 16 * 2的默认库。但是要在Arduino上使用DS3231 RTC模块和4 * 4矩阵键盘,您必须下载并安装库。这两个库的下载链接如下:
- DS3231 RTC(实时时钟)模块库
- 4 * 4矩阵键盘库
在下面的代码,我们定义库,“#包括<DS3231.h>”用于RTC模块,“#包括<Servo.h>”为伺服电机,“#包括<LiquidCrystal.h>” 16 * 2液晶,以及*“ #include <Keypad.h>”*代表4 * 4矩阵键盘。
#include <DS3231.h>
#include <Servo.h>
#include <LiquidCrystal.h>
#include <Keypad.h>
在下面的代码中,我们为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]以及feed。
int t1, t2, t3, t4, t5, t6;
boolean feed = true;char key;int r[6];
在下面的代码中,我们将开始设置所有组件。就像这段代码中的*“ servo_test.attach(10);”* 伺服连接到Arduino的第10针。将A0,A1和A2定义为输出引脚,并初始化LCD和RTC模块。
void setup(){Servo_test.attach(10); //将伺服的信号引脚连接到arduino的pin9rtc.begin();lcd.begin(16,2);Servo_test.write(55);Serial.begin(9600);pinMode(A0,OUTPUT);pinMode(A1,OUTPUT);pinMode(A2,OUTPUT);}
现在,循环是如何工作的是要理解的重要部分。每当按下“ Pushbutton”(按钮)时,它就会变高,意味着“ 1 *”可以通过“ buttonPress = digitalRead(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 angledelay(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; }}
}
自动宠物喂食器的工作
将代码上传到Arduino Uno之后,时间和日期将显示在16 * 2 LCD上。当您按下按钮时,它会询问宠物的喂食时间,您必须使用4 * 4矩阵键盘输入时间。显示屏将显示输入的时间,当您按“ D”时,将节省时间。当实时时间和输入时间匹配时,它将使伺服电动机从其初始位置55⁰旋转到100°,并在延迟后再次返回其初始位置。因此,伺服马达连接到食物容器的门上,因此随着它的移动,门将打开,并且有一些食物掉入碗或盘中。延迟0.4秒后,伺服电机再次旋转并关闭闸门。整个过程将在几秒钟内完成。这就是您的宠物在您输入时自动获取食物的方式。
根据食物改变时间和程度
代码
#include <DS3231.h>
#include <Servo.h>
#include <LiquidCrystal.h>
#include <Keypad.h>const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns// Define the Keymapchar 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 KeypadKeypad 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 potentiometerint t1, t2, t3, t4, t5, t6;boolean feed = true; // condition for alarmchar key;int r[6];void setup() { servo_test.attach(10); // attach the signal pin of servo to pin9 of arduinortc.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; }}
}
使用Arduino的自动宠物喂食器相关推荐
- 单片机|自动宠物喂食器方案
动物智能自动喂食系统开发方案功能介绍:智能宠物喂食系统的开发包括PCBA板设计和嵌入式开发.APP开发等,支持对接涂鸦等APP平台. 智能宠物喂食器的主要功能: 1.方便现代宠主上班加班加点.出差.旅 ...
- 使用Arduino制作自动宠物喂食机
今天,我们将要制作一个基于Arduino开发板的自动宠物喂食机,它可以及时的自动为你的宠物提供食物.该项目采用一个DS3231的RTC(实时时钟)模块,用于设置宠物需要喂食的时间和日期.因此,根据您宠 ...
- ESP32-C3芯片宠物喂食器应用,智能自动供水供食
宠物喂食器可用于小猫.小狗等家庭宠物的喂食和供水,能够为宠物饲养者提供极大地方便. 但目前相关喂食器需要通过手动控制来实现宠物喂食,无法进行定时智能供食:需要用手旋转水嘴开关进行宠物喂水,无法根据宠物 ...
- 智能宠物喂食器语音芯片应用设计方案(基于唯创语音芯片WT588E02-8S(C001)功能拓展)
智能宠物喂食器语音芯片应用设计方案(基于唯创语音芯片WT588E02-8S(C001)功能拓展) 概述 本文主要通过使用唯创知音语音芯片扩展目录进行选型微定制,达到节省成本快速选型开发目的的应用介绍. ...
- 基于单片机的智能宠物喂食器设计
word完整版可点击如下下载>>>>>>>> 基于单片机的智能宠物喂食器设计-硬件开发文档类资源-CSDN下载内容包括详细设计文档word版,附带开题 ...
- 涂鸦智能宠物喂食器(鱼缸投食器)
涂鸦智能宠物喂食器(鱼缸投食器) 系统框架 ①涂鸦IOT平台 1.创建产品 1.进入IOT平台,注册登录,点击创建产品. 2.选择小家电→宠物喂食器→MCU方案→Wi-fi→输入产品名称.型号 3.添 ...
- 基于涂鸦模组和ITOP4412开发板的宠物喂食器
文章目录 基于涂鸦模组和ITOP4412开发板的宠物喂食器 1.作品描述 2.作品介绍 2.1 开发环境 2.1.1硬件设备 2.2 主要实现的功能 2.3 后续更新 3.开发流程 3.1 使用涂鸦I ...
- 宠物喂食器芯片方案设计
据有关数据显示,在我们国内养宠物的猫狗数据达到8746万只,可见饲养宠物已成为一种主流,随着工作压力大,也成了人们寄托情感的需求,人们越来越享受养宠物带来的快乐.作为一款智能宠物喂食器方案,它能满足养 ...
- 宠物喂食器的设计-基于涂鸦三明治三件套
宠物喂食器的设计-基于涂鸦三明治三件套 本文章允许涂鸦智能转载使用 去年疫情突发,全国很多地区封城,封小区,让原本备受宠爱的主子与铲屎官异地分离.遇到有准备的铲屎官,主子们还能勉强度日,那些没有准备的 ...
最新文章
- 链表问题3——删除链表的a/b处的节点(进阶)
- python语言自学-python语言学习笔记整理
- c语言五子棋坐标覆盖,跪求C语言五子棋悔棋部分实现
- 使用 Parallel HTTP Request 根据配置文件动态发送多个 HTTP 请求的失败尝试
- MATLAB GPU编程基础
- caffe框架翻译-理解(转载)
- php 图片无法删除,php如何删除上传的图片
- 局部敏感哈希(LSH)
- curl get请求传递参数_使用curl调用restful API
- 101平衡模式 DIR的理解
- 举例mysql中group_concat()函数使用
- 图像风格迁移cvpr2020_浅谈风格迁移(二)任意风格迁移
- Python数独算法
- 访问Windows 11恢复环境的5种简单方法
- CTFshow 击剑杯 部分WP
- python爬虫实战--爬取猫眼专业版-实时票房
- 日期之 显示法定格式的日期
- 【码农学编曲】RealGuitar3常用技法
- 输出字符的ascii码
- t3网络计算机是空白,用友T3登录界面服务器那一行是空白的?