Torgholodmash.ru

ТоргХолодМаш
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Жидкокристаллический дисплей (LCD) 1602 и Arduino

Жидкокристаллический дисплей (LCD) 1602 и Arduino

Жидкокристаллический дисплей (LCD) мод. 1602 (даташит) — отличный выбор для ваших проектов.

Первое, что радует — низкая цена. Второе — наличие готовых библиотек под Arduino. Третье — наличие нескольких модификаций, которые в том числе идут с различными подсветками (голубая, зеленая). В этой статье рассмотрим основы подключения данного дисплея к Arduino и приведем пример небольшого проекта для отображения уровня освещенности на дисплее с использованием фоторезистора.

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

Характеристики

ИнтерфейсI2C
PCBЧерный
Напряжение2.5-6V
Размер41.5x19x15.3 мм
Вес5 г

Для ардуино, достаточно подключить 4 провода: SDA, SCL – I2C интерфейса и питание для модуля. На пример для Arduino Nano это будет:

ПереходникNano
GndGnd
Vcc5v
SDAA4
SCLA5

К 16-ти пиновому разьему, нужно подключить ваш LCD дисплей, причем для символьного дисплея достаточно 12 проводов, как изображено на рисунке:

Из библиотек, доступных прямо из aruinoIDE лучше всего подойдет LiquidCrystal_PCF8574 – установить ее можно, зайдя в менеджер библиотек, и набрав в поиске 8574:

Достаточно открыть идущий с этой библиотекой пример скетча, и ничего не меняя загрузить в Nano или любую другую arduino:

Распиновка 16х02 символов

Перед тем, приступить к сборке и написанию кода, давайте сначала взглянем на распиновку LCD 1602.

Распиновка 16х02 символов

  • GND должен быть подключен к земле Arduino.
  • VCC — это вывод питание для ЖК-дисплея, к которому мы подключаем 5-вольтовый контакт Arduino.
  • Vo (LCD Contrast) — вывод контролирует контрастность и яркость ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно отрегулировать контрастность.
  • RS (Register Select) — этот вывод позволяет Arduino сообщать ЖК-дисплею, отправляются команды или данные. В основном этот вывод используется для дифференциации команд от данных. Например, когда на выводе RS установлено значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор в определенном месте, очистить дисплей, сдвинуть дисплей вправо и т. д.). Когда вывод RS установлено значение HIGH, мы отправляем данные/символы на ЖК-дисплей.
  • R/W (Read/Write) — вывод предназначен для контроля того, что необходимо сделать — считать данные или передать их на ЖК-дисплй. Поскольку мы просто используем этот ЖК-дисплей в качестве устройства вывода, то достаточно на этот вывод подать HIGH уровень, тем самым мы перейдем в режим записи.
  • EN (Enable) вывод используется для включения дисплея. Это означает, что когда на этом выводе установлено значение LOW ЖК-дисплей не реагирует на то, что происходит с R/W, RS и линиями шины данных. Когда же на этом выводе HIGH ЖК-дисплей обрабатывает входящие данные.
  • D0-D7 (Data Bus) — это выводы, по которым передаются 8-битные данные на дисплей. Например, если мы хотим отобразить символ «A» в верхнем регистре, мы отправляем на LCD дисплей 0100 0001 (в соответствии с таблицей ASCII) .
  • AK (Anode & Cathode) используются для управления подсветкой LCD дисплея.
Читать еще:  Что входит в услугу регулировка окон

Управление RGB лентой с помощью Andurino

Кроме однокристальных светодиодов, Ардуино может работать и с цветными LED. Подключив выводы каждого цвета к аналоговым выходам Ардуино можно произвольно изменять яркость каждого кристалла, добиваясь необходимого цвета свечения.

Схема подключения к Arduino RGB светодиода:

подключение к arduino rgb светодиода

Аналогично построено и управление RGB лентой Arduino:

Управление RGB лентой через Arduino

Аrduino RGB контроллер лучше собирать на полевых транзисторах.

Для плавного управления яркостью можно использовать две кнопки. Одна будет увеличивать яркость свечения, другая уменьшать.

Плавное управление яркостью

Скетч управления яркостью светодиодной ленты Arduino

int led = 120; устанавливаем средний уровень яркости

void setup() <
pinMode(4, OUTPUT); устанавливаем 4й аналоговый порт на вывод
pinMode(2, INPUT);

pinMode(4, INPUT); устанавливаем 2й и 4й цифровой порт на ввод для опроса кнопок
>
void loop()<

button1 = digitalRead(2);

button2 = digitalRead(4);
if (button1 == HIGH) нажатие на первую кнопку увеличит яркость
<
led = led + 5;

analogWrite(4, led);
>
if (button2 == HIGH) нажатие на вторую кнопку уменьшит яркость
<
led = led — 5;

analogWrite(4, led);
>

При удержании первой или второй кнопки плавно изменяется напряжение, подаваемое на управляющий контакт электронного ключа. Тогда и произойдет плавное изменение яркости.

Небольшое отступление №2: Как узнать адрес I2C-устройства?

В большинстве своем адрес можно посмотреть в даташите к микросхеме, на которой построено I2C-устройство. Если же такой возможности нет вот ссылка на архив со скетчем и схемами — http://www.ansealk.ru/files/Arduino_lcd_i2c.zip который определяет адреса всех устройств, подключенных по I2C-шине. Достаточно только подключить устройство к Arduino, загрузить скетч, открыть консоль и увидеть адрес.

Тут мы видим функцию, которая, собственно, и будет заниматься выводом на дисплей. Принцип вывода примерно такой:

— Задаём позицию начала вывода функцией setCursor()

— Печатаем строку функцией print()

