一、实验目的
通过本实验,熟悉温湿度传感器的安装使用过程,掌握在Arduino项目中读取温湿度数值的方法,掌握在串口监视器和液晶显示模块中输出获取到的温湿度数值的方法,熟悉利用读取到的数据进行LED控制的常用技巧。
二、实验要求
1、使用ESP 8266电路板、温湿度传感器(如图所示)及导线搭建实验电路,编写相应Arduino程序代码读取传感器获取到的环境温湿度数值,并能通过Arduino程序提供的串口监视器输出显示相应数据。
图4-1温湿度传感器
2、在上述实验中添加串口液晶显示模块(如图所示),修改程序代码,实现通过串口液晶显示模块的屏幕显示传感器获取到的环境温湿度数值。
图4-2串口液晶显示模块
3、在第1步的实验中添加3个LED灯,实现通过传感器获取到的环境温度值自动控制LED灯的点亮和熄灭的效果:随着环境温度值的升高,LED依次被点亮,反之,LED依次熄灭。
三、实验过程
1、通过串口监视器输出环境温湿度数值
(1)将1个温湿度传感器放置在面包板上,注意3个针脚必须位于不同的行,分别使用导线将传感器的VCC连接到电路板的3V3接口(也可按以前实验的方法将VCC连接到面包板的电源总线正极上),将GND连接到电路板的GND接口,将DATA连接到电路板的D5(GPIO14)接口。电路连接如图所示。
图4-3实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
#include <dht11.h> //包含温湿度传感器的头文件,实验二中已更新该库文件
dht11 DHT11;
#define DHT11PIN 14 //定义温湿度传感器连接的端口
void setup() {
Serial.begin(115200); //设置串口通信速率
}
void loop() {
Serial.println("\n"); //换行
int chk = DHT11.read(DHT11PIN); //读数据
Serial.print("Sensor State: ");
switch (chk) { //捕捉传感器的错误
case DHTLIB_OK: //当正常时
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM: //当出现校验和错误时
Serial.println("CheckSum Error");
break;
case DHTLIB_ERROR_TIMEOUT: //当出现超时错误时
Serial.println("TimeOut");
break;
default:
Serial.println("Unknown Error");
break;
}
//输出湿度数据到串口监视器
Serial.print("temperature: ");
Serial.print(String(DHT11.temperature));
Serial.println("C");
//输出温度数据到串口监视器
Serial.print("Humidity: ");
Serial.print(String(DHT11.humidity));
Serial.println("%");
delay(2000); //2秒后更新
}
(3)将USB线缆插入计算机,程序上传成功后点击右上角的按钮打开串口监视器,修改右下角的波特率为115200,观察其中输出的温湿度数据。试图改变传感器附近的环境温湿度(如向传感器上吹气),观察串口监视器中数据的变化情况。结果如图所示。
图4-4串口监视器输出实验结果
2、通过串口液晶显示模块输出温湿度数值
(1)在上述实验的基础上放置1个串口液晶显示模块在面包板上,分别使用导线将液晶模块的VCC连接到电路板3V3接口,将GND连接到电路板GND接口,将SCL连接到电路板D1(GPIO5)接口,将SDA连接到电路板D2(GPIO4)接口。电路连接如图所示。
图4-5实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
#include <dht11.h>
#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>
dht11 DHT11;
#define DHT11PIN 14
void setup() {
Wire.begin();
oled.init(); //初始化液晶显示模块显示信息
oled.clearDisplay(); //清除屏幕
oled.setTextXY(0,0); //设置显示内容开始的坐标
oled.putString("Read Sensor: ");
oled.setTextXY(2,0);
oled.putString("Humidity: ");
oled.setTextXY(4,0);
oled.putString("Temperature: ");
}
void loop() {
int chk = DHT11.read(DHT11PIN);
switch (chk) {
case DHTLIB_OK:
oled.setTextXY(0,12);
oled.putString("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
oled.setTextXY(0,0);
oled.putString("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
oled.setTextXY(0,0);
oled.putString("Time out error");
break;
default:
oled.setTextXY(0,0);
oled.putString("Unknown error");
break;
}
//输出温湿度值
oled.setTextXY(2,9);
oled.putString(String(DHT11.humidity));
oled.setTextXY(2,11);
oled.putString("%");
// Print Temperature
oled.setTextXY(4,12);
oled.putString(String(DHT11.temperature));
oled.setTextXY(4,14);
oled.putString("C");
//2秒后更新
delay(2000);
}
(3)将USB线缆插入计算机,程序上传成功后观察液晶显示模块,将显示出相应的温湿度数据。
3、通过温度值控制LED灯
(1)为了简化实验,将第2个实验中的串口液晶显示模块及其导线拆除,并将第1个实验中的电源和接地分别连接到面包板电源总线上。
(2)放置3个LED灯在面包板上,分别使用3个1K电阻将LED的负极连接到面包板电源总线负极上,将1个LED的正极连接到电路板D6(GPIO12)接口,1个LED的正极连接到电路板D7(GPIO13)接口,1个LED的正极连接到电路板D8(GPIO15)接口。电路连接如图所示。
图4-6实验电路连接图
(3)在新建的Arduino程序窗口中输入如下代码:
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 14
const int baseTemp=12; //定义标准温度值
void setup() {
Serial.begin(115200);
//初始化与LED灯连接的各接口状态
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(15,OUTPUT);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(15,LOW);
}
void loop() {
DHT11.read(DHT11PIN);
int temp=DHT11.temperature;
Serial.println("\n");
Serial.print("temperature: ");
Serial.print(String(temp));
Serial.println("C");
delay(2000);
//如果当前温度低于标准温度,3个灯均熄灭
if(temp<baseTemp) {
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(15,LOW);
}
//如果当前温度高于标准温度2度以内,亮1个灯
else if(temp>=baseTemp&&temp<baseTemp+2) {
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
digitalWrite(15,LOW);
}
//如果当前温度高于标准温度2度以上4度以内,亮2个灯
else if(temp>=baseTemp+2&&temp<baseTemp+4) {
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
digitalWrite(15,LOW);
}
//如果当前温度高于标准温度4度以上,3个灯全亮
else {
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
digitalWrite(15,HIGH);
}
}
(4)将USB线缆插入计算机,程序上传成功后打开串口监视器查看当前环境温度值,并通过改变环境温度观察3个LED灯的状态的变化。
该实验的结果是:当环境温度值小于标准温度(本例的标准温度为12度)时,3个LED均熄灭;当环境温度值大于等于12度并小于14度时,1个LED亮起;当环境温度大于等于14度并小于16度时,2个LED亮起;当环境温度大于等于16度时,3个LED均亮起。