| LM35特性 | 特性说明 |
|---|---|
| 基本功能 | LM35作为常用的温度传感器,可以检测周围的温度 |
| 工作原理 | 利用感温材料,通过内部电路将温度值转化为对应的电压信号 |
| 工作电压 | 4~30V,常用5V供电 |
| 温度测量 | 测量范围0~100℃ ,误差 ±0.5℃ |
| 输出信号 | 线性模拟信号输出,LM35输出电压和摄氏温度程线性关系 |
| 线性变化系数 | +10mV/℃(即每升高一度,输出电压增加10mV) |
| 应用 | 使用简单,常用于温度检测装置或者温度报警器 |



| Arduino UNO引脚 | LCD1602引脚 | 引脚功能 |
|---|---|---|
| Pin 6 | RS | 数据/命令选择 |
| Pin 7 | E | 使能引脚 |
| Pin 9 | D4 | 数据传输 |
| Pin 10 | D5 | 数据传输 |
| Pin 11 | D6 | 数据传输 |
| Pin 12 | D7 | 数据传输 |
| GND | VSS | 电源负极 |
| 5V | VDD | 电源正极 |
| 串联1KΩ电阻接GND | V0 | 调节对比度 |
| GND | RW | 读/写选择 |
| 5V | A | 背光源正极 |
| GND | K | 背光源负极 |

| 常见的 LiquidCrystal 的库函数 | 功能说明 |
|---|---|
| LiquidCrystal name(RS,EN,D4,D5,D6,D7) | 作用:初始化构造器,创建一个LCD1602对象;RS:数据/ 命令选择所连接的引脚;EN:使能引脚;D4~D7:数据引脚 |
| name.begin(c,l) | 作用:初始化LCD1602;c:屏幕的列数,一般是16;l:屏幕的行数,一般是2 |
| name.print(s) | 作用:输出;s:输出的值 |
| name.clear() | 作用:清屏 |
| name.setCursor(c,l) | 作用:设置光标;c:第几列;l:第几行 |
| name.display() | 作用:开始显示 |
| name.noDisplay() | 作用:关闭显示 |
| name.write(s) | 作用:输出一位;s:输出的字符 |
| name.creatChar(s,d) | 作用:创建新符号;s:字符编号;d:符号数据 |
代码实现:
//LCD实验
//LM35采集温度,LCD显示温度值
#include
#define LM35 A0
#define RS 6
#define EN 7
#define D4 9
#define D5 10
#define D6 11
#define D7 12
LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); //构造一个LiquidCrystal的类成员
int val = 0; //存放AD变量值
float temp = 0; //存放温度值的10倍
void setup()
{
lcd.begin(16,2); //初始化LCD1602
lcd.print("Welcome to use!"); //液晶显示Welcome to use!
delay(1000); //延时1000ms
lcd.clear(); //液晶清屏
}
void loop()
{
val = analogRead(LM35); //读取AD值
temp = val * 4.8876; //转换为温度值的10倍,有利于液晶显示
lcd.setCursor(0,0); //设置液晶开始显示的指针位置
lcd.print("LM35 temp ="); //液晶显示“LM35 temp =”
lcd.setCursor(0,1); //设置液晶开始显示的指针位置
lcd.print((int)temp/10); //液晶显示温度整数值
lcd.print("."); //液晶显示小数点
lcd.print((int)temp%10); //液晶显示温度小数值
lcd.print((char)223); //液晶显示“°”
lcd.print("C"); //液晶显示“C”
delay(1000); //延时1000ms
}

| 供电电压 | 3.0~5V ,常用3.3V或5V供电 |
|---|---|
| 单总线接口 | DS18B20与MCU连接时,仅需要一根数据线,即可实现MCU与DS18B20的双向通讯 |
| 多点组网 | 多个DS18B20可以并联在唯一的数据线上,实现组网多点测温 |
| 硬件简单 | DS18B20在使用时不需要任何外围器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内 |
| 测温范围 | -55℃ ~ +125℃;在 -10 ~ +85℃时,精度为 ±0.5℃ |
| 分辨率 | 9 ~ 12位,对应的可分辨温度分别为 0.5℃,0.25℃,0.125℃ 和 0.0625℃ |
| 负压特性 | 电源极接反时,芯片不会因发热而烧毁,但不能正常工作 |
(2)DS18B20外形及电路设计
DS18B20外形:

举例:DS18B20与Arduino UNO开发板接线, 引脚1接GND,引脚2接数字信号输出D4,引脚3接5V。
常见电路如下:

