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

【雕爷学编程】Arduino智慧校园之温度和湿度实时图表显示 简单

头像 驴友花雕 2024.02.06 130 0

01.jpg

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

 

主要特点:

温度和湿度传感器:Arduino可以通过连接温度和湿度传感器来获取实时的环境温度和湿度数据。常用的传感器有DHT11、DHT22等。这些传感器能够准确地测量环境的温度和湿度,并将数据传输给Arduino进行处理和显示。

实时图表显示:Arduino可以通过连接显示模块(如液晶显示屏、OLED屏幕等),将温度和湿度数据以实时图表的形式展示出来。通过图表显示,用户可以直观地了解环境温度和湿度的变化趋势,方便进行监测和分析。

数据记录和存储:Arduino可以将获取的温度和湿度数据进行记录和存储,以便后续分析和查询。可以使用Arduino的内部存储器(如EEPROM)或外部存储设备(如SD卡)来保存数据,并提供查询功能。

实时监测和报警:Arduino可以根据设定的温度和湿度阈值进行实时监测,并在超出阈值范围时触发报警。通过连接蜂鸣器、LED灯或发送消息等方式,提醒用户环境温度或湿度异常,并及时采取相应的措施。

 

应用场景:

室内环境监测:在智慧校园的教室、实验室、办公室等室内环境中,使用温度和湿度实时图表显示,可以帮助监测空调、加湿器、除湿器等设备的效果,保持舒适的室内环境。

温室农业:在智慧校园的温室中,使用温度和湿度实时图表显示,可以监测温室内的温湿度情况,帮助农作物生长的控制和管理。可以根据实时数据调节温湿度,提高农作物的产量和质量。

实验室研究:在智慧校园的科研实验室中,使用温度和湿度实时图表显示,可以帮助科研人员监测实验室环境的温湿度变化,确保实验条件的稳定性和可靠性。

 

需要注意的事项:

传感器的选择与校准:选择适合的温度和湿度传感器,并进行校准,以确保测量结果的准确性和可靠性。根据传感器的特性和数据手册,进行合适的校准操作。

电源和供电:确保Arduino和传感器的电源供电稳定可靠。根据实际需求选择合适的电源方案,避免电源不足或过载的情况。

数据处理和显示:合理设计数据处理和显示的算法和界面,以便用户能够清晰地理解温度和湿度的变化趋势。考虑到数据的刷新频率和显示方式,避免数据过于频繁和冗杂,保证信息的可读性。

灵敏度和阈值设置:根据具体应用场景和需求,设置合适的温度和湿度的灵敏度和阈值。灵敏度过高可能导致误报,而灵敏度过低可能导致漏报。同时,合理设置报警阈值,确保在温度和湿度超出安全范围时能够及时发出警报。

数据记录和存储:考虑数据记录和存储的容量和方式。如果需要长期保存数据,可以选择外部存储设备,并考虑数据的备份和管理。

安全和隐私保护:在设计和实施智慧校园温度和湿度实时图表显示系统时,要注意保护用户的隐私和数据安全。采取适当的安全措施,如数据加密、访问控制等,确保敏感信息不被未经授权的人员获取。

 

综上所述,Arduino智慧校园中的温度和湿度实时图表显示具有实时监测、数据记录和存储、报警功能等特点,适用于室内环境监测、温室农业、实验室研究等场景。在应用过程中需要注意传感器的选择与校准、电源和供电、数据处理和显示、灵敏度和阈值设置、数据记录和存储,以及安全和隐私保护等方面的问题。

 

00.jpg

案例1:串口实时监测
该示例通过串口监测温度和湿度数据,并通过串口输出实时数据。

代码
#include <DHT.h>

#define DHTPIN 2      // 温湿度传感器连接到数字引脚2
#define DHTTYPE DHT11 // 使用DHT11传感器

DHT dht(DHTPIN, DHTTYPE);

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

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

  Serial.print("温度:");
  Serial.print(temperature);
  Serial.print(" °C   湿度:");
  Serial.print(humidity);
  Serial.println("%");

  delay(2000);
}

