오늘 우리는 애완 동물에게 적시에 음식을 자동으로 제공 할 수 있는 Arduino 기반 자동 애완 동물 공급기 를 구축하고 있습니다. 그것은이 DS3231 RTC 당신의 애완 동물이 음식을 부여해야하는 일련의 날짜와 시간에 사용 (실시간 시계) 모듈. 따라서 반려 동물의 식사 일정에 따라 시간을 설정하면 장치가 자동으로 음식 그릇을 떨어 뜨리거나 채 웁니다.
이 회로에서는 Arduino UNO가있는 DS3231 RTC 모듈을 사용하여 시간을 표시하기 위해 16 * 2 LCD를 사용하고 있습니다. 또한 서보 모터를 사용하여 용기를 회전시켜 음식을 제공하고 4 * 4 매트릭스 키패드를 사용하여 애완 동물에게 먹이를주는 시간을 수동으로 설정합니다. 반려 동물에게 제공 할 음식의 양에 따라 회전 각도와 용기 개방 시간을 설정할 수 있습니다. 먹이의 양은 애완 동물이 개, 고양이 또는 새인지에 따라 달라질 수 있습니다.
필요한 재료
- Arduino UNO
- 4 * 4 매트릭스 키패드
- 16 * 2 LCD
- 누름 단추
- 서보 모터
- 저항기
- 전선 연결
- 브레드 보드
회로도
이 Arduino 기반 Cat Feeder 에서는 시간과 날짜를 얻기 위해 RTC (Real Time Clock) 모듈을 사용했습니다. 우리는 4 * 4 매트릭스 키패드를 사용하여 16x2 LCD의 도움으로 애완 동물의 식사 시간을 수동으로 설정했습니다. 서보 모터는 용기를 회전시키고 사용자가 설정 한 시간에 음식을 떨어 뜨립니다. LCD는 날짜와 시간을 표시하는 데 사용됩니다. 완전한 작업은 마지막에 주어진 비디오에서 찾을 수 있습니다.
3D 프린팅 된 애완 동물 피더 모델
우리는 3D 프린터를 사용 하여이 Arduino Pet Feeder 컨테이너를 설계했습니다. 여기에서 파일을 다운로드하여 동일한 디자인을 인쇄 할 수도 있습니다. 이 모델을 인쇄하는 데 사용되는 재료는 PLA입니다. 아래 이미지와 같이 4 개의 부품이 있습니다.
아래 그림과 같이 4 개의 부품을 조립하고 서보 모터를 연결합니다.
3D 프린팅을 처음 사용하는 경우 여기에 시작 안내서가 있습니다. 여기에서이 애완 동물 피더에 대한 STL 파일을 다운로드 할 수 있습니다.
DS3231 RTC 모듈
DS3231은 RTC (Real Time Clock) 모듈입니다. 대부분의 전자 프로젝트에서 날짜와 시간을 유지하는 데 사용됩니다. 이 모듈은 자체 코인 셀 전원 공급 장치를 사용하여 주 전원이 제거되거나 MCU가 하드 리셋을 수행 한 경우에도 날짜와 시간을 유지합니다. 따라서이 모듈에서 날짜와 시간을 설정하면 항상이를 추적합니다. 우리 회로에서는 알람처럼 애완 동물의 소유자가 설정 한 시간에 따라 애완 동물에게 먹이를주기 위해 DS3231을 사용하고 있습니다. 시계가 설정된 시간에 도달하면 서보 모터를 작동시켜 컨테이너 게이트를 열고 음식이 펫의 음식 그릇에 떨어집니다.
참고: 이 모듈을 처음 사용하는 경우 날짜와 시간을 설정해야합니다. Arduino로 시간을 읽는 데 RTC IC DS1307을 사용할 수도 있습니다.
코드 및 설명
Automatics Pet Feeder의 완전한 Arduino 코드 가 마지막에 제공됩니다.
Arduino에는 서보 모터 및 LCD 16 * 2를 사용하기위한 기본 라이브러리가 있습니다. 하지만 Arduino와 함께 DS3231 RTC 모듈 및 4 * 4 매트릭스 키패드를 사용하려면 라이브러리를 다운로드하여 설치해야합니다. 두 라이브러리에 대한 다운로드 링크는 다음과 같습니다.
- DS3231 RTC (실시간 클록) 모듈 라이브러리
- 4 * 4 매트릭스 키패드 라이브러리
아래 코드에서 우리는 라이브러리 “#include
#포함
아래 코드에서는 4 * 4 매트릭스 키패드의 키맵을 정의하고 키패드의 행과 열에 Arduino 핀을 할당합니다.
문자 키 = {{ '1', '2', '3', 'A'}, { '4', '5', '6', 'B'}, { '7', '8', ' 9 ','C '}, {'* ','0 ','# ','D '}}; 바이트 rowPins = {2, 3, 4, 5}; 바이트 colPins = {6, 7, 8, 9};
여기서는 코드에서 아래 명령을 사용하여 키패드를 생성합니다.
키패드 kpd = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS);
A4 및 A5 Arduino 핀을 할당하여 DS3231의 SCL 및 SDA 핀과 연결합니다. 또한 LCD에 핀을 할당하고 서보 모터를 초기화합니다.
DS3231 rtc (A4, A5); 서보 servo_test; // 연결된 서보에 대한 서보 개체를 초기화합니다. LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // LC 개체를 만듭니다. 매개 변수: (rs, enable, d4, d5, d6, d7)
아래 코드에서는 t1을 t6, 키, 배열 r 및 피드로 선언합니다.
int t1, t2, t3, t4, t5, t6; 부울 피드 = true; char 키; int r;
아래 코드에서는 시작을 위해 모든 구성 요소를 설정합니다. 이 코드 "servo_test.attach (10);" 처럼 서보는 Arduino 의 10 번째 핀에 부착되어 있습니다. A0, A1 및 A2를 출력 핀으로 정의하고 LCD 및 RTC 모듈을 초기화합니다.
void setup () {servo_test.attach (10); // 서보의 신호 핀을 arduino의 9 번 핀에 연결 rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
이제 루프가 어떻게 작동하는지 이해해야 할 중요한 부분입니다. 누름 버튼을 누를 때마다 높음은 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 ("시간:"); 문자열 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 ("날짜:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // 서보를 지정된 각도로 회전시키는 명령 delay (400); servo_test.write (55); feed = false; }}
에서 무효 setFeedingTime () 함수 코드, 푸시 버튼을 누른 후 우리는 애완 동물 먹이 시간을 입력 할 수 있습니다, 우리는 그 시간을 절약 눌러 'D'에 있습니다. 저장된 시간이 실시간과 일치하면 서보가 회전하기 시작합니다.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("공급 시간 설정"); 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 (키); r = 키 -48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } 지연 (500); } if (key == 'D') {key = 0; 단절; }}}
자동 애완 동물 공급기의 작동
Arduino Uno에 코드를 업로드하면 16 * 2 LCD에 시간과 날짜가 표시됩니다. 푸시 버튼을 눌렀을 때 애완 동물의 수유 시간을 묻고 4 * 4 매트릭스 키패드를 사용하여 시간을 입력해야합니다. 디스플레이에 입력 된 시간이 표시되고 'D'를 누르면 시간이 절약됩니다. 실시간과 입력 된 시간이 일치하면 서보 모터를 초기 위치 55⁰에서 100⁰로 회전하고 지연 후 다시 초기 위치로 돌아갑니다. 따라서 서보 모터가 식품 용기 게이트에 연결되어 움직이면 게이트가 열리고 그릇이나 접시에 약간의 식품이 떨어집니다. 0.4 초 지연 후 서보 모터가 다시 회전하고 게이트를 닫습니다. 전체 프로세스는 몇 초 내에 완료됩니다. 이것은 당신이 입력 한 시간에 당신의 애완 동물이 자동으로 음식을 얻는 방법입니다.
음식에 따라 시간과 정도 변경