(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
(2) DS18B20采集环境温度LCD显示的电路图,如下图所示:

(3)实现功能:
① LCD开机画面,第一行显示“ You can use it.”,延时1s后清屏;
② 显示DS18B20采集温度,LCD第一行显示 “ DS18B20 temp = ”,第二行显示 “ xx.x℃ ”。
代码实现:
//LCD实验
//DS18B20采集环境温度,LCD显示
#include //加载单LCD库函数
#include //加载单总线库函数
#include //加载DS18B20温度采集库函数
#define RS 6
#define EN 7
#define D4 9
#define D5 10
#define D6 11
#define D7 12
#define ONE_WIRE_BUS 4 //定义DS18B20数据口连接ESP8266的4号IO上
float Temp = 0;
OneWire oneWire(ONE_WIRE_BUS); //初始化连接在单总线上的单总线设备
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //构造一个LiquidCrystal的类成员
void setup(void)
{
sensors.begin(); //初始化DS18B20
lcd.begin(16, 2); //初始化LCD1602
lcd.print("You can use it."); //液晶显示You can use it.
delay(1000); //延时1000ms
lcd.clear(); //液晶清屏
}
void loop(void)
{
sensors.requestTemperatures(); //发送命令获取温度
Temp = sensors.getTempCByIndex(0); //Temp存储当前温度值
lcd.setCursor(0, 0); //设置液晶开始显示的指针位置
lcd.print("DS18B20 temp ="); //液晶显示“DS18B20 temp =”
lcd.setCursor(0, 1); //设置液晶开始显示的指针位置
lcd.print((int)(Temp * 10) / 10); //液晶显示温度整数值
lcd.print("."); //液晶显示小数点
lcd.print((int)(Temp * 10) % 10); //液晶显示温度小数值
lcd.print((char)223); //液晶显示“°”
lcd.print("C"); //液晶显示“C”
delay(1000); //延时1000ms
}

| DHT11特性 | 特性说明 |
|---|---|
| 基本功能 | DHT11是常用的温湿度传感器,可以检测附近环境温度和湿度 |
| 工作原理 | 利用NTC感温元件和电容感湿元件,通过内部电路将温湿度值转化为校准后的数字信号进行输出 |
| 工作电压 | 3.3~5V ,常用5V供电 |
| 测量范围 | 温度测量范围0-50℃,误差±2℃;湿度测量范围20%-95%,误差±5% |
| 输出信号 | 数字信号 |
| 应用 | 使用简单,常用于温湿度检测装置或者温湿度 |
| 优点 | 报警器响应快速、抗干扰、相应库和示例丰富 |


(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
(2) DHT11采集环境温湿度LCD显示的电路图,如下图所示:

(3)实验准备:下载安装 “DHT sensor library” 库文件,库函数的功能说明如下。


(4)实现功能:
① LCD开机画面,第一行显示“ DHT11 working.”,延时1s后清屏;
② 显示DHT11采集温湿度,LCD第一行显示 “ Temp = xx.x℃ ”,第二行显示 “ Humi = xx% ”。
代码实现:
//LCD实验
//DHT11采集温湿度值,LCD显示
#include
#include
#define RS 6
#define EN 7
#define D4 9
#define D5 10
#define D6 11
#define D7 12
#define DHTPIN 3
DHT dht(DHTPIN, DHT11); //初始化DHT传感器
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //构造一个LiquidCrystal的类成员
void setup()
{
lcd.begin(16, 2); //初始化LCD1602
lcd.print("DHT11 working."); //液晶显示DHT11 working.
delay(1000); //延时1s
lcd.clear(); //液晶清屏
dht.begin(); //初始化DHT11
}
void loop()
{
float h = dht.readHumidity(); // 读取湿度
float t = dht.readTemperature();// 读取温度为摄氏温度
lcd.setCursor(0, 0); //设置液晶开始显示的指针位置
lcd.print("Temp = "); //液晶显示“Temp =”
lcd.print((int)(t * 10) / 10); //液晶显示温度整数值
lcd.print("."); //液晶显示小数点
lcd.print((int)(t * 10) % 10); //液晶显示温度小数值
lcd.print((char)223); //液晶显示“°”
lcd.print("C"); //液晶显示“C”
lcd.setCursor(0, 1); //设置液晶开始显示的指针位置
lcd.print("Humi = "); //液晶显示“Humi =”
lcd.print((int)h); //液晶显示温度整数值
lcd.print("%"); //液晶显示“%”
delay(2000); //DHT11间隔2s采集一次数据
}

参考资料1: CSDN如何编辑数学公式
参考资料2: Arduino全套零基础入门视频进阶教程(适合0基础,含arduino项目保姆级教程)
参考资料3: 【雕爷学编程】Arduino动手做(55)–DHT11温湿度传感器模块3