April 28, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[32호]비닐하우스 자동 제설 및 자동 습도 조절장치

ict main2-01

2015 ICT 융합 프로젝트 공모전 참가상

비닐하우스 자동 제설 및 자동 습도 조절장치

글 | 동아대학교 김준호, 김태구, 천현재

심사평 

jk전자 작품의 창의성 면에서 누구나 생각할수 있는 지극히 평범한 아이디어이다. 눈을 쓸어 내리는 방법도 와이퍼를 이용하기 보다는 비닐하우스의 지붕을 이중화 하여 지붕 자체를 개폐하여 눈을 흘러내리도록 하는 방법도 많이 상용화가 되어 있다.

뉴티씨 비닐하우스에 쌓인 눈을 효과적으로 제거할 수 있고, 아무도 생각하지 못한 방법으로 하였기 때문에 창의성 및 완성도에 높은 점수를 주고 싶다. 또한 자동 습도 조절 장치와의 통합을 통해 시스템의 단가를 줄인 것도 하나의 큰 장점이 될 수 있다. 하지만 이런 솔루션을 구축했을 경우 대형화가 걸림돌이다. 스테핑 모터의 경우 토크가 제한되기 때문에, AC모터나 DC기어드 모터 등을 이용한 대형 솔루션으로 방향을 잡고, 이 부분에 대한 향후 업그레이드를 보고서에 설명했다면 어땠을까 하는 생각이 든다.

칩센 비닐하우스 자동제설 및 자동습도조절장치의 자동 제설은 이미 거의 비슷하고 좀 더 효율적으로 적용된 특허가 이미있고, 자동습도조절 장치 또한 이미 많이 보급되어 있는 방식이다. 본제품은 융합이라기보단 이미 있는 특허나 현재 사용중인 제품의 모방이라 볼 수 있어 평가 대상으로 부적합하다고 본다.

위드로봇 저출산 고령화 시대에 농업 경쟁력을 높이기 위하여 농업의 자동화 연구는 최근 많은 관심을 받고 있다. 미니어처에서 가능성을 테스트해 본 것은 좋은 시도이나, 구현한 미니어처가 현장 상황의 핵심 부분을 잘 표현하기는 어려워 보인다. 적설량을 초음파 센서로 계측하는 방법을 시도했는데, 기존에는 어떻게 적설량을 자동으로 계측하고 있는지 조사가 선행되었으면 더 좋은 연구가 되었을 것 같다.

작품 개요

Cap 2015-11-25 10-35-35-755

비닐하우스는 채소, 원예, 과일 등의 작물을 재배하거나 닭, 오리 등 가축을 사육하기 위하여 비닐과 설치대를 이용하여 집처럼 만든 것을 말하는 것으로, 햇빛이 쉽게 유입되고 외기를 차단하도록 설치함으로써 내부를 일정 온도로 유지시킨다.

이 프로젝트는 겨울철 폭설로 인해 비닐하우스 지붕에 쌓이는 눈의 하중에 의해 비닐하우스가 훼손되거나 붕괴되어 경작중인 채소, 원예, 과일 등 작물의 피해와 닭, 오리 등의 가축의 폐사를 미연에 방지하여 농가의 피해를 최소화할 수 있는 폭설대비용 비닐하우스에 관한 것이다.

도심 도로에 눈이 쌓이면, 소금이나 염화칼슘, 혹은 모래 등을 사용하여 제설작업을 한다. 그러나 비닐하우스 지붕 위에 제설제를 매번 뿌릴 수는 없는 일이다. 따라서, 겨울철에 비닐하우스 지붕에 쌓이는 눈에 의해 비닐하우스가 붕괴되는 것을 방지하기 위한 여러 방안이 강구되고 있는 실정이다.

현재 가장 간단하면서 보편적으로 행해지는 방법은 비닐하우스 중앙 부위를 받쳐줄 가볍고 튼튼한 받침대를 미리 준비해두었다가 폭설이 내렸을때 받쳐서 사용하는 방법이다. 그러나 이런 방법으로는 붕괴의 위험이 항상 있어 효과적인 폭설대비를 할 수 없다.

한편 일정한 물리적 방법에 의한 제설 방법들이 연구되고 있다. 예를 들면, 비닐하우스 내에 설치된 보일러의 온수를 이용하여 비닐하우스 지붕에 쌓이는 눈을 녹이는 방법이 있다. 그러나 장시간 눈이 오는 경우에는 많은 양의 온수를 확보할 수 없고, 제설을 위해 사용된 온수가 오히려 비닐하우스 주변에 얼어붙는 문제점이 있다.

