[DIY 스마트팜] ESS 없이 만드는 태양광 환기 시스템

이미지
왜 ESS를 쓰지 않았는가? 소형 스마트팜이나 텃밭용 환기 시스템을 검색해 보면 대부분 배터리(ESS)를 포함한 구조를 제안한다. 물론 ESS를 사용하면 밤에도 동작할 수 있고 전압 변동에도 강하다. 하지만 실제 DIY 관점에서 보면 여러 가지 부담이 생긴다. 배터리 가격이 비싸다. 충전 회로가 필요하다. 과충전/과방전 보호가 필요하다. 수명이 존재한다. 옥외 설치 시 관리 포인트가 늘어난다. 결국 고장 요소가 증가한다. 반면 여름철 소형 온실이나 육묘 상자의 환기 목적이라면 대부분 햇빛이 강한 시간대에만 팬이 동작해도 충분한 경우가 많다. 그렇다면 굳이 ESS를 넣어 시스템을 복잡하게 만들 필요가 있을까? 이 프로젝트는 여기서 출발했다. "배터리 없이, 태양광 패널과 팬만으로 최대한 단순하고 오래가는 시스템을 만들 수 없을까?" 단순함이 곧 신뢰성이다 태양광 패널에 팬을 직접 연결하면 문제가 발생한다. 구름이 지나가거나 일조량이 애매한 상황에서 팬이 돌다가 멈추고 다시 돌다가 멈추고 덜덜 떨리며 모터가 스트레스를 받는다. 실제로 이런 상태가 반복되면 모터 수명도 짧아지고 체감상 상당히 거슬린다. 그래서 이번 설계의 목표는 단순했다. 켜질 때는 확실하게 켜진다. 꺼질 때는 확실하게 꺼진다. 중간에서는 우왕좌왕하지 않는다. ESS 없이 구현한다. 시중 부품만으로 제작 가능하다. 만능기판 수준에서 누구나 제작 가능하다. 설계 철학 이 회로는 복잡한 MCU도 사용하지 않는다. 아두이노 없음 ESP32 없음 배터리 없음 충전기 없음 소프트웨어 없음 대신 수십 년 동안 검증된 아날로그 부품만 사용한다. LM358 P채널 MOSFET 제너 다이오드 저항 커패시터 그리고 제어 로직은 단 하나다. "전압이 충분하면 켜고, 부족하면 끈다." 하지만 단순한 ON/OFF가 아니라 슈미트 트리거(Hysteresis)를 적용하여 켜지는 전압과 꺼지는 전압을 다르게 만든다. 예를 들어 11V 이상 → ON 8.5V 이하 → OFF 로 설정하면 구름이...

[DIY 스마트팜] 파이썬 Flask + MJPEG + Cloudflare Tunnel을 이용한 간이 실시간 CCTV 구축

개요 USB 웹캠이 연결된 PC에서 영상을 캡처하여 Flask 서버를 통해 MJPEG 스트리밍으로 제공하고, Cloudflare Tunnel을 이용하여 외부에서 휴대폰으로 실시간 확인할 수 있는 간이 CCTV 시스템을 구축한다. 특징: 무료 포트포워딩 불필요 공인 IP 불필요 공유기 설정 불필요 별도 앱 설치 불필요 웹 브라우저만 있으면 접속 가능 거의 실시간 영상 확인 가능 시스템 구성 USB Webcam ↓ OpenCV ↓ Flask MJPEG Server ↓ localhost:8000 ↓ Cloudflare Tunnel ↓ https://xxxxx.trycloudflare.com ↓ 휴대폰 브라우저 프로젝트 폴더 구조 camera_server/ └── camera_server.py 필요 패키지 설치 pip install flask pip install opencv-python 확인: python -c "import cv2; print(cv2.__version__)" CCTV 서버 코드 from flask import Flask, Response import cv2 from datetime import datetime app = Flask(__name__) cap = cv2.VideoCapture(0) if not cap.isOpened(): raise RuntimeError("카메라 열기 실패") # Logitech C525 권장 설정 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) def generate_frames(): while True: success, frame = cap.read() if not success: continue timestamp = datetime.now().str...

