아두이노2016. 12. 28. 15:27

http://deneb21.tistory.com/465 글에서 ATtiny85를 이용해서 자동으로 금붕어의 사료를 줄 수 있는 장치를 만들어 보았다. 이번에는 아두이노 버전으로 만들어 보았다. 아두이노는 프로 미니 5V 16Mhz 제품을 이용하였다. 아두이노 버전이라고 특별히 다른 것은 없다. 핀의 연결이 다르고 소스 상에서 SoftwareServo 라이브러리를 이용했다면 이를 아두이노의 기본 라이브러리인 Servo 라이브러리를 이용한 것이 다르다. 그 이외에 약간의 변경사항이 있다. 

동작은 12시간(조절가능)마다 사료를 주게 되어 있으며 1분 마다 작동확인을 위한 LED가 깜빡이게 하였고 사료를 주기 전에 피에조 부저가 3번 Beep 음을 내도록 만들었다.

거의 대부분의 부분은 ATtiny 버전과 다름이 없으니 이 글에서는 달라진 연결과 소스에 대해서만 다루겠다. 다른 부분은 ATtiny 버전의 글을 참고하면 된다.


■ 연결

Fish_Feeder.fzz



■ 소스

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
#include <Servo.h> 
 
Servo myservo;  //create servo object to control a servo 
 
int pos = 0;    //variable to store the servo position 
//int term = 960; // 16hours
//int term = 1440; // 24hours
int term = 720//Feeding term
int servo = 9;  //Servo Pin
int led = 12;  //LED Pin
int speaker = 11//piezo speaker Pin
 
void setup(){
  Serial.begin(9600);
  Serial.println("Arduino auto Fish Feeder");
  Serial.println("http://deneb21.tistory.com");
  pinMode(led, OUTPUT);
  pinMode(speaker, OUTPUT);
}
 
void loop(){
    for(int i=1;i<=term;i++)
    {
      delay(59500);  // 59 sec
      digitalWrite(led,HIGH);  //working LED
      delay(500);  // 1 sec , 59+1 = 1 minute
      digitalWrite(led,LOW);
    }
    Serial.println("Feeding Fish Now");
    feedFish();
}
 
// FEED THE FISH...
void feedFish()
{
  myservo.attach(servo);  // attaches the servo on pin9 to the servo object 
  myservo.write(0);
  delay(15);
  for(int i=0;i<3;i++)  //feeding alarm
  {
    tone(speaker,4000,1000);
    delay(2000);
  }
  
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  }
  myservo.detach();
}
cs

아두이노 프로 미니는 자체 시리얼 통신칩이 없으므로 FTDI 모듈을 통해서 소스를 업로드 해야 한다. 방법은 다음의 URL 에서 확인이 가능하다. http://deneb21.tistory.com/393


반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요