그래서 사용 방법으로는 비닐하우스 지붕 위에 쌓인 눈을 스테핑 모터를 이용하여 쓸어내리는 방법이다.

작품 설명

주요 동작

① 제설 시스템 동작 원리
일정량 이상의 눈이 비닐 하우스 지붕 위에 쌓이면 설치된 초음파 센서가 감지하게 된다. ATmega128 모듈은 초음파센서 감지 신호를 받고 스테핑모터로 신호를 보낸다. 스테핑모터는 80° 정 회전 후, 160° 역회전 하여 눈을 제거하고, 다시 80° 정회전하여 원래 위치로 이동한다.

32 김준호03

② 습도조절 시스템 동작 원리
비닐하우스 내에 온·습도 센서가 위치하고 습도를 감지한다. 온·습도 센서의 습도 감지 값이 일정 값 이하로 하강하면, ATmega128 모듈은 워터펌프로 신호를 보낸다. 워터 펌프는 ON상태가 되어 물을 보내고 비닐하우스 내에 설치된 스프링쿨러에 의해 물이 분사되어 습도를 상승시킨다.

32 김준호04

특징(기대효과)

① 폭설이 내렸을 때, 자동으로 제설 와이퍼가 동작하여 비닐하우스 지붕 위의 눈을 쓸어내어 지붕의 붕괴를 막음으로써 폭설 피해 최소화.
② 저 습도시, 자동으로 물이 분사되어 습도를 조절함으로써 비닐하우스의 효율적 운영 가능.

전체 시스템 구성

① 하드웨어 구성

32 김준호05

② 비닐하우스 모형 구성

32 김준호06

③ 동작 시스템 구현
자동 제설장치

32 김준호07

자동 습도 조절 장치

32 김준호08

개발 환경(개발 언어, Tool, 사용시스템 등)

① 언어 : C
② Tool : AVRStudio
③ 사용 칩 : ATmega128

단계별 제작 과정

① 동작 원리 구상

② 하드웨어 설계
- 전자기기 구성 설계 : 기타.

③ 회로도 참고.
- 비닐하우스 모형 기구부 설계

기초설계

32 김준호09

상세설계
비닐하우스 전면도(단위:mm)

32 김준호10
비닐하우스 측면(단위:mm)

32 김준호12

③ 소프트웨어 설계

기타. ② 소스코드 참고.

④ 부품 선정

Cap 2015-11-24 13-26-47-993

⑤ 부품 및 기구부 재료 구매
⑥ 비닐하우스 및 초음파센서 감지 탑 모형 제작
⑦ 각 기기 및 모형 조립

기타(회로도, 소스코드, 참고문헌 등)

① 소스코드

