금붕어를 키우기 시작하면서 까먹지 않고 하루에 아침 저녁으로 물고기 밥을 챙겨주는 것도 일과 중의 하나가 되었다. 그래서 자동으로 물고기 밥을 주는 장치를 유튜브에 검색해 봤더니 다양한 장치가 나온다. 그 중에서 가장 간단하고 괜찮을 것으로 생각되는 것을 찾았다. 바로 서보모터에 물고기 사료통을 달아서 정해진 시간에 사료통이 기울어지고 사료가 어항으로 떨어져서 물고기 밥을 자동으로 줄 수 있게 만든 장치였다.
바로 위의 장치이다. 아두이노를 이용해서 만들었다.
나는 이런 비슷한 장치를 상대적으로 저렴하고 간단하게 만들 수 있는 ATtiny 칩으로 만들어 보고자 한다. 지난 두 번의 포스팅(http://deneb21.tistory.com/455, http://deneb21.tistory.com/462)에서 아두이노를 ISP로 이용해서 ATtiny칩에 프로그램을 심는 과정과 심을 수 있는 보드를 만들어 보았으므로 바로 프로그래밍이 가능한 상태이다. 위의 동영상에서 보듯이 물고기 자동 밥주기 장치의 제일 중요한 부분은 서보모터의 제어이다. 서보모터의 제어에 대해서 알아보자.
먼저 아두이노 IDE 에 기본적으로 포함된 Servo 라이브러리를 이용해서 제어해 보려고 했으나 에러가 발생했다. 그래서 구글링을 해 보니 ATtiny 에서 사용할 수 있는 라이브러리가 있었다. SoftwareServo 라는 라이브러리 이다.
심플하다. 칩 하나와 서보 뿐이다. 잘 작동한다. 아두이노를 이런 간단한 동작의 구현에 쓰는 것은 낭비일 것이다. 일단 ATtiny 에서 서보 다루는 방법을 알았으니 나머지 자잘한 부분만 해결하면 물고기 밥주는 장치를 만들 수 있을 것 같다. 예를 들어 물고기 사료량을 조절할 수 있도록 한다거나 밥 주는 타이머를 어떻게 구현할지 등에 대해서 좀 더 생각해 봐야겠다.
번외로 가변저항에 의해서 서보를 움직이는 자료도 있어서 실행해 보았다. 아두이노에서의 방법과 다르지 않다. analogRead 를 통해서 가변저항의 변화되는 값을 읽은 다음 서보에 analogWrite 로 값에 맞게 움직이게 하는 것이다.
■ 소스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int analogPin =3; // potentiometer connected to adc 3
int val =0; // variable to store the read value
int aref =0;
int servoPin =0; //Steppermotor pin connected to pin 0
void setup()
{
pinMode(servoPin, OUTPUT); // sets the pin as output
}
void loop()
{
val = analogRead(analogPin); // read the input pin