Arduino教程中级 项目九 实时温湿度检测器
项目九 实时温湿度检测器
本系列教程为DF创客社区版权所有,配套硬件套件:新版Arduino中级套件上一课:项目八 火焰报警器
想不想做个实时温湿度检测器,走到哪儿,测到哪儿!只需要一个DHT11温湿度传感器就能做到,再外加个1602的显示屏,实时查看数据。等你之后玩Arduino够溜的时候,还可以往控制器上加网络模板,这样数据不仅能实时显示,还能放到网上,或者通过微博发布出去,是不是很心动了呢?那就先做个最简单的,本地实时显示数据~
所需材料
l1×DHT11温湿度传感器
image001.jpg (20.63 KB, 下载次数: 2)
下载附件
保存到相册
2016-1-27 16:35 上传
l1×I2C LCD1602液晶模块
image002.jpg (26.63 KB, 下载次数: 2)
下载附件
保存到相册
2016-1-27 16:35 上传
硬件连接
image003.jpg (71.53 KB, 下载次数: 2)
下载附件
保存到相册
2016-1-27 16:35 上传
DHT11温湿度传感器 → 数字口4 LCD GND → GND LCD VCC → 5V LCD SDA → SDA LCD SCL → SCL A0,A1,A2全部插上跳冒
输入代码下载代码之前,把库“dht11”和“LiquidCrystal_I2C”放入Arduino IDE的libraries中,不知道如何加载库的小伙伴可以先看下项目十二 遥控器一节,有详细说明过程。
image004.jpg (40.39 KB, 下载次数: 2)
下载附件
保存到相册
2016-1-27 16:35 上传
image005.jpg (47.58 KB, 下载次数: 2)
下载附件
保存到相册
2016-1-27 16:35 上传
样例代码9-1:
//项目九 - 实时温湿度检测器#include <dht11.h> #include <Wire.h>#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x20,16,2);//设置LCD的地址为0x20,可以设置2行,每行16个字符 dht11 DHT;#define DHT11_PIN 4 void setup(){lcd.init(); // LCD初始化设置 lcd.backlight(); // 打开LCD背光 Serial.begin(9600); // 设置串口波特率9600 //串口输出”Type, status, Humidity(%), Temperature(C)”Serial.println("Type,\tstatus,\tHumidity(%),\tTemperature(C)"); lcd.print("Humidity(%): "); //LCD屏显示” Humidity(%):” lcd.setCursor(0, 1); //光标移到第2行,第一个字符 lcd.print("Temp(C): "); //LCD屏显示”Temp(C):”} void loop(){int chk; //chk用于存储DHT11传感器的数据 Serial.print("DHT11, \t"); //读取DHT11传感器的数据chk = DHT.read(DHT11_PIN); switch(chk){ caseDHTLIB_OK: Serial.print("OK,\t"); break; caseDHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; caseDHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; default: Serial.print("Unknown error,\t"); break;} //串口显示温湿度值 Serial.print(DHT.humidity,1); Serial.print(",\t");Serial.println(DHT.temperature,1); //LCD显示温湿度值 lcd.setCursor(12, 0); lcd.print(DHT.humidity,1); lcd.setCursor(8, 1); lcd.print(DHT.temperature,1); delay(1000);} 下载完代码后,不仅可以从LCD屏上显示当前的温湿度,还可以从串口中看到值。
代码回顾
首先,把用到的库声明一下:#include <dht11.h> #include <Wire.h>#include <LiquidCrystal_I2C.h> dht11.h和LiquidCrystal_I2C的库,我们事先已经加载过库了,那么Wire.h的库为什么不需要加载呢?因为我们下载的Arduino IDE本身自带这个库。不信的话,你可以同样找到libraries文件夹,Wire.h库会在里面。 有了现有的库,所以只需要在程序的一开始声明一下这个LCD:LiquidCrystal_I2C lcd(0x20,16,2); 0x20:I2C地址由屏后面的A0~A1决定,具体不同的地址可以查看链接:http://wiki.dfrobot.com.cn/index.php/(SKU:DFR0063)IIC_LCD1602_display_module_%E5%85%BC%E5%AE%B9Gadgeteer 16:每行16个字符2: 共2行
代码中LiquidCrystal_I2C涉及函数说明lcd.init()