Код для поиска

Урок 20/31: Отображение напряжения на LCD1602

Урок 20/31: Отображение напряжения на LCD1602

Этот проект демонстрирует, как создать цифровой вольтметр с помощью Arduino и дисплея LCD1602 с интерфейсом I2C. Считывая аналоговое напряжение с потенциометра и отображая его на экране, вы освоите основные навыки аналого-цифрового преобразования, I2C-связи и управления ЖК-дисплеем. 

LCD_sunFounder

Этот проект — отличная отправная точка для многих практических применений. Вот несколько идей, которые вы можете развить:

  • Создание портативного монитора напряжения батареи для ваших проектов.
  • Создание простого блока питания с визуальным индикатором напряжения.
  • Мониторинг выходного сигнала солнечной панели или другого источника переменного напряжения.
  • Отображение значения любого аналогового датчика, например фоторезистора (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 общаться с несколькими устройствами всего по двум проводам. Это фундаментальный навык для подключения многих типов датчиков и дисплеев.

Руководство по подключению

Подключение LCD1602 и потенциометра

Подключение ЖК-дисплея и потенциометра к 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).

Этот проект — отличный пример того, как взять необработанный аналоговый сигнал и превратить его в четкое, читаемое значение. Навыки, которые вы здесь освоили, можно напрямую применить к любому другому аналоговому датчику, который вы можете использовать в будущем.

Видео также охватывает другие связанные темы, такие как отображение текста, прокрутка и создание пользовательских символов на ЖК-дисплее.

Связанные проекты из этого видео

Главы

  • [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] Отображение расстояния с ультразвукового датчика

Изображения

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)

Руководство пользователя