Pico W 기초부터 클라우드 연동까지!
콘테스트 프로젝트완료

PicoW Fire Detector(화재 감지기) 아이디어 계획서 작성

Pico W 기초부터 클라우드 연동까지!
변화의 물결 프로필 보기
2022.07.23에 시작
1
좋아요
2.3K
조회
0
댓글
PicoW  Fire Detector(화재 감지기) 아이디어 계획서 작성
Pico W 기초부터 클라우드 연동까지!완료
콘테스트 프로젝트 진행 상황

각 Quest를 단계적으로 완성하는 프로젝트입니다.

Quest 1
Quest 2
Quest 3
Quest 4
4 / 4 완료
Quest 1: PicoW Fire Detector(화재 감지기) 아이디어 계획서 작성
2022.08.07
완료

1. 아이디어 소개 및 개요

 - 기존 Pico 제품에 Wireless 기능이 추가되었다고 해서 생활에 유용한 정보 전달과 안전에 조금 중점을 두어 아이디어를 생각해보았습니다.

 

 - 최근 들어 실외기, 김치냉장고, 콘센트 등 가정에서 화재 많이 발생하고 있습니다. 화재 예방하기 위해서 비접촉 온도 센서와 가스 센서로 화재를 미리 감지하고 데이터화 하여 특정 수치이상이 된다면 알람을 주는 기능과 추가적으로 현재 실내의 온도를 측정해서 클라우드에 저장하게 합니다. 그리고 이 정보들을 외부에서도 볼 수 있다면 좋지 않을까 해서 PicoW 화재 감지기를 생각하게 되었습니다.

 

2. 전체 구조를 표현하는 블록 다이어그램

 - PicoW 화재 감지기는 감시 대상이 특정 물체 온도를 측정하여 급격하게 온도가 올라가는 것을 감지한다던 지 특정온도 이상 올라가는 것을 감지하여 알람을 줍니다.

 - 주변에 연기 혹은 가스를 감지하여 화재를 파악하고 wifi를 통해 가스 센서 값과 실내온도의 값을 Cloud로 전달합니다.

 

 

 

3. 하드웨어 구성 다이어그램

 - 가스센서, 비접촉 온도 센서, 실내온도 측정하는 센서를 입력 장치로 사용하고 알람 상태가 되었을 때 경보를 주기 위해서 출력으로 부저(Buzzer)를 사용합니다. 옵션으로 OLED가 가능하다면 장착하여 수치를 표현해주는 것으로 합니다.

 

4. 소프트웨어 구성 다이어그램

 - 메인 루트를 중심으로 첫번째로 센서 값을 받아 임계 값과 비교를 해서 알람을 줄지 아니면 다음 단계로 넘어갈지 결정합니다. 그리고 수집된 값을 Cloud로 값을 전달합니다.

 - 위의 과정을 주기를 가지고 반복합니다.

 

Quest 2: Quest2 - 개발 환경 구성 (툴 설치 및 클라우드 환경 설정) Fire Detector
2022.08.25
완료

1. PicoW에 MicroPython 설치

  - https://micropython.org/download/rp2-pico-w/ 에 microPython uf2파일을 PicoW에 다운로드 해줍니다.

 

  - MicroPython이 설치 되면 장치 관리자에 시리얼 포트로 장치가 나타납니다.

 

  - 시리얼 통신 프로그램으로 접속해 보면 MicroPython을 실행 시킨수 있는 명령어 창이 나옵니다.

 

 - help(machine) 해서 머신 모듈이 무엇이 있는지 확인 가능합니다.

 - 간단하게 python으로 LED on/off 제어 한 줄씩 입력해봅니다.

 

 

2. thonny.org 에서 Thonny 설치

  - thonny.org 에서 Thonny를  OS 버전에 맞게 다운로드한 후 설치를 진행합니다.

 

  - 기본 설치 경로 확인 후 설치 진행

 

  - 기본 Tool 환경을 설정합니다.

 

  - PicoW USB로 연결한 상태에서 Thonny의 하단에 Pyhon3.x 되어 있는 부분을 MicroPython으로 바꿔줍니다.

 

 

