IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【Arduino实验12 1602 LCD显示】 -> 正文阅读

[嵌入式]【Arduino实验12 1602 LCD显示】

一、实验目的

????????(1)熟悉1602LCD液晶显示模块的功能

????????(2)熟悉DHT1温湿度传感器的功能

????????(3)掌握DHT11、liquidCrystal库函数功能与用法;

????????(4)掌握温湿度传感器、LCD液晶显示控制程序编写;

????????(5)编程实现一个数字显温湿度计的功能

二、实验设备与环境

????????Arduino UNO套件、Arduino IDE、计算机、DHT1温湿度传感器、1602LCD显示器、电阻、电位器等

三、实验重点

????????(1)数字显示温湿度计实验电路连接;(2)温湿度传感器、LCD液晶显示控制程序编写;(3)数字显示温度、湿度计编程

四、实验难点

????????(1)LCD显示控制原理;(2)数字温度、湿度计显示编程

五、实验内容

????????5.1实验任务

????????任务描述:DHT11温湿度传感器测试;编程控制1602 LCD显示;编程实现数字显示温湿度计????????

????????5.2实验原理

????????1.温湿度传感器

????????DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连。DHT11温湿度传感器多用于冷暖空调、气象站、除湿器、数据记录器、测试及检测设备等。

????????产品为4针单排引脚封装。

????????DHT11温湿度传感器参数:

????????测量范围:20-90%RH;0-50°C

????????测量精度:±2°C;±5RH

????????针脚:4针直排,1-VCC(3-5V);2-DATA,串行数据;3-NC,悬空脚;4-GND,接地

????????串行接口通信:

????????DATA 用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右。操作流程如下:

?????????数据分小数部分和整数部分, 一次完整的数据传输为40bit,高位先出。

????????数据传送正确时,数据=“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和”。????????

????????2.1602LCD显示器

????????液晶显示器在控制显示面板中应用广泛,称为Liquid CrystalDisplay,简称LCD,是各种便携式电子产品的理想显示器,1602LCD叫1602字符型液晶,是一种专门用来显示字母、数字、符号等的点阵型液晶模块,字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号,多用于电子仪表、数字仪表、冰箱、空调等装置。

????????1602 LCD显示屏引脚定义:?

????????3.数字温湿度显示电路

????????注:调节电位器,可以调节LCD背景光亮度。

????????4.库函数

????????(1)DHT1库函数

????????dht11库函数:

????????DHT11数字温湿度传感器是一款含有已校准数字信号输出的复合传感器,要通过DHT11类库函数进行温湿度检测与信息编码。

????????dht11类只有一个成员函数:read()

????????功能:读取DHT11传感器数据,并将温度值、湿度值分别存入temperature、humidity两个成员变量中

????????语法:DHT11.read(pin)

????????参数:DHT11,一个dht11类的对象;pin,Arduino连接传感器的引脚编号

????????返回值:int类型,为0、-1或2

????????0对应宏DHTLIB_OK,收到数据,且校验正确;

????????-1对应宏DHTLIB_ERROR_CHECKSUM,表示接收到数据但校验错误;

????????2对应宏DHTLIB_ERROR_TIMEOUT,表示通信超时

????????成员变量:

????????dht11.humidity–存储检测到的湿度值

????????dht11.temperature–存储检测到的温度值?

???????

????????(2)LiquidCrystal库函数

????????#include <LiquidCrystal.h> // 包含库的头文件

????????LiquidCrystal LCD(rs,enable,d4,d5,d6,d7)//声明一个LiquidCrystal类对象示例LCD,4位数字接法

????????LiquidCrystalLCD(rs,rw,enable,d0,d1,d2,d3,d4,d5,d6,d7) //8位数据线接法

????????引脚参数:

????????rs,连接RS的Arduino的引脚编号

????????rw,连接R/W的Arduino的引脚编号

????????enable,连接到E的Arduino的引脚编号

????????d0,d1,d2,d3,d4,d5,d6,d7 数据线连接Arduino的引脚编号

????????LiquidCrystal类实体LCD的成员函数:

????????LCD.begin(cols,rows) //设置显示的宽度和高度

????????LCD.clear() //清屏,光标移到左上角

????????LCD.home //光标复位到左上角

????????LCD.setCursor(col,row) //设置光标到指定位置

????????LCD.write(data) //输出一个字符到

????????LCDLCD.print(data) //输出一串字符到LCD,返回输出的字符数

????????LCD.cursor()/noCursor() //显示/隐藏光标

????????LCD.blink/noBlink //开启/关闭光标闪烁

????????LCD.display/noDisplay //开启/关闭LCD显示

????????LCD.scrollDisplayLeft()/scrollDisplayRight() //向左/右滚屏显示

????????LCD.leftToRight()/rightToLeft() // 文本输入方式从左至右/从右至左

