목차
1. 서론
1.1 작품 주제
1.2 작품 구상 배경 및 동기
1.3 작품 구상 목표
1.4 개요
2. 본론
2.1 각 PART 별 구성
2.2 Main Board
2.3 기타
2.4 프로그램 코드
3. 결론
3.1 한계점
3.2 개선점
3.3 졸업 작품 후기
1.1 작품 주제
1.2 작품 구상 배경 및 동기
1.3 작품 구상 목표
1.4 개요
2. 본론
2.1 각 PART 별 구성
2.2 Main Board
2.3 기타
2.4 프로그램 코드
3. 결론
3.1 한계점
3.2 개선점
3.3 졸업 작품 후기
본문내용
+)
{
PlaceNum = k-i-1;
for ( j=0, TenTimes=1; j < PlaceNum ; j++)
{
TenTimes = TenTimes * 10;
}
TempNum = TempNum + KeyInput[i] * TenTimes;
}
if ( KeyInput[0] == 1 )
{
InputFeedTime = TempNum;
}
if ( KeyInput[0] == 2 )
{
InputAirTime = TempNum;
}
break;
}
else
{
/* Add display "Input Error" message on LCD */
k=0;
}
}
}
}
}
}
#endif // #if 1
void main(void)
{
uint8_t input = 0x00;
uint8_t output = 0xff;
int j,i,count; // BUGS : MOVE MOVE
/* Default Value */
InputFeedTime = 3;
InputAirTime = 6;
TimesOverFlow = 0;
FeedingStart = 1;
FirstDutyTime = 1;
SecondDutyTime = 1;
/* Initialize Ports */
DDRA = output;// LCD
PORTA = 0x00;
DDRB = output;// Motor (PORTB 0bit) + Oxygen generator ( PORTB 1bit )
PORTB = 0x00;
DDRC = output;// LCD
PORTC = 0x00;
DDRD = input;// Tempeature sensor (PORTD 0bit and 1bit) - INT0 and INT1
DDRE = input; // Keypad
/* initialize External Signal interrupt */
InitExternalInterrupt();
/* Initialize Timer0, Timer2 funtions */
TCCR0 = 0x05;// Adjust Timer Scale -> clk/32
TCNT0 = 0xfc; // Timer Starts to counter from 254, it prevents making Assembly language problem.
TCCR2 = 0x05; // Adjust Timer Sclae -> clk/1024
TCNT2 = 0xfc;
TIMSK = 0x40; // Enable Timer/Couner0 Overflow Interrupt Enable
// Global enable interrupts
#asm("sei")
// LCD module initialization
lcd_init(16);
// After LCD initialize, Display Some words...
lcd_gotoxy(0,0);
lcd_putsf("**OH DONG HOON**");
delay_ms(100);
lcd_gotoxy(0,1);
lcd_putsf("AUTO FISH BASIN*");
delay_ms(100);
while (1)
{
/* 온도를 LCD에 표시 */
DisplayTemperature();
/* 일정 온도 범위를 넘어서면 온도 제어를 합니다. */
if(Temperature < 10)
PORTB |= 0x04;// 히터를 켭니다.
else if(Temperature > 20)
PORTB |= 0x08;// 쿨러를 켭니다.
else if((Temperature >= 10) && (Temperature <= 20))
PORTB &= 0xF3;// 히터랑 쿨러 모두다 끕니다.
/* Feeding Mode 실행 */
if ( FeedingStart )
{
lcd_gotoxy(0,0);
lcd_putsf("-- FEEDING --");
/* Making 20 Pulse for motor */
for (j=0; j<=20; j++)
{
PORTB |= 0x01; /* output 1 to port1.0 */
delay_ms(2); /* 1mSec delay*/
PORTB &= 0xfe; /* output 0 to port1.0*/
delay_ms(4); /* 4mSec delay*/
}
FeedingStart =0; // ---- 0 -----
}
};
}
3. 결론
3.1 한계점
사전에 확실한 조사 없이 용존 산소량 센서를 사용하려 했다가 고가인 사실에 전면 백지화 했던점
시간과 노력 부족으로 충분히 구현할 수 있었다고 생각했었던 조도센서부의 백지화
발열부, 냉각부, 산소 공급기 제어의 실제 구현 포기
3.2 개선점
좀 더 실력과 경험이 쌓인다면 구현하지 못했던 발열부와 냉각부, 산소공급기 부분에 대한 실제 구현도 해보았으면 좋겠다.
3.3 졸업 작품 후기
이번 졸업 작품을 하게 되면서 많은 것을 배우고 공부할 수 있게 되었다. 특히 AVR ATmega128이란 MCU에 대해 많은 부분에 대해 공부를 할 수 있었고 실제로 하나하나 구현해 나가보면서 재미와 보람을 느낄 수 있었다. 하드웨어의 대표적인 분야인 센서와 모터제어를 다루면서 어려운 점도 많았지만 그만큼 보람도 많았다. 특히 스텝핑 모터에 대한 두루뭉실한 개념이 그나마 가볍게라도 알게 되었다. 비록 제일 간단한 클럭 신호 제어를 통한 각 제어였지만 실제로 모터가 돌아갈 때 보람도 있고 재미있었다. 역시나 어려웠던 점은 졸작 시작시에 너무 큰 목표를 잡았던 것이 화근이 되었던 것 같았다. 막연히 이런 방법을 쓰면 되겠지 하고 생각했던 것과 실제로 구현하려고 했을 때의 접한 막막함이란...시간이 지날 수록 경험도 생기고 노하우도 생겼지만 정작 중요한 것은 하나하나 테스트를 통해 확장해나가는 자세로 임하는 것이 좋다는 것을 느꼈다. 한번에 무리하게 도전하다 막혀버리면 흥미를 잃기 십상이었다. 팀원도 없이 혼자 시작해서 늘 걱정만 많았었는데 그 동안 주위 선배나 지인들에게 이런저런 도움도 많이 받았던 것 같다. 특히 소프트웨어 부분이 취약했는데 동기들의 조언으로 많은 부분을 배우게 된 것 같다. 이 자리를 빌어 다시 한번 많은 조언을 해주신 선배, 동기, 후배님들에게 감사한다는 말을 전하고 싶다.
{
PlaceNum = k-i-1;
for ( j=0, TenTimes=1; j < PlaceNum ; j++)
{
TenTimes = TenTimes * 10;
}
TempNum = TempNum + KeyInput[i] * TenTimes;
}
if ( KeyInput[0] == 1 )
{
InputFeedTime = TempNum;
}
if ( KeyInput[0] == 2 )
{
InputAirTime = TempNum;
}
break;
}
else
{
/* Add display "Input Error" message on LCD */
k=0;
}
}
}
}
}
}
#endif // #if 1
void main(void)
{
uint8_t input = 0x00;
uint8_t output = 0xff;
int j,i,count; // BUGS : MOVE MOVE
/* Default Value */
InputFeedTime = 3;
InputAirTime = 6;
TimesOverFlow = 0;
FeedingStart = 1;
FirstDutyTime = 1;
SecondDutyTime = 1;
/* Initialize Ports */
DDRA = output;// LCD
PORTA = 0x00;
DDRB = output;// Motor (PORTB 0bit) + Oxygen generator ( PORTB 1bit )
PORTB = 0x00;
DDRC = output;// LCD
PORTC = 0x00;
DDRD = input;// Tempeature sensor (PORTD 0bit and 1bit) - INT0 and INT1
DDRE = input; // Keypad
/* initialize External Signal interrupt */
InitExternalInterrupt();
/* Initialize Timer0, Timer2 funtions */
TCCR0 = 0x05;// Adjust Timer Scale -> clk/32
TCNT0 = 0xfc; // Timer Starts to counter from 254, it prevents making Assembly language problem.
TCCR2 = 0x05; // Adjust Timer Sclae -> clk/1024
TCNT2 = 0xfc;
TIMSK = 0x40; // Enable Timer/Couner0 Overflow Interrupt Enable
// Global enable interrupts
#asm("sei")
// LCD module initialization
lcd_init(16);
// After LCD initialize, Display Some words...
lcd_gotoxy(0,0);
lcd_putsf("**OH DONG HOON**");
delay_ms(100);
lcd_gotoxy(0,1);
lcd_putsf("AUTO FISH BASIN*");
delay_ms(100);
while (1)
{
/* 온도를 LCD에 표시 */
DisplayTemperature();
/* 일정 온도 범위를 넘어서면 온도 제어를 합니다. */
if(Temperature < 10)
PORTB |= 0x04;// 히터를 켭니다.
else if(Temperature > 20)
PORTB |= 0x08;// 쿨러를 켭니다.
else if((Temperature >= 10) && (Temperature <= 20))
PORTB &= 0xF3;// 히터랑 쿨러 모두다 끕니다.
/* Feeding Mode 실행 */
if ( FeedingStart )
{
lcd_gotoxy(0,0);
lcd_putsf("-- FEEDING --");
/* Making 20 Pulse for motor */
for (j=0; j<=20; j++)
{
PORTB |= 0x01; /* output 1 to port1.0 */
delay_ms(2); /* 1mSec delay*/
PORTB &= 0xfe; /* output 0 to port1.0*/
delay_ms(4); /* 4mSec delay*/
}
FeedingStart =0; // ---- 0 -----
}
};
}
3. 결론
3.1 한계점
사전에 확실한 조사 없이 용존 산소량 센서를 사용하려 했다가 고가인 사실에 전면 백지화 했던점
시간과 노력 부족으로 충분히 구현할 수 있었다고 생각했었던 조도센서부의 백지화
발열부, 냉각부, 산소 공급기 제어의 실제 구현 포기
3.2 개선점
좀 더 실력과 경험이 쌓인다면 구현하지 못했던 발열부와 냉각부, 산소공급기 부분에 대한 실제 구현도 해보았으면 좋겠다.
3.3 졸업 작품 후기
이번 졸업 작품을 하게 되면서 많은 것을 배우고 공부할 수 있게 되었다. 특히 AVR ATmega128이란 MCU에 대해 많은 부분에 대해 공부를 할 수 있었고 실제로 하나하나 구현해 나가보면서 재미와 보람을 느낄 수 있었다. 하드웨어의 대표적인 분야인 센서와 모터제어를 다루면서 어려운 점도 많았지만 그만큼 보람도 많았다. 특히 스텝핑 모터에 대한 두루뭉실한 개념이 그나마 가볍게라도 알게 되었다. 비록 제일 간단한 클럭 신호 제어를 통한 각 제어였지만 실제로 모터가 돌아갈 때 보람도 있고 재미있었다. 역시나 어려웠던 점은 졸작 시작시에 너무 큰 목표를 잡았던 것이 화근이 되었던 것 같았다. 막연히 이런 방법을 쓰면 되겠지 하고 생각했던 것과 실제로 구현하려고 했을 때의 접한 막막함이란...시간이 지날 수록 경험도 생기고 노하우도 생겼지만 정작 중요한 것은 하나하나 테스트를 통해 확장해나가는 자세로 임하는 것이 좋다는 것을 느꼈다. 한번에 무리하게 도전하다 막혀버리면 흥미를 잃기 십상이었다. 팀원도 없이 혼자 시작해서 늘 걱정만 많았었는데 그 동안 주위 선배나 지인들에게 이런저런 도움도 많이 받았던 것 같다. 특히 소프트웨어 부분이 취약했는데 동기들의 조언으로 많은 부분을 배우게 된 것 같다. 이 자리를 빌어 다시 한번 많은 조언을 해주신 선배, 동기, 후배님들에게 감사한다는 말을 전하고 싶다.