산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 기반 스마트 누수 감지 및 밸브 제어 시스템

프로젝트 개요

물이 새는 사고는 가정에서 큰 피해를 초래할 수 있습니다. 이 프로젝트는 아두이노를 기반으로 누수를 실시간 감지하고, 메인 수도 밸브를 자동으로 차단하여 피해를 최소화하는 시스템을 구현합니다. 라즈베리 파이 같은 고성능 플랫폼 대신 아두이노와 같은 단순 마이크로컨트롤러에 핵심 책임을 위임하여, 네트워크 장애 시에도 기본 기능(누수 감지 및 밸브 차단)이 독립적으로 동작하도록 설계했습니다.

주요 기능

하드웨어 구성

부품 수량 비고
아두이노 우노 (Arduino UNO)1메인 컨트롤러
아두이노 이더넷 실드 21유선 네트워크 및 MQTT 통신용
모터라이즈드 볼 밸브 (12V DC)1메인 수도관 차단용, 리미트 스위치 내장
수분 감지 센서1누수 예상 지점 다수 병렬 연결 가능
듀얼 릴레이 모듈 (5V, 12V 각 1개)2밸브 모터 정/역 회전 제어 및 리미트 스위치 감지용
알루미늄 인클로저1방수/방진 하우징
AC/DC 파워 서플라이 (5V/12V 듀얼 출력)1아두이노(5V) 및 밸브 모터(12V) 전원 공급
AC 하우징, JST 커넥터, LED 키트 등각 1배선 및 표시부 구성용

시스템 동작 원리

밸브 제어 로직

밸브 내부에는 정/역 회전에 따라 개폐되는 DC 모터와, 완전 개방/폐쇄 위치를 감지하는 리미트 스위치가 있습니다. 아두이노는 듀얼 릴레이를 통해 모터 극성을 전환하며, 리미트 스위치 신호(풀업 입력)로 현재 위치를 확인합니다. 리미트 스위치 신뢰성 확보를 위해 개폐 동작 전 반대쪽 리미트 스위치를 한 번 더 터치하여 위치를 재확인하는 안전 로직을 포함합니다.

LED 상태 표시

MQTT 통신 구조

클라이언트 ID: GLX_BASEMENT_001 형식 사용. 다음 토픽으로 상태/장애 발행 및 타 장비 장애 구독:

소스 코드 핵심 부분

전체 코드는 아두이노 IDE에서 컴파일 가능하며, 주요 라이브러리(PubSubClient, Ethernet, Timer 등) 필요. 핵심 기능은 다음과 같습니다.

메인 루프 (loop)

void loop() {
  // LED 초기 상태 설정
  configureLedsWithInitialStates();

  // 리셋 버튼 인터럽트 처리
  if (isResetRequested) { ... watchdog 리셋 ... }

  // 로컬 수분 센서 읽기 (디바운싱 적용)
  readLocalWaterSensor();

  // 누수 감지 시(로컬 또는 원격) 밸브가 열려 있으면 닫기
  if (isWaterDetected || isWaterDetectedRemotely) {
    if (isValveClosed == 0) closeValve();
  }

  // 주기적 MQTT 상태/장애 발행
  if (mqttIntervalCnt == 0) {
    if (isWaterDetected) publishFault();
    publishStatus();
    mqttIntervalCnt = mqttInterval;
  } else {
    mqttIntervalCnt--;
  }

  // MQTT 네트워크 루프 처리
  client.loop();

  // LED 최종 상태 업데이트
  configureLedsWithFinalStates();
  delay(mainLoopDelay);
}

밸브 개폐 제어 함수

int openValve() {
  // 1. 닫힘 리미트 스위치 재확인 (릴레이 시나리오 1: 닫힘 방향)
  setupRelays(1);
  if (waitForEndOfCycle(ValveClosedPin) != 0) return -1;

  // 2. 열림 방향으로 구동 (릴레이 시나리오 2: 열림 방향)
  setupRelays(2);
  if (waitForEndOfCycle(ValveOpenedPin) != 0) return -1;

  isValveClosed = 0; isConnectedToValve = 1;
  setupRelays(0); // 릴레이 OFF
  return 0;
}

int closeValve() {
  // 1. 열림 리미트 스위치 재확인
  setupRelays(2);
  if (waitForEndOfCycle(ValveOpenedPin) != 0) return -1;

  // 2. 닫힘 방향으로 구동
  setupRelays(1);
  if (waitForEndOfCycle(ValveClosedPin) != 0) return -1;

  isValveClosed = 1; isConnectedToValve = 1;
  setupRelays(0);
  return 0;
}

디바운싱 및 안정성 확보

센서 오작동 방지를 위해 getDebouncedValue() 함수로 일정 간격(기본 100ms) 다중 확인 후 상태 확정. 리미트 스위치 역시 동일 로직 적용.

안전 주의사항 (필독)

AC/DC 파워 서플라이는 5V와 12V 듀얼 출력입니다. 아두이노는 5V 핀에 직접 공급하므로(Vin은 6V 이상 필요), AC 전원 연결 상태에서 절대 아두이노 DC 잭이나 USB 케이블을 연결하지 마십시오. 디버깅용 USB 연결 시 전원선(VCC)을 제거한 데이터선만 연결된 커스텀 케이블을 사용하세요. AC 하우징과 파워 서플라이 사이는 110V/220V 고압이므로 감전 위험이 있습니다.

회로도

아두이노 기반 스마트 누수 감지 및 밸브 제어 시스템

확장 아이디어

제조공정

  1. 연마성 라임 슬러리 시스템에서 핀치 밸브 & 페리스트알틱 펌프: 골드 스탠다드
  2. 라즈베리 파이 센서 및 액추에이터 제어 마스터하기: 가속도계, 서보 모터, 데이터 스트리밍
  3. 자동 수영장 급수 및 모니터링 시스템
  4. 세거 J-Link로 아두이노 포텐타 H7 듀얼 코어 시스템 디버깅하기
  5. 아두이노, 1Sheeld, IR 제어로 만능 안드로이드 리모컨 만들기
  6. 아두이노 우노로 만드는 LCD 애니메이션 & 게임 기초
  7. 스마트 저금통 만들기: 아두이노 나노로 동전 인식기 제어하기
  8. 아두이노 파워 컨트롤 센터: N-FET, P-FET, 릴레이 & RTC 키트
  9. 아두이노 오디오 주파수 감지기 - 고감도 사운드 모듈로 최대 음량 피크 주파수 측정
  10. 아두이노 블루투스로 LED 제어하기 - HC-05 & MIT App Inventor 입문 가이드