1. 项目概述
1.1 主题介绍
随着智能建筑技术的快速发展,楼宇自动化系统已成为现代建筑不可或缺的核心组成部分。烟雾探测作为消防安全的关键环节,其可靠性和响应速度直接关系到人员生命安全和财产保护。传统的烟雾报警器功能已经无法满足现在化的需求。本项目设计了一款基于ADPD188BI光学传感器的智能烟雾报警系统,采用MicroPython作为核心开发语言,集成TFT显示屏实时显示监测数据,支持声光报警功能,可广泛应用于家庭、办公室、仓库等场所的消防安全监测。
1.2 项目目标
本项目的主要目标是设计并实现一款具有以下特点的智能烟雾报警系统:
高灵敏度检测:利用ADPD188BI双波长光学传感器实现对烟雾的精确检测,通过比较蓝光通道(CH1)和红外光通道(CH2)的信号比值变化来判断是否存在烟雾。
实时数据显示:通过1.3寸TFT显示屏实时显示两个通道的原始数据及烟雾浓度比值,直观反映当前环境状态。
多级报警功能:系统支持NORMAL(正常)、WARNING(警告)、ALARM(报警)三个状态,通过颜色和文字进行区分,并配以蜂鸣器发出不同节奏的报警声。
迟滞处理:采用迟滞比较算法,防止状态在阈值附近频繁跳动,提高系统稳定性。
2. 硬件系统介绍
2.1 主控芯片
本系统采用RP2040作为主控芯片打造的RP2040 Game Kit作为主控平台。RP2040双核ARM Cortex-M0+处理器,工作频率高达133MHz。RP2040 Game Kit集成TFT显示和蜂鸣器。
2.2 烟雾传感器ADPD188BI
ADPD188BI是ADI(Analog Devices Inc.)推出的一款集成光学模块,专为烟雾检测应用设计。其核心特点如下:
技术规格:
参数 | 数值 |
工作电压 | 2.0V ~ 3.65V |
I2C地址 | 0x64 (7位地址) |
通信接口 | I2C/SPI |
通道数 | 4个光电二极管通道 |
LED通道 | 3个LED驱动通道 |
采样率 | 最高2kHz |
封装 | 14引脚OLGA |
ADPD188BI采用双波长光学检测技术,传感器内部集成了蓝光LED(LED1)和红外LED(LED3)。蓝光LED发出波长约470nm的蓝光,红外LED发出波长约850nm的红外光。当光线穿过空气时,烟雾颗粒会对两种波长的光产生不同的散射效果:
- 在清洁空气中,红外光和蓝光的光强比值保持相对稳定
- 当空气中出现烟雾颗粒时,烟雾对蓝光的散射作用增强,导致蓝光通道信号明显增大,而红外通道变化较小
- 通过计算CH1/CH2比值的变化,可以有效判断空气中是否存在烟雾
数据输出:
ADPD188BI支持多种数据输出模式,包括:
- 16位单通道数据
- 32位累加和模式
- FIFO模式,可存储多组采样数据
3. 系统方案设计
主要系统组成
数据采集:ADPD188BI传感器以16Hz的采样率进行烟雾数据采集,通过I2C接口将SLOTA(蓝光通道)和SLOTB(红外通道)的16位数据发送给Pico。
数据处理:Pico对接收到的原始数据进行以下处理:
- 将数据加入历史缓冲区
- 计算滑动平均值
- 计算CH1/CH2比值
- 根据阈值判断当前状态
数据显示:将处理后的数据发送到TFT显示屏进行显示,包括:
- 状态信息(NORMAL/WARNING/ALARM)
- CH1和CH2的原始数值
- 比值曲线
报警输出:根据判断结果控制蜂鸣器:
- NORMAL:蜂鸣器静音
- WARNING:蜂鸣器静音(可扩展为静音告警)
- ALARM:蜂鸣器按设定模式发出"滴-滴-滴"报警声
烟雾检测原理
本系统采用比值法进行烟雾检测,其核心原理如下:
ADPD188BI的两个LED通道分别工作在不同的时间槽(Slot)中:
- Slot A:蓝光LED(LED1)发光,PD1接收反射光
- Slot B:红外LED(LED3)发光,PD1接收反射光
在清洁空气中,由于光路一致,两个通道的信号比值保持稳定。当烟雾进入光路时:
- 烟雾对蓝光的散射系数更大
- CH1信号显著增大
- CH2信号基本不变或略有变化
- CH1/CH2比值明显上升
实验测得:
- 正常空气:CH1 ≈ 3659, CH2 ≈ 16961, 比值 ≈ 0.22
- 有烟雾时:CH1可达30000以上,比值可超过1.5
报警阈值设计
系统采用三级报警机制,阈值设置如下:
状态 | 条件 | 比值范围 | 指示颜色 | 蜂鸣器 |
NORMAL | 比值 < 1.0 | < 1.0 | 绿色 | 静音 |
WARNING | 1.0 ≤ 比值 < 1.5 | 1.0~1.5 | 橙色 | 静音 |
ALARM | 比值 ≥ 1.5 | ≥ 1.5 | 红色 | 报警音 |
为防止状态在阈值附近频繁跳动,系统采用了迟滞处理:
- 从ALARM恢复到WARNING需要比值 < 1.0
- 从WARNING恢复到NORMAL需要比值 < 1.0
- 即下降阈值(1.0)低于上升阈值(1.5),形成迟滞区间
4. 原理图与PCB设计
4.1 硬件连接
本项目的硬件连接采用杜邦线方式搭建,传感器与主控平台的连接关系如下:
I2C接口连接:
主控平台引脚 | 功能 | ADPD188BI引脚 |
GPIO16 | I2C SDA | SDA |
GPIO17 | I2C SCL | SCL |
3.3V | 电源 | VDD |
GND | 地 | GND |
实物连接如下:
4.2 系统接线图
4.3传感器板设计
原理图:
PCB:
5. 软件设计
本项目采用Thonny IDE作为开发环境,配合MicroPython固件进行开发。Thonny是一款轻量级的Python IDE,特别适合MicroPython开发。
主程序采用轮询方式工作,流程如下:
软件采用模块化设计,主要包括以下模块:
模块名称 | 功能描述 |
adpd188bi.py | ADPD188BI传感器驱动 |
main.py | 主程序,包含显示、报警逻辑 |
st7789.py | TFT显示屏驱动 |
fonts/ | 字体文件 |
驱动程序设计
ADPD188BI寄存器配置
ADPD188BI的工作需要配置多个寄存器,关键寄存器配置如下:
采样时钟配置(0x4B):
值:0x4C92
- BIT7: CLK32K_EN = 1 (使能32kHz时钟)
- BIT6: CLK32K_BYPASS = 0 (使用32kHz时钟)
模式控制(0x10):
0x01: PROGRAM模式 - 可写入寄存器
0x02: NORMAL模式 - 正常运行
0x00: STANDBY模式 - 低功耗待机
时隙使能(0x11):
二次写入:0x30A9
- SLOTA保持使能,SLOTB使能
首次写入:0x31D9
- BIT13: RDOUT_MODE = 1
- BIT12: FIFO_OVRN_PREVENT = 1
- BIT10-8: SLOTB_FIFO_MODE = 110 (32位模式)
- BIT5: SLOTB_EN = 1
- BIT4-2: SLOTA_FIFO_MODE = 110 (32位模式)
- BIT0: SLOTA_EN = 1
PD/LED选择(0x14):
值:0x011D
- BIT11-8: SLOTB_PD_SEL = 0001 (选择PD1)
- BIT9-8: SLOTB_LED_SEL = 01 (选择LED1/蓝光)
- BIT7-4: SLOTA_PD_SEL = 0001 (选择PD1)
- BIT3-0: SLOTA_LED_SEL = 1101 (选择LED3/红外)
积分序列(0x17, 0x1D):
值:0x0009
- CHOP模式:反相、非反相、非反相、反相
LED电流设置(0x22, 0x23):
ILED3_COARSE (0x22): 0x3539 - 红外LED电流
ILED1_COARSE (0x23): 0x3536 - 蓝光LED电流
驱动程序核心代码
以下是ADPD188BI驱动的初始化函数,采用直接寄存器写入方式确保可靠性:
def init_sensor():
"""初始化ADPD188BI传感器"""
reg_write(0x10, 0x0001) # 进入编程模式
utime.sleep_ms(50)
reg_write(0x4B, 0x4C92) # 配置采样时钟
utime.sleep_ms(20)
reg_write(0x11, 0x31D9) # 配置时隙使能
utime.sleep_ms(10)
reg_write(0x12, 0x01F4) # 采样率16Hz
reg_write(0x14, 0x011D) # PD/LED选择
reg_write(0x15, 0x0000) # 不平均
reg_write(0x17, 0x0009) # 积分序列A
reg_write(0x1D, 0x0009) # 积分序列B
# ... 更多寄存器配置
reg_write(0x11, 0x30A9) # 二次写入时隙使能
reg_write(0x10, 0x0002) # 进入正常模式
数据读取函数
def read_sensor():
"""读取传感器数据"""
ch1 = reg_read(0x64) # SLOTA_PD1 - 蓝光通道
ch2 = reg_read(0x68) # SLOTB_PD1 - 红外通道
return ch1, ch2
6. 系统功能验证
6.1 正常空气环境测试
在无烟雾的正常环境中:
6.2 烟雾检测测试
使用烙铁产生的烟雾进行测试:
当烟雾进入光路时,CH1(蓝光通道)数值从3659快速上升到30000以上,飙升的很快。
7. 技术难点
我们本次设计的难点一共有三个,一个是烟室的设计,我们只能参考ADI的进行设计;然后最复杂的地方就是通道数据的读取,在此之前需要进行很多的寄存器设计;还有就是烟雾报警阈值的设计,正对不同的应用场景是不一样的,这个没有具体的数据只能取一个比较经典的值。
8. 心得体会
本项目顺利完成了一款基于ADPD188BI的智能烟雾报警系统的开发,主要成果涵盖以下几个方面:硬件系统构建方面,成功搭建了以RP2040为核心的硬件平台,并集成了ADPD188BI烟雾传感器、ST7789 TFT显示屏以及有源蜂鸣器;驱动程序开发方面,深入剖析了ADPD188BI的数据手册及ADI官方驱动,编写出稳定可靠的MicroPython驱动程序,确保了寄存器的正确配置与数据的精准读取;软件功能实现方面,实现了数据采集、滑动平均滤波、三级报警状态机以及蜂鸣器报警等一系列功能,之前没有接触这类传感器,再加上对应的测试环境非常不好搭建,在设计过程中走了不少弯路。