#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include “dht.h”
#include “ATmega128_v20.H”
unsigned int Humi,Temp;
unsigned int Echo_count;
unsigned int sum;
unsigned char pattern1[8] = {0x0C, 0×06, 0×03, 0×09, 0x0C, 0×06, 0×03, 0×09};//스테핑모터 정회전 패턴이다.
unsigned char pattern2[8] = {0×09, 0×03, 0×06, 0x0C, 0×09, 0×03, 0×06, 0x0C};//스테핑모터 역회전 패턴이다.
ISR(INT0_vect)//외부인터럽트 서비스 루틴 함수.
{
Echo_count=TCNT1;// TCNT1을 Echo_count로 변경
}
int8_t dht_getdata(int8_t *temperature, int8_t *humidity)
{
uint8_t bits[5];
uint8_t i,j = 0;
//포트 설정
DHT_PORT |= (1<<DHT_INPUTPIN);
DHT_DDR |= (1<<DHT_INPUTPIN);
//send request
DHT_PORT &= ~(1<<DHT_INPUTPIN); //low
_delay_ms(18);
DHT_PORT |= (1<<DHT_INPUTPIN); //high
DHT_DDR &= ~(1<<DHT_INPUTPIN); //input
_delay_us(40);
if((DHT_PIN & (1<<DHT_INPUTPIN))){
return -1;
}
_delay_us(80);
//check start condition 2
if(!(DHT_PIN & (1<<DHT_INPUTPIN))) {
return -1;
}
_delay_us(80);
//데이터 전송.
uint16_t timeoutcounter = 0;
//5 바이트를 읽는다.
for (j=0; j<5; j++)
{
uint8_t result=0;
//매 비트를 읽는다.
for(i=0; i<8; i++)
{
timeoutcounter = 0;
while(!(DHT_PIN & (1<<DHT_INPUTPIN))) //하이 입력을 기다린다.
{
timeoutcounter++;
if(timeoutcounter > DHT_TIMEOUT){
return -1; }//timeout
}
_delay_us(30);
//만약 30us후에 입력이 하이이면 result를 얻는다.
if(DHT_PIN & (1<<DHT_INPUTPIN)) result |= (1<<(7-i));
timeoutcounter = 0;
while(DHT_PIN & (1<<DHT_INPUTPIN)) //로우 입력을 기다린다.
{
timeoutcounter++;
if(timeoutcounter > DHT_TIMEOUT){
return -1;} //timeout
}
}
bits[j] = result;
}
//체크섬
if((uint8_t)(bits[0] + bits[1] + bits[2] + bits[3]) == bits[4])
{
//온도와 습도를 돌려준다.
*humidity = bits[0];
*temperature = bits[2];
Humi=bits[0];
Temp=bits[2];
return 0;
}
return -1;
Humi=Temp=0;
}
// 온도를 얻는다.
int8_t dht_gettemperature(int8_t *temperature)
{
int8_t humidity = 0;
return dht_getdata(temperature, &humidity);
}
// 습도를 얻는다.
int8_t dht_gethumidity(int8_t *humidity)
{
int8_t temperature = 0;
return dht_getdata(&temperature, humidity);
}
// 온도와 습도를 얻는다.
int8_t dht_gettemperaturehumidity(int8_t *temperature, int8_t *humidity)
{
return dht_getdata(temperature, humidity);
}
// 초음파를 얻는다.
int UltraSonic(char ch){
int range;
switch(ch){
case 0:PORTE|=0×10; // porte=prote or ox10
EIMSK|=0×01; // INT0 허용
break;
default:break;
}
Delay_us(12); // 12us동안 하이 유지
PORTE &= ~0xF0; // 출력을 로우로 만든다.
TCNT1=0;//타이머 0으로 만든다.
EIFR=0;//인터럽드 0으로 만든다.
Delay_ms(50);//INT0 발생
Echo_count -= 1300; //515us 정도 보정
if(Echo_count<180)Echo_count = 180;//하한 제한//180은 대략 3cm
if(Echo_count>36000L)Echo_count = 36000L;//상한 제한 ,Long(32bit)
range=Echo_count/116;//116->cm 단위로 환산
return range;
}
int main()
{
MCU_initialize();// MCU 초기화
LCD_initialize();// LCD 초기화
LCD_string(0×80,” 06-1Group”);//상위 값 지정
LCD_string(0xC0,”Smart House”);//하위 값 지정
TCCR1A = 0×00;//타이머/카운터1A 제어 레지스터 설정
TCCR1B = 0×02;//타이머/카운터1B 제어 레지스터 설정
TCCR1C = 0×00;//타이머/카운터1C 제어 레지스터 설정
TCNT1H = 0×00;//TCNT1 상위비트 초기화
TCNT1L = 0X00;//TCNT1 하위비트 초기화
//하강 에지일 때 인터럽트 발생.
EICRB = 0×88;
DDRD |= 0×10;
sei();//전역 인터럽트 허용
Delay_ms(3000);
int i=0;
int k;
while(1)
{
LCD_string(0×80,” Ultra :”);
LCD_command(0×80+10);
LCD_4d(UltraSonic(0));
LCD_string(0×80+14,”cm”);
if(UltraSonic(0) <=17)//초음파 거리가 17이하일 시 모터 작동.
{
for(k=0;k<45;k++)//81도 정회전
{
_delay_ms(35);
if(++i==8) i=0;
PORTE = pattern1[i];
}
for(k=0;k<90;k++)//162도 역회전
{
_delay_ms(35);
if(++i==8) i=0;
PORTE = pattern2[i];
}
for(k=0;k<45;k++)//81도 정회전(원위치)
{
_delay_ms(35);
if(++i==8) i=0;
PORTE = pattern1[i];
}
}
_delay_ms(500);
dht_getdata(Humi,Temp);
LCD_string(0xC0,”Humidity :”);
LCD_command(0xC0+10);
LCD_4d(Humi);
LCD_string(0xC0+14,”%”);
if(Humi<45)//습도가 45미만일 시 펌프 작동.
{
PORTD |= 0×10;
}
else
{
PORTD &=~ 0×10;
}
}
return 0;
}

② 참고문헌
· Takashi Kenjo, Akira Sugawara, “스테핑 모터&마이컴 제어”, 일진사
· 정용욱, 정구섭 저, “센서 엑츄에이터 공학”, GS인터비전
· http://www.devicemart.co.kr
· http://www.micropik.com/PDF/dht11.pdf

③ 회로도

32 김준호13

Leave A Comment

*