1、气体传感器
气体传感器是一种用于检测和测量空气中各种气体浓度的设备。它们通常使用化学反应、光学原理或电化学原理来检测气体,并通过输出电信号或其他输出形式来指示测量结果。
气体传感器在许多领域都有应用,包括工业安全、环境监测、室内空气质量监测等。常见的气体传感器包括可燃气体传感器、有毒气体传感器、一氧化碳传感器、二氧化碳传感器等。
气体传感器的工作原理根据不同的类型而有所不同。例如,可燃气体传感器通常使用化学反应来检测可燃气体的存在,并产生相应的电信号。有毒气体传感器则通过与特定气体发生化学反应来测量气体浓度。光学气体传感器则使用光的吸收或散射来检测气体。
气体传感器的准确性和灵敏度是评估其性能的重要指标。准确性表示传感器测量结果与实际值之间的偏差程度,而灵敏度表示传感器对目标气体浓度变化的响应程度。
气体传感器的选择应根据具体的应用需求来进行。例如,在工业环境中,可燃气体传感器和有毒气体传感器通常被广泛应用于检测潜在的危险气体泄漏。在室内空气质量监测中,二氧化碳传感器被用于检测人员密集区域的二氧化碳浓度,以确保室内空气质量符合健康标准。
总之,气体传感器是一种将某种气体体积分数转化成对应电信号的转换器,探测头通过气体传感器对气体样品进行调理,如滤除杂质和干扰气体,干燥或制冷等。它能够提供有关空气中各种气体浓度的信息,从而保护人们的安全和健康。
2、MQ系列传感器
MQ气体传感器使用的气敏材料是在清洁空气中电导率较低的二氧化锡(Sno2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ气体传感器对甲烷的灵敏度高,对丙烷、丁烷也有较好的灵敏度。这种传感器可检测多种可燃性气,是一款低成本传感器。
上图是MQ系列传感器,可根据实际场景需求检测各种气体。我拿生活中常见的三种安全气体检测应用举例,于是到网上购买了这3款传感器-MQ-2烟雾传感器、MQ-3酒精传感器、MQ-135空气质量传感器。
(1)MQ-2烟雾传感器
MQ-2烟雾传感器是一种常见的气体传感器,用于检测空气中的烟雾浓度。它的工作原理是通过检测空气中的气体浓度变化来判断是否存在烟雾。
MQ-2烟雾传感器的主要特点包括:
高灵敏度:MQ-2烟雾传感器对于烟雾的检测非常敏感,可以快速响应和检测到微小的烟雾浓度变化。
宽检测范围:MQ-2烟雾传感器可以检测多种烟雾气体,包括烟草烟雾、厨房烟雾等。
低功耗:MQ-2烟雾传感器具有低功耗特性,可以长时间稳定工作。
易于使用:MQ-2烟雾传感器可以通过简单的数字或模拟信号进行输出,方便与其他电路或微控制器进行连接和使用。
MQ-2烟雾传感器广泛应用于火灾报警系统、烟雾探测器、安防系统等领域,可以及时检测到烟雾浓度升高的情况,发出警报或采取其他措施,保护人们的生命和财产安全。
(2)MQ-3酒精传感器
MQ-3酒精传感器是一种可用于检测空气中酒精浓度的传感器。它是一种半导体传感器,通过对气体中的酒精分子进行化学反应,进而产生电信号来检测酒精浓度。
MQ-3酒精传感器通常由半导体材料(如锡氧化物)制成,并与热电致动装置、可变电阻器和电路连接在一起。当酒精气体通过传感器时,酒精分子与半导体材料发生作用,改变了材料的导电性能。这种变化被传感器电路检测到,并转化为电信号输出。
MQ-3酒精传感器具有高灵敏度、快速响应和稳定性好的特点。它可以用于检测空气中的酒精浓度,例如在酒后驾驶检测、酒精饮品生产过程中的气体泄漏监测等应用场景。
然而,值得注意的是,MQ-3酒精传感器对其他气体也会产生一定的响应,因此在使用时需要进行准确的校准和滤波处理,以提高检测准确性。同时,传感器的寿命也会受到酒精浓度、温度和湿度等环境因素的影响,因此需要定期维护和更换。
(3)MQ-135空气质量传感器
MQ-135空气质量传感器是一种用于检测空气中有害气体浓度的传感器。它能够检测到一些有害气体,如二氧化碳、一氧化碳、甲醛、氨气、苯等。传感器通过测量空气中有害气体的电阻变化来判断气体的浓度。MQ-135传感器通常被用于空气质量检测仪器、空调系统、智能家居、室内空气监测等领域。它具有体积小、功耗低、灵敏度高等特点,广泛应用于环境监测和空气质量检测。
从外观看橙色的是MQ-3酒精传感器,另外2个看起来一模一样,要区分主要看传感器罩头外圈的刻印。见下图。
3、MQ传感器引脚与接线
MQ传感器的引脚共有两种输出方式:AO 模拟信号输出和DO开关信号(TTL)。
电器性能
输入电压:DC5V功耗(电流):150mA
DO输出:TTL数字量0和1(0.1和5V)
AO输出:0.1-0.3V(相对无污染),高浓度电压4V左右
特别提醒:传感器通电后,需要预热20S左右,测量的数据才稳定,传感器发热属于正常现象,因为内部有电热丝。
特别注意:各类芯片、传感器或电子元器件等一定要按照手册要求接电,有的要求5V,有的是3.3V,如果出现不能使用或者灵敏度差等其他小问题,必须检查下供电电压或电流是否满足输入要求。
本MQ系列的DO与AO和电阻式传感器接法及使用一模一样。请参考嵌入式人工智能(25-基于树莓派4B的电阻式传感器)-CSDN博客
4、实验代码与现象
(1)DO实验,如果检测到气体就使用蜂鸣器报警,不同的气体,报警的时间间隔不同。
import RPi.GPIO as GPIO
import time
# 用于接收信号的引脚
beeper = 31
mq3_pin = 36
mq135_pin = 38
mq2_pin = 40
# 设置引脚编号方式
GPIO.setmode(GPIO.BOARD)
# 将36号物理引脚设置为下拉电阻以保证精度
GPIO.setup(mq3_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(mq135_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(mq2_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(beeper, GPIO.OUT)
GPIO.output(beeper, GPIO.HIGH)
def beep(seconds):
# 根据模块高低电平触发条件调正输出信号
GPIO.output(beeper, GPIO.LOW)
time.sleep(seconds)
GPIO.output(beeper, GPIO.HIGH)
def beepAction(secs, sleepsecs, times):
for i in range(times):
beep(secs)
time.sleep(sleepsecs)
if __name__ == '__main__':
n=0
try:
while True:
is_mq2DO = GPIO.input(mq2_pin)
is_mq3DO = GPIO.input(mq3_pin)
is_mq135DO = GPIO.input(mq135_pin)
if is_mq2DO:
print('未检测到烟雾')
else:
print('检测到烟雾')
beepAction(0.3,0.2,5)
if is_mq3DO:
print('未检测到酒精')
else:
print('检测到酒精')
beepAction(0.3,0.5,5)
if is_mq135DO:
print('未检测到气体杂质')
else:
print('检测到气体杂质')
beepAction(0.3,1,5)
time.sleep(2)
n=n+1
print('===========第{}次检测==========='.format(n))
except KeyboardInterrupt:
print('即将退出检测')
finally:
# 释放引脚
GPIO.cleanup()
实验发现树莓派的引脚默认电压并不都是高电平或者低电平,我用万用表测量GPIO26发现该引脚是低电平,插上蜂鸣器就响。GPIO6默认是高电平,插上不响,但运行程序的时候,默认低电平就响,所以蜂鸣器我就使用了GPIO26(BOARD31),程序默认给高电平,先关闭蜂鸣器。
实验发现效果还是可以的,比较灵敏。酒精的检测可以用卫生纸沾点酒放到传感器附近,各位同学就不用喝酒呼气检测了。烟雾的传感器可以用打火机气体丁烷(尽量不吸烟)来进行检测。本次实验不用抽烟喝酒也可以做。至于那个空气质量传感器,我试验发现对酒精和丁烷不敏感,我这边没有苯类化学气体,就不做实验了。
(2)AO检测,通过PCF8591检测酒精浓度大小,当数值超过200或者自己设定一个值,蜂鸣器就响。
import RPi.GPIO as GPIO
import time
import smbus
import time
bus = smbus.SMBus(1)
# 用于接收信号的引脚
beeper = 31
mq3_pin = 36
# 设置引脚编号方式
GPIO.setmode(GPIO.BOARD)
# 将36号物理引脚设置为下拉电阻以保证精度
GPIO.setup(mq3_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(beeper, GPIO.OUT)
GPIO.output(beeper, GPIO.HIGH)
#通过 sudo i2cdetect -y -1 可以获取到IIC的地址
def setup(Addr):
global address
address = Addr
# 读取模拟量信息
def read(chn): #通道选择,范围是0-3之间
try:
if chn == 0:
bus.write_byte(address,0x40)
if chn == 1:
bus.write_byte(address,0x41)
if chn == 2:
bus.write_byte(address,0x42)
if chn == 3:
bus.write_byte(address,0x43)
bus.read_byte(address) # 开始进行读取转换
except Exception as e:
print ("Address: %s" % address)
print (e)
return bus.read_byte(address)
if __name__ == "__main__":
setup(0x48)
try:
while True:
Alcohol_concentration = read(0)
print(Alcohol_concentration)
if Alcohol_concentration>200:
GPIO.output(beeper, GPIO.LOW)
else:
GPIO.output(beeper, GPIO.HIGH)
time.sleep(2)
except KeyboardInterrupt:
print('即将退出检测')
finally:
# 释放引脚
GPIO.cleanup()