arduino oledMQ-2烟雾传感器
时间: 2025-01-04 07:35:29 浏览: 20
### 使用Arduino连接OLED显示屏和MQ-2烟雾传感器
#### 材料准备
为了完成此项目,需要以下材料:
- Arduino板(如Uno、Nano)
- OLED显示屏(I2C接口)
- MQ-2烟雾传感器模块
- 面包板及跳线若干
#### 硬件连接方法
按照下述说明将各组件相连。
对于MQ-2烟雾传感器而言,其具备两个LED指示灯。其中`POWER-LED`作为电源状态提示,在供电正常情况下保持点亮;另一个则是`DOUT-LED`用于反映探测结果的状态变化情况[^2]。具体连线如下表所示:
| 组件 | 接口 |
|--------------|------------|
| VCC | 5V |
| GND | GND |
| A0 (模拟量) | A0 |
| D0 (开关量) | 数字端子 |
针对OLED屏幕,则通常采用I2C通信协议来简化线路布置。只需四根导线就能实现数据交换功能,并且默认地址为`0x3C`或`0x78`取决于制造商设定。接法参照表格:
| 屏幕引脚 | Arduino引脚 |
|---------------|-------------|
| VCC | 5V |
| GND | GND |
| SCL | A5 / SCL |
| SDA | A4 / SDA |
#### 软件环境配置
启动Arduino IDE之后,通过菜单路径“工具 -> 库管理”,查找并安装最新的`Adafruit SSD1306 Library`以及依赖项`Adafruit GFX Library`以便支持图形化操作OLED屏面。另外还需加载`Wire.h`库处理I2C总线事务[^1]。
#### 编程实例
下面给出一段简单的程序用来读取来自MQ-2的数据并通过OLED实时展示出来。
```cpp
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int mqPin = A0;
float ratio;
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000); // Pause for initialization.
}
void loop() {
int sensorValue = analogRead(mqPin);
float voltage = sensorValue * (5.0 / 1023.0);
ratio = voltage / 5.0;
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Smoke Sensor:");
display.setCursor(0,10);
display.printf("Voltage: %.2fV",voltage);
display.setCursor(0,20);
display.printf("Ratio: %.2f%%",(ratio*100));
if(ratio<0.1){
display.fillRect(0,40,128,20,SSD1306_BLACK);
display.drawRect(0,40,128,20,SSD1306_WHITE);
display.setCursor(10,50);
display.print("Safe");
}else{
display.fillRect(0,40,128,20,SSD1306_WHITE);
display.drawRect(0,40,128,20,SSD1306_WHITE);
display.setTextColor(SSD1306_BLACK);
display.setCursor(10,50);
display.print("Warning!");
}
display.display();
delay(1000);
}
```
这段代码实现了基本的功能需求:从MQ-2获取当前空气质量状况下的电压比例值,并将其转换成百分比形式显示于屏幕上;同时依据预设阈值判断是否存在潜在危险情形,进而改变警告框的颜色以引起注意。
阅读全文