3. 프로그램 소스 테스트

  - 부착되어 있는 LED는 깜박이는 코드 작성합니다.

  - 실행 버튼을 누르면 0.2 간격으로 깜박이는 확인 할 수 있습니다.

 

4. PicoW 네트워크 연결

 - WiFi 공유기와 접속 테스트를 하려면 샘플로 제공되는 되는 소스를 입력해서 테스트 해봅니다. Secret.py 파일 만드라고 하는데 테스트하는 것이니 하나에 파일에 다 넣어서 테스트 했습니다.

 - 소스를 실행시키면, Mac 주소와 할당받은 IP 주소를 출력해줍니다.

 

5. IoT 클라우드 서비스에 대한 무료 계정 생성(MQTT 이용)

 - 이번 프로젝트에는 MQTT 통신을 이용해서 자료를 전송하고, 받는 것으로 계획하였습니다.

 - 무료로 HIVEMQ 사이트를 이용할 계획입니다.

 

 (1) https://www.hivemq.com/ 사이트로 이동

  -  Sign up now 로 해서 간단하게 가입을 합니다.

 

 

  - 메일로 온 링크를 클릭해서 간단한 프로필입력과 AWS, Azure 선택만 하면 Cloud 생성이 끝이 납니다.

 

 

(2) Cloud 정보 설정

 - 상단 메뉴에서 Cloud -> HiveMQ Cloud를 선택합니다. -> Sign up now 누르면 아래와 접속할 수 있는 정보들이 나옵니다. (github 로그인 등 연동이 되어 있다면, 아니면 아이디 입력해야 할 수 있습니다.)

 

 

- “MANAGE CLUSTER” -> “GETTING STARTED”

- IoT Devices 위한 자격을 부여하기 위한 계정정보를 생성합니다.

 

- 그러면 테스트해볼 웹툴과 프로그램으로 연동할 수 있는 소스 자료들일 확인할 수 있습니다.

 

 - HiveMQ MQTT Browser Client 선택하면 Broker 서버 주소를 입력할 있으며, Publish, Subscription 있도록 되어 있습니다.

 

Quest 3: Quest3-Pico W - 클라우드 연결 및 데이터 업로드(화재감지기)
2022.09.11
완료

안녕하세요.

 

  다른 분들과 조금 다른 무료 MQTT 사이트를 사용 해보려고 HiveMQ Broker 서버로 접속 시도하였습니다.

 

 현재 SSL보안문제로 접속이 되지 않아 개인 계정의 Cloud에는 PicoW로 데이터를 올리지는 못했습니다. (글을 올린 후 확인 한 결과 개인계정으로는 전송 안 되었지만, 전체 MQTT서버로는 전송되는 것을 확인했습니다.)

최신 보드이다 보니 접속정보가 없고 HiveMQ 사이트가 초기와 다르게 SSL 체크하지 않으면 접속할 수 없게 되었습니다. 그리고 여기에 대한 글도 많이 없었습니다. 그래서 현재 구글링하는 중이며, 2022.09.10에 초음파 센서와 PicoW로 HiveMQ 서버에 전송 성공했다는 글이 있어 문의를 남길 예정입니다. 현재 따라 했는데 되지는 않았습니다. 몇일 더 해보고 안되면 ThingSpeak로 시도해보려고 합니다.

 참조 사이트 : https://community.hivemq.com/t/getting-started-raspberry-pi-pico-w/1316/21

 

 시도했던 내용을 올리고 계속 안되면 다음번에 다른 서버 버전으로 완성해보려고 합니다.

 

1. 회원가입하고 사이트에 고유 접속할 클러스터 URL 이 주어집니다.

- https://www.hivemq.com/mqtt-cloud-broker/ 로 가입합니다.

 

2. 고유한 클러스트에 클라이언트가 생성할 수 있으며 접속하기 위한 Username과 Password를 만듭니다. 여기에서는 PicoW0001로 만들어 보았습니다.

 

 

 

3. PicoW에서 접속해보기

 - 현재 SSL 문제로 접속되지 않지만 접속하려면 umqtt.simple 라이브러리를 설치합니다.

 

 

 

- MQTT 서버에 접속하는 코드부분

- 아래와 같이 보안 문제로 연결시도는 했지만 접속이 되지 않는 상태입니다.

 

 

