详解MQ3酒精传感器的工作原理以及与Arduino的连接方式
通过使用MQ3酒精传感器模块,可以让您接下来 Arduino项目感测酒精。该传感器检测空气中酒精的存在及其浓度。 如果您自制一台呼气式酒精测试仪来确定某人呼吸中的酒精含量,MQ3酒精传感器模块是一个绝佳的选择。
MQ3酒精传感器
MQ3传感器是MQ传感器系列中使用最广泛的传感器之一。它是一种MOS(金属氧化物半导体)传感器。 金属氧化物传感器也称为化学电阻器,因为传感是基于传感材料暴露于酒精时的电阻变化。
MQ3酒精传感器工作在5V下,功耗约为800mW。 它可以检测范围为25至500ppm的酒精浓度。
MQ3酒精传感器内部结构
MQ3是一种加热器驱动的传感器。 因此,它覆盖着两层被称为“防爆网”的精细不锈钢网。 它确保传感器内部的加热元件不会因为我们感应的是易燃气体(酒精)而引起爆炸。
它还可以保护传感器并过滤掉悬浮颗粒,只允许气态元素通过腔室。
移除外网后,传感器看起来像这样。传感元件和六个延伸到胶木底座之外的连接腿形成星形结构。六个引线中的两个 (H) 负责加热传感元件,并通过镍铬线圈(一种众所周知的导电合金)连接在一起。
其余四根信号导线(A 和 B)用铂丝连接。 这些电线连接到传感元件的主体,并传递流过传感元件的电流的微小变化。
管状传感元件由氧化铝 (AL2O3) 基陶瓷和二氧化锡涂层 (SnO2) 制成。 二氧化锡是最重要的材料,因为它对酒精敏感。 另一方面,陶瓷基板提高了加热效率,确保传感器区域持续加热到工作温度。
总而言之,加热系统由镍铬线圈和氧化铝基陶瓷组成,而传感系统由铂丝和二氧化锡涂层组成。
MQ3酒精传感器如何工作?
当二氧化锡层被加热到高温时,氧被吸附在表面上。 当空气干净时,二氧化锡导带中的电子会被氧分子吸引。这会在SnO2颗粒表面下方形成电子耗尽层,形成势垒。 结果,SnO2膜变得高电阻并阻止电流流动。
然而,在酒精存在的情况下,吸附氧的表面密度会随着酒精与酒精反应而降低,从而降低势垒。 这样,电子被释放到二氧化锡中,允许电流自由流过传感器。
MQ3酒精传感器模块硬件概述
MQ3酒精传感器使用简单,具有两种不同的输出。 它不仅提供了酒精存在的二进制指示,而且还提供了其在空气中浓度的模拟表示。
传感器的模拟输出电压与酒精浓度成比例变化。 空气中酒精浓度越高,输出电压越高; 浓度越低,输出电压越低。 下面的动画显示了酒精浓度和输出电压之间的关系。
该模拟信号由LM393高精度比较器数字化,并在数字输出 (D0) 引脚提供。
该模块包括一个电位计,用于调节数字输出 (D0) 的灵敏度。 您可以使用它来设置一个阈值,以便当酒精浓度超过阈值时,模块输出低电平,否则输出高电平。
此外,该模块还有两个LED灯。 当模块开启时电源LED亮起,当酒精浓度超过阈值时状态LED亮起。
MQ3酒精传感器模块的引脚排列
现在让我们看一下引脚排列。
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。
下图显示了接线。
寻找阈值
要估计酒精中毒程度,您需要记录在饮酒前后吹气时传感器输出的值。
只需运行下面的草图并获取读数。
#define MQ3pin 0
float sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ3 warming up!");
delay(20000); // allow the MQ3 to warm up
}
void loop() {
sensorValue = analogRead(MQ3pin); // read analog input pin 0
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
delay(2000); // wait 2s for next reading
}
运行草图代码后,您应该会看到类似于以下内容的读数:
● 在没有酒精的情况下(大约 120)
● 在有酒精的情况下(约 500)
此测试可能需要反复试验。 获得读数后,您可以将它们用作触发动作的阈值。
Arduino代码
下面的草图使用以下阈值估计酒精中毒的程度:
● < 120 是清醒的
● 120-400 正在饮酒
● > 400 喝醉了
/* Replace these values with your own readings */
#define Sober 120 // Define max value that we consider sober
#define Drunk 400 // Define min value that we consider drunk
#define MQ3pin 0
float sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ3 warming up!");
delay(20000); // allow the MQ3 to warm up
}
void loop() {
sensorValue = analogRead(MQ3pin); // read analog input pin 0
Serial.print("Sensor Value: ");
Serial.print(sensorValue);
// Determine the status
if (sensorValue < Sober) {
Serial.println(" | Status: Stone Cold Sober");
} else if (sensorValue >= Sober && sensorValue < Drunk) {
Serial.println(" | Status: Drinking but within legal limits");
} else {
Serial.println(" | Status: DRUNK");
}
delay(2000); // wait 2s for next reading
}
如果一切正常,您应该会在串口监视器上看到类似的内容。
实验2 – 使用数字输出 (D0) 检测是否存在酒精
在第二个实验中,我们将使用数字输出来检测酒精的存在。
硬件接线
我们将重复使用之前实验的电路。只需断开与ADC引脚的连接,并将模块上的D0引脚连接到 Arduino的数字引脚#8。
下图显示了接线。
设置阈值
该模块有一个内置电位器,用于设置酒精浓度阈值,高于该阈值模块输出低电平,状态 LED 亮起。
现在,要设置阈值,让酒精蒸汽进入传感器并顺时针转动电位器,直到状态LED亮起。 然后,逆时针转动电位器直到LED熄灭。
Arduino代码
现在,将下面的草图上传到您的 Arduino。
#define MQ3pin 8
int sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ3 warming up!");
delay(20000); // allow the MQ3 to warm up
}
void loop() {
sensorValue = digitalRead(MQ3pin); // read digital output pin
Serial.print("Digital Output: ");
Serial.print(sensorValue);
// Determine the status
if (sensorValue) {
Serial.println(" | Alcohol: -");
} else {
Serial.println(" | Alcohol: Detected!");
}
delay(2000); // wait 2s for next reading
您可以在串口监视器上看到类似的输出。