Урок 20/31: Отображение напряжения на LCD1602
Этот проект демонстрирует, как создать цифровой вольтметр с помощью Arduino и дисплея LCD1602 с интерфейсом I2C. Считывая аналоговое напряжение с потенциометра и отображая его на экране, вы освоите основные навыки аналого-цифрового преобразования, I2C-связи и управления ЖК-дисплеем.
Этот проект — отличная отправная точка для многих практических применений. Вот несколько идей, которые вы можете развить:
- Создание портативного монитора напряжения батареи для ваших проектов.
- Создание простого блока питания с визуальным индикатором напряжения.
- Мониторинг выходного сигнала солнечной панели или другого источника переменного напряжения.
- Отображение значения любого аналогового датчика, например фоторезистора (LDR), в виде читаемого числа.
К концу этого руководства вы будете четко понимать, как подключать компоненты, настраивать необходимые библиотеки и писать код для создания собственного дисплея напряжения.
Аппаратные компоненты
Для сборки этого проекта вам понадобятся следующие компоненты. Курс основан на наборе SunFounder 3-in-1 Arduino, который включает все эти детали.
- Плата Arduino (например, Uno)
- Дисплей LCD1602 с модулем I2C
- Потенциометр (рекомендуется 10 кОм)
- Соединительные провода
- Макетная плата
Понимание LCD1602 и модуля I2C
LCD1602 — это популярный буквенно-цифровой дисплей с 16 столбцами и 2 строками. Для управления стандартным параллельным ЖК-дисплеем потребовалось бы много цифровых выводов. Однако этот дисплей поставляется с выделенным модулем I2C, прикрепленным к его задней части (на видео в 01:30). Этот модуль значительно упрощает подключение, сокращая его до четырех проводов: VCC, GND, SDA и SCL. Это возможно, потому что модуль I2C действует как мост, преобразуя простой последовательный сигнал I2C в параллельные сигналы, необходимые ЖК-дисплею.
В этом проекте используется интерфейс I2C — протокол связи, который позволяет вашему Arduino общаться с несколькими устройствами всего по двум проводам. Это фундаментальный навык для подключения многих типов датчиков и дисплеев.
Руководство по подключению
Подключение ЖК-дисплея и потенциометра к Arduino несложно. Модулю I2C требуется питание и две линии связи. Потенциометр действует как переменный делитель напряжения, позволяя регулировать напряжение на его среднем выводе.
Вот подробная схема подключения:
- Модуль I2C ЖК-дисплея к Arduino:
- GND к GND Arduino (на видео в 05:38).
- VCC к 5V Arduino (на видео в 05:47).
- SDA к A4 Arduino (на видео в 05:47).
- SCL к A5 Arduino (на видео в 05:57).
- Потенциометр к Arduino:
- Левый вывод к 5V Arduino (на видео в 33:39).
- Средний вывод (движок) к A0 Arduino (на видео в 33:43).
- Правый вывод к GND Arduino (на видео в 33:43).
Установка необходимой библиотеки
Для этого проекта требуется внешняя библиотека для управления ЖК-дисплеем через I2C. Библиотека, используемая в видео, — это библиотека "Arduino Liquid Crystal I2C". Вы можете скачать её по ссылке, указанной на странице ресурсов Robojax, или с GitHub (на видео в 06:16).
Чтобы установить её, скачайте библиотеку в виде ZIP-файла. Затем в вашей среде Arduino IDE перейдите в Скетч > Подключить библиотеку > Добавить .ZIP библиотеку... и выберите скачанный файл (на видео в 06:41).
Поиск I2C-адреса вашего ЖК-дисплея
Перед загрузкой основного кода крайне важно определить I2C-адрес вашего конкретного модуля ЖК-дисплея. Этот адрес может различаться в зависимости от производителя. В видео показано, как использовать I2C-сканер для его поиска (на видео в 08:11).
Вы можете найти этот сканер, перейдя в Файл > Примеры > Wire > i2c_scanner. Загрузите этот код на ваш Arduino с подключенным ЖК-дисплеем и откройте монитор последовательного порта. Он отобразит адрес, который часто равен 0x27 или 0x3F. Вам нужно будет использовать этот адрес в вашем основном коде.
Объяснение кода
Код для этого проекта сосредоточен на чтении аналогового значения и его форматировании для отображения. Давайте разберем ключевые части, которые вы можете настраивать.
1. Подключение библиотек и объект ЖК-дисплея
В этом разделе подключаются необходимые библиотеки и создается объект для вашего ЖК-дисплея. Самая важная часть здесь — I2C-адрес, который вы должны изменить, чтобы он соответствовал найденному на предыдущем шаге.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Установите адрес ЖК-дисплея 0x27 для дисплея на 16 или 20 символов и 2 или 4 строки
LiquidCrystal_I2C lcd(0x27, 16, 2);#include <Wire.h>: Эта библиотека встроена в Arduino и необходима для связи по I2C.#include <LiquidCrystal_I2C.h>: Это подключает библиотеку, которую мы только что установили; она предоставляет функции для управления ЖК-дисплеем.LiquidCrystal_I2C lcd(0x27, 16, 2);: Эта строка создает объект с именемlcd. Первый параметр,0x27, — это I2C-адрес, который вы нашли ранее. Второй и третий параметры определяют размеры ЖК-дисплея: 16 столбцов и 2 строки. Вы должны изменить0x27на ваш конкретный адрес, если он отличается.
2. Функции Setup и Loop
Функция setup() инициализирует ЖК-дисплей и включает его подсветку. Функция loop() содержит основную логику для чтения напряжения и его отображения.
void setup()
{
lcd.begin();
lcd.backlight();
}
void loop()
{
int potValue = analogRead(A0);
float voltage = potValue * (5.0 / 1023.0);
// ... (код отображения на ЖК-дисплее)
delay(1000);
}
lcd.begin(): Это инициализирует интерфейс ЖК-дисплея и подготавливает его к использованию.lcd.backlight(): Это включает подсветку дисплея, делая текст видимым.int potValue = analogRead(A0);: Это считывает необработанное аналоговое значение с контакта A0, который подключен к движку потенциометра. Значение будет целым числом от 0 до 1023, представляющим напряжение от 0 В до 5 В.float voltage = potValue * (5.0 / 1023.0);: Это ключевой шаг преобразования. Он преобразует необработанное значение АЦП в фактическое показание напряжения. Формула умножает необработанное значение на отношение опорного напряжения (5,0 В) к максимальному значению АЦП (1023). Это необходимо, потому что АЦП не считывает напряжение напрямую; он считывает пропорциональное число.
3. Отображение напряжения
Затем код очищает экран и выводит значение напряжения в определенной позиции на второй строке.
lcd.clear();
lcd.print("LCD1602 Tutorial");
lcd.setCursor (0,1); // перейти к началу 2-й строки
lcd.print("Voltage:");
lcd.setCursor (9,1); // установить на строку 2, символ 9
lcd.print(voltage);
lcd.setCursor (13,1); // установить на строку 2, символ 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" сразу после числа.
Живая демонстрация проекта
После загрузки кода ЖК-дисплей должен отображать "LCD1602 Tutorial" на первой строке. На второй строке он покажет "Voltage:" с последующим текущим показанием напряжения. При вращении ручки потенциометра вы увидите, как отображаемое напряжение меняется в реальном времени, в диапазоне примерно от 0,00 В до 5,00 В (на видео на 35:25).
Этот проект — отличный пример того, как взять необработанный аналоговый сигнал и превратить его в четкое, читаемое значение. Навыки, которые вы здесь освоили, можно напрямую применить к любому другому аналоговому датчику, который вы можете использовать в будущем.
Видео также охватывает другие связанные темы, такие как отображение текста, прокрутка и создание пользовательских символов на ЖК-дисплее.
Связанные проекты из этого видео
- Урок 20/31: Использование LCD1602 с Arduino для отображения текста | Robojax
- Урок 20/31: Отображение температуры и влажности с DHT11 на ЖК-экране
Главы
- [00:00] Введение в LCD1602 и обзор проекта
- [01:30] Объяснение аппаратного обеспечения LCD1602 и I2C-модуля
- [04:06] Установка I2C-адреса с помощью перемычек
- [05:28] Схема подключения для LCD1602
- [07:31] Объяснение кода для базового отображения текста
- [11:10] Демонстрация примера с мигающим курсором
- [13:46] Создание и использование пользовательских символов
- [18:51] Использование примера последовательного отображения
- [23:16] Прокрутка текста на ЖК-дисплее
- [26:13] Отображение температуры и влажности с DHT11
- [33:00] Чтение и отображение напряжения с потенциометра
- [35:56] Отображение расстояния с ультразвукового датчика
/*
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
}
Вещи, которые могут вам понадобиться
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
Ресурсы и ссылки
-
ДокументацияДокументация для набора 3 в 1 IoT/умный автомобиль/обучающий комплект SunFounderdocs.sunfounder.com
-
Внешний
Файлы📁
Библиотеки Arduino (zip)
-
Исходный код обучающего набора 3-в-1 Smart Car от SunFounder
3in1-kit-main-v2.zip12.80 MB
Руководство пользователя
-
Руководство по сборке 3-в-1 Arduino Smart Car от SunFounderВ этом документе показана пошаговая сборка 3-в-1 Arduino Smart Car от SunFounder
SunFounder_car_assembly_manual.pdf1.20 MB