4. 웹상에서 데이터를 Publish 와 Subcriptions 확인

 - Subscriptions를 등록해 놓으면 GasData 값이 Publish 된 값이 나타나는 것을 확인 할 수 있습니다.

 

 

감사합니다.

 

글을 올린 후 추가로 확인된 내용 첨부합니다.

 

HIVEMQ Cloud 사이트에 개인 계정으로 보내지 않고 테스트하는 전체 서버로 연결할 경우, SSL허용과 상관 없이 접속되었습니다. 그래서 Topic만 다르게 해서 보낼 경우 전송되는 것을 확인했습니다. 지속 적으로 SSL 보안 문제가 생길 경우 아래와 같이 연결해서 이번 콘테스트를 완료할 예정입니다.

 

 

Quest 4: Quest4-Pico W - 최종 결과물 완성 (상세 설명 및 동작 영상-화재감지기)
2022.10.03
완료

1. 개발 목적

 

 - 기존 Pico 제품에 Wireless 기능이 추가되었다고 해서 생활에 유용한 정보 전달과 안전에 조금 중점을 두어 아이디어를 생각해보았습니다.

  - 최근 들어 실외기, 김치냉장고, 콘센트 등 가정에서 화재가 많이 발생하고 있습니다. 화재 예방하기 위해서 비접촉 온도 센서와 가스 센서로 화재를 미리 감지하고 데이터화하여 특정 수치 이상이 된다면 알람을 주는 기능과 추가로 현재 실내의 온도를 측정해서 클라우드에 저장하게 합니다. 그리고 이 정보들을 외부에서도 볼 수 있다면 좋지 않을까 해서 PicoW 화재 감지기를 생각하게 되었습니다.

 

2. 개발 사항

 1) 기존 H/W 개발내용과 변경된 부분

 

  - 열화상 카메라가 아니라, 비접촉 온도 센서 경우 포인터 지점의 온도를 측정하기 때문에 반대 방향에서 불이 날 경우 측정할 수 없다고 생각되어 제거했습니다. 한 지점을 지켜본다고 하면 장착하면 될 것으로 생각됩니다.

 

 - 실제 사용한다면 배터리를 장착해서 사용한다는 개념을 넣어 충전 모듈과 배터리를 장착해보았습니다.

 

 2) S/W 개발 환경

 - WIndows 10

 - Thonny 3.3.11

 - MicroPython (rp2-pico-w-20220930-unstable-v1.19.1-461-g282401da5.uf2)

 

3. 하드웨어 구성

  - Raspberry Pi PicoW

  - MQ-2 (가스 센서)

  - DHT11 (온도, 습도 세넛)

  - 03962A(TP4056) 충전모듈

  - 리튬 폴리머 배터리 (1100mAh)

 

4. 회로도(배선)

PicoW

Sensor

3V3(36)

MQ-2(VCC), DHT11(VCC)

GND(38,23)

MQ-2(GND), DHT11(GND), LED-(GND)

GP17(22)

DHT11(SIG)

GP26(31)

MQ-2(A0)

VSYS

03962A 충전모듈(OUT+)

GND(38)

03962A 충전모듈(OUT-)

GP18(24)

LED+

 

 

5. F/W소프트웨어 흐름도

 

 1) 현장에 있는 무선 공유기(AP)에 접속하는 과정이 필요합니다.

 2) MQTT 서버에 SSL 등 보안 설정에 맞게 접속하여 세션을 열어둡니다.

 3) 가스 센서와 온도 센서에 초기화 작업을 해줍니다.

 4) 가스 센서와 온도 센서 측정을 시작합니다.

 5) 센서값에 대한 알람 기준값과 비교합니다

 6) 5번 과정에서 수치를 넘어가면 LED을 켭니다. (경광등이나 버저등을 연결하여 사용 가능)

 7) 측정 센서값을 MQTT Broker 서버에 전송합니다. 잠시 딜레이를 준 후에 4번 과정을 반복합니다.

 

 

