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

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

头像 驴友花雕 2024.02.05 50 0

28.jpg

Arduino智慧校园中的温度和湿度检测并显示在LCD屏幕上是一种常见的应用。下面我将从专业的视角详细解释其主要特点、应用场景以及需要注意的事项。

 

主要特点:

温湿度传感器:使用Arduino连接温湿度传感器,可以准确地获取环境的温度和湿度数据。常见的温湿度传感器有DHT11、DHT22等,它们可以提供准确的温湿度测量结果。

LCD屏幕显示:通过连接LCD屏幕到Arduino,可以将温度和湿度数据显示在屏幕上。LCD屏幕可以显示数字、字符和图标等信息,提供直观的温湿度显示。

实时监测:Arduino可以实时监测温度和湿度数据,并根据需要进行更新显示。用户可以随时了解当前环境的温湿度情况,以便做出相应的调整和决策。

灵活性和可扩展性:Arduino平台具有灵活性和可扩展性,可以根据需求添加其他传感器和模块,例如光照传感器、风速传感器等,以实现更全面的环境监测和显示。

 

应用场景:

教室和办公室:在教室和办公室中,温湿度的监测对于提供舒适的学习和工作环境至关重要。通过在教室和办公室安装温湿度传感器和LCD屏幕,可以实时显示环境的温湿度情况,提醒人们采取相应的措施。

实验室和研究室:在实验室和研究室中,温湿度的控制和监测对于实验和研究的准确性和稳定性至关重要。通过在实验室中安装温湿度传感器和LCD屏幕,可以监测实验环境的温湿度情况,及时做出调整。

室内种植和养殖:在室内种植和养殖场景中,温湿度的监测对于植物和动物的生长和健康至关重要。通过在种植和养殖环境中安装温湿度传感器和LCD屏幕,可以及时监测环境的温湿度变化,为种植和养殖提供合适的条件。

 

需要注意的事项:

传感器的选择和安装:选择适合的温湿度传感器,并合理安装在能够准确反映环境状况的位置,以确保传感器能够准确采集环境数据。

LCD屏幕的连接和显示:确保正确连接LCD屏幕到Arduino,并编写相应的代码将温湿度数据显示在屏幕上。需要注意LCD屏幕的显示格式和界面设计,以便用户能够清晰地读取温湿度信息。

数据的更新和刷新:根据需要设置温湿度数据的更新频率,避免频繁更新导致屏幕显示混乱或能耗过高。

数据的校准和精度:温湿度传感器可能存在一定的误差,需要进行校准以提高测量的准确性。可以通过与其他准确的温湿度测量设备进行比对校准。

电源供应和电路连接:确保为Arduino和LCD屏幕提供稳定的电源供应,并注意电路连接的正确性和安全性,避免电路短路或其他电器问题。

 

总结来说,Arduino智慧校园中的温度和湿度检测并显示在LCD屏幕上是一种实用的应用。它具有温湿度传感器、LCD屏幕显示、实时监测和灵活性等主要特点。适用于教室、办公室、实验室、室内种植养殖等场景。在使用过程中,需要注意传感器的选择和安装、LCD屏幕的连接和显示、数据的更新和校准,以及电源供应和电路连接等方面的问题。通过合理的设计和应用,温湿度检测与显示的Arduino系统可以提供可靠的环境监测和信息展示,为智慧校园的学习、工作和生活提供便利。

 

01.jpg

案例1:基本温湿度检测与LCD显示

代码
#include <LiquidCrystal_I2C.h>   // 包含LCD库

LiquidCrystal_I2C lcd(0x27, 16, 2);   // 初始化LCD对象,设置I2C地址和显示行列数

int temperaturePin = A0;   // 温度传感器连接到Arduino的模拟引脚A0
int humidityPin = A1;      // 湿度传感器连接到Arduino的模拟引脚A1

void setup() {
  lcd.begin(16, 2);   // 初始化LCD,设置行列数
  lcd.print("Temp:"); // 在第一行显示"Temp:"
  lcd.setCursor(0, 1); // 设置光标位置为第二行第一个字符
  lcd.print("Humidity:"); // 在第二行显示"Humidity:"
}

void loop() {
  int temperatureValue = analogRead(temperaturePin);
  float temperature = map(temperatureValue, 0, 1023, 0, 50);  // 将温度传感器的模拟值映射到温度范围内

  int humidityValue = analogRead(humidityPin);
  float humidity = map(humidityValue, 0, 1023, 0, 100);  // 将湿度传感器的模拟值映射到湿度范围内

  lcd.setCursor(6, 0);  // 设置光标位置为第一行第七个字符
  lcd.print(temperature);  // 显示温度值

  lcd.setCursor(10, 1);  // 设置光标位置为第二行第十一个字符
  lcd.print(humidity);  // 显示湿度值

  delay(1000);  // 延时1秒后再次读取温度和湿度
}

