시스템구성

 

 

 

 

 

 

석부작 관수용으로는 다음과 같이 2단 테이블에 석부작을 배치하고 미스트 노즐을 이용해서 물은 분사시키는 방식으로 구성하였다.

 

성공적으로 가동된다.

 

 

주말농장용으로는 스프링쿨러를 이용해서 많은 양의 물을 뿌려주는 방식으로 구현하였다.

 

 

 

그런데 설치 며칠만에 사고가 터졌다.  지정된 시간을 초과한 후에도 계속 물이 나와 물바다를 만들어 버렸다는 것이다.  주말농장의 있는 지역의 수도가 다른 곳보다 수압이 2~3배 쎈 곳이어서 솔레노이드 밸브가 열릴 때 손상되었는지 한번 열린 후 닫혀지지 않았던 것이다. 솔레노이드 밸브를 분해하여 고무 패킹 부분을 수리해도 한번 이상이 발생한 밸브에서는 또다시 똑같은 문제가 발생한다.

 

석부작 관수용 시스템은 도시지역이고 수압이 높지 않아서 인지 동일한 솔레노이드 밸브도 아무 이상없이 가동되고 있는데, 수압이 센 지역에서는 솔레노이드 밸브가 견디지 못한다. 다른 방식의 밸브를 찾아 보아야 겠다.     

 

 

자동으로 Water를 공급해 주는 워터맨을 피지컬 컴퓨팅 실습용으로 두가지 개발해 보았다.

 

지인으로부터의 다음과 같은 요청이 있어 실습용이 아닌 실제 업무환경에서 사용할 수 있는 워터맨 기기를 제작해 보기로 했다.   

 

1) 주말 농장을 운영중인데 일주일은 4일은 지방에 가서 근무해야 해서 일주일 중 4일간은 작물에 물을 줄 수가 없다. 매일 매일 주말농장에 가지 않아도 매일 시간에 맟춰 자동으로 작물에 물을 줄 수 있는 시스템이 필요하다.

 

2)석부작( 목화석 같은 암석 위에 풍란이라는 난초를 키우기 )을 수십개 재배 중인데, 풍란이 마르지 않도록 거의 매일 관수를 해주고 있다. 여름휴가 기간 일주일 정도 집을 비워야 하는데 일주일 정도 물을 주지 않느면 전부 말라 죽어 버릴텐데 고민이다.  매일 자동으로 일정 시각에 일정량의 물을 분사시켜 주는 기능이 필요하다.       

 

 

기능 요건 :

 

1) 화분 몇개 정도가 아닌 다량의 작물에 관수해야 하므로 물통에 담겨진 물을 펌프 가동해서 끌어 올리는 방식이 아니고 수도에 직접 연결해서 사용할 수 있어야 한다.   

 

2) 실내가 아닌 주말농장 야외에 설치해서 운영할 수도 있으므로 비가 와도 회로가 쇼트되지 않도록 방수되는 케이스를 이용해야 한다.

 

3) 사용자가 자동으로 물주는 시각과 물의 공급량을 임의로 지정할 수 있어야 한다. 

 

4) 정해진 시각에 자동으로 관수하는 기능 이외에도 사용자 원하면 수동으로 즉시 관수를 시작하거나 중단시키는 기능이 필요하다.  

 

5) 매일 지정된 시각에 물을 주되 비오는 날 또는 온도가 낮은 날에는 자동으로 물주기를 생략할 수 있어야 한다. (예를 들어 상대 습도를 Check하여 90퍼센트 이상이거나 기온이 10도 이하로 떨어지면 물주기 생략할 수 있도록 사용자가 설정 )

 

 

 

 

 

UI 흐름도

워테맨 자동급수 시스템은 다음과 같은 User Inteface 흐름으로 구성된다.
-파란색 박스모양은 각 단계별 화면에 표시되는 내용이고,
-붉은색 기호는 각각의 화면에서 해당 버튼을 눌렀을 때 연결되어야 하는 화면기능의 표시임

 

 

 

프로그램 코딩 샘플 
 

 


6~18  line:  연결될 부품들에 대한 IO Pin 배정
19~35 line: 프로그램에서 사용할 전역 변수들

 

 


