애완견 사료 주기

by 조혜인 | 2017-03-16 17:21
arduinno arduino feeder per PET 사료 아두이노 애완동물 피더기

재료

  • 아두이노 우노(케이블 포함) 해외 1개 (3500원)
  • 서보모터 sg90 국내 1개 (1650원)
  • 아두이노 우노(케이블 별도) 국내 1개 (6270원)
  • 서보모터 sg90 해외 1개 (1000원)

애완동물은 꾸준히 애정을 주어야 하죠! 그런데 길게 여행을 가거나 외출 시에는 밥을 주기도 혼자 두기도 곤란할 때가 많습니다. 여기에 IoT를 더하면 적절하게 문제를 해결할 수 있겠죠! 그래서 애완동물과 관련된 ICT 서비스들이 등장하고 있습니다.

LG 유플러스에서는 펫 IoT 서비스를 상용화 했네요. 급식을 해주는 서비스는 디바이스 13만원 구매, 월 이용료 1100원을 지불하면 됩니다. 애완견의 활동량을 확인하는 서비스는 6만 6천원에 디바이스만 구매하면 된다고 합니다. 애완동물 관련 아이템 시장만 2조원에 달한다고 하네요!


이번 포스팅에서는 아두이노를 활용한 '애완동물 사료주기'를 소개해 드리려고 합니다. (Automatic Arduino Pet Feeder) 서보모터와 물병으로만 구현된 모습입니다. IoT요소는 가미되지 않고 주기적으로 아두이노가 밥을 주도록 설정해 두었습니다.

비슷한 프로젝트인 '거북이 밥주기' 에서는 스탭모터를 사용했네요!(http://www.makewith.co/page/project/993)


1. 준비물

- 아두이노 우노

- 서보모터

- 카드보드지

- 다 마신 음료 플라스틱 병


2. 만드는 방법

STEP 1. 하드웨어 연결하기

서보모터와 아두이노 우노를 다음과 같이 연결합니다.

서보모터 signal pin -------- 아두이노 9번 핀

서보모터 VCC -------- 아두이노 5V

서보모터 gnd -------- 아두이노 GND



STEP 2. 플라스틱 병, 카드보드지와 서보모터 연결하기

서보모터를 병목 쪽에 글루건으로 붙입니다.
서보모터 날개가 병입구쪽에 닿게 붙여줍니다.
그리고 카드보드지를 서보모터 날개에 달아줍니다.

 



STEP 3. 소스코드 업로드하기

아래 소스코드를 아두이노에 업로드 해 줍니다.

5번째 줄에 나온 FEED_INTERVAL 변수를 바꿔주변 밥 주는 간격이 조절됩니다.

예를 들면 30을 입력하면 30분에 한번씩 밥을 주게 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <Servo.h>
 
#define SERVO_OPEN    10     // position of the servo when water is running
#define SERVO_CLOSE   90    // position of the servo when water is blocked
#define FEED_INTERVAL   1   // minutes between feeding time
 
const byte servoPin = 9;      // pin used to command the servo motor
const int waitingTime = FEED_INTERVAL;
 
Servo servo;
 
volatile unsigned long sec;
const unsigned long feedInterval = (unsigned long) FEED_INTERVAL * (unsigned long) 60;  // expressed in seconds
 
/**
   stop the food from flowing
*/
void feederClose() {
  int val = servo.read();
  while (val < SERVO_CLOSE) {
    val += 10;
    servo.write(val);
    delay(20);
  }
}
 
/**
   release a ration of food
*/
void feederOpen() {
  int val = servo.read();
  while (val > SERVO_OPEN) {
    val -= 20;
    servo.write(val);
    delay(20);
  }
}
 
// Interrupt is called once a millisecond,
SIGNAL(TIMER0_COMPA_vect)
{
  if (millis() % 1000 == 0) { // if a second has passed
    sec++;  // increment the seconds counter
    Serial.print("Second: ");
    Serial.print(sec);
    Serial.print(" of ");
    Serial.println(feedInterval);
  }
}
 
void setup() {
  Serial.begin(9600);
  OCR0A = 0xAF// set the timer interrupt
  TIMSK0 |= _BV(OCIE0A);
  servo.attach(servoPin);
  feederClose();
  Serial.println("System initialized");
}
 
void loop() {
  Serial.println("Waiting...");
  sec = 0;  // reset the counter
  while (feedInterval > sec);   // wait until the time interval is elapsed
  Serial.println("Feeding the pet :)");
  feederOpen();
  delay(150);
  feederClose();
}
cs



3. 결과물

밥을 잘 주고 있는 모습이네요!

아주 간단한 mini project 였습니다.


댓글 0

MADE BY

조혜인

arduino, processing, rhino, sketchup, 아두이노, 에프터이펙트, 포토샵, 프리미어
애완견 사료 주기현재글