[DIY 스마트팜] PLC와 Python으로 만드는 스펀지 포트 기반 자동 육묘 시스템 아이디어
이번 글에서는 PLC 엔지니어의 관점에서 “공장형 스마트팜의 초기 육묘 시스템”을 어떻게 가성비 있게 구현할 수 있는지 정리해 보겠습니다.
특히 이번 시스템은:
스펀지 포트 기반 육묘
저면급수
자동 배출
약한 환기(Flicker Ventilation)
구조를 중심으로 설명합니다.
복잡한 AI보다:
“제어하기 쉬운 물리 시스템”
을 먼저 만드는 방향입니다.
1. 왜 스펀지 포트를 사용하는가?
공장형 스마트팜 영상을 보면 씨앗을 작은 스펀지에 꽂아 발아시키는 경우가 많습니다.
이유는 단순합니다.
자동화에 매우 유리하기 때문입니다.
일반 상토의 문제점
상토는 자연 재료라서 편차가 큽니다.
예를 들어:
함수율 편차
밀도 편차
배수 편차
공극률 편차
가 존재합니다.
즉:
같은 시간 동안 물을 공급해도 결과가 달라질 수 있습니다.
PLC 제어 입장에서는 매우 까다로운 조건입니다.
반면 스펀지 포트는?
스펀지 포트는:
크기 일정
공극률 일정
함수율 패턴 일정
배수 특성 일정
합니다.
즉:
“반복성이 매우 높다”
는 강력한 장점이 있습니다.
예를 들어:
저면급수 30초
→ 거의 일정한 함수율
이라는 재현성이 가능합니다.
이건 PLC 타이머 제어와 궁합이 매우 좋습니다.
2. 시스템 구성
이번 시스템은 다음 구조를 사용합니다.
센서 구성
온습도 센서
SHT30
SHT31
SHT35
역할:
온도 측정
상대습도 측정
VPD 계산용 데이터 제공
지온 센서
DS18B20 방수형
역할:
스펀지 트레이 온도 측정
히터 제어
발아 단계에서는 기온보다 지온 안정성이 훨씬 중요합니다.
수위 센서
역할:
저면급수 수위 감지
펌프 공회전 방지
3. 액추에이터 구성
저면급수 펌프
추천:
DC 24V 다이아프램 펌프
또는:
소형 수중 펌프
드레인 밸브
역할:
급수 후 자동 배출
과습 방지
환기 팬
중요 포인트:
강한 환기가 아니라:
“약한 지속 환기”
가 중요합니다.
히터 매트
발아 안정성을 크게 올려주는 핵심 장치입니다.
특히 겨울철에는 매우 중요합니다.
4. 추천 제어 구조
이번 시스템에서 가장 추천하는 구조는:
스펀지 포트
저면급수
자동 배출
약한 환기
조합입니다.
이유는:
가성비
관리 용이성
곰팡이 억제
제어 단순성
의 밸런스가 가장 좋기 때문입니다.
5. 왜 자동 배출이 중요한가?
초보자들이 가장 많이 하는 실수는:
“항상 젖어 있게 유지하는 것”
입니다.
하지만 발아 시스템에서 가장 중요한 건:
“물 + 산소”
입니다.
자동 배출의 핵심
배출 과정에서:
물이 빠져나가고
공기가 다시 들어옵니다.
즉:
함수율 유지
산소 공급
곰팡이 억제
를 동시에 달성할 수 있습니다.
6. 권장 급수 시퀀스
예시:
저면급수 시작
30초 급수
2분 유지
자동 배출
대기
스펀지 포트는 규격화된 배지이기 때문에:
단순 타이머 제어만으로도 반복성이 매우 좋습니다.
7. 환경 모델: VPD (Vapor Pressure Deficit)
단순 습도(%)는 식물 상태를 정확히 설명하지 못합니다.
식물은 실제로:
“얼마나 수분을 증산할 수 있는 환경인가”
에 반응합니다.
이 값을 수치화한 것이 VPD(포차)입니다.
8. 왜 VPD가 중요한가?
VPD가 너무 낮으면
과습
입고병
곰팡이
산소 부족
문제가 발생합니다.
VPD가 너무 높으면
발아 건조
유묘 스트레스
성장 지연
문제가 발생합니다.
발아 단계 권장 범위
보통:
0.4 ~ 0.8 kPa
범위를 많이 사용합니다.
9. VPD 계산 모델
포화수증기압(SVP):
SVP = 0.6108 × exp((17.27 × T) / (T + 237.3))
실제수증기압(AVP):
AVP = SVP × (RH / 100)
최종 VPD:
VPD = SVP - AVP
10. Python VPD 계산 샘플 코드
import math
def calculate_vpd(temp_c, humidity):
svp = 0.6108 * math.exp((17.27 * temp_c) / (temp_c + 237.3))
avp = svp * (humidity / 100.0)
vpd = svp - avp
return round(vpd, 3)
temp = 24.0
humidity = 80.0
vpd = calculate_vpd(temp, humidity)
print(f"VPD: {vpd} kPa")
11. 적산온도(GDD) 모델
발아는 단순히:
“며칠이 지났는가”
보다:
“얼마나 유효 온도를 누적했는가”
에 더 크게 영향을 받습니다.
12. 적산온도 계산식
GDD = Σ(Tavg - Tbase)
예시:
평균 온도 = 22도
기준 온도 = 10도
라면 하루 GDD는:
12가 누적됩니다.
13. Python 적산온도 계산 코드
temps = [22, 23, 21, 24, 22]
base_temp = 10
gdd_total = 0
for temp in temps:
gdd = temp - base_temp
if gdd < 0:
gdd = 0
gdd_total += gdd
print("누적 GDD:", gdd_total)
14. PLC 제어 로직 예시
예시 시퀀스:
6시간마다 급수
30초 펌프 ON
2분 유지
드레인 밸브 OPEN
30초 배출
환기 팬 1분 ON
이 정도만 구현해도 꽤 안정적인 육묘 환경을 만들 수 있습니다.
15. 플리커(Flicker) 환기 전략
발아 시스템에서는 강한 환기보다:
“약한 지속 환기”
가 중요합니다.
왜 환기가 필요한가?
습도 센서 값이 정상이어도 공기가 정체되면:
곰팡이
결로
입고병
문제가 발생합니다.
추천 로직
예시:
10분마다 1분 환기
또는:
30분마다 강제 공기 순환
같은 구조를 많이 사용합니다.
16. 안전 로직 (Interlock)
물과 전기를 함께 사용하는 시스템에서는 인터록이 매우 중요합니다.
최대 펌프 가동 시간 제한
예시:
펌프 60초 이상 동작 시 강제 차단
수위 센서 연동
수조 물 부족 시:
펌프 정지
경보 출력
야간 급수 제한
야간에는 증산량이 감소하므로:
급수량 감소
환기 증가
구조가 과습 방지에 유리합니다.
17. 데이터 시각화
Python으로 수집한 데이터는:
Grafana
SQLite
PostgreSQL
InfluxDB
등과 연동할 수 있습니다.
특히 다음 데이터를 함께 보면 매우 유용합니다.
VPD 변화
적산온도 누적량
급수 주기
배출 횟수
발아 속도
환기 패턴
이 데이터는 이후:
성장 예측
환경 최적화
자동화 고도화
로 확장 가능한 강력한 자산이 됩니다.
댓글
댓글 쓰기