搜索代码

第20/31课:在LCD1602上显示电压

第20/31课:在LCD1602上显示电压

本项目演示了如何使用Arduino和带I2C接口的LCD1602显示屏构建数字电压表。通过读取电位器的模拟电压并将其显示在屏幕上,您将学习模数转换、I2C通信和LCD控制的基本技能。 

LCD_sunFounder

本项目是许多实际应用的重要基石。以下是一些您可以在此基础上扩展的想法:

  • 为您的项目构建便携式电池电压监测器。
  • 创建带有可视化电压读数的简单电源。
  • 监测太阳能电池板或其他可变电压源的输出。
  • 将任何模拟传感器的值(如光敏电阻(LDR))显示为可读的数字。

通过本指南,您将清楚地了解如何连接组件、配置必要的库以及编写代码来创建自己的电压显示器。

电位器

硬件组件

要构建此项目,您需要以下组件。本课程基于SunFounder 3合1 Arduino套件,其中包含所有这些部件。

  • Arduino开发板(例如Uno)
  • 带I2C模块的LCD1602显示屏
  • 电位器(推荐10kΩ)
  • 跳线
  • 面包板

了解LCD1602和I2C模块

LCD1602是一种流行的字母数字显示屏,具有16列和2行。标准的并行LCD需要许多数字引脚来控制。然而,此显示屏背面附带了一个专用的I2C模块(视频中01:30处)。该模块大大简化了接线,将连接减少到仅四根线:VCC、GND、SDA和SCL。这是因为I2C模块充当桥梁,将简单的I2C串行信号转换为LCD所需的并行信号。

本项目使用I2C接口,这是一种通信协议,允许您的Arduino仅用两根线即可与多个设备通信。这是连接多种传感器和显示屏的基本技能。

接线指南

LCD1602_pot_wiring

将LCD和电位器连接到Arduino非常简单。I2C模块需要电源和两条通信线。电位器充当可变分压器,允许您调节其滑臂引脚上的电压。

以下是详细的接线设置:

  • LCD I2C模块到Arduino:
    • GND连接到Arduino的GND(视频中05:38处)。
    • VCC连接到Arduino的5V(视频中05:47处)。
    • SDA连接到Arduino的A4(视频中05:47处)。
    • SCL连接到Arduino的A5(视频中05:57处)。
  • 电位器到Arduino:
    • 左引脚连接到Arduino的5V(视频中33:39处)。
    • 中间引脚(滑臂)连接到Arduino的A0(视频中33:43处)。
    • 右引脚连接到Arduino的GND(视频中33:43处)。

安装所需库

本项目需要一个外部库来通过I2C控制LCD。视频中使用的库是“Arduino Liquid Crystal I2C”库。您可以从Robojax资源页面提供的链接或从GitHub下载它(视频中06:16处)。

要安装它,请将库下载为ZIP文件。然后,在您的Arduino IDE中,转到Sketch > Include Library > Add .ZIP Library...并选择下载的文件(视频中06:41处)。

查找LCD的I2C地址

在上传主代码之前,确定您的特定LCD模块的I2C地址至关重要。该地址可能因制造商而异。视频演示了如何使用I2C扫描仪找到它(视频中08:11处)。

您可以通过转到File > Examples > Wire > i2c_scanner找到此扫描仪。在连接LCD的情况下将此代码上传到Arduino,并打开串行监视器。它将显示地址,通常是0x270x3F。您需要在主代码中使用此地址。

代码说明

此项目的代码侧重于读取模拟值并将其格式化以进行显示。让我们分解关键的用户可配置部分。

1. 库包含和LCD对象

此部分包含必要的库并为您的LCD创建一个对象。这里最重要的部分是I2C地址,您必须将其更改为与上一步中找到的地址匹配。

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// 将LCD地址设置为0x27,适用于16或20字符和2或4行显示
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>:这个库是Arduino内置的,用于I2C通信所必需。
  • #include <LiquidCrystal_I2C.h>:这包含了我们刚刚安装的库,它提供了控制LCD的功能。
  • LiquidCrystal_I2C lcd(0x27, 16, 2);:这一行创建了一个名为lcd的对象。第一个参数0x27是你之前找到的I2C地址。第二个和第三个参数定义了LCD的尺寸:16列和2行。如果你的地址不同,你必须将0x27改为你的具体地址。