6. MQTT Cloud 연결

 1) HIVEMQ 서버 가입

   (1) 회원가입하고 사이트에 고유 접속할 클러스터 URL 이 주어집니다.

    - https://www.hivemq.com/mqtt-cloud-broker/ 로 가입합니다.

    (2) 고유한 클러스트에 클라이언트가 생성할 수 있으며 접속하기 위한 Username과 Password를 만듭니다. 여기에서는 PicoW0001로 만들어 보았습니다.

 

 2) MQTT 데이터를 볼 수 있는 클라이언트 프로그램

  - 그래프 때문에 프로그램을 만들어야 할지, ThingSpeak를 사용해서 보여주는 것이 좋을지 고민했는데 그래프로 보여줄 수 있는 무료 MQTT 클라이언트 프로그램이 있어 사용해보았습니다.

 

  - 무료 MQTT Client 프로그램 (MQTT Explorer) :   https://mqtt-explorer.com/

 

  - 무료이간 한데 저작자 공개하고 프로그램 수정하지 않는다는 전제로 사용할 수 있습니다.

 

  - 사이트에서 Window 버전을 다운로드 받아도 되고 설치하지 않아도 되는 Portable 버전을 받아서 사용해도 됩니다. 여기서는 Portable 버전으로 해서 테스트하였습니다.

 

  - HIVEMQ Broker에 연결하려면 아래와 같이 설정해주어야 합니다.

 (TLS 설정을 활성화해주고 Validate certificate는 비활성화해주어야 하며 가입한 서버접속 번호를 넣어줍니다. 만든 계정정보를 입력 후 CONNECT를 누릅니다. 이상 없다면 다음 화면으로 넘어가고 문제가 있다면 접속에러 팝업창이 나타납니다.

 

 

7. 소스파일 구성

  - MQTT 라이브러리 파일 : umqtt/simple.py

  - MQ-2를 위한 소스파일 : basemq.py, mq-2.py

  - dht11를 위한 소스파일 : dht11.py

  - 데이터 송수신 및 센싱하는 메인 파일로 구성 : main.py

   (소스에 접속하는 주소등은 제거하였습니다. main.py 이며, 나머지는 첨부 파일 참조)

from machine import Pin
import utime
from dht import DHT11, InvalidChecksum

from mq2 import MQ2
import time
#import secrets
import network
from machine import Pin
from umqtt.simple import MQTTClient
import ussl
import ntptime

# Blink the onboard LED to show startup
led = Pin("LED", Pin.OUT)
led.off()
time.sleep_ms(100)
led.on()
time.sleep_ms(100)
led.off()

# Connect to WiFi
# Based on https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf
print('----------------------------------------------------------------------------------------------')
print('Connecting to AP: ' + "SSID")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID","AP_PW")


# Wait for connect or fail
connected = False
attempt = 0
while not connected and attempt < 10:
    attempt += 1
    if wlan.status() < 0 or wlan.status() >= 3:
        connected = True
    if not connected:
        print("Connection attempt failed: " + str(attempt))
        time.sleep(1)
    else:
        print("Connected on attempt: " + str(attempt))
        
if not connected or wlan.ifconfig()[0] == "0.0.0.0":
    # Blink LED to show there is a WiFi problem
    print("Bad WiFi connection: " + wlan.ifconfig()[0])
    while True:
        led.off()
        time.sleep_ms(150)
        led.on()
        time.sleep_ms(150)

print("WiFi status: " + str(wlan.ifconfig()))
led.on()

# To validate certificates, a valid time is required
print('----------------------------------------------------------------------------------------------')
print('Connecting to NTP')
ntptime.host = "de.pool.ntp.org"
ntptime.settime()
print('Current time: ' + str(time.localtime()))


# Based on https://www.tomshardware.com/how-to/send-and-receive-data-raspberry-pi-pico-w-mqtt
print('----------------------------------------------------------------------------------------------')
print("Connecting to " + "  ")
sslparams = {'server_hostname': "Your MQTT Broker Address"}

client = MQTTClient(client_id="your name",
                    server="Your MQTT Broker Address",
                    port=8883,
                    user="Your MQTT Broker ID ",
                    password="Your MQTT Broker PW",
                    keepalive=3600,
                    ssl=True,
                    ssl_params=sslparams) 
client.connect()
print('Connected to MQTT Broker : HIVEMQ')

# MQ-2 Setting
adcPin=26
GasSensor = MQ2(pinData = adcPin, baseVoltage = 3.3)
print("Calibrating")
GasSensor.calibrate()
print("Calibration completed")
print("Base resistance:{0}".format(GasSensor._ro))

# DHT11 
# Wait 1 second to let the sensor power up
utime.sleep(1)
signPin = Pin(17, Pin.OUT, Pin.PULL_DOWN)
TempSensor = DHT11(signPin)

AlarmLed = Pin(18, Pin.OUT)
GAS_MAX = 200.0
AlarmLed.off()

while True :
    try:
        
        utime.sleep(1)
        strTempData = "{:.1f}".format(TempSensor.temperature)
        print("Temperature: " + strTempData)
        print("Humidity: {}".format(TempSensor.humidity))
        
        fSmokeData = GasSensor.readSmoke()
        if (fSmokeData >= GAS_MAX):
            AlarmLed.on()
        else:
            AlarmLed.off()
            
        strGasData = "{:.1f}".format(fSmokeData)
        print("Smoke: " + strGasData )
        client.publish('PicoW/Gas', strGasData)
        client.publish('PicoW/Temp', strTempData)
    except InvalidChecksum:
        print("Checksum from the sensor was invalid")

    utime.sleep(2)

 

8. 센서 데이터 전송 결과 확인

 1) Thonny에서 Shell에서 전송확인

 

 

 2) HIVEMQ WebClient에서 확인

 

 3) MQTT Explorer 프로그램에서 확인

 