[DIY 스마트팜] 파이썬 + 웹캠 + Cloudflare Tunnel을 이용한 간이 CCTV 구축

개요 USB 웹캠이 연결된 PC에서 주기적으로 사진을 촬영하고, Cloudflare Tunnel을 이용하여 외부에서 휴대폰으로 확인할 수 있는 간이 CCTV 시스템을 구축한다. 특징: 무료 포트포워딩 불필요 공인 IP 불필요 공유기 설정 불필요 휴대폰 브라우저로 접속 가능 Python만으로 구현 가능 시스템 구성 USB 웹캠 ↓ Python(OpenCV) ↓ latest.jpg 생성 Python HTTP Server ↓ localhost:8000 Cloudflare Tunnel ↓ https://xxxxx.trycloudflare.com 휴대폰 브라우저 프로젝트 폴더 구조 camera_server/ ├── camera.py ├── index.html └── latest.jpg 1. OpenCV 설치 pip install opencv-python 설치 확인: python -c "import cv2; print(cv2.__version__)" 2. 웹캠 촬영 프로그램 camera.py import cv2 import time from datetime import datetime # 웹캠 열기 cap = cv2.VideoCapture(0) if not cap.isOpened(): print("카메라 열기 실패") exit() print("카메라 시작") try: while True: ret, frame = cap.read() if not ret: print("프레임 읽기 실패") time.sleep(1) continue timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") cv2.putText( frame, ...

[DIY 스마트팜] 아두이노 + NTC 써미스터를 이용한 간이 풍속계(열선식 풍속계) 구현 아이디어

개요 일반적으로 써미스터는 온도를 측정하는 센서로 사용되지만, 일부러 센서를 가열한 뒤 바람에 의해 냉각되는 정도를 측정하면 풍속 센서로 활용할 수 있다. 이 방식은 산업계에서 사용하는 열선식 풍속계(Thermal Anemometer) 의 기본 원리와 동일하다. 장점은 다음과 같다. 회전 부품 없음 마모 부품 없음 구조가 단순함 저렴함 기류 변화 감지에 매우 민감함 아두이노로 쉽게 구현 가능 동작 원리 1. 대기온도 측정용 써미스터 첫 번째 써미스터는 일반적인 온도 센서처럼 사용한다. 자기 발열(Self Heating)이 거의 발생하지 않도록 작은 전류만 흘림 현재 공기 온도를 측정 T_ambient 2. 가열용 써미스터 두 번째 써미스터는 일부러 가열한다. 전류를 충분히 흘려 센서 자체 온도를 주변 온도보다 높게 만든다. 예) 실내온도 : 25℃ 가열센서 : 50℃ 3. 바람이 발생 공기가 흐르면 가열된 센서의 열이 외부로 빠져나간다. 풍속 증가 → 열손실 증가 → 센서 온도 감소 예) 무풍 상태 T_heated = 50℃ 약한 바람 T_heated = 40℃ 강한 바람 T_heated = 30℃ 4. 온도 차이 계산 두 센서의 온도 차이를 계산한다. ΔT = T_heated - T_ambient 또는 ΔV = V_ambient - V_heated NTC 특성상 온도가 변하면 저항과 전압이 변하므로 실제 구현은 전압 차이로 계산하는 경우가 많다. 왜 풍속이 커질수록 값이 변하는가? 가열된 센서가 잃는 열량은 풍속과 밀접한 관계가 있다. 간단히 표현하면 풍속 ↑ → 냉각 ↑ → 센서 온도 ↓ → NTC 저항 ↑ → ADC 값 변화 ↑ 따라서 풍속을 직접 측정하지 않아도 기류 세기를 추정할 수 있다. NTC 선정 가이드 가장 추천하는 NTC DIY 및 스마트팜 환기 감시용으로는 다음 규격이 가장 무난하다. 10kΩ NTC B값 3950 비드형(Bead Type) 대표 제품 MF52-103 MF58-103 10K B3950 Glass Bead NTC 비드형을...

