回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【雕爷学编程】Arduino智慧校园之温度和湿度检测并显示在OLED屏幕上 中等

头像 驴友花雕 2024.02.01 154 1

03.jpg

Arduino智慧校园中温度和湿度检测并显示在OLED屏幕上是一种基于Arduino技术的环境监测解决方案。通过连接温湿度传感器和OLED显示屏,可以实时监测校园内的温度和湿度,并将数据显示在屏幕上。下面我将从专业的角度详细解释其主要特点、应用场景以及需要注意的事项。

 

主要特点:

温湿度检测:该系统通过温湿度传感器实时检测校园内的温度和湿度。传感器可以采集环境中的温度和湿度数据,并将其转化为数字信号供Arduino处理和显示。
OLED显示屏:Arduino连接OLED显示屏,可以将温度和湿度数据以可视化的方式显示出来。OLED屏幕具有高对比度、低功耗和广视角等特点,适用于室内环境下的数据显示。
实时监测和更新:Arduino通过编程实现温湿度数据的实时监测和更新。传感器定期采集数据,并通过Arduino进行处理和显示,确保数据的准确性和实时性。
简单易用:Arduino平台具有简单易用的特点,使得温湿度检测系统的搭建和使用相对简单。通过Arduino的编程和硬件连接,可以快速实现温湿度数据的监测和显示。


应用场景:

教室和实验室:温度和湿度对于学习和实验环境的舒适度和安全性非常重要。通过在教室和实验室等场所安装温湿度检测系统,可以实时监测室内的温湿度情况,提供合适的环境条件。
图书馆和档案室:图书馆和档案室对于温湿度的控制要求较高,以保护书籍和文档的保存。通过温湿度检测系统,可以及时监测室内的环境,并采取相应的控制措施,保护图书和档案的质量。
宿舍楼和办公室:在宿舍楼和办公室中,温湿度的合适程度对于居住和工作环境的舒适度和健康性有影响。通过温湿度检测系统,可以实时监测室内的温湿度,并根据需要进行调节,提供舒适的居住和工作环境。


需要注意的事项:

传感器选择:在选择温湿度传感器时,需要考虑其精度、响应速度和适用范围等因素。合适的传感器可以提供准确的温湿度数据,确保系统的可靠性和准确性。
传感器位置:传感器的安装位置对于温湿度数据的准确性和代表性很重要。需要选择合适的位置安装传感器,避免受到外界因素(如热源、直射阳光等)的干扰。
数据显示:OLED屏幕的选择和布局要考虑到可视性和用户体验。需要选择合适尺寸的屏幕,并设计合理的界面,以便用户能够清晰地看到温湿度数据。
电源供应:温湿度检测系统需要稳定的电源供应。在设计系统时,需要考虑电源的可靠性和稳定性,以确保系统的正常运行。


总结:
Arduino智慧校园中的温度和湿度检测系统通过连接温湿度传感器和OLED显示屏,可以实现校园环境的实时监测和数据显示。其主要特点包括温湿度检测、OLED显示、实时监测和简单易用。应用场景包括教室、实验室、图书馆、档案室、宿舍楼和办公室等。在使用时需要注意传感器选择、传感器位置、数据显示和电源供应等方面的问题。通过合理设计和使用,该系统能够提供准确的温湿度数据,为校园环境提供舒适和安全的条件。

 

01.jpg

案例1:温度和湿度检测(DHT11传感器)并显示在OLED屏幕上

代码
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define OLED_ADDR 0x3C
#define OLED_SDA 4
#define OLED_SCL 5

#define DHT_PIN 2
#define DHT_TYPE DHT11

Adafruit_SSD1306 display(128, 64, &Wire, OLED_ADDR);
DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Temperature & Humidity");
  display.display();
  delay(2000);
}

void loop() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.print(temperature);
  display.println(" C");
  display.print("Humidity: ");
  display.print(humidity);
  display.println(" %");
  display.display();
  delay(2000);
}

要点解读:
此程序使用DHT11传感器检测温度和湿度,并将数据显示在OLED屏幕上。
在setup()函数中,初始化串口通信、OLED屏幕和DHT11传感器。
设置OLED屏幕参数,并在屏幕上显示标题信息。
在loop()函数中,通过调用dht.readTemperature()和dht.readHumidity()函数读取温度和湿度值。
清除OLED屏幕显示并设置光标位置,然后将温度和湿度值打印到屏幕上。
使用display.display()函数刷新屏幕显示,然后使用delay()函数进行延迟,以便系统可以每两秒更新一次温度和湿度值。

 