39~47  line:  펌프,LED등을 위한  핀들의 모드설정 및 초기값 지정 
49~56 line: 초기모드 표시(LCD화면에 메세지 표시,LED 점멸)한 후 LCD화면 Clear
5 6line~  : EEPROM에 보관해 놓은 Data가 있을 경우 처리(Data보관시 1번지에 1로 표시해 놓고)
59~61line : 급수간격 Day(10번지),급수간격 Hour(12번지) 값을 읽어 급수간격을 초단위로 계산
67~71line: 대기중 비정상종료 인지 확인하여 복구하기 위한 Data        
*** 메모리 입출력함수 
   EEPROM.read(x) : 메모리 x번지 읽기,    EEPROM.write(x, y); 메모리x번지에 y값으로 쓰기  

 

 

 

77 line:  대기중 비정상 종료된 경우 대기하기 기능으로 이동
78~86 line: 종합상황을 LCD화면에 표시하기 
88 line  :  키패드로 부터 1글자 입력 받기 
89~106 line : 키패드 입력 문자에 따라 해당 기능 수행하기 

 


109 line: 함수 호출 파라메터로 숫자모드인지 문자모드인지 구분을 전달받기 
111 line : 키패드눌림상태 확인하여 읽기  
113~118 line : 문자모드 일경우 입력된 문자가 메뉴선택용 문자인지 확인하여 맞으면  입력확인용
                     비프음 출력하고 복귀 
119~123 line : 숫자모드 일경우 입력된 문자가 숫자인지 확인하여 맞으면  입력확인용 비프음
                  출력하고 복귀  

 

 

130~133 line: LCD에 안내 문구 출력 
135~157 line : 3개 숫자를 입력받아 첫 숫자는 대기일수, 뒤 두자리숫자는 대기시간으로 사용
136 line : 숫자모드로 키패드 입력받기
140, 144 line : 입력되는 숫자 첫번째와 세번째 일때 잘라서 사용하기 
146~155 line: 시간단위가 24를 초과할 경우 다시 입력받기 
159~165 line : 메모리에 보관하고 작업완료 비프음 출력

 

 

169~172 line: LCD에 안내 문구 출력 
174~182 line : 3개 숫자를 입력받아  급수시간으로 사용
175 line : 숫자모드로 키패드 입력받기
179 line : i==2 즉 세번째 숫자가 입력되었을 때 입력된 세문자를 연결하여 숫자로 변환 
183~190 line : 메모리에 보관하고 작업완료 비프음 출력

 

 

 

 

250 line: Ready 상태임을 메모리에 저장
253~256 line : Ready상태에서 비정상종료된 경우 잔여시간을 보돤되었던 시간으로 set
257 ~275 line : Delay타임 입력받기 ( 잔여시간 Counting을 바로 시작하는 것이 아니고 일정시간 이후부터 시작하기 )

 

 

 

 


276 line: 물통에 물이 있는지 확인하는 함수 호출
278 line~  : Ready상태 : 조건을 반복 check하며 급수할 것인지 여부 결정 
279,280 line : 조건 Check하기 위한 온습도 값읽기 
283 ~292  line : 타이머잔여시간이 0이고 온습도 조건이 맞으면 물주기 함수 호출 
293 ~305 line : 잔여시간을 Day-Hour로 변환하여 LCD화면에 표시하기 
306~311 line: 매 10분마다 현재 상태( 잔여시간)을 메모리에 저장해 놓기

 

 


312~322 line: Ready 상태에서 #버튼이 눌러지면 비프음 출력하고 Ready상태 종료하기

 

 

327~332 line: 비프음을 출력하고 펌프가동 함수 호출

 

 

 

336~339  line: LCD에 안내 문구 출력 
342~349  line : 물통에 물이 있는지 확인한 후 펌프에 연결된 릴레이와 급수중 LED 가동
350 ~360 line : 급수잔여 시간을 계산하여 LCD표시하고 종료되면 loop를 빠져나와 복귀 

 

 

378  line: 수위센서 VCC에 전원 공급하기  
380  line: 수위센서 값 읽기 
378  line: 수위센서 VCC에 전원 공급 중단하기  
382~393 line : 저항값이 일정 수치 이상일 경우 물이 없다고 판정하여 비프음 출력 및  물없음LED로 사용자에게 알리고 복귀

 

+ Recent posts