????????LCD.autoscroll()/noAutoscroll() // 自动滚屏/关闭自动滚屏

????????(3)serial()–串口通信函数

????????Serial.begin(speed)

????????// 初始化串口的波特率,常用9600、19200、57600、115200。

????????// 波特率,每秒传输的bit数

????????Serial.available( )

????????// 不带参数

????????// 返回串口缓冲区当前剩余字符的个数,用以判断串口缓冲区有无数据。

????????// 当serial.available()>0时,判断串口收到了数据,可以读取

????????Serial.read( )

????????// 读取串口缓冲区1个Byte的数据,不带参数,返回int型。

????????// 反复读取串口数据直到读完(Serial.available()=0)时止

while (Serial.available()>0){
    data= Serial.read();     // 读取串口数据并赋值给变量
    datadelay(2);     // 延迟2ms,避免数据错误
}
Serial.flush()      // 清除缓冲区buffer内的资料
Serial.print( data,encoding)
// 从串口输出data数据,可以是变量、字符串;encoding,数据采用的进制。
// serial.print( data,encoding)语句范例:
Serial.print(75);        // 串行输出"75"
Serial.print(75,DEC);    // 串行输出"75"
Serial.print(75, HEX);    // 串行输出"4B",(75 的十六进位)
Serial.print(75, OCT);    // 串行输出"113" ,(75 的八进位)
Serial.print(75, BIN);    // 串行输出"1001011",(75的二进位)
Serial.print(75, BYTE);   // 串行输出"K" ,以byte进行传送,显示以ASCII编码方式

?????????Serial.println(data,encoding ) // 与Serial.print()输出内容相同,在末尾加换行

??????????5.3实验内容

????????1.温湿度传感器测试

????????步骤1:按温湿度检测电路原理图连接电路

????????步骤2:参考示例程序输入DHT11检测程序代码

// DHT11 温湿度传感器示例程序 
// Written by Tony DiCola for Adafruit Industries 
// 需要以下 Arduino 库函数: 
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library 
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor 
// 头文件 
#include <Adafruit_Sensor.h> 
#include <DHT.h> 
#include <DHT_U.h> 
#define DHTPIN A0 // 连接 DHT11 传感器的 Arduino 板数字引脚 
#define DHTTYPE DHT11 // DHT 11 // 宏定义传感器类型常量 
DHT_Unified mydht(DHTPIN, DHTTYPE); //声明一个实体对象 
uint32_t delayMS; // uint_32_t 是指 32 位的无符号整形变量 
void setup() { 
    Serial.begin(9600); 
    mydht.begin(); 
    Serial.println("DHT11 Sensor Example:"); 
    // 输出温度传感器参数. 
    sensor_t sensor; //声明一个传感器结构体对象 
    mydht.temperature().getSensor(&sensor); 
    Serial.println("------------------------------------"); 
    Serial.println(F("Temperature Sensor")); 
    Serial.print("Sensor Type:"); Serial.println(sensor.name); 
    Serial.print("Driver Ver: "); Serial.println(sensor.version); 
    Serial.print("Unique ID: "); Serial.println(sensor.sensor_id); 
    Serial.print("Max Value: ");Serial.print(sensor.max_value); Serial.println("`C"); 
    Serial.print("Min Value: ");Serial.print(sensor.min_value); Serial.println("`C"); 
    Serial.print("Resolution: ");Serial.print(sensor.resolution); Serial.println("`C"); 
    Serial.println("------------------------------------"); 
    // 输出湿度传感器参数 
    mydht.humidity().getSensor(&sensor); 
    Serial.println("Humidity Sensor"); 
    Serial.print("Sensor Type: ");Serial.println(sensor.name); 
    Serial.print("Driver Ver: ");Serial.println(sensor.version); 
    Serial.print("Unique ID: ");Serial.println(sensor.sensor_id); 
    Serial.print("Max Value: ");Serial.print(sensor.max_value); Serial.println("%"); 
    Serial.print("Min Value: ");Serial.print(sensor.min_value); Serial.println("%"); 
    Serial.print("Resolution: ");Serial.print(sensor.resolution); Serial.println("%"); 
    Serial.println("------------------------------------"); 
    // 设定传感器两次读取的基础时间间隔 
    delayMS = sensor.min_delay/1000; 
}
void loop() { 
    delay(delayMS); // 两次读取传感器数值的间隔时间 
    // 读取当前温度,并输出温度值 
    sensors_event_t event; 
    mydht.temperature().getEvent(&event); 
    if (isnan(event.temperature)) { 
        Serial.println("Error reading temperature!"); 
    } 
    else { 
        Serial.print("Temperature: "); 
        Serial.print(event.temperature); 
        Serial.println("°C"); 
    } 
    // 读取当前湿度,并输出湿度值 
    mydht.humidity().getEvent(&event); 
    if (isnan(event.relative_humidity)) { 
        Serial.println("Error reading humidity!"); 
    } 
    else { 
        Serial.print("Humidity: "); 
        Serial.print(event.relative_humidity); 
        Serial.println("%"); 
    } 
} 