9. 동작 동영상

https://youtu.be/acMan4B9opQ

 

10. 프로젝트 진행중 얻게 된 경험과 소감

 

 - 기존 Pico의 부족한 네트워크 부분을 보강해서 활용성이 조금 더 좋아 보였습니다. 그러나 외부로 안테나 연결할 수 있는 커넥터 하나 만들어 주었으면 좀 더 좋지 않았을까 생각이 들었습니다.

 

 - MQTT라는 프로토콜에 관해서 공부할 좋은 기회가 되었고 각종 센서를 부착하여 현장에서도 IoT 센서로 사용할 수 있겠다 생각이 들었습니다.

 

 - PicoW로 새로운 제품이기도 하고 무료로 제공해주는 MQTT Broker를 사용하려다 보니 국내 자료들이 현재 시점에서 찾기가 힘들었습니다. 그래서 시행착오를 조금 경험하였습니다. 많은 사람이 도전해서 정보들도 많아 졌으면 합니다. 사실 센서 부착하고 간단하게 데이터만 보내면 되겠지 했는데, 조금 잘 만들어 보려고 하니, 접속하기 보안, 그래프로 나타내기 위한 plugin 등 생각해야 할 부분이 늘어났습니다.

 

 - 가스 센서를 잘 사용하기 위해서는 데이터시트 봐야 하고 특성 그래프를 잘 이해해서 프로그에 적용해야 합니다. 그리고 수학적인 계산이 조금 필요했습니다. 현실적으로 캘리브레이션 등을 하지고 못하고 실제 수치가 정확한지 알지 못해서 정확도를 알 수 없다는 어려움이 있었습니다.

 

 - 버그 발견(?) - 단정하기는 이르지만, Pico와 PicoW로 비교했을 때, 동일한 소스로 dht11 를 장착하고 통신을 Pico는 문제없이 센서값을 수신하였지만, PicoW는 비주기적으로 펄스 수신에 에러가 발생했습니다. 현재 버전에서는 문제가 있어 보였습니다. 향후 버전에서는 문제가 사라지지 않을까 합니다.

 

 

11. 참고 사이트

 

 1) HIVEMQ

  https://www.hivemq.com/mqtt-cloud-broker/

 2) dht11 관련

  https://microdigisoft.com/dht11-with-raspberry-pi-pico-using-micropython/

 3) MQ-2 관련

  https://github.com/peppe8o/rpi-pico-peppe8o/tree/main/libraries/mq-2

 4) MQTT Explorer 

  https://mqtt-explorer.com/

 

감사합니다.

프로젝트 자료실

프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.

등록된 자료가 없습니다.

프로젝트 소개

아직 등록된 프로젝트 소개가 없습니다.

코드 & 회로도

등록된 코드/회로 자료가 없습니다.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨보세요!