案例2:温度和湿度检测(DHT22传感器)并显示在OLED屏幕上

代码
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define OLED_ADDR 0x3C
#define OLED_SDA 4
#define OLED_SCL 5

#define DHT_PIN 2
#define DHT_TYPE DHT22

Adafruit_SSD1306 display(128, 64, &Wire, OLED_ADDR);
DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Temperature & Humidity");
  display.display();
  delay(2000);
}

void loop() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.print(temperature);
  display.println(" C");
  display.print("Humidity: ");
  display.print(humidity);
  display.println(" %");
  display.display();
  delay(2000);
}

要点解读:
此程序使用DHT22传感器检测温度和湿度,并将数据显示在OLED屏幕上。
与案例1类似,但是使用的是DHT22传感器,它具有更高的精度和测量范围。
在setup()函数中,初始化串口通信、OLED屏幕和DHT22传感器。
设置OLED屏幕参数,并在屏幕上显示标题信息。
在loop()函数中,通过调用dht.readTemperature()和dht.readHumidity()函数读取温度和湿度值。
清除OLED屏幕显示并设置光标位置,然后将温度和湿度值打印到屏幕上。
使用display.display()函数刷新屏幕显示,然后使用delay()函数进行延迟,以便系统可以每两秒更新一次温度和湿度值。

 

案例3:温度和湿度检测(BME280传感器)并显示在OLED屏幕上

代码
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define OLED_ADDR 0x3C
#define OLED_SDA 4
#define OLED_SCL 5

Adafruit_SSD1306 display(128, 64, &Wire, OLED_ADDR);
Adafruit_BME280 bme;

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Temperature & Humidity");
  display.display();
  delay(2000);

  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

void loop() {
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();

  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.print(temperature);
  display.println(" C");
  display.print("Humidity: ");
  display.print(humidity);
  display.println(" %");
  display.display();
  delay(2000);
}

要点解读:
此程序使用BME280传感器检测温度和湿度,并将数据显示在OLED屏幕上。
在setup()函数中,初始化串口通信、OLED屏幕和BME280传感器。
设置OLED屏幕参数,并在屏幕上显示标题信息。
使用bme.begin(0x76)初始化BME280传感器,并检查传感器是否正常连接。
在loop()函数中,通过调用bme.readTemperature()和bme.readHumidity()函数读取温度和湿度值。
清除OLED屏幕显示并设置光标位置,然后将温度和湿度值打印到屏幕上。
使用display.display()函数刷新屏幕显示,然后使用delay()函数进行延迟,以便系统可以每两秒更新一次温度和湿度值。

 

这些示例程序展示了如何使用不同类型的传感器(DHT11、DHT22和BME280)来检测温度和湿度,并将数据显示在OLED屏幕上。通过适当的库和函数调用,可以轻松地获取传感器数据并在OLED屏幕上进行显示,以便实现智慧校园中的温度和湿度监测应用。

 

1-.jpg

案例4:使用DHT11传感器检测温度和湿度

代码
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

#define DHTPIN 2
#define DHTTYPE DHT11

DHT_Unified dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
}

void loop() {
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  
  if (isnan(event.temperature)) {
    Serial.println("无法读取温度数据");
  } else {
    Serial.print("温度: ");
    Serial.print(event.temperature);
    Serial.println(" °C");
    
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Temperature: ");
    display.print(event.temperature);
    display.println(" C");
    display.display();
  }
  
  dht.humidity().getEvent(&event);
  
  if (isnan(event.relative_humidity)) {
    Serial.println("无法读取湿度数据");
  } else {
    Serial.print("湿度: ");
    Serial.print(event.relative_humidity);
    Serial.println(" %");
    
    display.setCursor(0, 20);
    display.print("Humidity: ");
    display.print(event.relative_humidity);
    display.println(" %");
    display.display();
  }
  
  delay(2000);
}

