• Arduino程序设计(八)LCD显示实验



    前言

    • 本文主要介绍温度/温湿度传感器的LCD显示实验,分别是:
    • 1、LM35采集环境温度LCD显示;
    • 2、DS18B20采集环境温度LCD显示;
    • 3、DHT11采集环境温湿度LCD显示。

    一、基于LM35的LCD显示实验

    1. LM35简介

    • (1)LM35介绍
    LM35特性特性说明
    基本功能LM35作为常用的温度传感器,可以检测周围的温度
    工作原理利用感温材料,通过内部电路将温度值转化为对应的电压信号
    工作电压4~30V,常用5V供电
    温度测量测量范围0~100℃ ,误差 ±0.5℃
    输出信号线性模拟信号输出,LM35输出电压和摄氏温度程线性关系
    线性变化系数+10mV/℃(即每升高一度,输出电压增加10mV)
    应用使用简单,常用于温度检测装置或者温度报警器
    • (2)LM35引脚及封装
      在这里插入图片描述
    • 常用封装:TO-92,型号选用LM35DZ。
    • 举例:LM35与Arduino UNO开发板接线, 引脚1接5V,引脚2接模拟信号输出A0,引脚3接GND
    • (3)LM35温度值计算
    • ① 计算公式:
    • x 1024 \frac{x}{1024} 1024x= T ℃ ∗ 10 m V / ℃ 5000 m V \frac{T℃*10mV/℃}{5000mV} 5000mVT10mV/℃
    • 其中, x x x为返回值,即引脚2采集的数据, T T T为当前温度值,浮点型数据。
    • ② 进一步,得到当前温度的计算公式:
    • T T T= 500 x 1024 \frac{500x}{1024} 1024500x= 0.4883 x 0.4883x 0.4883x

    2. LCD1602简介

    • (1) LCD1602介绍
      在这里插入图片描述
      注意:LCD1602显示ASCII码包括英文字母、数字和标点符号(不能显示中文)。
    • (2)技术参数与接口说明在这里插入图片描述
    • (3)LCD1602与Arduino UNO开发板连接方式
    Arduino UNO引脚LCD1602引脚引脚功能
    Pin 6RS数据/命令选择
    Pin 7E使能引脚
    Pin 9D4数据传输
    Pin 10D5数据传输
    Pin 11D6数据传输
    Pin 12D7数据传输
    GNDVSS电源负极
    5VVDD电源正极
    串联1KΩ电阻接GNDV0调节对比度
    GNDRW读/写选择
    5VA背光源正极
    GNDK背光源负极

    3. LM35采集环境温度LCD显示

    • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
    • (2) LM35采集环境温度LCD显示的电路图,如下图所示:
      在这里插入图片描述
    • (3)实验准备:下载安装 “LiquidCrystal” 库文件,库函数的功能说明如下表所示。
    常见的 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:符号数据
    • (4)实现功能:
    • ① LCD开机画面,第一行显示“ Welcome to use ! ”,延时1S后清屏;
    • ② 显示LM35采集温度,LCD第一行显示 “ LM35 temp = ”,第二行显示 “ xx.x℃ ”。

    代码实现:

    //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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • (5)实现现象:
      在这里插入图片描述

    二、基于DS18B20的LCD显示实验

    1. DS18B20简介

    • (1)DS18B20介绍
    供电电压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

    • 常见电路如下:
      在这里插入图片描述

    2. DS18B20采集环境温度LCD显示

    • (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
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • (4)实现现象:
      在这里插入图片描述

    三、基于DHT11采集环境温湿度LCD显示

    1. DHT11简介

    • (1)DHT11介绍
    DHT11特性特性说明
    基本功能DHT11是常用的温湿度传感器,可以检测附近环境温度和湿度
    工作原理利用NTC感温元件和电容感湿元件,通过内部电路将温湿度值转化为校准后的数字信号进行输出
    工作电压3.3~5V ,常用5V供电
    测量范围温度测量范围0-50℃,误差±2℃;湿度测量范围20%-95%,误差±5%
    输出信号数字信号
    应用使用简单,常用于温湿度检测装置或者温湿度
    优点报警器响应快速、抗干扰、相应库和示例丰富
    • (2)DHT11外形及引脚说明
    • ① DHT11模块和DHT11温湿度传感器外形,如下图所示:
      在这里插入图片描述
    • ② DHT11温湿度传感器引脚说明:
      在这里插入图片描述

    2. DHT11采集环境温湿度LCD显示

    • (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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • (5)实现现象:
      在这里插入图片描述

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

  • 相关阅读:
    编写基于maven的IDEA插件,实现根据现有代码生成流程图的 pom(2)
    5-整合swagger2
    计算机组成原理---第五章中央处理器---指令执行过程
    余弦相似度算法进行客户流失分类预测
    渗透测试--实战若依ruoyi框架
    MPLS 初见
    Python基础
    kaggle机器学习baselines
    SIMULIA--Abaqus结构仿真篇
    Dubbo-时间轮设计
  • 原文地址:https://blog.csdn.net/weixin_44887565/article/details/132716240