2. 设置和循环函数

setup()函数初始化LCD并打开其背光。loop()函数包含读取电压并显示的核心逻辑。

void setup()
{
  lcd.begin();
  lcd.backlight();
}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (LCD显示代码)
  delay(1000);
}
  • lcd.begin():这初始化LCD接口并准备使用。
  • lcd.backlight():这打开显示屏的背光,使文本可见。
  • int potValue = analogRead(A0);:这从连接到电位器滑片的A0引脚读取原始模拟值。该值将是0到1023之间的整数,代表0V到5V的电压。
  • float voltage = potValue * (5.0 / 1023.0);:这是关键的转换步骤。它将原始ADC值转换为实际的电压读数。该公式将原始值乘以参考电压(5.0V)与最大ADC值(1023)的比率。这是必要的,因为ADC不直接读取电压;它读取一个成比例的数字。

3. 显示电压

代码然后清除屏幕并在第二行的特定位置打印电压值。

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // 转到第二行开头
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // 设置到第二行第9个字符
  lcd.print(voltage); 
  lcd.setCursor (13,1); // 设置到第二行第14个字符
  lcd.print("V"); 
  • lcd.clear():清除屏幕上的任何先前文本。
  • lcd.print("LCD1602 Tutorial"):在第一行打印标题。
  • lcd.setCursor (0,1):将光标设置到第二行的开头。第一个参数是列(0-15),第二个是行(0表示第一行,1表示第二行)。
  • lcd.print(voltage):打印计算出的电压值。float变量默认将打印两位小数。
  • lcd.setCursor (13,1):将光标移动到第二行的第13列,以将“V”字符定位在数字后面。

实时项目演示

一旦你上传了代码,LCD应在第一行显示“LCD1602 Tutorial”。在第二行,它将显示“Voltage:”后跟当前的电压读数。当你旋转电位器的旋钮时,你会看到显示的电压实时变化,范围大约从0.00V到5.00V(视频中35:25处)。

这个项目是一个完美的例子,展示了如何将原始模拟信号转换为清晰、人类可读的值。你在这里学到的技能可以直接应用于将来可能使用的任何其他模拟传感器。

视频还涵盖了其他相关主题,例如在LCD上显示文本、滚动和创建自定义字符。

本视频中的相关项目

章节

  • [00:00] LCD1602介绍和项目概述
  • [01:30] LCD1602硬件和I2C模块说明
  • [04:06] 使用跳线设置I2C地址
  • [05:28] LCD1602的接线图
  • [07:31] 基本文本显示的代码解释
  • [11:10] 演示闪烁光标示例
  • [13:46] 创建和使用自定义字符
  • [18:51] 使用串行显示示例
  • [23:16] 在LCD上滚动文本
  • [26:13] 显示DHT11的温度和湿度
  • [33:00] 读取并显示电位器的电压
  • [35:56] 显示超声波传感器的距离

图像

potentiometer
potentiometer
LCD1602_pot_wiring
LCD1602_pot_wiring
LCD_sunFounder
LCD_sunFounder
912-Lesson 20/31: Displaying voltage on LCD1602
语言: C++
/*
Lesson 20/31: Displaying voltage on LCD1602
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 or 20 chars and 2 or 4 lines display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int count =700;
void setup()
{
  // Robojax code for LCD with I2C
	// initialize the LCD, 
	lcd.begin();
 
	// Turn on the blacklight and print a message.
	lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Voltage:");

  lcd.setCursor (9,1); // set to line 2 char 9
  lcd.print(voltage); 

  lcd.setCursor (13,1); // set to line 2 char 14
  lcd.print("V"); 

  //lcd.setCursor (3,3); // set to line 4 character 4
  //lcd.print("Text in line 4"); 
        
  delay(1000);
  count++;
 //end of loopcode Robojax code for LCD with I2C
}

文件📁

Arduino 库(zip 格式)

用户手册