嵌入式人工智能(30-基于树莓派4B的气体传感器-MQ系列烟雾、酒精、空气质量等传感器)

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=0try: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+1print('===========第{}次检测==========='.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 timebus = 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 addressaddress = 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/384744.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django学习(二)

get请求 练习: views.py def test_method(request):if request.method GET:print(request.GET)# 如果链接中没有参数a会报错print(request.GET[a])# 使用这个方法,当查询不到参数时,不会报错而是返回你设置的值print(request.GET.get(c,n…

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

在本文中,我们将演示如何新建一个基本的 Spring Boot 项目。写这篇文章的时候我还是很惊讶的,因为我发现有些java的初学者,甚至工作10年的老员工居然并不会新建一个SpringBoot项目,所以特别出了一篇文章来教大家新建一个SpringBoo…

【vluhub】elasticsearch漏洞

Elasticsearch介绍 是Apache旗下的一个开源的、分布式、RESTful的搜索和分析引擎,适用于java语言项目 默认端口9200 kali中搭建ElasticHD, 即可未授权绕过ES可视化界面 直通车 https://github.com/360EntSecGroup-Skylar/ElasticHD/releases/download/1.4/elas…

SSIS_SQLITE

1.安装 SQLite ODBC 驱动程序 2.添加SQLite数据源 在“用户DSN”或“系统DSN”选项卡中,点击“添加”。选择“SQLite3 ODBC Driver”,然后点击“完成”。在弹出的配置窗口中,设置数据源名称(DSN),并指定S…

51单片机13(动态数码管实验)

一、数码管动态显示原理 1、动态显示是利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。 (1)多位数码管依然可以进行静态的一个显示,那么在前面我们介绍静态数码管的时候&…

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏:基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示,运维团队可以迅速发现异常,优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…

运维团队如何借助分布式部署提升监控效率与可靠性

随着企业IT基础设施的日益复杂和分布式架构的广泛应用,传统的监控解决方案已经难以满足现代运维团队的需求。在这样的背景下,分布式部署作为一种新型的监控架构,以其灵活性、可扩展性和高可用性,成为了运维团队提升监控效率与可靠…

如何系统的学习C++和自动驾驶算法

给大家分享一下我的学习C和自动驾驶算法视频,收藏订阅都很高。打开下面的链接,就可以看到所有的合集了,订阅一下,下次就能找到了。 【C面试100问】第七十四问:STL中既然有了vector为什么还需要array STL中既然有了vec…

中小学汉字听写大赛方案及执行流程

一、活动背景 汉字作为中国最宝贵的文化遗产,在五千年的历史长河里,汉字以其浩瀚广博抒写着华夏历史,以其灵秀展示着炎黄之精神。传承汉字文明是我们的使命和主责任。为提高我校七年级学生听写汉字的能力,规范汉字书写的能力&…

Spring循环依赖详解

一、什么是循环依赖 在Spring框架中,循环依赖是指两个或更多的Bean相互间直接或间接地依赖对方的情况。这种依赖关系可能导致Bean的实例化过程中出现问题,但Spring通过其内部的处理机制能够解决某些类型的循环依赖。 简单的说就是A依赖B,B依赖…

数据结构——堆(C语言版)

树 树的概念: 树(Tree)是一种抽象数据结构,它由节点(node)的集合组成,这些节点通过边相连,把 节点集合按照逻辑顺序抽象成图像,看起来就像一个倒挂着的树,也…

通过 C# 写入数据到Excel表格

Excel 是一款广泛应用于数据处理、分析和报告制作的电子表格软件。在商业、学术和日常生活中,Excel 的使用极为普遍。本文将详细介绍如何使用免费.NET库将数据写入到 Excel 中,包括文本、数值、数组、和DataTable数据的输入。 文章目录 C# 在Excel单元格…

尝试一文带你理解 --- 进程的控制

序言 在前两篇文章中都使用到了名为 fork 的函数,我们简单地介绍了他可以创建一个子进程。所以,在这篇文章中,除了进程的创建,还会介绍进程的退出,进程的等待,进程的替换等内容,帮助大家更好地去…

深度解析Linux-C——结构体(初始化,结构体数组,结构体大小,位段操作,联合体,内存对齐,C的预处理,宏和带参宏,条件编译)

目录 结构体的三种初始化 结构体的两种引用 结构体数组 结构体大小 结构体实现位段操作 联合体 内存对齐 C的预处理 带参宏 条件编译 结构体的三种初始化 定义如下结构体 struct student {char name[100]; int age; float height; } ; 1、定义变量时初始化 s…

Android APK混淆处理方案分析

这里写目录标题 一、前言1.1 相关工具二、Apk 分析2.1 apk 解压文件2.2 apk 签名信息2.3 apk AndroidManifest.xml2.4 apk code三、Apk 处理3.1 添加垃圾文件3.2 AndroidManifest.xml 处理3.3 dex 混淆处理3.4 zipalign对齐3.5 apk 重新签名3.6 apk 安装测试四、总结一、前言 提…

LoRaWAN网络中的chirpstack

目录 一、chirpstack介绍 二、网关与chirpstack之间的通信 三、NS与AS之间的通信 1、Protobuf 2、gRPC 一、chirpstack介绍 ChirpStack 是一个开源的 LoRaWAN 网络服务器,可用于 设置私有或公共 LoRaWAN 网络。ChirpStack 提供了一个 Web 界面 用于管理网关、设…

ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)

一、简介 1.1、软件简介 ELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。 1.1.1、Elasticsearch简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析…

【Linux】文件系统|CHS寻址|LBA逻辑块|文件索引|inode|Date block|inodeBitmap|blockBitmap

前言 一个进程通过文件描述符标识一个打开的文件,进程拿着文件描述符可以在内核中找到目标文件进行读写等操作。这是打开的文件,而没有被打开的文件存储在磁盘中,是如何管理的?操作系统在偌大的磁盘中如何找到想要的文件并打开的…

Redis从入门到超神-(十二)Redis监听Key的过期事件

前言 试想一个业务场景,订单超过30分钟未支付需要做自动关单处理,修改订单状态,库存回退等,你怎么实现?方案一:可以使用定时任务扫表,通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗…

Modbus转BACnet/IP网关BA100-配硬件说明

在现代自动化系统中,不同设备和系统之间的通信至关重要,Modbus和BACnet/IP协议虽然各有优势,但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁,允许不同系统之间的无缝数据交换。 一、Modbus转…