본문 바로가기
모두의 아두이노/아두이노 센서

[아두이노][센서] KY-026 불꽃 감지 센서로 화재 경고 시스템 구축하기!

by 로니킴 2024. 11. 22.


이 프로젝트는 KY-026 불꽃 감지 센서와 아두이노를 활용하여 간단하면서도 실용적인 화재 경고 시스템을 설계합니다. 단계별 가이드로 하드웨어 연결부터 소프트웨어 코딩, 시스템 테스트까지 모두 다룹니다.
이제 직접 만들어 보고, 화재 예방 시스템의 가능성을 탐구해 보세요! 센서를 활용한 아두이노 프로젝트는 여러분의 창의력을 자극할 것입니다.  

 

목차

     

     

     


    [아두이노][센서] KY-026 불꽃 감지 센서로 화재 경고 시스템 구축하기!

    KY-026 불꽃 감지 센서는 아두이노와 결합하여 실시간 화재 감지 시스템을 간단하고 효율적으로 구현할 수 있는 강력한 도구입니다. 이 프로젝트는 센서 데이터 처리와 LCD를 활용한 시각적 출력, 그리고 화재 확인 및 경고 시스템까지 단계별로 구성되어 있습니다.

     

     

    • 특징: KY-026은 적외선을 기반으로 불꽃 감지를 수행하며, 아날로그와 디지털 출력을 제공합니다.
    • 사용 방법: 센서를 아두이노와 LCD 쉴드에 연결하고, 센서 데이터를 읽어 불꽃 강도를 실시간으로 모니터링합니다.
    • 확장 가능성: 이 시스템은 화재 경고 시스템, IoT 연동을 통한 원격 감시, 자동화된 스프링클러 시스템 등 다양한 프로젝트로 확장 가능합니다.

    KY-026을 활용한 이 프로젝트는 초보자도 센서 데이터를 활용하여 실용적인 시스템을 설계하는 방법을 배울 수 있는 훌륭한 시작점입니다.

     

     

     


     

    1. KY-026 불꽃 감지 센서란?

    KY-026 불꽃 감지 센서는 적외선(IR)을 통해 불꽃을 감지하는 고성능 센서입니다. 이 센서는 불꽃의 적외선 파장을 측정하여 아날로그와 디지털 신호를 동시에 제공합니다.

     

    • 아날로그 출력(A0): 감지된 불꽃의 강도를 연속적인 값으로 제공합니다.
    • 디지털 출력(D0): 사전에 설정된 임계값을 초과했는지 여부를 0 또는 1의 형태로 신호를 제공합니다.

    센서의 주요 구성 요소는 다음과 같습니다:

    1. 적외선 포토다이오드: 적외선을 감지하고, 불꽃의 존재를 확인합니다.
    2. 신호 증폭기: 감지된 신호를 확대하여 더 강력한 출력값을 생성합니다.
    3. 컴퍼레이터 회로: 감지 신호가 특정 임계값을 초과할 경우 디지털 출력과 LED를 활성화합니다.

    이 센서는 특히 화재 경고 시스템이나 자동 스프링클러 시스템에 적합하며, 사용자가 원하는 감도 설정을 위해 가변 저항(포텐셔미터)를 조정할 수 있습니다.

     


     

     

    2. KY-026 불꽃 감지 센서의 동작 원리

    이 센서는 환경 조건과 사용자 설정에 따라 적응하도록 설계되었으며, 상대적인 측정값을 제공하므로 특정 상황에 맞는 기준값을 설정하여 활용하는 것이 중요합니다.

     

    1. 불꽃 감지 메커니즘

    KY-026 센서의 핵심은 불꽃이 방출하는 **적외선 스펙트럼(760nm ~ 1100nm)**을 포토다이오드가 감지하는 것입니다. 불꽃이 없는 상태에서는 출력값이 낮고, 불꽃이 감지되면 출력값이 높아집니다.

    • 아날로그 출력(A0): 포토다이오드에서 감지된 값을 증폭해 연속적인 전압 값으로 제공합니다.
    • 디지털 출력(D0): 컴퍼레이터가 설정된 임계값(포텐셔미터 조정 가능)을 초과하면 디지털 핀(D0)에 "HIGH" 신호를 출력합니다.

    2. 증폭 및 비교

    포토다이오드에서 감지된 약한 신호는 증폭기를 통해 증가합니다. 사용자가 가변 저항을 통해 설정한 기준값을 초과할 경우, 컴퍼레이터는 디지털 출력을 활성화합니다.

    3. LED 피드백

    센서에는 두 개의 LED가 있습니다:

    • 전원 LED (LED1): 센서가 정상적으로 전원이 공급되었음을 표시합니다.
    • 불꽃 감지 LED (LED2): 불꽃이 감지되면 켜집니다.

    4. 출력값 반전 특성

    센서의 아날로그 출력값은 일반적인 출력과 반대입니다:

    • 높은 값 = 낮은 불꽃 강도
    • 낮은 값 = 높은 불꽃 강도
      이는 센서의 감지 방식을 반영한 특성입니다.

    5. 응용 예시

    • 화재 경고 시스템: 불꽃이 감지되면 경보음을 울리거나 스프링클러를 작동시킬 수 있습니다.
    • IoT 연동: 불꽃 감지 데이터를 무선으로 전송하여 원격 모니터링에 활용 가능합니다.

     

     

    3. KY-026 불꽃 감지 센서 구입하기

    KY-026 불꽃 감지 센서는 국내 온라인 쇼핑몰에서 약 1,000원에서 2,000원 사이에 구매할 수 있습니다. 예를 들어, 다두이노에서는 1,000원에 판매하고 있으며, 배송비는 3,000원입니다.  또한, 제노몰에서는 2,000원에 판매하고 있으며, 기본 배송비는 3,000원입니다. 구매 시에는 판매자의 평판과 배송 기간을 확인하여 신뢰할 수 있는 판매처를 선택하는 것이 중요합니다. 또한, 배송비를 고려하여 총 비용을 비교하는 것이 좋습니다. 해외 구매를 고려할 경우, 배송 기간이 길어질 수 있으므로 국내 판매처를 우선적으로 검토하는 것이 좋습니다.

     


     

     

     

    4. KY-026 불꽃 감지 센서 하드웨어 연결하기

     

    KY-026 불꽃 감지 센서는 아두이노와 LCD 쉴드(16x2)와 결합하여 불꽃 감지 데이터를 시각적으로 확인할 수 있습니다. 센서의 A0 핀은 LCD 쉴드의 A1 핀에 연결되며, 이는 불꽃 강도의 아날로그 데이터를 읽는 데 사용됩니다. 센서의 D0 핀은 LCD 쉴드의 D2 핀에 연결되며, 디지털 신호를 통해 임계값 초과 여부를 감지합니다. KY-026의 VCC 핀은 LCD 쉴드의 5V 핀에 연결하여 전원을 공급하며, GND 핀은 LCD 쉴드의 GND 핀과 연결합니다.
    이 구성에서는 LCD 쉴드가 데이터를 받아 실시간으로 불꽃 감지 상태를 출력합니다. LCD 첫 번째 줄에는 "FIRE: YES/NO" 메시지를 표시하고, 두 번째 줄에는 불꽃 강도를 아날로그 값으로 보여줍니다. 연결 시 핀 번호를 확인하고, 전원이 안정적으로 공급되도록 확인해야 합니다. 이 방식은 간단한 연결만으로 효과적인 화재 감지 시스템을 구현하는 데 적합합니다.

     

     

    이 프로젝트는 아두이노, LCD 쉴드(16x2), 그리고 KY-026 불꽃 감지 센서로 구성됩니다. KY-026 센서의 아날로그 및 디지털 출력을 LCD 쉴드를 통해 시각적으로 확인할 수 있도록 설계되었습니다. 아래는 각 구성 요소 간의 연결 방법입니다.


    1. 연결 핀 구성

    • KY-026 → LCD 쉴드 핀
      • KY-026의 A0 핀 → LCD 쉴드의 A1 핀
      • KY-026의 D0 핀 → LCD 쉴드의 D2 핀
      • KY-026의 VCC → LCD 쉴드의 VCC (5V)
      • KY-026의 GND → LCD 쉴드의 GND

    2. 하드웨어 연결 설명

    1. 전원 및 GND 연결
      KY-026 센서의 VCC 핀은 LCD 쉴드의 5V 핀과 연결하여 안정적인 전원을 공급합니다. GND는 LCD 쉴드의 GND 핀과 연결하여 전기적 기준을 맞춥니다.
    2. 아날로그 출력(A0) 연결
      KY-026의 아날로그 출력(A0 핀)은 LCD 쉴드의 A1 핀에 연결됩니다. 이를 통해 불꽃의 강도를 정밀하게 읽어낼 수 있습니다.
    3. 디지털 출력(D0) 연결
      KY-026의 디지털 출력(D0 핀)은 LCD 쉴드의 D2 핀에 연결됩니다. 이는 설정된 임계값을 초과할 경우 디지털 신호를 빠르게 감지하도록 합니다.

    3. LCD 쉴드와 KY-026의 상호작용

    LCD 쉴드는 KY-026 센서로부터 데이터를 수신하여 불꽃 감지 여부를 표시합니다.

    • LCD의 첫 번째 줄에는 불꽃 감지 여부(YES/NO)를 표시합니다.
    • 두 번째 줄에는 불꽃의 강도를 아날로그 값으로 표시하여 실시간 모니터링을 지원합니다.

    4. 연결 시 주의사항

    1. 핀 위치 확인: KY-026 센서와 LCD 쉴드의 핀 번호를 정확히 확인한 후 연결합니다.
    2. 전원 공급: 아두이노 보드의 5V 핀이 LCD 쉴드와 KY-026 모두에 안정적으로 전원을 제공하도록 연결해야 합니다.
    3. 노이즈 방지: 긴 케이블을 사용할 경우 노이즈가 발생할 수 있으므로 가능하면 짧은 케이블을 사용하세요.

    이 연결 구성을 통해 KY-026 센서가 감지한 불꽃 데이터를 LCD 쉴드에 실시간으로 출력할 수 있습니다. 이렇게 구성된 시스템은 간단하면서도 신뢰성 있는 화재 감지 경고 시스템을 구현할 수 있습니다.

     


     

     

     

    5. KY-026 불꽃 감지 센서 소프트웨어 코딩하기

     

    센서를 제어하기 위한 소프트웨어 준비 과정은 다음과 같은 단계로 이루어집니다

     

     

     


    1. 아두이노

    01 연결

    - 아두이노와 PC 연결

    - 아두이노 IDE 실행

    - 메뉴 → 툴 → 보드:아두이노 UNO 확인

    - 메뉴 → 스케치 → 확인/컴파일

     

    02 컴파일 확인

    스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행합니다.

     

    03 아두이노 우노 업로드

    컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 합니다.

     

    04 동작 확인

    센서의 동작을 확인할 수 있습니다.

     


    2. 코드 설명

    이 코드는 아두이노, LCD 쉴드(16x2), KY-026 센서를 기반으로 불꽃 감지를 구현하며, 다음과 같은 순서로 동작합니다

    #include <LiquidCrystal.h> // LCD 라이브러리 포함
    
    // LCD 핀 정의 (RS, EN, D4, D5, D6, D7)
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    // 핀 번호 정의
    const int analogInputPin = A1; // KY-026의 아날로그 출력 핀
    const int digitalInputPin = 2; // KY-026의 디지털 출력 핀
    
    // 변수 선언
    int analogValue = 0;          // 센서의 아날로그 값 저장
    bool isFlameDetected = false; // 디지털 신호로 불꽃 감지 여부
    long checkTime = 0;           // 화재 감지 시간 저장
    int retryCount = 0;           // 화재 확인 시도 횟수
    
    // 초기 설정
    void setup() {
      initializeSensor(); // 센서 초기화 함수 호출
    
      pinMode(analogInputPin, INPUT);  // 아날로그 핀을 입력으로 설정
      pinMode(digitalInputPin, INPUT); // 디지털 핀을 입력으로 설정
    }
    
    // 메인 루프
    void loop() {
      monitorFlameSensor(); // 센서 모니터링 함수 호출
    }
    
    // KY-026 센서 초기화 함수
    void initializeSensor() {
      lcd.begin(16, 2); // LCD 초기화 (16x2)
      lcd.setCursor(0, 0);
      lcd.print("KY-026 Sensor");
      lcd.setCursor(0, 1);
      lcd.print("Initializing...");
      delay(1000);
    }
    
    // 센서 데이터를 모니터링하고 LCD에 출력
    void monitorFlameSensor() {
      analogValue = analogRead(analogInputPin);  // 아날로그 값 읽기
      isFlameDetected = digitalRead(digitalInputPin); // 디지털 신호 읽기
    
      updateLCD("Analog Value:"); // LCD 업데이트 함수 호출
    
      // 불꽃 강도가 임계값 미만일 경우 화재 확인 프로세스 실행
      if (analogValue < 100) {
        validateFlame();
      }
    
      delay(1000); // 1초 대기 후 반복
      retryCount = 0; // 시도 횟수 초기화
    }
    
    // LCD 업데이트 함수
    void updateLCD(String message) {
      lcd.clear(); // LCD 화면 초기화
    
      // 불꽃 감지 상태 표시
      lcd.setCursor(0, 0);
      lcd.print("FLAME: ");
      lcd.print(isFlameDetected ? "YES" : "NO");
    
      // 메시지와 아날로그 값 출력
      lcd.setCursor(0, 1);
      lcd.print(message);
      lcd.print(analogValue);
    }
    
    // 화재 확인 함수
    void validateFlame() {
      checkTime = millis() + 15000; // 15초간 화재 확인 시간 설정
    
      while (checkTime > millis() && analogValue < 350) {
        analogValue = analogRead(analogInputPin); // 아날로그 값 읽기
        updateLCD(String(retryCount) + " Checking"); // LCD 상태 업데이트
    
        // 아날로그 값이 임계값 초과 시 확인 중단
        if (analogValue > 350) {
          updateLCD("No Fire");
          break;
        }
    
        delay(1000); // 1초 대기
        retryCount++; // 시도 횟수 증가
      }
    
      // 시도 횟수가 기준 이상이면 스프링클러 활성화
      if (retryCount >= 5) {
        activateSprinkler();
      }
    }
    
    // 스프링클러 활성화 함수
    void activateSprinkler() {
      lcd.clear(); // LCD 초기화
      lcd.setCursor(0, 0);
      lcd.print("FIRE ALERT!!");
      lcd.setCursor(0, 1);
      lcd.print("Sprinkler ON!");
      delay(3000); // 경고 메시지 표시 시간
    }

     

    .


    1. 초기화 단계 (Setup)

    • 작업 내용:
      • initializeSensor() 함수가 호출되어 LCD를 초기화하고, 초기 상태 메시지를 표시합니다.
      • 아날로그 입력 핀(A1)과 디지털 입력 핀(D2)이 센서 데이터를 수신할 준비를 합니다.
    • LCD 출력:
      • 첫 번째 줄: KY-026 Sensor
      • 두 번째 줄: Initializing...

    이 단계는 시스템을 준비 상태로 설정하며, 모든 하드웨어가 정상적으로 연결되었는지 확인합니다.


    2. 메인 루프 (Loop) - 센서 데이터 읽기 및 출력

    • 작업 내용:
      • monitorFlameSensor() 함수에서 KY-026 센서 데이터를 읽고, 불꽃 감지 여부를 판단합니다.
        • 아날로그 데이터는 analogRead()를 통해 읽고, 센서의 강도를 파악합니다.
        • 디지털 데이터는 digitalRead()를 통해 불꽃 감지 여부를 빠르게 판단합니다.
      • LCD에 현재 상태를 출력합니다:
        • 첫 번째 줄: 불꽃 감지 상태 (FLAME: YES/NO)
        • 두 번째 줄: 불꽃 강도 값과 메시지 (Analog Value: [값])
    • 조건 처리:
      • 아날로그 값이 임계값(100)보다 낮으면, 화재 확인 프로세스(validateFlame())로 이동합니다.

    3. 화재 확인 프로세스

    • 작업 내용:
      • validateFlame() 함수에서 15초 동안 센서 값을 지속적으로 모니터링합니다.
      • 아날로그 값이 특정 임계값(350)을 초과하면 화재가 아니라고 판단하고 확인을 중단합니다.
      • 반복적으로 값을 확인하며, LCD에는 현재 시도 횟수와 상태가 표시됩니다.
    • LCD 출력 예시:
      • 첫 번째 줄: FLAME: YES 또는 FLAME: NO
      • 두 번째 줄: [시도 횟수] Checking
    • 결과:
      • 만약 15초 동안 센서 값이 임계값 이하로 유지되면 화재로 간주하고 스프링클러를 작동시킵니다.

    4. 스프링클러 작동

    • 작업 내용:
      • activateSprinkler() 함수에서 LCD에 경고 메시지를 출력하며, 실제 스프링클러 제어 코드(추가 가능)가 실행됩니다.
      • LCD 경고 메시지는 다음과 같이 표시됩니다:
        • 첫 번째 줄: FIRE ALERT!!
        • 두 번째 줄: Sprinkler ON!
    • 목적:
      • 화재 발생 시 사용자에게 명확한 경고를 제공하고, 추가적인 제어 시스템을 통해 대응합니다.

    코드의 주요 동작 순서 요약

    1. 시스템 초기화:
      • LCD 초기화 및 상태 확인.
      • 핀 모드 설정 및 센서 준비.
    2. 센서 데이터 모니터링:
      • 실시간으로 센서 데이터를 읽고 불꽃 감지 여부 확인.
      • LCD에 상태 및 강도 값 출력.
    3. 화재 여부 확인:
      • 15초 동안 센서 데이터를 반복 측정하여 화재 여부 판단.
      • 조건 만족 시 스프링클러 작동.
    4. 경고 및 대응:
      • 화재 발생 시 LCD 경고 메시지 출력.
      • 스프링클러 및 제어 시스템 활성화.

    동작 흐름에 따른 코드 구조의 장점

    • 모듈화: 초기화, 모니터링, 확인, 대응을 함수 단위로 분리하여 유지보수와 확장이 용이합니다.
    • 가독성: 각 단계가 명확하게 정의되어 있어 초보자도 흐름을 쉽게 이해할 수 있습니다.
    • 실시간 대응: 불꽃 강도와 감지 여부를 실시간으로 모니터링하며, 조건에 따라 빠르게 대응합니다.

    이 코드는 하드웨어 간의 상호작용과 조건 기반 처리를 효율적으로 구현하여 안정적이고 확장 가능한 화재 감지 시스템을 제공합니다.

     

     

    예시: KY-026 센서를 활용한 화재 감지 시스템 실행

    1. 초기 상태

    • 전원이 켜지면 LCD에 다음과 같은 메시지가 표시됩니다:
    KY-026 Sensor
    Initializing...

    2. 센서 데이터 모니터링

    • 정상적으로 초기화된 후, 센서가 데이터를 읽고 LCD에 상태를 표시합니다:
    FLAME: NO
    Analog Value: 300
    • 불꽃이 감지되었을 때:
    FLAME: YES
    Analog Value: 50

     

    3. 화재 확인 과정

    • 불꽃 감지가 지속되면, 15초 동안 데이터를 반복적으로 확인하며 LCD에 다음과 같은 메시지가 출력됩니다:
       
    FLAME: YES
    3 Checking

     

    • 임계값 초과로 화재가 아니라고 판단할 경우:
    FLAME: NO
    No Fire

    4. 화재 발생 시

    • 15초 확인 과정 후 화재로 판단되면 스프링클러가 활성화되고 LCD에 경고 메시지가 표시됩니다:
    FIRE ALERT!!
    Sprinkler ON!

     

    이 예시는 불꽃 감지 시스템의 모든 단계를 보여주며, 센서 데이터와 LCD 출력 간의 상호작용을 쉽게 이해할 수 있도록 설계되었습니다.


     

     

    6. KY-026 불꽃 감지 센서 동작 확인

    KY-026 센서를 통해 시스템이 제대로 작동하는지 확인하는 단계입니다. 실험은 센서의 아날로그 및 디지털 데이터를 모니터링하고, 화재 상황에 맞는 LCD 출력과 제어 시스템의 반응을 점검하는 것을 포함합니다.

     

    1. 실험 환경 준비

    • 센서를 안정적으로 배치하고, 전원이 정상적으로 공급되고 있는지 확인합니다.
    • LCD 쉴드가 "KY-026 Sensor\nInitializing..." 메시지를 출력한 후 정상 작동 상태가 되었는지 확인합니다.
    • 테스트 장치: 작은 불꽃(라이터, 성냥) 또는 불꽃을 대체할 수 있는 적외선 소스.

    2. 데이터 읽기 및 출력 확인

    • 불꽃이 없는 상태: LCD 첫 번째 줄에는 "FLAME: NO", 두 번째 줄에는 "Analog Value: [센서 값]"이 출력됩니다.
      • 예: FLAME: NO\nAnalog Value: 350
    • 불꽃이 감지되는 상태: LCD 첫 번째 줄에 "FLAME: YES", 두 번째 줄에는 "Analog Value: [센서 값]"이 출력됩니다.
      • 예: FLAME: YES\nAnalog Value: 50

    3. 화재 감지 및 확인

    • 라이터를 센서 근처에 대고, LCD 출력 값과 시리얼 모니터를 통해 아날로그 값이 감소(임계값 100 미만)했는지 확인합니다.
    • 불꽃이 감지되었을 경우, 센서는 15초 동안 데이터를 모니터링하며 LCD에 "FLAME: YES\n[횟수] Checking" 메시지를 출력합니다.

    4. 경고 및 제어 시스템 확인

    • 화재로 판단되었을 경우, LCD에 "FIRE ALERT!!\nSprinkler ON!" 메시지가 표시됩니다.
    • 스프링클러 또는 경고음을 연결한 경우, 해당 시스템이 정상적으로 작동하는지 확인합니다.

    5. 문제 해결

    • 센서 값이 비정상적으로 변하거나 불꽃을 감지하지 못할 경우:
      • 센서와 아두이노 핀 연결 상태를 다시 확인합니다.
      • 센서가 적절한 각도로 배치되었는지 조정합니다.
      • 포텐셔미터를 조정하여 감도 설정을 확인합니다.

     

     

    7. 마무리

    KY-026 불꽃 감지 센서를 활용한 이 프로젝트는 간단한 구성과 명확한 단계로 효과적인 화재 경고 시스템을 구현합니다. 초보자도 아두이노와 센서를 연동하며 다음과 같은 점을 배울 수 있습니다:

    1. 센서 데이터를 활용한 시스템 개발

    센서를 통해 불꽃의 유무를 판단하고 데이터를 아두이노를 통해 처리하며, 이를 시각적으로 표시하는 과정을 학습할 수 있습니다. 이를 통해 아날로그 데이터와 디지털 데이터의 차이를 이해하고, 다양한 환경에 적응할 수 있는 코드를 작성할 수 있습니다.

    2. 모듈 간의 상호작용

    LCD 쉴드를 통해 센서 데이터를 시각적으로 표시함으로써 사용자 인터페이스(UI)의 기초를 경험할 수 있습니다. 이를 통해 하드웨어와 소프트웨어 간의 상호작용을 효과적으로 구현하는 방법을 익힐 수 있습니다.

    3. 안전 및 응용 가능성

    KY-026 센서는 실내외 화재 경고 시스템, IoT 기반 화재 감지 시스템, 자동 스프링클러와 같은 실제 애플리케이션에서 사용할 수 있습니다. 이러한 응용 가능성을 탐구하며 프로젝트를 확장할 수 있습니다.

    4. 문제 해결 능력 향상

    센서의 감도 조정, 연결 문제 해결, 코드 디버깅 등에서 얻은 경험은 앞으로의 아두이노 프로젝트에서 큰 도움이 됩니다.

    이 프로젝트를 통해 초보자도 센서 제어와 경고 시스템 설계의 기본을 이해하고, 이를 기반으로 보다 복잡한 프로젝트를 설계할 수 있습니다.

     

     

     

     

    반응형


    댓글