Arduino lcd регулировка яркости - Строительный журнал
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Урок 7. Управление яркостью дисплея Nextion. Страница ожидания

Урок 7. Управление яркостью дисплея Nextion. Страница ожидания.

Сегодня последний урок по дисплею Nextion, в котором рассмотрим, как можно изменять яркость дисплея для экономии электроэнергии. А также выведем текущее состояние подсветки при переходе на страницу управления. Кроме этого, разберём пару полезных моментов в управлении дисплеем Nextion. Для подписчиков на boosty и YouTube будут еще бонусные уроки, поэтому не забудьте подписаться.

Что понадобиться для урока:

    . или Arduino UNO. . если нужна.

Сегодня в уроке Nextion:

Необходимые компоненты:

  • Текстовый экран 16×2, 20×4 или любого другого размера с впаянной штырьковой линейкой на 16 контактов;
  • Arduino Uno;
  • Breadboard для удобного подключения. После того, как всё заработает, вы при желании можете избавиться от макетной доски и впаять дисплей в свою плату или припаять провода непосредственно к его контактам;
  • Набор перемычек и/или соединительные провода.

Подключение дисплея:

Закрепите экран на breadboard и подведите к питанию breaboard питание +5 В и землю с Arduino.

Включение подсветки дисплея:

Фоновая подсветка дисплея — это отдельный контур, не связанный с остальным. Включить её можно подав +5 В на 15-й контакт дисплея и подключив 16-й контакт к земле. Соединив эти два контакта с соответствующими дорожками, можно включить Arduino и увидеть, что дисплей засветился.

Обратите внимание, что на некоторых моделях нумерация контактов идёт не просто справа-налево от первого до шестнадцатого, а несколько более хитро. Так, например, на экране 16×2 от Мэлт первый контакт находится на 14-й позиций, второй на 13-й и так далее справа-налево вплоть до 14-го на первой позиции, а 15-й и 16-й расположены справа. Нумерация около контактов дисплея поможет не запутаться.

Включение питания знакосинтезатора:

Далее необходимо подключить цепь, отвечающую за отображение символов. Для этого предназначены контакты 1, 2 и 3 на дисплее. Перед подключением отключите Arduino от питания.

Первый — это земля. Соедините его с рельсой земли.
Второй — питание. Соедините его с рельсой +5 В.
Третий — контрастность. Для получение максимально контрастного изображения соедините его с рельсой земли. Вы можете подать на этот контакт произвольное напряжение от 0 до 5 В, чем оно выше, тем тусклее будет изображение, но вместе с этим снизится энергопотребление. Для возможности плавной регулировки контрастности можете подать на этот контакт выходной сигнал потенциометра.
После подключения, если включить Arduino, вы можете увидеть прямоугольные знакоместа. В зависимости от комбинации цветов текста и подсветки они могут быть как яркими и хорошо заметными, так и едва заметными. Это нормально: в любом случае, текст будет смотреться отлично.

одключение шины данных:

Для коммуникации между Arduino и экраном необходимо использовать несколько линий взаимодействия:

  • 2 или 3 для командования дисплеем
  • 4 или 8 для передачи данных (кодов символов и команд)

Таким образом занятыми окажутся от 6-ти до 11-ти контактов от обоих устройств. Если вам не требуется считывать с дисплея, что подходит под большинство сценариев использования, для команд понадобится 2 линии.

Если скорость обновления данных так же не является проблемой, для передачи данных достаточно 4-х линий.

Итак, для подключения дисплея достаточно истпользовать 6 линий, 6 контактов на Arduino. Рассмотрим именно этот сценарий.

Как упоминалось, нам не за чем считывать с дисплея, мы будем в него только писать. Поэтому соединим 5-й контакт дисплея, который отвечает за выбор чтение/запись с рельсой земли. Это означает «всегда писать».

Читать еще:  Как регулировать пластиковые окна по вертикали

Затем, соединяем Arduino и экран нашими 6-ю линиями коммуникации. Какие именно контакты будут выбраны на Arduino не имеет значения: мы зададим их в программе, но для примера была выбрана такая конфигурация:

4-й контакт дисплея — 4-й контакт Arduino. Это линия адресного сигнала. Известная как A0 или RS. В зависимости от того, 0 она или 1, дисплей понимает имеем ли мы на линии данных команду вроде «передвинуть курсор» или код символа для отображения.
6-й контакт дисплея — 5-й контакт Arduino. Это линия разрешения доступа к данным. Известная, как E или Enable. Когда эта линия становится единицей, дисплей исполняет команду или выводит символ с линии данных.
11-й, 12-й, 13-й, 14-й контакт дисплея — 10-й, 11-й, 12-й, 13-й контакт Arduino соответственно. Это линии данных. Известные как DB4, DB5, DB6, DB7.

