风筝
发表于: 2023-2-24 10:12:55 | 显示全部楼层

通过使用MQ3酒精传感器模块,可以让您接下来Arduino项目感测酒精。该传感器检测空气中酒精的存在及其浓度。 如果您自制一台呼气式酒精测试仪来确定某人呼吸中的酒精含量,MQ3酒精传感器模块是一个绝佳的选择。


MQ3酒精传感器

MQ3传感器是MQ传感器系列中使用最广泛的传感器之一。它是一种MOS(金属氧化物半导体)传感器。 金属氧化物传感器也称为化学电阻器,因为传感是基于传感材料暴露于酒精时的电阻变化。


MQ3酒精传感器工作在5V下,功耗约为800mW。 它可以检测范围为25至500ppm的酒精浓度。


MQ3酒精传感器内部结构

MQ3是一种加热器驱动的传感器。 因此,它覆盖着两层被称为“防爆网”的精细不锈钢网。 它确保传感器内部的加热元件不会因为我们感应的是易燃气体(酒精)而引起爆炸。

MQ3-Alcohol-Sensor-Parts-Hardware-Overview.jpg


它还可以保护传感器并过滤掉悬浮颗粒,只允许气态元素通过腔室。

MQ3-Alcohol-Sensor-Internal-Structure.jpg


移除外网后,传感器看起来像这样。传感元件和六个延伸到胶木底座之外的连接腿形成星形结构。六个引线中的两个 (H) 负责加热传感元件,并通过镍铬线圈(一种众所周知的导电合金)连接在一起。


其余四根信号导线(A 和 B)用铂丝连接。 这些电线连接到传感元件的主体,并传递流过传感元件的电流的微小变化。

MQ3-Sensing-Element-Aluminium-Oxide-Ceramic-with-Tin-Dioxide-Coating.jpg


管状传感元件由氧化铝 (AL2O3) 基陶瓷和二氧化锡涂层 (SnO2) 制成。 二氧化锡是最重要的材料,因为它对酒精敏感。 另一方面,陶瓷基板提高了加热效率,确保传感器区域持续加热到工作温度。

MQ3-Alcohol-Sensor-Internal-Sensing-Element-Structure.png


总而言之,加热系统由镍铬线圈和氧化铝基陶瓷组成,而传感系统由铂丝和二氧化锡涂层组成。


MQ3酒精传感器如何工作?

当二氧化锡层被加热到高温时,氧被吸附在表面上。 当空气干净时,二氧化锡导带中的电子会被氧分子吸引。这会在SnO2颗粒表面下方形成电子耗尽层,形成势垒。 结果,SnO2膜变得高电阻并阻止电流流动。


然而,在酒精存在的情况下,吸附氧的表面密度会随着酒精与酒精反应而降低,从而降低势垒。 这样,电子被释放到二氧化锡中,允许电流自由流过传感器。

MQ3-Alcohol-Sensor-Working.gif


MQ3酒精传感器模块硬件概述

MQ3酒精传感器使用简单,具有两种不同的输出。 它不仅提供了酒精存在的二进制指示,而且还提供了其在空气中浓度的模拟表示。

MQ3-Alcohol-Sensor-Module.jpg


传感器的模拟输出电压与酒精浓度成比例变化。 空气中酒精浓度越高,输出电压越高; 浓度越低,输出电压越低。 下面的动画显示了酒精浓度和输出电压之间的关系。

MQ3-Alcohol-Sensor-Module-Working-Animation.gif


该模拟信号由LM393高精度比较器数字化,并在数字输出 (D0) 引脚提供。

MQ3-Sensor-LM393-Comparator-with-Sensitivity-Adjustment-pot.jpg


该模块包括一个电位计,用于调节数字输出 (D0) 的灵敏度。 您可以使用它来设置一个阈值,以便当酒精浓度超过阈值时,模块输出低电平,否则输出高电平。


此外,该模块还有两个LED灯。 当模块开启时电源LED亮起,当酒精浓度超过阈值时状态LED亮起。


MQ3酒精传感器模块的引脚排列

现在让我们看一下引脚排列。

MQ3-Alcohol-Sensor-Pinout.png


VCC 为模块供电。 将它连接到Arduino的5V输出。

GND 是接地引脚。

D0 表示存在酒精。 当酒精浓度超过阈值时,D0变为低电平,否则变为高电平。

A0 产生与酒精浓度成正比的模拟输出电压,因此浓度越高,电压越高,浓度越低,电压越低。


校准MQ3酒精传感器

由于MQ3是一个加热器驱动的传感器,如果长时间存放,传感器的校准可能会漂移。


长时间存放(一个月或更长时间)后首次使用时,传感器必须充分预热24-48小时以确保最大精度。


如果最近使用过传感器,则只需5-10分钟即可完全预热。 在预热期间,传感器读数通常很高,然后逐渐降低直到稳定。


