습도경보기 [atmega128, dcmotor, lcd, led, 부저, uart(유아트),습도센서]
닫기
  • 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
해당 자료는 10페이지 까지만 미리보기를 제공합니다.
10페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

0를 이용하여 초를 1씩 더해주는 동작을 하고 초가 증가할 때마다 시간을 LCD에 표시 하도록 하게 하였다. 그리고 나서의 문제는 LCD로 시간을 표시하긴 하였는데 1초가 지나는 그 오차를 어떻게 줄이느냐 하는 것이었다. 우리가 사용하는 MCU는 11059200Hz 이어서 16Mhz 인 것보다 시간을 맞추기가 엄청 까다로웠다. 또한 인터럽트가 108번이 돌면 1초라고 계산을 하고나서 시계를 동작시켰는데 오차가 계산한 것 보다 차이가 더 생겼다. 그래서 무한루프안의 LCD를 표시할 때 DDRAM에 주소를 입력하는 과정에서 딜레이가 더 발생하여 오차가 커진것 이라고 생각하여 인터럽트가 104번 실행되면 1초가 증가하도록 만들어 오차를 줄였다. 이렇게 하여 실제 시간과 비교하여 12시간이 지나면 6~7초 정도의 차이나는 시계를 구현 하였다.
ADC와 같은 경우에는 우리가 실험 때는 해보지 않은 부분이었기 때문에 첫 진행시 어려움이 많았지만, Atmega128의 회로도를 보면서 하나하나 연구를 하여서 ADC컨버터의 입출력 포트를 알아내었다. 그러나 외부 회로를 사용하여 ADC에 입력값을 주어야 했으므로 외부회로의 구현이 또 하나의 난관이었다.
일단 디지털 습도계에서 가장 중요한 습도 센서의 소자를 결정해야 했다. 여러 서적과 인터넷을 통한 검색으로 확인해본 결과, 808H5V5란 소자가 상대습도를 나타내는데 적합하다는 걸 알아내었고, 이 소자를 습도 센서로 사용하게 되었다. 우리가 사용하는 AVR은 ADC를 통해서 들어온 아날로그 신호를 10bit의 디지털 신호로 전환할 수 있는데, 10bit이기 때문에 들어온 회로를 1024등분하여 이용하였다. 습도 계산 함수에서 result에을 기준전압5V를 곱해주고 그것을 1024등분을 한다. 그리고 습도계가 0.8~3.9V 출력 값을 내놓기 때문에 이를 고려해야 했다. 따라서 나온 값에 0.8을 빼주고 그리고 우리 습도센서는 0~100%까지 나타 낼 수 있기 때문에 최대치 100을 곱해준다. 그리고 출력값의 차이값인 3.1을 나눠주면 상대습도값이 나온다. 우리는 실제 코드에서 사용할 때 10을 곱해줘 습도치*10값을 코드에서 사용했다
지금 이 상태로도 충분히 습도계의 역할을 할 수 있지만, 조금 더 쓸모가 많은 습도계로 만들기 위해서 습도 25%를 기점으로 5%가 올라갈 때 마다 LED가 순차적으로 점등되는 일종의 게이지를 만들게 되었다. 그리고 더불어 45%가 넘어가게 되면 부저 소리를 울리게 만들어서 더욱 다양한 기능을 구현하게 하였다.
ADC와 시계를 연동하는 것은 어렵지 않았으나 그것을 LCD에 표시해 나가는 방법이 매우 까다로웠던 것 같다. 코드를 모두 완성하고 동작을 시켜보니 처음에 소개하는 부분에서부터 LCD가 이상하게 문자가 겹쳐 나오고 글씨가 여기저기로 옮겨 다니며 찍혀서 당황하였다. 2시간정도의 시간을 들여서 해결한 방법이 타이머를 소개부분이 끝난 후 가동 시키는 것이었다. 그리고 45%가 넘어가면 sooo humid *-_-*글자를 출력하였다.
8. Conclusion
한 학기동안 여러 실험을 통해 많은 것을 배울 수 있었다. 실험의 초반에는 논리회로를 다루었으나, 우리가 마지막에 배운 것은 AVR이었고, 이를 중점에 두고 텀 프로젝트를 진행하였다.
이번 프로젝트를 진행하면서 가장 힘들었던 점 을 짚고 넘어가자면 하나는 일정 지정한 습도값 보다 초과되었을 때 모터를 돌리게 되는데 그 제어하는 부분이 가장 힘들었다. 어떤 문제점이었냐면 일단 습도가 초과 되어 모터가 저절로 돌아가게 되는데 처음 우리가 원했던 것은 모터를 정지시키는 방법이 UART를 이용하여 정지시키는 것과 나머지 방법은 기준 습도값 보다 낮아지면 저절로 모터가 정지되는 것 이었다. 그런데 각 조원들이 만든 파트를 합치는데 모터제어부분에서 문제점이 발생했다. UART로 정지를 시키는 것은 가능한데 습도가 낮아지면 저절로 꺼지는 것이 안됐다. 그 이유를 무한루프 부분에서 잘못됐다고 생각하고는 그 부분만 2시간 정도 연구를 하다가 문득 RESULT값이 갱신이 안된다는 것을 발견하였다. 그래서 그것을 해결하는 방법으로 포인터를 이용하면 문제가 처리 될 것이라고 생각하고는 포인터를 열심히 공부하고는 컴파일을 해주었지만 여전히 문제는 해결되지 않았다. 그래서 조원들이 결론이 내린 것은 포인터를 주더라도 C언어는 순차적 흐름이라 무한루프가 돌아갈때는 포인터로 지정해주더라도 소용없다는 것으로 결론이 내렸다. 그래서 또 고민을 하다가 BREAK 구문을 부분을 추가 하여 하이퍼터미널에서 e버튼을 누르면 break로 인해 구문을 빠져나가서 다시 처음 상태로 돌아가게 된다. 그 다음으로 우리가 텀 프로젝트로 구현하고자하였던 것은 디지털 습도계였다. 하지만 디지털 습도계를 구현한 다음 다른 여러 기능을 추가하는 것이 좋을 것 같아서, 하나씩 기능을 연구하고 추가해나갔다. 가장 먼저 LCD의 윗줄에 시계를 표시하는 것이었고, 그 밑줄에 습도를 표시를 하였다. 습도와 시계를 LCD에 한 번에 표시하는 것이 처음에는 잘 이해가 안 되어서 시행착오를 거쳤지만, 무난히 해결해내었다. 하지만 좀 더 습도계와 연관성이 있는 기능을 구현을 해야겠다고 생각을 하였고, LED를 이용한 게이지를 생각하게 되었다. 상온이라고 할 수 있는 25%미만에서는 LED가 제일 왼쪽 편의 한쪽만 점등이 되지만 5%가 올라갈 때마다 게이지가 상승하듯이 차례로 LED에 점등이 되도록 설계를 하였다. LED에 점등이 다 되는 45% 이후에는 부저를 울리면서 LCD에 “Sooo Humid *-_-*”라고 표시되게 하여 습도경보기로서의 기능을 부가하게 되었다. 준비 기간에 많은 어려움이 있었지만, 열심히 하고자하는 의지와 노력으로 잘 극복할 수 있었던 것 같다. 이제 텀 프로젝트를 통해 한 학기의 실험이 마무리가 되었고, 이번 텀 프로젝트를 통해 전자공학을 배우는 학생으로서 전자공학의 지식을 바탕으로 만드는 것의 즐거움을 깨달을 수 있었던 것 같다. 앞으로도 열심히 배워나가겠다. 마지막으로 한 학기 동안 교수님, 조교님 모두 정말 수고가 많으셨습니다.
9.References
습도센서
DC모터
모터 모듈

키워드

atmega128,   dcmotor,   uart,   습도센서,   lcd,   led,   timer
  • 가격5,000
  • 페이지수49페이지
  • 등록일2009.05.11
  • 저작시기2008.12
  • 파일형식한글(hwp)
  • 자료번호#534601
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니