[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)가 들어간다는 것 입니다. 이 로그 항 덕분에 비선형 곡선을 현실적으로 매우 ...

[스마트팜] RTD(측온저항체)의 원리와 실무 이야기

이미지
온실 환경 제어, 반도체 장비, 정밀 공정 제어 같은 산업 현장에서는 “정확한 온도 측정”이 시스템 품질을 결정합니다. 그리고 이런 현장에서 오랫동안 표준처럼 사용되어 온 센서가 바로 RTD(Resistance Temperature Detector, 측온저항체)입니다. 특히 PLC 엔지니어라면 한 번쯤은 반드시 만나게 되는 센서가 바로 PT100입니다. 오늘은 RTD가 왜 그렇게 신뢰받는지, 그리고 실제 제어 시스템에서는 어떤 원리로 동작하는지 정리해보겠습니다. RTD란 무엇인가? RTD는 온도 변화에 따라 저항값이 변하는 센서입니다. 온도가 올라가면 저항도 증가합니다. 가장 중요한 특징은 다음입니다. 온도와 저항 사이의 관계가 매우 안정적이다 반복 측정 시 재현성이 뛰어나다 시간이 지나도 특성이 거의 변하지 않는다 즉, “이번에 측정한 30°C”와 “1년 뒤 측정한 30°C”가 거의 동일하게 유지된다는 뜻입니다. 이 특성 때문에 RTD는 산업 현장에서 “신뢰 가능한 기준 온도 센서”처럼 사용됩니다. RTD는 스스로 전압을 만들지 못한다 여기서 열전대(Thermocouple)와 RTD의 가장 큰 차이가 등장합니다. 열전대는 온도차에 의해 스스로 전압을 생성하는 능동 소자(active device)입니다. (<= 관점에 따라 수동 소자로 분류되기도 함) 반면 RTD는 단순히 저항값만 변하는 수동 소자(passive device)입니다. 즉, RTD는 혼자서는 아무것도 출력하지 못합니다. 그래서 PLC 아날로그 입력 카드나 온도 모듈에서는 반드시 다음 과정을 수행해야 합니다. RTD에 아주 작은 전류를 흘린다 센서 양단의 전압을 측정한다 옴의 법칙으로 저항값을 계산한다 저항값을 온도로 변환한다 즉, 실제로 PLC는 “온도”를 직접 읽는 것이 아니라: 전류를 흘리고 전압을 읽고 저항을 계산한 뒤 테이블이나 공식으로 온도를 환산하는 것 입니다. RTD의 핵심은 “정전류(Constant Current)”이다 RTD 측정에서 가장 중요한 것은 일정한 전류를 유지하는...