[아두이노] 슈퍼커패시터 UPS + Raspberry Pi + Arduino 자동 복구 시스템 아이디어

이미지
시스템 개요 이 시스템의 목적은 다음 두 가지입니다. 정전 시 Raspberry Pi를 안전하게 종료하여 데이터 손상을 방지 전원 복구 후 Raspberry Pi가 자동으로 다시 부팅되지 않는 경우 Arduino가 강제로 깨워서 자동 복구 즉, 단순 UPS가 아니라 안전 종료(Safe Shutdown) + 자동 복구(Self-Healing) 기능을 구현하는 구조입니다. 각 장치 역할 Raspberry Pi (데이터 보호 담당) UPS 전원 상태 감시 정전 발생 감지 디스크 캐시 저장(sync) 안전 종료 수행 종료 직전 Arduino에게 종료 사실 전달 Arduino (전원 관리자 담당) 전원 복구 시 가장 먼저 동작 Raspberry Pi의 생존 여부 확인 Raspberry Pi가 응답하지 않으면 RUN 핀 리셋 무인 자동 복구 수행 하드웨어 연결 Raspberry Pi GPIO 용도 GPIO18 UPS 전원 감지 입력 GPIO20 Heartbeat 출력 Arduino 핀 용도 D2 Raspberry Pi Heartbeat 입력 D3 Raspberry Pi RUN 리셋 제어 동작 시나리오 정상 상태 외부 전원이 정상 공급 중 외부 전원 ON ↓ UPS 정상 ↓ Raspberry Pi 실행 ↓ GPIO20 = HIGH ↓ Arduino 대기 정전 발생 UPS 감지 핀이 LOW로 떨어짐 정전 발생 ↓ GPIO18 FALLING 감지 ↓ sync 실행 ↓ 3초 대기 ↓ sync 재실행 ↓ Heartbeat LOW ↓ Shutdown 수행 전원 복구 전원 복구 ↓ Arduino 부팅 ↓ 5초 대기 ↓ Heartbeat 확인 Raspberry Pi 정상 부팅 Heartbeat = HIGH ↓ 정상 상태 ↓ 아무 작업 안 함 Raspberry Pi 식물인간 상태 Heartbeat = LOW ↓ RU...

[DIY 스마트팜] 외란에 무적이라는 ‘캐스케이드(Cascade) 이중 루프 제어’, 완벽 이해하기