实验1 – 使用模拟输出 (A0) 测量酒精浓度

在第一个实验中,我们将读取模拟输出以测量酒精浓度。


硬件接线

让我们将MQ3酒精传感器连接到Arduino。


首先将VCC引脚连接到Arduino的5V引脚,将GND引脚连接到Arduino的接地引脚。最后,将模块的A0输出引脚连接到Arduino上的模拟引脚#0。


下图显示了接线。

Arduino-Wiring-MQ3-Alcohol-Sensor-To-Read-Analog-Output.png


寻找阈值

要估计酒精中毒程度,您需要记录在饮酒前后吹气时传感器输出的值。


只需运行下面的草图并获取读数。

  1. #define MQ3pin 0

  2. float sensorValue;  //variable to store sensor value

  3. void setup() {
  4.         Serial.begin(9600); // sets the serial port to 9600
  5.         Serial.println("MQ3 warming up!");
  6.         delay(20000); // allow the MQ3 to warm up
  7. }

  8. void loop() {
  9.         sensorValue = analogRead(MQ3pin); // read analog input pin 0

  10.         Serial.print("Sensor Value: ");
  11.         Serial.println(sensorValue);
  12.         
  13.         delay(2000); // wait 2s for next reading
  14. }
复制代码

运行草图代码后,您应该会看到类似于以下内容的读数:

●    在没有酒精的情况下(大约 120)

●    在有酒精的情况下(约 500)

Calibrating-MQ3-Alcohol-Sensor.png


此测试可能需要反复试验。 获得读数后,您可以将它们用作触发动作的阈值。


Arduino代码

下面的草图使用以下阈值估计酒精中毒的程度:

●    < 120 是清醒的

●    120-400 正在饮酒

●    > 400 喝醉了

  1. /* Replace these values with your own readings */
  2. #define Sober 120   // Define max value that we consider sober
  3. #define Drunk 400   // Define min value that we consider drunk

  4. #define MQ3pin 0

  5. float sensorValue;  //variable to store sensor value

  6. void setup() {
  7.         Serial.begin(9600); // sets the serial port to 9600
  8.         Serial.println("MQ3 warming up!");
  9.         delay(20000); // allow the MQ3 to warm up
  10. }

  11. void loop() {
  12.         sensorValue = analogRead(MQ3pin); // read analog input pin 0

  13.         Serial.print("Sensor Value: ");
  14.         Serial.print(sensorValue);
  15.         
  16.         // Determine the status
  17.         if (sensorValue < Sober) {
  18.                 Serial.println("  |  Status: Stone Cold Sober");
  19.         } else if (sensorValue >= Sober && sensorValue < Drunk) {
  20.                 Serial.println("  |  Status: Drinking but within legal limits");
  21.         } else {
  22.                 Serial.println("  |  Status: DRUNK");
  23.         }
  24.         
  25.         delay(2000); // wait 2s for next reading
  26. }
复制代码

如果一切正常,您应该会在串口监视器上看到类似的内容。

Simple-breathalyzer-using-analog-output.png


实验2 – 使用数字输出 (D0) 检测是否存在酒精

在第二个实验中,我们将使用数字输出来检测酒精的存在。


硬件接线

我们将重复使用之前实验的电路。只需断开与ADC引脚的连接,并将模块上的D0引脚连接到Arduino的数字引脚#8。


下图显示了接线。

Arduino-Wiring-MQ3-Alcohol-Sensor-To-Read-Digital-Output.png


设置阈值

该模块有一个内置电位器,用于设置酒精浓度阈值,高于该阈值模块输出低电平,状态 LED 亮起。

Digital-Output-of-MQ3-Alcohol-Sensor.png


现在,要设置阈值,让酒精蒸汽进入传感器并顺时针转动电位器,直到状态LED亮起。 然后,逆时针转动电位器直到LED熄灭。


Arduino代码

现在,将下面的草图上传到您的 Arduino。

  1. #define MQ3pin 8

  2. int sensorValue;  //variable to store sensor value

  3. void setup() {
  4.         Serial.begin(9600); // sets the serial port to 9600
  5.         Serial.println("MQ3 warming up!");
  6.         delay(20000); // allow the MQ3 to warm up
  7. }

  8. void loop() {
  9.         sensorValue = digitalRead(MQ3pin); // read digital output pin
  10.         Serial.print("Digital Output: ");
  11.         Serial.print(sensorValue);
  12.         
  13.         // Determine the status
  14.         if (sensorValue) {
  15.                 Serial.println("  |  Alcohol: -");
  16.         } else {
  17.                 Serial.println("  |  Alcohol: Detected!");
  18.         }
  19.         
  20.         delay(2000); // wait 2s for next reading
  21. }
复制代码

您可以在串口监视器上看到类似的输出。

Alcohol-detection-using-digital-output.png

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1483



手机版|

GMT+8, 2024-5-21 21:29 , Processed in 0.038483 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表