Экран подключен и готов к приёму данных. Осталось написать программу для Arduino.

Программирование дисплея Arduino

Для вывода текста с Arduino удобнее всего воспользоваться встроенной библиотекой Liquid Crystal. Для вывода приветствия и таймера, воспользуйтесь этим кодом:

Как установить криллицу?

Информация в этом разделе относится именно к дисплеям от Мэлт. Китайские и Европейские аналоги вряд ли имеют в своём наборе символов кириллицу, обратитесь к документации на дисплей, чтобы узнать об этом подробнее.

Вывод русских букв не совсем тривиален: вы не можете просто написать lcd.print(«Вася»). Это связано с понятием кодировок. Вы знаете, что каждому символу соответствует код и при компиляции программы, если строка содержит кириллицу, она будет сконвертирована в коды по таблице utf-8, cp-1251 или какой-то другой в зависимости от настроек компилятора. Экран в свою очередь, ожидает увидеть данные в собственной кодировке.

Так например, букве «Я» соответствует код B1 в шестнадцатиричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:

Можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x, он считывает за ним все символы, которые могут являться разрядами шестнадцатиричной системы даже если их больше двух. Из-за этого вы не можете просто использовать символы из диапазона 0-9, a-f следом за двузначным кодом символа: это вызовет ошибку компиляции. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются. Так, если вы хотите написать «Яeee»:

Для того, чтобы микроконтроллер понял наши действия нам необходимо скачать и установить необходимые библиотеки.

Скачать библиотеку для датчика DHT11 можно здесь , а библиотеку для LCD дисплея можно здесь .

После того, как мы скачали нужную библиотеку, ее нужно правильно установить. скачанные файлы нужно переместить по следующему пути :

Диск C стрелкаProgtam Files стрелкаArduino стрелкаLibraries

папка с экрана

Ну что, время пришло познать код программы. Напомню, что подробные объяснения к подключению датчика влажности и температуры и lcd экрана можно посмотреть в предыдущих уроках.

#define DHTPIN 10
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include «DHT.h»
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() <
lcd.begin (16,2);
dht.begin( );
>

void loop() <
int h = dht.readHumidity();
int t = dht.readTemperature();

lcd. setCursor(0, 0);
lcd. print(«Temp: «);
lcd. print(t);
lcd. print(«C»);

lcd. setCursor(0,1);
lcd. print(«Humidity: «);
lcd. print(h);;
lcd. print(«%»);

Читать еще:  Регулировка балконных защелок на окнах

Пояснение

Перейдем к объяснению нашего кода, ведь нужно уметь понимать то, что ты делаешь! Первые строки у нас в коде такие:

#define DHTPIN 10
#define DHTTYPE DHT11

#define это удобная директива, которая позволяет дать имя константе перед тем как программа будет скомпилирована.

Синтаксис: #define constantName value

Внимание! Символ # перед словом define обязателен.

DHT dht(DHTPIN, DHTTYPE);

В этой строчке мы создаем и обозначаем объект «dht»

Затем в нашем коде пишутся такие строчки :

#include «DHT.h»
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Здесь мы подключаем библиотеку для датчика влажности и температуры и lcd исплея. Также для lcd дисплея обозначаем порты подключения

Следующим в нашем коде идет цикл, который выполняется лишь один раз.

void setup() <
lcd.begin (16,2);
dht.begin( );
>

В этом цикле мы указываем, что на дисплее будет «16» столбцов и «2» строчки. Также в этом цикле мы заставляем датчик DHT11 работать.

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

void loop() <
int h = dht.readHumidity();
int t = dht.readTemperature();

lcd. setCursor(0, 0);
lcd. print(«Temp: «);
lcd. print(t);
lcd. print(«C»);

lcd. setCursor(0,1);
lcd. print(«Humidity: «);
lcd. print(h);;
lcd. print(«%»);

В строчках «int h = dht.readHumidity();» и «int t = dht.readTemperature();» мы вводим переменные «h» и «t» , в которые будет считываться значение с датчика DHT11. Это нам понадобится для дальнейших действий.

Далее строчкой «lcd. setCursor(0, 0);» мы ставим курсор нашей программы в ПЕРВУЮ строчку дисплея и в ПЕРВЫЙ столбик. Будте внимательны, счет ведется с нуля, тоесть значение «0» в коде — это первая строчка или группа .

Рассмотрим следующие 3 строчки:

lcd. print(«Temp: «);
lcd. print(t);
lcd. print(«C»);

В строчках lcd. print(«Temp: «); , lcd. print(t); и lcd. print(«C»); мы указываем то, что будет написанно на самом LCD дисплее. Хотелось бы обратить внимание на то, что мы указали переменную «t», которая отвечает за информацию, выданную с датчика DHT11.