要点解读:
该程序使用温度传感器和湿度传感器来检测温度和湿度,并将它们显示在LCD屏幕上。
在setup函数中,初始化LCD对象,并设置LCD的行和列数。
在loop函数中,使用analogRead函数读取温度传感器和湿度传感器的模拟值,并使用map函数将模拟值映射到温度和湿度范围内。
使用lcd.setCursor函数设置LCD屏幕上光标的位置,然后使用lcd.print函数将温度和湿度值显示在LCD屏幕上。
使用延时函数延时1秒后再次读取温度和湿度。

 

案例2:带时间和单位的温湿度检测与LCD显示
 

代码
#include <LiquidCrystal_I2C.h>   // 包含LCD库
#include <RTClib.h>              // 包含RTC库

LiquidCrystal_I2C lcd(0x27, 16, 2);   // 初始化LCD对象,设置I2C地址和显示行列数
RTC_DS1307 rtc;                       // 初始化RTC对象

int temperaturePin = A0;   // 温度传感器连接到Arduino的模拟引脚A0
int humidityPin = A1;      // 湿度传感器连接到Arduino的模拟引脚A1

void setup() {
  lcd.begin(16, 2);   // 初始化LCD,设置行列数

  if (! rtc.begin()) {
    lcd.print("RTC failed");  // 如果RTC初始化失败,在屏幕上显示错误信息
    while (1);
  }

  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  // 使用编译时间设置RTC时间

  lcd.setCursor(0, 0);  // 设置光标位置为第一行第一个字符
  lcd.print("Temp:     C");  // 在第一行显示"Temp:     C"
  lcd.setCursor(0, 1);  // 设置光标位置为第二行第一个字符
  lcd.print("Humidity: %");  // 在第二行显示"Humidity: %"
}

void loop() {
  DateTime now = rtc.now();  // 获取当前时间

  int temperatureValue = analogRead(temperaturePin);
  float temperature = map(temperatureValue, 0, 1023, 0, 50);  // 将温度传感器的模拟值映射到温度范围内

  int humidityValue = analogRead(humidityPin);
  float humidity = map(humidityValue, 0, 1023, 0, 100);  // 将湿度传感器的模拟值映射到湿度范围内

  lcd.setCursor(6, 0);  // 设置光标位置为第一行第七个字符
  lcd.print(temperature, 1);  // 显示温度值,保留1位小数
  lcd.print(" C");  // 显示温度单位

  lcd.setCursor(10, 1);  // 设置光标位置为第二行第十一个字符
  lcd.print(humidity, 1);  // 显示湿度值,保留1位小数
  lcd.print(" %");  // 显示湿度单位

  lcd.setCursor(0, 1);  // 设置光标位置为第二行第一个字符
  lcd.print(now.hour(), DEC);  // 显示当前小时
  lcd.print(":");
  lcd.print(now.minute(), DEC);  // 显示当前分钟
  lcd.print(":");
  lcd.print(now.second(), DEC);  // 显示当前秒钟

  delay(1000);  // 延时1秒后再次读取温度和湿度
}

要点解读:
该程序在基本温湿度检测与LCD显示的基础上,添加了显示当前时间的功能。
在setup函数中,初始化LCD对象和RTC对象。如果RTC初始化失败,屏幕上将显示错误信息。
使用rtc.adjust函数使用编译时间设置RTC的初始时间。
在loop函数中,使用rtc.now函数获取当前时间,并使用lcd.print函数将小时、分钟和秒钟显示在LCD屏幕上。
使用lcd.print函数在温度和湿度值后面显示温度和湿度的单位。
使用delay函数延时1秒后再次读取温度和湿度。

 

案例3:带报警功能的温湿度检测与LCD显示

代码
#include <Wire.h>  // 引入Wire库用于I2C通信
#include <Adafruit_Sensor.h>  // 引入Adafruit_Sensor库用于传感器数据读取
#include <Adafruit_DHT.h>  // 引入Adafruit_DHT库用于DHT传感器的读取

#include <LiquidCrystal_I2C.h>  // 引入LCD库

#define DHTPIN 2  // DHT传感器数据引脚连接到Arduino的2号引脚
#define DHTTYPE DHT11  // 使用DHT11型号的传感器

#define BUZZER_PIN 3  // 蜂鸣器连接到Arduino的3号引脚

DHT dht(DHTPIN, DHTTYPE);  // 创建DHT对象
LiquidCrystal_I2C lcd(0x27, 16, 2);  // 创建LCD对象,设置I2C地址和LCD尺寸

float temperatureThreshold = 25.0;  // 温度阈值,超过该值触发报警
float humidityThreshold = 60.0;  // 湿度阈值,超过该值触发报警

void setup() {
  Serial.begin(9600);  // 初始化串口通信
  lcd.begin(16, 2);  // 初始化LCD
  lcd.backlight();  // 打开LCD背光
  lcd.setCursor(0, 0);  // 设置光标位置为第一行第一个字符
  lcd.print("Temp:");  // 显示标题"Temp:"
  lcd.setCursor(9, 0);  // 设置光标位置为第一行第九个字符
  lcd.print("C");  // 显示温度单位
  lcd.setCursor(0, 1);  // 设置光标位置为第二行第一个字符
  lcd.print("Humidity:");  // 显示标题"Humidity:"
  lcd.setCursor(12, 1);  // 设置光标位置为第二行第十二个字符
  lcd.print("%");  // 显示湿度单位

  pinMode(BUZZER_PIN, OUTPUT);  // 设置蜂鸣器引脚为输出模式
}

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

  lcd.setCursor(6, 0);  // 设置光标位置为第一行第六个字符
  lcd.print(temperature, 1);  // 显示温度值,保留1位小数
  lcd.setCursor(10, 1);  // 设置光标位置为第二行第十个字符
  lcd.print(humidity, 1);  // 显示湿度值,保留1位小数

  if (temperature > temperatureThreshold || humidity > humidityThreshold) {
    digitalWrite(BUZZER_PIN, HIGH);  // 触发报警,蜂鸣器鸣响
  } else {
    digitalWrite(BUZZER_PIN, LOW);  // 关闭报警,蜂鸣器停止鸣响
  }

  delay(1000);  // 延时1秒后再次读取温度和湿度
}

要点解读:
该程序在基本温湿度检测与LCD显示的基础上,添加了温度和湿度的报警功能。
在setup函数中,设置蜂鸣器引脚为输出模式。
在loop函数中,判断当前温度和湿度是否超过设定的阈值,如果超过则触发报警,蜂鸣器鸣响;否则关闭报警,蜂鸣器停止鸣响。
使用delay函数延时1秒后再次读取温度和湿度。

 

1-.jpg

案例4:温度和湿度检测并显示在LCD屏幕上

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

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.begin(16, 2);
  dht.begin();
}

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

  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("%");

  delay(2000);
}

要点解读:
包含必要的库文件:Wire.h用于I2C通信,LiquidCrystal_I2C.h用于控制LCD屏幕,DHT.h用于读取温度和湿度。
定义DHT传感器的引脚和类型。
使用dht.begin()初始化DHT传感器。
在setup()函数中,使用lcd.begin(16, 2)初始化LCD屏幕。
在loop()函数中,使用dht.readTemperature()和dht.readHumidity()分别读取温度和湿度的值。
使用lcd.setCursor()设置LCD光标位置。
使用lcd.print()将温度和湿度值打印到LCD屏幕上。
使用delay()函数添加延时,以便每2秒更新一次温度和湿度值。

 

案例5:温湿度检测并显示在LCD屏幕上(使用DHT22传感器)

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

#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.begin(16, 2);
  dht.begin();
}

void loop() {
  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("%");

  delay(2000);
}

要点解读:
与案例一类似,包含必要的库文件和定义传感器引脚和类型。
使用dht.begin()初始化DHT传感器。
在setup()函数中,使用lcd.begin(16, 2)初始化LCD屏幕。
在loop()函数中,使用dht.readTemperature()和dht.readHumidity()分别读取温度和湿度的值。
使用lcd.clear()清除LCD屏幕上的内容。
使用lcd.setCursor()设置LCD光标位置。
使用lcd.print()将温度和湿度值打印到LCD屏幕上。
使用delay()函数添加延时,以便每2秒更新一次温度和湿度值。

 

案例6:温度和湿度检测并显示在LCD屏幕上(使用DHT11传感器和自定义字符)

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

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

byte customChar[8] = {
  B00100,
  B01010,
  B01010,
  B01010,
  B10001,
  B10001,
  B10001,
};

void setup() {
  lcd.begin(16, 2);
  dht.begin();

  lcd.createChar(0, customChar);  // 创建自定义字符
}

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

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.write(0);  // 显示自定义字符温度图标

  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);
  lcd.print("%");

  delay(2000);
}

要点解读:
- 和前两个案例一样,包含必要的库文件和定义传感器引脚和类型。
- 使用`dht.begin()`初始化DHT传感器。
- 在`setup()`函数中,使用`lcd.begin(16, 2)`初始化LCD屏幕。
- 在`loop()`函数中,使用`dht.readTemperature()`和`dht.readHumidity()`分别读取温度和湿度的值。
- 使用`lcd.createChar()`函数创建自定义字符,这里创建了一个温度图标。
- 使用`lcd.clear()`清除LCD屏幕上的内容。
- 使用`lcd.setCursor()`设置LCD光标位置。
- 使用`lcd.print()`将温度和湿度值打印到LCD屏幕上。
- 使用`lcd.write()`显示自定义字符温度图标。
- 使用`delay()`函数添加延时,以便每2秒更新一次温度和湿度值。

 

这些示例代码演示了如何在Arduino上使用DHT传感器读取温度和湿度,并将其显示在LCD屏幕上。你可以根据自己的需求进行修改和扩展,比如添加其他传感器、控制其他设备等。

 

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

 

03.jpg

评论

user-avatar
icon 他的勋章
    展开更多