要点解读:
该案例使用DHT11传感器检测温度和湿度,并将数据显示在OLED屏幕上。
在setup()函数中,通过Serial.begin()函数初始化串口通信,通过dht.begin()函数初始化DHT11传感器,通过display.begin()函数初始化OLED屏幕。
通过display.clearDisplay()函数清除屏幕上的内容,然后设置文本大小和颜色。
在loop()函数中,使用dht.temperature().getEvent()函数获取温度数据,并通过Serial.print()函数将温度值打印到串口。
将温度值和单位打印到OLED屏幕上,并使用display.display()函数刷新屏幕。
使用dht.humidity().getEvent()函数获取湿度数据,并通过Serial.print()函数将湿度值打印到串口。
将湿度值和单位打印到OLED屏幕上,并使用display.display()函数刷新屏幕。
在每次循环结束时,延迟2秒钟。

 

案例5:使用DHT22传感器检测温度和湿度

代码
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

#define DHTPIN 2
#define DHTTYPE DHT22

DHT_Unified dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
}

void loop() {
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  
  if (isnan(event.temperature)) {
    Serial.println("无法读取温度数据");
  } else {
    Serial.print("温度: ");
    Serial.print(event.temperature);
    Serial.println(" °C");
    
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Temperature: ");
    display.print(event.temperature);
    display.println(" C");
    display.display();
  }
  
  dht.humidity().getEvent(&event);
  
  if (isnan(event.relative_humidity)) {
    Serial.println("无法读取湿度数据");
  } else {
    Serial.print("湿度: ");
    Serial.print(event.relative_humidity);
    Serial.println(" %");
    
    display.setCursor(0, 20);
    display.print("Humidity: ");
    display.print(event.relative_humidity);
    display.println(" %");
    display.display();
  }
  
  delay(2000);
}

要点解读:
该案例与案例1类似,但使用DHT22传感器代替DHT11传感器进行温度和湿度检测。
在#define DHTTYPE DHT22一行中,将传感器类型设置为DHT22。
DHT22传感器与DHT11传感器相比,精度更高。

 

案例6:使用BME280传感器检测温度和湿度

代码
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

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

void setup() {
  Serial.begin(9600);
  if (!bme.begin(0x76)) {
    Serial.println("无法初始化BME280传感器");
    while (1);
  }
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
}

void loop() {
  float temperature = bme.readTemperature();
  if (isnan(temperature)) {
    Serial.println("无法读取温度数据");
  } else {
    Serial.print("温度: ");
    Serial.print(temperature);
    Serial.println(" °C");
    
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Temperature: ");
    display.print(temperature);
    display.println(" C");
    display.display();
  }
  
  float humidity = bme.readHumidity();
  if (isnan(humidity)) {
    Serial.println("无法读取湿度数据");
  } else {
    Serial.print("湿度: ");
    Serial.print(humidity);
    Serial.println(" %");
    
    display.setCursor(0, 20);
    display.print("Humidity: ");
    display.print(humidity);
    display.println(" %");
    display.display();
  }
  
  delay(2000);
}

要点解读:
该案例使用BME280传感器检测温度和湿度,并将数据显示在OLED屏幕上。
在setup()函数中,通过Serial.begin()函数初始化串口通信,通过bme.begin()函数初始化BME280传感器,通过display.begin()函数初始化OLED屏幕。
在if (!bme.begin(0x76))语句中,通过指定传感器的I2C地址初始化传感器。根据传感器的具体型号,可能需要修改此地址。
在loop()函数中,使用bme.readTemperature()函数获取温度数据,并通过Serial.print()函数将温度值打印到串口。
将温度值和单位打印到OLED屏幕上,并使用display.display()函数刷新屏幕。
使用bme.readHumidity()函数获取湿度数据,并通过Serial.print()函数将湿度值打印到串口。
将湿度值和单位打印到OLED屏幕上,并使用display.display()函数刷新屏幕。
在每次循环结束时,延迟2秒钟。
这些案例代码提供了使用不同传感器检测温度和湿度,并将数据显示在OLED屏幕上的实例。你可以根据自己的需求选择适合的传感器和显示设备,并对代码进行适当的修改。

注意,以上案例只是为了拓展思路,仅供参考。它们可能有错误、不适用或者无法编译。您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。实际编程时,您要根据自己的硬件配置、使用场景和具体需求进行调整,并多次实际测试。您还要正确连接硬件,了解所用传感器和设备的规范和特性。涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。

 

00.jpg

评论

user-avatar
  • 伦**

    伦**2024.03.08

    厉害!!!

    0
    icon 他的勋章
      展开更多