После этого следующая функцию print() начнет вывод со следующей позиции, после которой закончился предыдущий ввод. Также обращу внимание на то, что, в отличие от вывода в консоль, тут не используется функция println() для завершения вывода и перевода строки.

Таким образом у нас на экране в первой строке появится надпись «Test LCD1602», а во второй будет указано разрешение дисплея и счетчик, показывающий, сколько циклов отработал наш скетч.

Но, если нам надо будет выводить много значений переменных на экран, этот метод не совсем удобен. Дело в том, что процедура вывода на дисплей — очень энергоёмкая и медленная, а вывод мы делаем в этой функции аж 7 раз. Гораздо проще будет заранее сформировать строку заранее, а затем вывести её целиком. В этом нам поможет функция форматированного ввода sprintf().

Читать еще:  Зарядное устройство акб с плавной регулировкой тока

Небольшое отступление №3: Функция форматированного ввода sprintf().

В Языке C существует несколько очень удобных функций для вывода строк — они называются функциями форматированного вывода — printf (от слов print и format). В нашем конкретном случае нас интересует функция sprintf, которая не выводит ничего на экран, а формирует строку для последующего вывода. Выглядит она примерно так:

sprintf ( str , » Строка %d для вывода «, i );

Функция формирует строку (помечено синим ) с использованием шаблона (желтым), в который подставляются значения переменных (зеленым). Полученный результат будет записан в строковую переменную (красным).

Шаблонов и переменных может быть несколько. В этом случае переменные записываются через запятую. Главное, следите за тем, чтобы количество шаблонов в строке соответствовало количеству переменных. Переменные для шаблонов берутся последовательно, т.е. в первый шаблон подставляется значение первой переменной, во второй — второй переменной и т.д.

Что же такое шаблоны? Любой шаблон начинается символом «%» и заканчивается одним из десяти (в случае Arduino — семи) символов типа. Между ними может быть указано довольно много информации о том, как выводить значение, а может быть не указано и ничего.

Давайте разберем что же может быть в шаблоне. В общем случае шаблон имеет такой вид:

%[ флаг ][ ширина ][ .точность ][ h | I | L ]типа

Квадратные скобки показывают, что элемент заключенный в них может отсутствовать. Вертикальная черта говорит о том, что в этом поле должно быть выбрано одно из указанных значений (в нашем случае одна из букв H, I, или L).

Давайте сначала разберемся с обязательным элементом шаблона — типом. Он указывает, какой тип переменной будет выводится и может принимать одно из следующих значений:

СимволЗначение
cОдин символ
sСтрока символов
d,iЦелое десятичное со знаком
oЦелое восьмеричное
uЦелое десятичное без знака
x, XЦелое шестнадцатеричное
pУказатель (в шестнадцатеричном виде)
fДробное число в фиксированном формате
e, EДробное число в научном формате
g, GДробное число в научном или фиксированном формате

Серым помечены те типы, которые не применимы при работе с Arduino. Таким образом, для вывода строки надо указать «%s», а для вывода целого числа — «%d».

Далее рассмотрим поле ширины. Число в нем указывает минимальную ширину поля, в котором будет выведен шаблон. Если размер значения в переменной меньше — поле будет добито пробелами, если больше — запись выйдет за пределы поля. Таким образом шаблон «%6d» для числа 385 выведет 385 (обратим внимание на три пробела перед числом).

Читать еще:  Как синхронизировать механические часы

Спецификатор точности всегда начинается с точки и следующее за ним число указывает различные действия в зависимости от типа значения. Для типов «d,o,u,x» он укажет минимальное количество символов, которое должно появится при обработке. Для типа «f» — число знаков после запятой. Для типа «s» — максимальное число символов стоки, который будут выведены. Например, «%6.1f» для числа 34.2345 выведет «34.1» (обращу внимание, что точка также считается знаком и перед числом будет присутствовать два пробела). Или шаблон «%.3s» от строки «точность» выведет только первые три символа — «точ».

Флаг позволяет изменить отображение выводимого значения:

ФлагОписание
Выровнять выводимое значение по левому краю поля
+Всегда указывать знак для десятичного значения
Дополнять выводимое значение нулями до ширины поля

Более подробно о шаблонах функции printf можно прочитать интернете. Здесь же я дал краткий обзор наиболее часто используемых возможностей.

Таким образом, наша функция вывода, переписанная с учетом использования форматированного вывода будет выглядеть следующим образом:

Заметим, что в строках 33 и 37 мы формируем целую строку для вывода, а в строках 34 и 38 — выводим их.

Наконец, наши любимые функции setup и loop.

В строке 47 мы задаем разрешение дисплея, в строке 48 — включим подсветку (яркость которой можно отрегулировать потенциометром). В строке 49 установим счетчик циклов в ноль. Увеличивать его будем на единицу в 37-й строке при выводе (помните конструкцию count++?). Наконец, в строке 56 вызываем рассмотренную раннее функцию вывода на дисплей. Все.

Что можно поменять или улучшить?

К примеру, можно сделать автоматическое управление подсветкой в зависимости от освещенности, использовав фоторезистор или датчик освещенности из рассмотренной несколькими статьями ранее метеостанции. Допустим, при сильном освещении — увеличить яркость подсветки, а в ночное время — уменьшить. Или прикрутить датчик движения и зажигать подсветку при появлении объект перед дисплеем, или. В общем, я думаю, вы уже поняли, что при желании, заменив один или несколько компонентов и написав кусок кода можно довольно серьезно улучшить удобство работы с дисплеем. Также мы можем использовать для вывода на дисплей собственноручно разработанные символы.

Все эти вопросы я тут не рассматриваю, так как они выходят за рамки обзора для начинающих.

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector