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

【雕爷学编程】Arduino智慧校园之温度和湿度检测与显示 中等

头像 驴友花雕 2024.01.21 40 2

27.jpg

在以专业视角解释Arduino智慧校园中的温度和湿度检测与显示时,我们可以关注其主要特点、应用场景以及需要注意的事项。

 

主要特点:
1、温湿度传感器:Arduino智慧校园中的温度和湿度检测系统通常采用温湿度传感器,如DHT11或DHT22等。这些传感器能够准确地测量环境的温度和湿度,并将数据传输到Arduino开发板进行处理和显示。
2、实时数据监测:系统能够实时监测环境的温度和湿度,并将数据显示在液晶显示屏上。用户可以通过读取显示屏上的数据来了解当前环境的温湿度情况,实现对校园内部分区域的环境监测。
3、数据记录和统计:系统可以记录历史温湿度数据,并进行统计分析。这些记录和统计数据可以用于后续的数据分析和决策,比如评估校园内不同区域的温湿度变化趋势,以优化空调调控和能源管理。
4、报警功能:系统可以设置温湿度阈值,当环境的温度或湿度超过设定值时,系统会触发报警。这样可以及时发现异常情况,采取相应的措施,如开启通风设备或调节空调温度。

 

应用场景:
1、校园教室和实验室:温湿度检测与显示系统可以应用于校园内的教室和实验室,实时监测和显示室内的温湿度情况,提供舒适的学习和实验环境。
2、图书馆和电脑房:这些场所需要严格控制温湿度,以保护书籍和电子设备的存储和使用环境。温湿度检测与显示系统可以帮助监测和维持适宜的环境条件。
3、室外运动场和操场:温湿度检测与显示系统可以用于室外运动场和操场,帮助教师和学生了解当前的环境条件,合理安排运动和活动。
4、实验室和工程项目:在一些实验室和工程项目中,需要精确控制和记录温湿度参数。温湿度检测与显示系统可以满足这些需求,并提供数据支持。

 

需要注意的事项:
1、传感器选择和校准:选择合适的温湿度传感器,并确保其准确性和稳定性。同时,需要对传感器进行定期的校准,以保证测量结果的准确性。
2、数据显示和可视化:温湿度数据的显示应该简洁明了,方便用户获取信息。可以采用液晶显示屏或其他合适的显示装置,并设计直观的界面。
3、阈值设置和报警机制:设置合理的温湿度阈值,并确保报警机制的可靠性。阈值的选择应考虑实际需求和环境特点,以避免误报或漏报。
4、数据记录和保护:系统应具备数据记录和保护机制,可以记录历史数据,并保护数据的安全性和完整性。可以考虑使用存储设备或云平台来进行数据的长期保存和备份。

 

总结:
温度和湿度检测与显示是Arduino智慧校园中的重要组成部分,具有温湿度传感器、实时数据监测、数据记录和统计以及报警功能等特点。它可以应用于校园内的教室、实验室、图书馆、电脑房、室外运动场、操场、实验室和工程项目等场景。在使用温湿度检测与显示系统时,需要注意传感器选择和校准、数据显示和可视化、阈值设置和报警机制以及数据记录和保护等事项。只有综合考虑这些因素,才能确保温湿度检测与显示系统的准确性、可靠性和实用性。

 

08.jpg

案例1:DHT11传感器检测与串口输出:

代码
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  delay(2000);
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" °C, Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");
}

要点解读:
该程序使用DHT11温湿度传感器检测当前的温度和湿度。
在setup()函数中,初始化串口通信和DHT11传感器。
在loop()函数中,每隔2秒读取一次温度和湿度数据,并通过串口输出。
温度以摄氏度(°C)为单位,湿度以百分比(%)为单位。

 

案例2:温湿度传感器与LCD显示屏:

代码
#include <DHT.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 2
#define DHTTYPE DHT11
#define I2C_ADDR 0x27
#define LCD_COLS 16
#define LCD_ROWS 2

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLS, LCD_ROWS);

void setup() {
  lcd.begin(LCD_COLS, LCD_ROWS);
  lcd.setBacklight(LOW);
  dht.begin();
}

void loop() {
  delay(2000);
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);
  lcd.print(" %");
}

要点解读:
该程序使用DHT11温湿度传感器检测当前的温度和湿度,并将数据显示在LCD显示屏上。
在setup()函数中,初始化LCD显示屏和DHT11传感器。
在loop()函数中,每隔2秒读取一次温度和湿度数据,并将其显示在LCD上。
LCD显示屏上第一行显示温度,第二行显示湿度。

 

案例3:温湿度传感器与7段数码管显示:

代码
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11
#define DISPLAY_DIGIT_1 4
#define DISPLAY_DIGIT_2 5
#define DISPLAY_DIGIT_3 6
#define DISPLAY_DIGIT_4 7
#define DISPLAY_SEG_A 8
#define DISPLAY_SEG_B 9
#define DISPLAY_SEG_C 10
#define DISPLAY_SEG_D 11
#define DISPLAY_SEG_E 12
#define DISPLAY_SEG_F 13
#define DISPLAY_SEG_G A0

DHT dht(DHTPIN, DHTTYPE);

const byte digit[10] = {
  B11111100,  // 0
  B01100000,  // 1
  B11011010,  // 2
  B11110010,  // 3
  B01100110,  // 4
  B10110110,  // 5
  B10111110,  // 6
  B11100000,  // 7
  B11111110,  // 8
  B11110110   // 9
};

void setup() {
  pinMode(DISPLAY_DIGIT_1, OUTPUT);
  pinMode(DISPLAY_DIGIT_2, OUTPUT);
  pinMode(DISPLAY_DIGIT_3, OUTPUT);
  pinMode(DISPLAY_DIGIT_4, OUTPUT);
  pinMode(DISPLAY_SEG_A, OUTPUT);
  pinMode(DISPLAY_SEG_B, OUTPUT);
  pinMode(DISPLAY_SEG_C, OUTPUT);
  pinMode(DISPLAY_SEG_D, OUTPUT);
  pinMode(DISPLAY_SEG_E, OUTPUT);
  pinMode(DISPLAY_SEG_F, OUTPUT);
  pinMode(DISPLAY_SEG_G, OUTPUT);
  dht.begin();
}

void loop() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  displayValue(temperature);
  delay(2000);
  displayValue(humidity);
  delay(2000);
}

void displayValue(float value) {
  int firstDigit = int(value) / 10;
  int secondDigit = int(value) % 10;
  int decimalDigit = int(value * 10) % 10;

  digitalWrite(DISPLAY_DIGIT_1, HIGH);
  displayDigit(firstDigit);
  delay(5);
  digitalWrite(DISPLAY_DIGIT_1, LOW);

  digitalWrite(DISPLAY_DIGIT_2, HIGH);
  displayDigit(secondDigit);
  delay(5);
  digitalWrite(DISPLAY_DIGIT_2, LOW);

  digitalWrite(DISPLAY_DIGIT_3, HIGH);
  displayDigit(decimalDigit);
  delay(5);
  digitalWrite(DISPLAY_DIGIT_3, LOW);

  digitalWrite(DISPLAY_DIGIT_4, HIGH);
  displayDigit(10); // 显示小数点
  delay(5);
  digitalWrite(DISPLAY_DIGIT_4, LOW);
}

void displayDigit(int digitValue) {
  if (digitValue >= 0 && digitValue <= 9) {
    byte segValue = digit[digitValue];
    digitalWrite(DISPLAY_SEG_A, bitRead(segValue, 0));
    digitalWrite(DISPLAY_SEG_B, bitRead(segValue, 1));
    digitalWrite(DISPLAY_SEG_C, bitRead(segValue, 2));
    digitalWrite(DISPLAY_SEG_D, bitRead(segValue, 3));
    digitalWrite(DISPLAY_SEG_E, bitRead(segValue, 4));
    digitalWrite(DISPLAY_SEG_F, bitRead(segValue, 5));
    digitalWrite(DISPLAY_SEG_G, bitRead(segValue, 6));
  } else if (digitValue == 10) {
    // 显示小数点
    digitalWrite(DISPLAY_SEG_A, LOW);
    digitalWrite(DISPLAY_SEG_B, LOW);
    digitalWrite(DISPLAY_SEG_C, LOW);
    digitalWrite(DISPLAY_SEG_D, LOW);
    digitalWrite(DISPLAY_SEG_E, LOW);
    digitalWrite(DISPLAY_SEG_F, LOW);
    digitalWrite(DISPLAY_SEG_G, HIGH);
  }
}

这个程序使用DHT11温湿度传感器检测当前的温度和湿度,并通过连接到Arduino的7段数码管显示出来。

 

要点解读:
在setup()函数中,设置相关引脚为输出模式,并初始化DHT11传感器。
在loop()函数中,读取温度和湿度数据,并调用displayValue()函数显示数据。
displayValue()函数将浮点数值转换为整数和小数部分,并通过控制对应的引脚和数码管段来显示在7段数码管上。
displayDigit()函数根据给定的数字值,设置对应的引脚状态来显示数字或小数点。


请注意,以上代码假设您已正确连接了7段数码管和DHT11传感器到Arduino,并使用了适当的引脚编号。如果您使用的是不同的引脚,请根据您的实际连接进行相应的修改。

这些示例代码展示了如何使用Arduino和传感器进行温度和湿度检测,并通过不同的输出方式(串口、LCD显示屏、7段数码管)呈现相关数据。根据实际需求,您可以选择适合的输出方式来满足您的应用场景。这些示例代码可以作为您构建Arduino智慧校园中温度和湿度监测系统的起点,您可以根据需要进行修改和扩展。

 

01.jpg
 

案例4:使用DHT11传感器获取温度和湿度数据并通过串口输出

代码
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  delay(2000);
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" °C, Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");
}

要点解读:
该程序使用DHT11温湿度传感器获取当前环境的温度和湿度数据。
在setup()函数中,初始化串口通信和DHT11传感器。
在loop()函数中,通过调用readTemperature()和readHumidity()函数获取温度和湿度数据。
将获取的数据通过串口输出,并附加单位(温度单位为摄氏度,湿度单位为百分比)。
延迟2秒后重复执行,实时更新温湿度数据。

 

案例5:使用DHT22传感器获取温度和湿度数据并显示在OLED屏幕上
 

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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

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

#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_ADDR);

void setup() {
  Serial.begin(9600);
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);
}

void loop() {
  delay(2000);
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  
  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Temp: ");
  display.print(temperature);
  display.println(" C");
  display.print("Humidity: ");
  display.print(humidity);
  display.println(" %");
  display.display();
  
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" °C, Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");
}

要点解读:
该程序使用DHT22温湿度传感器获取当前环境的温度和湿度数据,并在OLED屏幕上显示。
在setup()函数中,初始化串口通信、DHT22传感器和OLED屏幕。
在loop()函数中,通过调用readTemperature()和readHumidity()函数获取温度和湿度数据。
使用clearDisplay()函数清除屏幕上的内容,然后使用setCursor()、print()和println()函数在屏幕上显示温度和湿度数据。
使用display()函数将显示内容更新到OLED屏幕上,并通过串口输出温湿度数据。
延迟2秒后重复执行,实时更新温湿度数据和屏幕显示。

 

案例6:使用DHT11传感器获取温度和湿度数据,并根据阈值控制蜂鸣器的开关

代码
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11
#define BUZZER_PIN 3

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(BUZZER_PIN, OUTPUT);
}

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

  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" °C,Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");

  if (temperature > 30 || humidity > 70) {
    digitalWrite(BUZZER_PIN, HIGH);
    delay(1000);
    digitalWrite(BUZZER_PIN, LOW);
  }
}

要点解读:
该程序使用DHT11温湿度传感器获取当前环境的温度和湿度数据。
在setup()函数中,初始化串口通信、DHT11传感器和蜂鸣器引脚。
在loop()函数中,通过调用readTemperature()和readHumidity()函数获取温度和湿度数据。
将获取的数据通过串口输出。
如果温度超过30°C或湿度超过70%,则通过设置蜂鸣器引脚为高电平来触发蜂鸣器,持续1秒钟,并在之后将蜂鸣器引脚设置为低电平关闭蜂鸣器。
延迟2秒后重复执行,实时监测温湿度数据,并根据阈值控制蜂鸣器的开关。

 

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

 

1-.jpg

评论

user-avatar
  • 许培享

    许培享2024.01.23

    码码码🌱

    1
    • 驴友花雕

      驴友花雕2024.01.26

      谢谢老师的鼓励

icon 他的勋章
    展开更多