????????步骤3:运行、测试、调试程序功能

????????2.1602LCD显示器功能测试

????????步骤1:如电路原理图所示,将1602 LCD功能、数字引脚与Arduino UNO板I/O口连接

????????步骤2:编写1602LCD显示测试程序:

#include <LiquidCrystal.h> // 包括库函数的头文件 
const int rs = 10, en =12, d4 = 4, d5 = 5, d6 =6,d7 = 7; // 初始化针脚 
LiquidCrystal mylcd(rs, en, d4, d5, d6, d7); // 4 位数字接法对象实体 
int time; 
void setup() { 
    mylcd.begin(16, 2); // 设置 LCD 显示 2 行 16 列 
    mylcd.print("Hello, Arduino UNO R3!"); // 显示“Hello, Arduino UNO R3!”信息 
} 
void loop() { 
    mylcd.setCursor(0, 1); //设置光标定位到第 0 列,第 1 行(从 0 列 1 行开始显示) 
    time = millis(); 
    mylcd.print( time / 1000); //打印从重置后的秒数 
} 

????????步骤3:运行、测试、调试程序功能

????????步骤4:编写1602LCD显示串口输入的数据

#include <LiquidCrystal.h> // 包括库函数的头文件 
const int rs = 10, en =12, d4 = 4, d5 = 5, d6 =6,d7 = 7; // 初始化针脚 
LiquidCrystal mylcd(rs, en, d4, d5, d6, d7); // 4 位数字接法对象实体 
int time; 
void setup() { 
    mylcd.begin(16, 2); // 设置 LCD 显示 2 行 16 列 
    Serial.begin(9600); // 初始化串口通信参数 
} 
void loop() { 
    mylcd.setCursor(0, 0); //设置光标定位到第 0 列,第 0 行(从 0 列 0 行开始显示) 
    if (Serial.available()){ 
        delay(100); //延时等待所有数据进入缓冲区 
        mylcd.clear(); // 清屏 
        while (Serial.available()>0){ // 只要缓冲区还有字符则显示输出 
            character = Serial.read(); // 读取串口输入的字符赋给变量 
            mylcd.Write(character); // LCD 输出字符 
        } 
    } 
} 

?????????步骤5:程序功能扩展:

????????实验任务:用LCD实现自动滚屏显示、从左向右或从右向左显示、光标任意定位与闪烁等显示功能

#include<LiquidCrystal.h>
const int rs=10,en=12,d4=4,d5=5,d6=6,d7=7;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
void setup() {
  lcd.begin(16,2);
  lcd.print("hello,world");
  for(int i=0;i<13;i++)
  {
    lcd.scrollDisplayLeft(); 
    }
}
void loop() {
    for(int i=0;i<29;i++)
  {
    lcd.scrollDisplayRight();
    delay(500);
    }
    for(int i=0;i<29;i++)
  {
    lcd.scrollDisplayLeft();
    delay(500);
    }
  lcd.setCursor(0,1);
}

????????3.数字显示温湿度计

????????实验任务:根据已给定的电路图和温度传感器、1602 LCD显示功能的测试程序,编写程序,实现一个LCD数字显示温度计。

? ? ? ? 略。

????????5.4实验结果??

????????结论:用 LCD 实现自动滚屏显示、从左向右或从右向左显示

????????反思:通过本次实验,我学到了很多知识,掌握了1602LCD 液晶显示模块的功能和DHT1温湿度传感器的功能。学会了DHT11、liquidCrystal 库函数功能与用法和掌握温湿度传感器、LCD 液晶显示控制程序编写。但还需要学习更多的知识。

????????作品:

? ? ? ? ?

????????5.5思考题

????????1.如何用1602LCD制作一个数字显示时钟?

注:从ArduinoIDE的库管理下载的DHT11库的时候可能会遇到编译错误的问题 错误信息类似“为某某开发板编译时出错” In file included from C:\Users\admin\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:15:0: C:\Users\admin\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:36:29: fatal error: Adafruit_Sensor.h: No such file or directory compilation terminated. exit status 1

为开发板 Arduino/Genuino Uno 编译时出错。 编译还说了:C:\Users\16285\Documents\Arduino\libraries\DHT-sensor-library-master\DHT_U.h:36:29: fatal error: Adafruit_Sensor.h: No such file or directory #include <Adafruit_Sensor.h> 意思是找不到Adafruit_Sensor.h这个头文件

解决办法:给"DHT-sensor-library-master"放一个“Adafruit_sensor.h”文件进去 安装使用的库目录参考:C:\Users\admin\Documents\Arduino\libraries\DHT_sensor_library

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:59:12  更:2022-02-06 14:00:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:51:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码