You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
냉장고의 문 상태와 가스 센서 값을 실시간으로 감지하고,
LCD와 Bluetooth 통신을 통해 상태를 확인할 수 있는 임베디드 시스템입니다.
1. 프로젝트 목표
실시간 상태 감지: 홀 센서로 냉장고 문 열림·닫힘을 감지하고 MQ-135 가스 센서 값을 주기적으로 측정
직관적인 로컬 모니터링: 16×2 I²C LCD에 문 상태와 가스 센서 전압을 표시
비동기 통신: UART 인터럽트와 Circular Queue를 이용해 수신 데이터 유실과 태스크 블로킹을 최소화
안정적인 이벤트 전달: ACK 타임아웃으로 서버 연결 상태를 판단하고, 단절 중 발생한 이벤트를 재연결 후 순차 전송
기능별 모듈화: Application, Hardware, BSP 계층을 분리하여 유지보수성과 확장성 확보
2. 전체 시스템 구조
flowchart LR
subgraph Input[센서 입력]
HALL[Hall Sensor<br/>문 상태]
GAS[MQ-135<br/>가스 센서]
RTC[DS1307 RTC<br/>시간 정보]
end
subgraph MCU[STM32F411 + FreeRTOS]
SENSOR[Sensor Task]
DEFAULT[Display Task]
COMM[Communication Task]
QUEUE[(Offline Event Queue<br/>최대 50건)]
end
HALL --> SENSOR
GAS --> SENSOR
RTC --> SENSOR
SENSOR --> DEFAULT
SENSOR --> COMM
SENSOR --> QUEUE
QUEUE --> COMM
DEFAULT --> LCD[16×2 I²C LCD]
COMM <--> BT[Bluetooth / UART]
BT <--> SERVER[외부 서버]
Loading
하드웨어 구성
구분
구성
역할
메인 제어부
STM32F411
센서 처리, LCD 표시, 통신 및 FreeRTOS 태스크 실행
문 감지
Hall Sensor
GPIO 상태를 이용한 문 열림·닫힘 감지 및 디바운싱
공기질 감지
MQ-135
ADC Polling으로 값을 읽고 0–3300 mV 범위로 변환
시간 관리
DS1307 RTC
문 상태 이벤트가 발생한 시각 기록
사용자 표시
16×2 LCD + PCF8574
시스템 상태, 문 상태, 가스 센서 전압 표시
외부 통신
Bluetooth / UART6
센서 데이터·이벤트 송신 및 ACK·제어 명령 수신
디버그
UART2
시간과 센서 측정값 출력
3. 소프트웨어 구조
FreeRTOS의 세 개 태스크가 표시, 센싱, 통신을 분담합니다.
태스크
실행 주기
주요 역할
defaultTask
100 ms
시스템 초기화, RTC 시간 출력, LCD 화면 갱신
sensorTask
10 ms
문 상태 디바운싱, 주기적 가스 측정, 이벤트 생성, 연결 상태 확인
commTask
10 ms
UART Circular Queue 처리, 패킷 파싱, ACK 및 제어 명령 처리
MyApp/
├── Application/ # 태스크 로직, ACK 및 오프라인 이벤트 처리
├── Hardware/ # Bluetooth, Gas, Hall, LCD, RTC 드라이버
├── BSP/ # 보드 초기화 계층
└── Common/ # 공통 정의 및 하드웨어 의존성 관리
4. 핵심 기능
문 상태 감지
홀 센서 입력을 통해 문 열림·닫힘 상태 확인
연속 샘플 기반 디바운싱으로 채터링 방지
상태 변경 시 OPEN 또는 CLOSE 이벤트 즉시 전송
닫힘 이벤트 발생 후 LCD에 상태를 일정 시간 표시
가스 센서 모니터링
MQ-135 아날로그 출력을 12-bit ADC로 측정
측정값을 밀리볼트 단위로 변환하여 LCD와 UART에 출력
1초 주기로 외부 서버에 센서 데이터 전송
비동기 Bluetooth 통신
UART RX 인터럽트에서는 수신 바이트를 128-byte Circular Queue에 저장