Arduino Uno 环境监测系统:结合 MQ2、DHT11、LED、0.96 寸 OLED(I2C)、光敏传感器和低电平触发蜂鸣器

在物联网和智能家居项目中,环境监测是一个常见的应用场景。今天,我们将通过一个简单的项目,使用 Arduino Uno、MQ2 烟雾传感器、DHT11 温湿度传感器、LED、0.96 寸 OLED 显示屏(I2C)、光敏传感器和低电平触发蜂鸣器,来实现一个完整的环境监测系统。这个项目不仅适合初学者,还能为更复杂的项目提供基础。

硬件材料

  • Arduino Uno:作为项目的控制核心,负责数据采集和显示控制。
  • MQ2 烟雾传感器:用于检测环境中的烟雾浓度。
  • DHT11 温湿度传感器:用于测量环境的温度和湿度。
  • 0.96 寸 OLED 显示屏(I2C):用于显示温湿度、烟雾浓度和光照强度数据。
  • 光敏传感器:用于检测环境光照强度。
  • LED:用于在光照过低时发出提示。
  • 低电平触发蜂鸣器:用于在烟雾浓度过高时发出警报。
  • 杜邦线:用于连接各个组件。
  • 面包板(可选):方便进行电路搭建和测试。

硬件连接

DHT11 温湿度传感器

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • DATA 连接到 Arduino Uno 的 D2 引脚。

0.96 寸 OLED 显示屏(I2C)

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • SCL 连接到 Arduino Uno 的 A5 引脚。
  • SDA 连接到 Arduino Uno 的 A4 引脚。

MQ2 烟雾传感器

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • A0 连接到 Arduino Uno 的 A0 引脚。

光敏传感器

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • A0 连接到 Arduino Uno 的 A1 引脚。

LED

  • 阳极(长脚) 连接到 Arduino Uno 的 D3 引脚。
  • 阴极(短脚) 连接到 Arduino Uno 的 GND 引脚。

低电平触发蜂鸣器

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • 控制引脚 连接到 Arduino Uno 的 D4 引脚。

软件库

确保已经安装了以下库:

  • Adafruit GFX Library
  • Adafruit SSD1306 Library
  • DHT Library

可以通过 Arduino IDE 的“库管理器”安装这些库:

  1. 打开 Arduino IDE,点击“草图”->“包含库”->“管理库...”。
  2. 在库管理器中搜索并安装 Adafruit GFX LibraryAdafruit SSD1306 Library 和 DHT Library
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define SCREEN_WIDTH 128 // OLED显示屏幕的宽度,以像素计
#define SCREEN_HEIGHT 64 // OLED显示屏幕的高度,以像素计
#define OLED_RESET -1 // 重置引脚;如果不使用可以设置为 -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define DHTPIN 2 // 定义DHT11传感器连接到Arduino的数字引脚
#define DHTTYPE DHT11 // 定义使用的传感器类型
DHT dht(DHTPIN, DHTTYPE);

#define MQ2_PIN A0 // 定义MQ2传感器连接到Arduino的模拟引脚
#define LIGHT_SENSOR_PIN A1 // 定义光敏传感器连接到Arduino的模拟引脚
#define LED_PIN 3 // 定义LED连接到Arduino的数字引脚
#define BUZZER_PIN 4 // 定义蜂鸣器连接到Arduino的数字引脚

void setup() {
  Serial.begin(9600);
  // 初始化OLED显示屏
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 这里的0x3C是OLED的I2C地址,根据实际情况可能需要修改
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

  // 显示屏初始化
  display.clearDisplay();
  display.setTextSize(1); // 设置文本大小
  display.setTextColor(SSD1306_WHITE); // 设置文本颜色
  display.setCursor(0, 0); // 设置文本开始的坐标
  display.println(F("环境监测系统")); // 打印文本
  display.display(); // 显示以上图形操作
  delay(2000); // 稍作延时

  // 启动DHT传感器
  dht.begin();

  // 初始化LED和蜂鸣器
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  // 读取温湿度数据
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // 读取烟雾浓度
  int smokeValue = analogRead(MQ2_PIN);

  // 读取光照强度
  int lightValue = analogRead(LIGHT_SENSOR_PIN);

  // 检查是否有读取错误
  if (isnan(temperature) || isnan(humidity)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // 清除显示屏内容
  display.clearDisplay();

  // 显示温度
  display.setTextSize(1); // 设置文本大小
  display.setTextColor(SSD1306_WHITE); // 设置文本颜色
  display.setCursor(0, 0); // 设置文本开始的坐标
  display.print(F("Temp: "));
  display.print(temperature);
  display.print(F(" C"));

  // 显示湿度
  display.setCursor(0, 10); // 设置文本开始的坐标
  display.print(F("humi: "));
  display.print(humidity);
  display.print(F(" %"));

  // 显示烟雾浓度
  display.setCursor(0, 20); // 设置文本开始的坐标
  display.print(F("fog: "));
  display.print(smokeValue);

  // 显示光照强度
  display.setCursor(0, 30); // 设置文本开始的坐标
  display.print(F("light: "));
  display.print(lightValue);

  // 显示图形
  display.display();

  // 检测光照强度
  if (lightValue > 100) {
    digitalWrite(LED_PIN, HIGH); // 光照过低,点亮LED
  } else {
    digitalWrite(LED_PIN, LOW); // 光照正常,关闭LED
  }

  // 检测烟雾浓度
  if (smokeValue > 520) {
    digitalWrite(BUZZER_PIN, LOW); // 烟雾浓度过高,触发蜂鸣器
  } else {
    digitalWrite(BUZZER_PIN, HIGH); // 烟雾浓度正常,关闭蜂鸣器
  }

  delay(2000); // 稍作延时
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值