В следующих строчках все аналогично.

setCursor(0,1);
lcd. print(«Humidity: «);
lcd. print(h);;
lcd. print(«%»);

Обратите внимание что в строчке «setCursor(0,1);» мы указываем курсор программы на экране в ПЕРВЫЙ столбик, но во ВТОРУЮ строчку.

Ну а завершающей строкой нашего кода является:

Смысл этой строки очень прост, мы даем программе время «передохнуть». Delay это время, которое программа будет бездействовать, ждать, ничего не делая. В нашем скетче мы указали 200 мс (значение всегда задается в «мс»)

Ну что, мы справились! В конце у нас должно получиться вот так!

подключение dht11 и lcd к Arduino представленное на живом примере

Ну вот и все, мы вывели температуру и влажность с датчика dht11 на lcd экран с помощью Arduino ! Согласитесь, это не сложно, но очень интересно и необычно. Если вам понравилось , как мы вам объяснили и показали подключение и программирование этого соединения,то делитесь с друзьями этой статьей.

Режим самотестирования

Самотестирование дисплея необходимо для того, чтобы проверить его работоспособность еще до подключения к системе. Чтобы запустить этот режим, нужно подать питание на подсветку, а напряжение — на контроллер. Сделать это можно с использованием потенциометра или мультиметра на 10 или 50 кОм, подсоединив следующие контакты:

  • VSS и заземление;
  • VDD и источник питания 5В;
  • V0 и потенциометр;
  • A и источник питания 5В;
  • K и заземление.
Читать еще:  Регулировка света с помощью пульта

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

Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: . Преобразуем 16-ричные числа в бинарные: . Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где «0» обозначают светлую точку, а «1» – тёмную. Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

Создание собственного символа для LCD экрана Создание собственного символа для LCD экрана

Управление яркостью светодиода

Простой пример управления яркостью светодиода с помощью функции analogWrite(). AnalogWrite () использует широтно-импульсную модуляцию (ШИМ). Эффект изменения яркости достигается за счет очень быстрого, повторяющегося переключения напряжения на выходе с 0В на +5В (для некоторых плат стандартное напряжение +3.3В).

Необходимые компоненты

  • контроллер Arduino
  • макетная плата
  • светодиод
  • резистор 220 Ом

Подключение

Подключаем анод (обычно длинная ножка) светодиода через резистор сопротивлением 220 Ом к выходу номер 9 (pin 9). Катод (короткая ножка) подсоединяем напрямую к земле (Grd).

Схема

В секции setup() кода устанавливаем режим выхода для вход/выхода 9 (pin 9).

Функция analogWrite(), которая циклически вызывается в теле скетча, принимает два аргумента: номер выхода и значение ширины импульса ШИМ в диапазоне от 0 до 255.

Для управление яркостью светодиода, его плавного зажигания и плавного затухания, мы будем изменять значение ширины импульса, передаваемое в функцию analogWrite(). При значение 0 светодиод выключен, при 255 светодиод светит на полную яркость. В приведенном ниже скетче ширина импульса задается переменной brightness. Шаг изменения этого значения задан переменной fadeAmount.

Для плавного изменения яркости мы вводим задержку в конце главного цикла (тела) скетча — delay(30).

Управление яркостью светодиода

Простой пример управления яркостью светодиода с помощью функции analogWrite(). AnalogWrite () использует широтно-импульсную модуляцию (ШИМ). Эффект изменения яркости достигается за счет очень быстрого, повторяющегося переключения напряжения на выходе с 0В на +5В (для некоторых плат стандартное напряжение +3.3В).

Необходимые компоненты

  • контроллер Arduino
  • макетная плата
  • светодиод
  • резистор 220 Ом

Подключение

Подключаем анод (обычно длинная ножка) светодиода через резистор сопротивлением 220 Ом к выходу номер 9 (pin 9). Катод (короткая ножка) подсоединяем напрямую к земле (Grd).

Схема

В секции setup() кода устанавливаем режим выхода для вход/выхода 9 (pin 9).

Функция analogWrite(), которая циклически вызывается в теле скетча, принимает два аргумента: номер выхода и значение ширины импульса ШИМ в диапазоне от 0 до 255.

Для управление яркостью светодиода, его плавного зажигания и плавного затухания, мы будем изменять значение ширины импульса, передаваемое в функцию analogWrite(). При значение 0 светодиод выключен, при 255 светодиод светит на полную яркость. В приведенном ниже скетче ширина импульса задается переменной brightness. Шаг изменения этого значения задан переменной fadeAmount.

Для плавного изменения яркости мы вводим задержку в конце главного цикла (тела) скетча — delay(30).

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