要点解读:
使用DHT库来读取温湿度传感器的数据。
使用readTemperature函数读取温度值,使用readHumidity函数读取湿度值。
通过串口输出温度和湿度数据。

 

案例2:LCD实时显示
该示例使用LCD显示屏实时显示温度和湿度数据。
 

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

#define DHTPIN 2         // 温湿度传感器连接到数字引脚2
#define DHTTYPE DHT11    // 使用DHT11传感器
#define I2C_ADDR 0x27    // I2C地址(根据LCD实际情况调整)

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

void setup() {
  lcd.begin(16, 2);
  lcd.backlight();
  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);
}

要点解读:
使用DHT库来读取温湿度传感器的数据。
使用LiquidCrystal_I2C库来控制I2C接口的LCD显示屏。
通过LCD显示屏实时显示温度和湿度数据。

 

案例3:图表实时显示
该示例使用串口通信将温度和湿度数据发送到计算机,并使用Processing软件实时绘制温湿度图表。

代码
#include <DHT.h>

#define DHTPIN 2      // 温湿度传感器连接到数字引脚2
#define DHTTYPE DHT11 // 使用DHT11传感器

DHT dht(DHTPIN, DHTTYPE);

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

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

  Serial.print(temperature);
  Serial.print(",");
  Serial.println(humidity);

  delay(2000);
}

Processing代码:

代码
import processing.serial.*;

Serial serial;
int xPos = 0;
float[] temperatureValues = new float[100];
float[] humidityValues = new float[100];

void setup() {
  size(800, 400);
  serial = new Serial(this, Serial.list()[0], 9600);
  serial.bufferUntil('\n');
}

void draw() {
  background(255);
  drawChart();
}

void serialEvent(Serial port) {
  String data = port.readStringUntil('\n');
  if (data != null) {
    data = data.trim();
    String[] values = split(data, ",");
    if (values.length == 2) {
      float temperature = float(values[0]);
      float humidity = float(values[1]);
      updateValues(temperature, humidity);
    }
  }
}

void updateValues(float temperature, float humidity) {
  for (int i = 0; i < temperatureValues.length - 1; i++) {
    temperatureValues[i] = temperatureValues[i + 1];
    humidityValues[i] = humidityValues[i + 1];
  }
  temperatureValues[temperatureValues.length - 1] = temperature;
  humidityValues[humidityValues.length - 1] = humidity;
}

void drawChart() {
  float temperatureMin = min(temperatureValues);
  float temperatureMax = max(temperatureValues);
  float humidityMin = min(humidityValues);
  float humidityMax = max(humidityValues);

  float temperatureRange = temperatureMax - temperatureMin;
  float humidityRange = humidityMax - humidityMin;

  // 绘制温度图表
  stroke(255, 0, 0); // 设置颜色为红色
  for (int i = 1; i < temperatureValues.length; i++) {
    float x1 = map(i - 1, 0, temperatureValues.length - 1, 0, width);
    float y1 = map(temperatureValues[i - 1], temperatureMin, temperatureMax, height, 0);
    float x2 = map(i, 0, temperatureValues.length - 1, 0, width);
    float y2 = map(temperatureValues[i], temperatureMin, temperatureMax, height, 0);
    line(x1, y1, x2, y2);
  }

  // 绘制湿度图表
  stroke(0, 0, 255); // 设置颜色为蓝色
  for (int i = 1; i < humidityValues.length; i++) {
    float x1 = map(i - 1, 0, humidityValues.length - 1, 0, width);
    float y1 = map(humidityValues[i - 1], humidityMin, humidityMax, height, 0);
    float x2 = map(i, 0, humidityValues.length - 1, 0, width);
    float y2 = map(humidityValues[i], humidityMin, humidityMax, height, 0);
    line(x1, y1, x2, y2);
  }

  // 绘制坐标轴标签
  fill(0);
  text("Temperature", 10, 20);
  text("Humidity", 10, height - 10);

  // 绘制温度范围标签
  fill(255, 0, 0);
  text(nf(temperatureMax, 0, 1), 10, 40);
  text(nf(temperatureMin, 0, 1), 10, height - 30);

  // 绘制湿度范围标签
  fill(0, 0, 255);
  text(nf(humidityMax, 0, 1), 10, 60);
  text(nf(humidityMin, 0, 1), 10, height - 50);

  // 绘制x轴刻度线
  stroke(0);
  for (int i = 0; i < temperatureValues.length; i++) {
    float x = map(i, 0, temperatureValues.length - 1, 0, width);
    line(x, height - 5, x, height + 5);
  }
}

请注意,上述代码假定你已经正确安装了Processing和DHT库,并且已将Arduino正确连接到计算机。你可能需要根据实际情况调整串口通信的参数(例如Serial.list()[0])和绘图窗口的大小(例如size(800, 400))。确保在运行Processing代码之前,先上传Arduino代码到Arduino板上。运行Processing代码后,你将在Processing的窗口中看到实时的温度和湿度图表。

 

1-.jpg

案例4:使用DHT传感器实时显示温度和湿度

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

#define DHTPIN 2
#define DHTTYPE DHT11

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

void setup() {
  dht.begin();
  lcd.begin(16, 2);
  lcd.print("Temp: ");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
}

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

  lcd.setCursor(6, 0);
  lcd.print(temperature);
  lcd.print(" C");

  lcd.setCursor(10, 1);
  lcd.print(humidity);
  lcd.print(" %");

  delay(2000);
}

要点解读:
引入DHT和LiquidCrystal_I2C库,用于与DHT传感器和LCD显示屏交互。
定义DHT传感器引脚(DHTPIN)和传感器类型(DHTTYPE)。
在setup()函数中,初始化DHT传感器和LCD显示屏。
设置LCD显示屏的初始文本。
在loop()函数中,使用dht.readTemperature()和dht.readHumidity()函数读取温度和湿度的值。
在LCD显示屏上更新温度和湿度的数值。

 

案例5:使用DHT传感器和串口实时显示温度和湿度

代码
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

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

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

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

  delay(2000);
}

要点解读:
引入DHT库,用于与DHT传感器交互。
定义DHT传感器引脚(DHTPIN)和传感器类型(DHTTYPE)。
在setup()函数中,初始化串口通信和DHT传感器。
在loop()函数中,使用dht.readTemperature()和dht.readHumidity()函数读取温度和湿度的值。
通过串口输出实时温度和湿度的数值。

 

案例6:使用DHT传感器和图表库实时显示温度和湿度

#include <DHT.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DHTPIN 2
#define DHTTYPE DHT11
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

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

void setup() {
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 dht.begin();
 display.clearDisplay();
 display.setTextColor(WHITE);
 display.setTextSize(1);
 display.setCursor(0, 0);
 display.println("Temp: ");
 display.setCursor(0, 16);
 display.println("Humidity: ");
 display.display();
}

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

 display.setCursor(36, 0);
 display.println(temperature);
 display.setCursor(56, 0);
 display.println("C");

 display.setCursor(56, 16);
 display.println(humidity);
 display.setCursor(80, 16);
 display.println("%");

 display.display();
 display.clearDisplay();

 delay(2000);
}

要点解读:
引入DHT、Adafruit_Sensor、Wire和Adafruit_SSD1306库,用于与DHT传感器和OLED显示屏交互。
定义DHT传感器引脚(DHTPIN)和传感器类型(DHTTYPE),以及OLED显示屏的参数。
在setup()函数中,初始化OLED显示屏、DHT传感器,并设置显示屏的初始文本。
在loop()函数中,使用dht.readTemperature()和dht.readHumidity()函数读取温度和湿度的值。
在OLED显示屏上更新温度和湿度的数值,并显示在合适的位置。
使用display.display()刷新显示屏,并使用display.clearDisplay()清除显示内容。
这些案例提供了在Arduino上实时显示温度和湿度的不同方法。你可以根据自己的需求选择适合的方法,并根据需要进行进一步调整和定制。

 

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

 

03.jpg

评论

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