자동화 현장이나 플랜트 공정 제어를 설계하다 보면 반드시 마주치는 숙제가 있습니다. 바로 "외란(Disturbance)을 어떻게 잡을 것인가?" 입니다. 가장 흔하게 쓰는 일반 PID 제어(싱글 루프)는 구조가 단순해서 좋지만, 시스템에 시간 지연(Delay)이 있거나 갑작스러운 외부 충격(외란)이 들이치면 뒤북을 치며 출렁이기 쉽습니다. 이때 제어공학에서 꺼내 드는 마스터키가 바로 캐스케이드(Cascade) 제어 , 즉 이중 루프(Dual-loop) 제어 입니다. 오늘은 이 캐스케이드 제어가 왜 외란에 강한지, 그리고 실제 현장에서 어떻게 구현하는지 아주 쉽게 정리해 보겠습니다. 1. 캐스케이드 제어란? (반장과 행동대장 구조) 일반 PID 제어는 제어기 하나가 센서 하나만 바라보며 히터나 밸브를 혼자서 다 조절합니다. 혼자서 다 하려니 느리고 버거울 수밖에 없습니다. 반면 캐스케이드 제어는 PID 루프 2개를 직렬(종속) 구조로 연결 합니다. 즉: 위쪽 루프 = 최종 목표 관리 아래쪽 루프 = 현장 실무 처리 로 역할을 분리하는 방식입니다. ■ 마스터 PID (Master / Outer Loop) 역할: 최종 관리자 반장 역할 감시 대상: 우리가 진짜 지키고 싶은 값 예: 챔버 내부 식물 주변 온도 행동: 최종 온도를 보고 슬레이브에게 명령함 예시: "지금 챔버가 식었으니까 열풍 온도를 60도로 올려!" 즉, 마스터 PID의 출력값은 "히터 출력"이 아니라 "슬레이브 PID의 목표 온도(Setpoint)"가 됩니다. ■ 슬레이브 PID (Slave / Inner Loop) 역할: 현장 행동대장 작업반장 역할 감시 대상: 히터 바로 앞 열풍 출구 온도 밸브 직전 압력 등 행동: 마스터가 지시한 목표치를 초고속으로 맞춤 즉: 실제 PWM SSR 밸브 개도율 같은 물리 출력은 슬레이브가 담당합니다. 2. 챔버 문이 열렸다! 외란 시나리오로 보는 차이점 겨울철 챔버를 생각해 보겠습니다. 챔버...

[DIY 스마트팜] 서미스터(Thermistor)의 비선형성과 스테인하트-하트(Steinhart–Hart) 방정식 이해

이미지
에어컨, 자동차, 배터리 팩, 스마트팜 환경 제어기 등에는 대부분 서미스터(Thermistor)가 들어갑니다. 서미스터는 매우 저렴하면서도 온도 변화에 민감하기 때문에 산업 현장과 DIY 프로젝트에서 엄청나게 많이 사용됩니다. 하지만 실제로 사용해보면 한 가지 문제가 있습니다. 바로: 온도와 저항의 관계가 직선이 아니라는 점 입니다. 1. 서미스터란? 서미스터(Thermistor)는: Thermal (열) Resistor (저항기) 의 합성어입니다. 즉: 온도에 따라 저항값이 크게 변하는 반도체 기반 수동 소자 입니다. 특히 NTC 서미스터가 온도 측정용으로 가장 많이 사용됩니다. NTC (Negative Temperature Coefficient) 온도 상승 → 저항 감소 예시: 25°C → 10kΩ 50°C → 수 kΩ 수준으로 감소 처럼 변화합니다. 2. 왜 서미스터는 민감할까? RTD(Pt100)는 비교적 선형적으로 변합니다. 반면 NTC 서미스터는: 낮은 온도에서는 저항이 매우 크고 높은 온도에서는 급격히 감소 합니다. 즉: 아주 작은 온도 변화에도 저항 변화량이 매우 큼 이라는 특징이 있습니다. 그래서: 저가형 정밀 온도 측정 배터리 온도 감시 HVAC 스마트팜 전원부 보호회로 등에서 엄청나게 많이 사용됩니다. 3. 서미스터의 가장 큰 문제: 비선형성 서미스터는: 온도 변화량과 저항 변화량이 직선 관계가 아닙니다. 즉: 단순한 1차 함수로 계산 불가능 강한 곡선 형태를 가짐 입니다. 예를 들어: 20°C → 25°C 변화와 70°C → 75°C 변화의 저항 감소 폭이 전혀 다릅니다. 4. 스테인하트-하트(Steinhart–Hart) 방정식 이 문제를 해결하기 위해 가장 널리 쓰이는 모델이 바로 아래 식입니다. 1/T = A + B·ln(R) + C·(ln(R))^3 의미: T = 절대온도(K) R = 서미스터 저항값(Ω) A, B, C = 제조사 계수 핵심은: 로그(Log)가 들어간다는 것 입니다. 이 로그 항 덕분에 비선형 곡선을 현실적으로 매우 ...