Обзор дисплеев для ардуино
Согласитесь, что даже самодельный электронный прибор выглядит законченно и функционально, если он имеет устройство ввода и/или вывода информации. Таким устройством может в простейшем случае служить даже светодиод, но куда более интересно наблюдать за небольшим экранчиком, куда выводятся результаты работы прибора. А если еще и имеется возможность влиять на его работу с помощью интерактивных элементов такого экрана, например, касанием к нему, то это уже высший пилотаж DIY электроники!
Многие самодельные электронные устройства разрабатываются сегодня на основе различных клонов Ардуино, что вполне оправдано по причине простоты процесса разработки, широкого функционала самих контроллеров, огромного количества библиотек, реализующих возможности различных устройств ввода-вывода, предназначенных для работы в составе этой широко распространенной программно-аппаратной платформы.
Именно для таких разработок предназначены миниатюрные мониторы (дисплеи), предлагаемые компанией Мастер Кит, и являющиеся темой этого материала. Такие дисплеи небольшого размера (2-7 дюймов по диагонали) будут полезны электронщикам, конструирующим самодельные аудиовидеоплееры, различные устройства базе Arduino или Raspberry и т.п. На дисплее могут отображаться цифровая и текстовая информация, изображения и видео, а малый размер дисплеев и низкое энергопотребление позволяет встраивать их даже в портативные электронные устройства.
Наибольшее распространение для DIY разработок получили различные типы устройств отображения на жидких кристаллах (ЖК), или LCD (liquid crystal display), а также TFT LCD – разновидность жидкокристаллических дисплеев с активной матрицей. Каждый пиксель таких дисплеев управляется 1-4 тонкопленочными транзисторами (по англ. – Thin Film Transistor, сокращенно – TFT), которые помогают легко включать/выключать светодиоды матрицы, создавая более четкое, качественное изображение. TFT-дисплей имеет две стеклянные подложки, внутри которых находится слой жидких кристаллов. В передней стеклянной подложке находится цветной фильтр. Задняя подложка содержит тонкие транзисторы, выстроенные в колонны и ряды. Позади всего этого хозяйства находится подсветка.
Интересно знать, что каждый пиксель представляет собой небольшой конденсатор со слоем жидкого кристалла, зажатого между прозрачными проводящими слоями из оксида индия-олова. Когда дисплей включается, молекулы в жидкокристаллическом слое изгибаются под определенным углом и пропускают свет. Это создает пиксель, который мы видим. В зависимости от угла изгиба молекул жидких кристаллов, возникает тот или иной цвет. Все пиксели вместе образуют картинку.
В стандартном TFT-мониторе присутствует около миллиона пикселей, каждый из которых контролирует свой транзистор. Состоят они из тонких пленок из аморфного кремния, нанесенных на стекло по технологии PECVD (этот метод обычно используется для создания микропроцессоров). Каждый элемент работает за счет небольшого заряда, поэтому перерисовка изображения происходит очень быстро, картинка обновляется много раз в секунду.
Рассмотрим некоторые конкретные образцы миниатюрных мониторов, предлагаемых компанией Мастер Кит.
2.2-дюймовый TFT-монитор может использоваться в любых встраиваемых системах, в которых требуется высококачественное цветное изображение. Модулем можно легко управлять такими микроконтроллерами как 8051, PIC, AVR, ARDUINO, и ARM. На модуле установлен слот для SD-карты.
Идеи для применения:
- индикация и управление в умном доме;
Технические характеристики
Диагональ, дюйм 2,2
Разрешение 320х240
Напряжение питания, В 3,3
Габаритные размеры LCD, мм 67,2 x 41 x 5
Углы обзора верх/низ/лево/право 45/65/65/65
Количество цветов 260К
Контрастность 400:1
Монитор совместим с контроллерами Freaduino, у которых есть возможность переключения на режим работы 3,3В. Так как монитор работает с уровнями сигналов 3,3 В, несовместимыми с Arduino, необходимо использовать преобразователь уровней. Для подключения модуля к Arduino Uno (подобным) используйте расширение-преобразователь уровней SHD09. Для подключения модуля к Arduino Mega2560 (или подобным) используйте расширение-преобразователь уровней SHD10. Жидкокристаллический модуль поддерживает UTFT библиотеку Хеннинга Карлзена, которую можно скачать здесь .
- TFT01-3.2 - 3.2" TFT дисплей (320 * 240) с сенсорной панелью (touch screen) для Arduino.
В дисплее использован контроллер Li9341.
3.2-дюймовый TFT монитор, может использоваться в любых встраиваемых системах, в которых требуется высококачественное цветное изображение и сенсорное управление. Модулем можно легко управлять такими микроконтроллерами как 8051, PIC, AVR, ARDUINO, и ARM. На модуле установлены регуляторы на 5 и 3.3 вольта, контроллер сенсорной панели, схема PWM и слот для SD-карты.
Мониторы совместимы с контроллерами Arduino Uno, Arduino Duemilanove w/ATmega328, Arduino Leonardo, Arduino Mega2560, Arduino Mega, Arduino Due.
Так как монитор работает с уровнями сигналов 3,3 В, несовместимыми с Arduino, необходимо использовать преобразователь уровней.
19 шилдов для Arduino на все случаи жизни
Шилд – это плата дополнения. Я предлагаю разделить шилды на полноразмерные и отдельные модули. Полноразмерные своими очертаниями повторяют форму платы Arduino, будь то UNO, Nano или MEGA. Отдельные модули – это платы произвольной формы, созданные для выполнения определенного набора функций. И те и другие могут быть как универсальными, так и для выполнения узконаправленных задач.
В магазинах можно встретить великое множество шилдов, а при определенной квалификации вы сами можете развести печатную плату, по форме и расположению выводов повторяющую ардуину и собрать свой уникальный. На картинке изображена плата Arduino UNO с набором шилдов.
Содержание статьи
Универсальная плата для удобного макетирования
Начнем с шилда, который не несёт в себе никаких особенных функций, а создан для удобства монтажа ваших проектов. Итак первый в нашем обзоре облегчит монтаж проектов с платой Arduino Nano, правда толку от малых размеров «НАНО» в таком случае ноль.
На плате расположен разъём для подключения штекера от блока пиитания, стабилизатор напряжения, а также клеммные колодки. Они подписаны и соответствуют выводам «Нанки». Кроме того присутствует кнопка «сброс» и светодиод «Питание».
Второй шилд предназначен для платы Uno. На нем расположена беспаечная макетная плата для сборки проекта и выводы, дублирующие те, что на самой ардуине – удобное решение.
Любой аналоговый датчик нуждается в питании и минусовом контакте, когда их много – перемчек становится столько, что разобраться в схеме будет очень трудно. Поэтому конструкторы придумали шилды для таких решений. В них выведены все входы и выходы, а питающие контакты продублированы и размещены рядом.
Вот пример такой платы для Ардуино версии Мега.
Проводная и беспроводная связь
С помощью этих плат можно организовать управление микроконтроллером по сети через кабель Ethernet, например, или беспроводов – через GSM-связь, вставив сим-карту.
Эта плата называется w5100 – содержит Ethernet модуль и модуль SD-кардридера. Это значит, что можно хранить данные, например лог измерений датчиков на карту памяти и управлять системой через web-интерфейс. Чтобы связать с ним ардуино пользуйтесь библиотеками:
Обратите внимание внешне он повторяет концепцию Arduino UNO R3, кроме того, он подойдет и на Mega.
Если W5100 вам кажется слишком крупным – то ENC28J60 займет меньше места. К сожалению в нем уже отсутствует SD-модуль.
Минусом является то, что он не может быть монтирован на плату, а выполнен в виде отдельного модуля.
W5500 – еще один вариант Ethernet-шилда. По своей сути – это доработанная версия W5100, оптимизированная в плане скорости и энергоэффективности.
Обратите внимание, на полноразмерных шилдах все пины дублируются клеммной колодкой. К сожалению, шилды используют порты. Конкретно этот задействует MOSI, MISO, SCK, и пин 10, для сигнала CS (выбор адресата для связи).
Если вам нужна беспроводная связь – ваш выбор это Wi-fi шилды, если есть интернет и роутер, а если этого нет – GSM-модули или GPRS Шилды.
На фото официальный шилд. На нём установлен слот под Micro SD-карту памяти, а связывается с микроконтроллером он по SPI-протоколам, через Mini-USB можно обновлять его программное обеспечение. Поддерживает 802.11b/g.
GPRS-шилд от «Амперки» вы видите выше. Вы можете заменить антенну на более мощную. Ближе к зрителю виден слот для SIM-карты, чуть дальше слот под батарейку CR1225. Батарейка на плате нужна для хота часов реального времени, а это немаловажное дополнение к возможностям GPRS-шилда. Вы можете отправлять СМС на него и с него.
С помощью этой платы можно вести контроль и давать команды своему умному дому (или любому другому проекту вашей реализации) находясь на любом удалении. Важно, чтобы вы находились в зоне приема сотовой связи.
Как хранить данные на Arduino?
В проектах не вся информация помещается в память микроконтроллера. Иногда требуется хранить некоторые объемы информации. Первое, что приходит на ум, уже сказано – это запись информации с датчиков, чтобы в дальнейшем изучать как изменяется окружающая среда с течение часов, дней, лет. Отличным примером является – домашняя метеостанция. Это полезно не только ученым-исследователям, но и любителям для общего образования и развития.
Это скорее не шилд, а модуль. Он миниатюрен и легок для повторению, кстати, вот его схема.
Есть и полноразмерный шилд хранения данных. Работает с SD-картами памяти, на борту есть модуль часов реального времени, которые питаются от батарейки CR1220 напряжением в 3 В, что является неплохим бонусом.
Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств
Управляем мощной нагрузкой с микроконтроллера
Первое что может прийти в голову – это реле. С их помощью можно коммутировать как цепи постоянного тока, так и с бытовой электросетью 220 Вольт они справятся на ура.
Конкретно тот модуль что изображен ниже может коммутировать 1 кВт 220 В нагрузки (или 5А) по каждому из каналов, для повышения мощности можно либо запараллелить несколько каналов, либо включать этим реле магнитный пускатель. В таком случае реле со шилда будут играть роль промежуточных усилителей.
Конечно вы можете коммутировать реле так, как я описал в статье «Подключение внешних устройств к Ардуино», через транзистор и подобрать нужно реле по току, но использовать готовую плату будет надежнее, удобнее и выглядит лучше.
У реле есть один недостаток – ограниченное количество срабатываний – это следствие выгорания контактов. Это бывает из-за возникновения дуги, при размыкании мощной нагрузки (особенно индуктивного характера – это двигателя и т.п.). Сделать такой шилд можно по следующей схеме:
А вот как это выглядит в сборе:
Поэму для включения нагрузки переменного тока можно использовать тиристоры и симисторы. Одна проблема – прямо к ардуине подключать их нельзя, при пробое pn- перехода управляющего электрода, 220 В могут оказаться на плате микроконтроллера и сжечь его. Выход из этой ситуации – использования оптосимистора.
Так как это задача часто становится перед изобретателями, было разработано готовое решение – симисторный shield, его полное название - ICStation 8 Channel EL Escudo Dos Shield for Arduino. Он изначально предназначался для управления свечением «гибкого неона».
У него есть 8 каналов, к которым подключается сеть переменного тока и нагрузка.
Шилды для двигателей
Управление электродвигателем не всегда легкий процесс. В некоторых ситуациях вам может не хватить пинов для реализации поставленной задачи, или алгоритм управления достаточно сложный. С такими платами вы гораздо быстрее одолеете проект своего робота.
Мотор-ШИЛД для ардуино может управлять электродвигателями постоянного тока (4 штуки) или двумя шаговыми моторчиками.
Он построен на базе двух L293. Эта микросхема представляет собой сборку из двух H мостов, это позволяет управлять с возможностью реверса двумя ДПТ, либо 1 шаговым биполярным двигателем. Схемы подключения соответсвенно:
А в левом верхнем углу платы есть две колодки под сервоприводы (плюс, минус и управляющий сигнал). Красным кругом обведено место куда устанавливается перемычка джампер. Если она стоит – то эта плата питается от базовой платы ардуино, а если нет - от внешнего источника на 5 В.
С помощью этого модуля от отечественного производителя можно управлять двумя двигателями постоянного тока, в нём тоже есть джампер объединяющий линии питания микроконтроллера или разъединающий их – для питания от отдельного источника.
Можно управлять двигателями, которые рассчитаны на диапазон напряжение от 5 до 24 Вольт. Вместо 2-х DC-моторов можно использовать 1 однофазный шаговый или запараллелить каналы и подключить 1 мощный DC мотор с током до 4А, а это не мало – 48 Вт при напряжении питания в 24 В.
Для подключения сервопривода нужно три провода – плюс, минус и сигнал, но что делать, если у вас много серв? Ваша плата превратится в месиво из перемычек. Чтобы это избежать есть Мультисерво шилд.
Здесь тоже есть возможность разделения цепей питания, как это было в предыдущем варианте. Итого можно подключить 18 сервоприводов (на плате нумерация от 0 до 17).
Везде есть своя специфика, шилды для необычных задач…
В атмеге328, сердце нашей платы, есть АЦП. Главная проблема в том, что на плате ардуино уно мы видим всего лишь 6 аналоговых входов. Что делать если у нас больше аналоговых датчиков?
Можно собрать две ардуино в единую сеть. Одну использовать в качестве основной, а вторую вспомогательную для изменений и с первой отправлять на сервер сигналы измерений или выводить их на экран… Но это сложно: нужно тратить память на дополнительные строки программного кода для реализации такой системы.
А что если умножить каждый вход на 16? Итого у нас может быть до 16*6=96 аналоговых входов. Это реально с помощью мультиплексора. Он просто переключает по очереди 16 аналоговых каналов на один аналоговый выход, который вы подключаете к такому же входу любого мироконтроллера.
Распознавание голоса
Средствами микроконтроллера Атмега о-о-очень трудно релизовать функцию распознавания голоса, но ардуинщики могут не отчаиваться, есть специальное решение – EasyVR Shield 3.0.
Это готовое, но дорогое решение, на момент написания статьи он стоит почти 100 долларов в России. Сначала шилд запишет вашу команду, затем сравнит её с тем что записано в памяти, определив номер – выполнит её.
Вы можете устроить «диалог с компьютером», он может воспроизводить то, что в нём записано. Без дополнительных усилителей рекомендуется «общаться» с этой платой с расстояния не более 60 см.
Выводим изображение
LCD Keypad shield – это настоящая панель управления. На нём расположен дисплей LCD1602 (16 символов в две строки), и набор кнопок. Из-за них задействовано довольно много портов, например A0 и с D4 по D7 под клавиатуру, а порт D10 – ШИМ-регулятор яркости подсветки. D8 и D9 – сброс и включение.
На самом деле существует много дисплеев совместимых с ардуино. Вернее тех, о которых написано больше всего информации и вы легко их запустите в своей системе. Довольно популярен в кругах самодельщиков дисплей от NOKIA 5110, на выбор есть и OLED и TFT экраны, работающие по I2C. Но они не в «шилдовом» исполнении.
Дисплеи для Ардуино:
Автономное питание
Довольно необычный шилд в этой подборке, который выполняет обычную задачу. Power shield – это литий-ионный аккумулятор со всеми необходимыми защитами и разъёмом для зарядки. Вроде бы ничего особенного, но это обеспечит завершенный вид вашему проекту, а цепи питания не придется размещать рядом с основными платами.
Лучшие магазины Ардуино на Алиэкспресс
Где купить Аrduino Shield и другие электронные компоненты?
Проверенные продавцы Ардуино:
Заключение
Использование шилдов для всех задач проекта позволит избежать излишнего числа перемычек и соединений, а это снизит количество ошибок и лишних перемычек. После сборки вы получите многоэтажный бутерброд из плат заводского изготовления. Такой подход иногда называют «модульная конструкция». Между прочим, это облегчит обслуживание, ремонт и наладку оборудования.
Энтузиасты практикуют проектирование, разводку и сборку уникальных модулей. Это одна из причин высокой популярности Ардуино не просто как платформы для самоделок, макетов и прототипов, но и как платформы для готовых решений.
Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!
Записывайтесь в онлайн-университет от GeekBrains:
Изучить C, механизмы отладки и программирования микроконтроллеров;
Получить опыт работы с реальными проектами, в команде и самостоятельно;
Получить удостоверение и сертификат, подтверждающие полученные знания.
Starter box для первых экспериментов в подарок!
После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.
Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.
В этой статье речь пойдет об использовании библиотеки U8glib. Это универсальная библиотека под Arduino для работы с различными типами экранов.
Использование библиотеки
Я рассмотрю ее использование с OLED экраном, управляемым контроллером SSD1306. Чаще всего встречаются экраны с разрешением 128х64 пикселей:
И 128х32 пикселей:
Подключаться они могут как по I2C, так и по SPI (особых различий в использовании не будет).
Сразу отмечу, что данная библиотека уже перестала поддерживаться автором и больше не будет получать обновлений. Однако это не мешает ей стабильно работать, даже наоборот: есть плюсы в том, что новое обновление ничего не сломает и у всех пользователей будет одна версия.
Модифицированная U8glib
Я добавил в саму библиотеку с полтора десятка русских шрифтов и теперь их можно вызвать так же, как и другие, а не добавлять отдельными файлами.
Также можно скачать исходники шрифтов в архиве с небольшой инструкцией по использованию:
Установка стандартной библиотеки
Стандартная библиотека U8glib устанавливается следующим образом.
1. Откройте Arduino IDE
2. Перейдите в: Скетч –> Подключить библиотеку –> менеджер библиотек
3. Введите в строке поиска u8glib и выберете "U8glib by oliver":
Проверка работоспособности экрана
При первом подключении экрана к Arduino стоит убедиться в том, что он корректно работает:
- Правильно подключены пины управления
- Сам экран и его драйвер не повреждены
- Объект экрана правильно инициализирован в программе
Как это сделать?
2. Пролистать вниз до U8glib и выбрать пункт GraphicsTest:
3. Посмотреть тип своего дисплея.
Раскомментировать инициализацию, с названием, похожим на наименование подключаемого дисплея. Если не сработало – попробовать другую похожую инициализацию.
Если закончились все похожие инициализации – проверить правильность подключения дисплея и повторить предпредыдущий пункт.
Если и тут не сработало - перепроверить тип и наименование дисплея, повторить предпредпредыдущий пункт. Если даже так не сработает – убедиться, что плата Arduino жива и звать шамана.
4. Загрузить код в Arduino и смотреть на демонстрацию возможностей библиотеки.
Работаем с библиотекой
Библиотека U8glib позволяет в различных комбинациях:
- Рисовать на экране планиметрические объекты.
- Выводить заготовленную картинку.
- Писать различными шрифтами (выбор очень велик)
Теперь рассмотрим по порядку функционал.
Инициализация
Для начала необходимо подключить саму библиотеку
Потом нужно инициализировать дисплей, который будет использоваться.
Для этого посмотрите модель и разрешение своего дисплея и раскомментируйте строку, подходящую по названию
В моем случае это:
Дисплей с разрешением 128 на 64 пикселя, подключается по интерфейсу I2C:
VCC <–> 5V
GND <-> GND
SCL <–> A5
SDA <–> A4
Данная библиотека в отличии от других не требует объявлений в: void setup(void).
Служебные функции могут быть вызваны в любом месте программы, а вот функции отрисовки должны всегда вызываться в цикле отрисовки:
Иногда бывает удобнее занести их в какую-то одну функцию и вызывать потом только ее:
Система координат
Дисплей работает в декартовой системе координат. Начало координат (0,0) находится в левом верхнем углу дисплея. Ось Х параллельна более длинной грани дисплея и идет от левого края к правому, ось У параллельна более короткой грани дисплея и идет от верхней грани к нижней.
Основные аспекты рассмотрены, теперь можно переходить к самим функциям отрисовки.
Служебные функции
Поворот экрана
Может пригодиться, если в проекте экран перевернут или хочется дисплей, вытянутый вверх, а не вбок.
- setRot90() – поворот на 90 градусов
- setRot180() – поворот на 180 градусов
- setRot270() – поворот на 270 градусов
Функция undoRotation отменяет поворот экрана, возвращая его в исходное положение.
Синтаксис: undoRotation().
Изменение цвета
Функция setColorIndex задает цвет пикселя.
Синтаксис: setColorIndex(uint8_t color_index).
- color_index – цвет пикселя,
- 0 – пиксель не горит,
- 1 – пиксель горит.
Масштабирование
Функция setScale2x2 уменьшает разрешение дисплея в 2 раза. Если раньше 1 точка занимала один пиксель, то теперь она занимает 4.
Синтаксис: setScale2x2().
Функция undoScale отменяет действие функции setScale2x2.
Синтаксис: undoScale().
Основные функции будут описаны ниже. Полный список можно посмотреть на GitHub автора библиотеки.
Планиметрические фигуры
Отрисовка прямоугольников
Функция drawBox рисует заполненные прямоугольник.
Синтаксис: drawBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h).
- x и y – координаты левого верхнего угла
- w – ширина (по х) прямоугольника
- h – высота (по у) прямоугольника
Функция drawRBox рисует заполненные прямоугольник со скругленными краями.
Синтаксис: drawRBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r).
- x и y – координаты левого верхнего угла
- w – ширина (по х) прямоугольника
- h – высота (по у) прямоугольника
- r – радиус скругления
Есть необходимое требование - ширина и высота должны быть больше, чем 2*(r+1).
Функция drawFrame рисует полый прямоугольник (рамку).
Синтаксис: drawFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h).
- x и y – координаты левого верхнего угла
- w – ширина (по х) прямоугольника
- h – высота (по у) прямоугольника
Функция drawRFrame рисует полый прямоугольник (рамку) со скругленными краями.
Синтаксис: drawRFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r).
- x и y – координаты левого верхнего угла
- w – ширина (по х) прямоугольника
- h – высота (по у) прямоугольника
- r – радиус скругления
Отрисовка треугольников
Функция drawTriangle рисует треугольник.
Синтаксис: drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2).
- x0, y0, x1, y1, x2, y2 – координаты вершин треугольника
Отрисовка линий
Функция drawLine рисует линию.
Синтаксис: drawLine(u8g_uint_t x1, u8g_uint_t y1, u8g_uint_t x2, u8g_uint_t y2).
Функция drawHLine рисует горизонтальную линию.
Синтаксис: drawHLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w).
- x и y – координаты верхней точки линии
- w – длина линии
Функция drawVLine рисует вертикальную линию.
Синтаксис: drawVLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t h).
- x и y – координаты левой точки линии
- w – длина линии
Отрисовка эллипсов
Функция drawEllipse рисует полый эллипс.
Синтаксис: drawEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt).
- x0 и y0 – координаты центра эллипса
- rx – горизонтальный радиус
- ry – вертикальный радиус
- opt – область, которая будет отрисована. Можно сразу выбрать несколько областей, разделив их знаком “|”
- U8G_DRAW_UPPER_RIGHT – верхняя правая часть
- U8G_DRAW_UPPER_LEFT – верхняя левая часть
- U8G_DRAW_LOWER_LEFT – нижняя левая часть
- U8G_DRAW_LOWER_RIGHT – нижняя правая часть
- U8G_DRAW_ALL – весь эллипс
Функция drawFilledEllipse рисует заполненный эллипс.
Синтаксис: drawFilledEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt).
- x0 и y0 – координаты центра эллипса
- rx – горизонтальный радиус
- ry – вертикальный радиус
- opt – область, которая будет отрисована. Можно сразу выбрать несколько областей, разделив их знаком “|”
- U8G_DRAW_UPPER_RIGHT – верхняя правая часть
- U8G_DRAW_UPPER_LEFT – верхняя левая часть
- U8G_DRAW_LOWER_LEFT – нижняя левая часть
- U8G_DRAW_LOWER_RIGHT – нижняя правая часть
- U8G_DRAW_ALL – весь эллипс
Окружность
Функция drawCircle рисует окружность.
Синтаксис: drawCircle(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt).
- x0 и y0 – координаты центра окружности
- rad – радиус окружности (не включая центр окружности круга => диаметр равен 2*rad+1)
- opt – область, которая будет отрисована. Можно сразу выбрать несколько областей, разделив их знаком “|”. Если не прописать параметр opt, будет нарисована вся окружность.
- U8G_DRAW_UPPER_RIGHT – верхняя правая часть
- U8G_DRAW_UPPER_LEFT – верхняя левая часть
- U8G_DRAW_LOWER_LEFT – нижняя левая часть
- U8G_DRAW_LOWER_RIGHT – нижняя правая часть
- U8G_DRAW_ALL – вся окружность
Функция drawDisc рисует круг.
Синтаксис: drawDisc(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt).
- x0 и y0 – координаты центра окружности
- rad – радиус круга (не включая центр круга => диаметр равен 2*rad+1)
- opt – область, которая будет отрисована. Можно сразу выбрать несколько областей, разделив их знаком “|”. Если не прописать параметр opt, будет нарисован весть круг.
- U8G_DRAW_UPPER_RIGHT – верхняя правая часть
- U8G_DRAW_UPPER_LEFT – верхняя левая часть
- U8G_DRAW_LOWER_LEFT – нижняя левая часть
- U8G_DRAW_LOWER_RIGHT – нижняя правая часть
- U8G_DRAW_ALL – весь круг
Пиксель
Функция drawPixel рисует один пиксель.
Синтаксис: drawPixel(uint8_t x, uint8_t y).
Отрисовка изображений
Функци drawBitmap выводит растровое изображение.
- drawBitmap(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const uint8_t *bitmap)
- drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
- x и y – координаты левого верхнего угла изображения
- cnt – количество байтов в горизонтали (1 байт кодирует 8 пикселей). Ширина в пикселях равна cnt*8.
- h – высота изображеня.
- *bitmap – название массива, кодирующего изображение
- P в названии означает, что массив, кодирующий изображение храниться в PROGMEM.
Функция drawXBM рисует монохромное растровое изображение.
- drawXBM(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const uint8_t *bitmap)
- drawXBMP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
- x и y – координаты левого верхнего угла изображения
- w – ширина изображения
- h – высота изображения
- *bitmap – название массива, кодирующего изображение
- P в названии означает, что массив, кодирующий изображение храниться в PROGMEM.
Отрисовка строк
Функция setFont выбирает шрифт для последующий функций отрисовки строк.
Синтаксис: setFont(const u8g_fntpgm_uint8_t *font).
Шрифты в данной библиотеке хранятся как массивы в файле u8g_font_data.c.
Посмотреть шрифты, доступные в стандартной библиотеке можно на github. Шрифты, добавленные в модифицированную библиотеку:
- my5x7rus
- cyr_6x10
- my10x14rus
- my6x13rus
- cyrilic6x10
- cyrilic6x9
- rusMax20
- ruscu12
- rus10x20
- rus9x18B
- rus9x18
- rus9x15B
- rus9x15
- rus8x13O
- rus8x13B
- rus8x13
- rus7x14B
- rus7x14
- rus7x13O
- rus7x13B
- rus7x13
- rus6x13O
- rus6x13B
- rus6x13
- rus6x12
- rus6x10
- rus5x8
- rus5x7
- rus4x6
Как добавить свои шрифты я напишу в одной из следующих статей.
Функция drawStr рисует строку.
- u8g_uint_t U8GLIB::drawStr(u8g_uint_t x, u8g_uint_t y, const char *s)
- u8g_uint_t U8GLIB::drawStr90(u8g_uint_t x, u8g_uint_t y, const char *s)
- u8g_uint_t U8GLIB::drawStr180(u8g_uint_t x, u8g_uint_t y, const char *s)
- u8g_uint_t U8GLIB::drawStr270(u8g_uint_t x, u8g_uint_t y, const char *s)
- u8g_uint_t U8GLIB::drawStrP(u8g_uint_t x, u8g_uint_t y, const u8g_pgm_uint8_t *s)
- u8g_uint_t U8GLIB::drawStr90P(u8g_uint_t x, u8g_uint_t y, const u8g_pgm_uint8_t *s)
- u8g_uint_t U8GLIB::drawStr180P(u8g_uint_t x, u8g_uint_t y, const u8g_pgm_uint8_t *s)
- u8g_uint_t U8GLIB::drawStr270P(u8g_uint_t x, u8g_uint_t y, const u8g_pgm_uint8_t *s)
- x и y – координаты левого нижнего угла первого символа строки
- s – строка С-типа (заканчивается на “\0”)
- P – строка храниться в PROGMEM
- 90, 180, 270 – угол поворота строки
Перед использованием drawStr необходимо выбрать шрифт функцией setFont.
Функция setPrintPos устанавливает позицию для функции Print.
Синтаксис: setPrintPos(u8g_uint_t x, u8g_uint_t y).
В этом руководстве мы расскажем как использовать TFT LCD дисплеи с Arduino, начиная с базовых команд и заканчивая профессиональным дизайном.
Мы постараемся освятить базовые команды, а также расскажем про профессиональные дизайны и технику. По планам поле статьи можно будет научиться:
- выводить тексты, символы и цифры с нужным шрифтом;
- рисовать фигуры, такие как круг, треугольник, квадрат и т.д.;
- отображать изображения .bmp на экране;
- изменять параметры экрана, такие как вращение и инвертирование цвета;
- отображать анимацию с помощью Arduino.
Представление идей на дисплеях
В проектах электроники очень важно создать интерфейс между пользователем и системой. Этот интерфейс может быть создан путем отображения полезных данных, меню и простоты доступа. Красивый дизайн не менее важен.
Для этого есть несколько компонентов. Светодиоды, 7 сегментные модули, графические дисплеи и полноцветные TFT-дисплеи. Правильный компонент для ваших проектов зависит от количества отображаемых данных, типа взаимодействия с пользователем и емкости процессора.
TFT LCD - это вариант жидкокристаллического дисплея (LCD), который использует технологию тонкопленочного транзистора (TFT) для улучшения качества изображения, такого как адресность и контрастность. TFT LCD является активным матричным ЖК-дисплеем, в отличие от пассивных матричных ЖК-дисплеев или простых ЖК-дисплеев с прямым управлением с несколькими сегментами.
В проектах на Arduino частота процессора низкая. Таким образом, невозможно отображать сложные изображения высокой четкости и высокоскоростные движения. Поэтому полноцветные TFT-дисплеи могут использоваться только для отображения простых данных и команд.
В этой статье мы использовали библиотеки и передовую технику для отображения данных, графиков, меню и т.д. с профессиональным дизайном. Таким образом любой ваш проект будет выглядеть просто невероятно классно.
Какого размера? Какой контроллер?
Размер экранов влияет на параметры вашего проекта. Большой дисплей не всегда лучше. Если вы хотите отображать символы и изображения высокого разрешения, вы должны выбрать большой размер дисплея с более высоким разрешением. Но это уменьшает скорость вашей обработки, требует больше места, а также требует больше тока для запуска.
Итак, во-первых, вы должны проверить разрешение, скорость движения, детали цвета и размера изображений, текстов и цифр. Мы предлагаем популярные размеры дисплеев Arduino, таких как:
- 3,5" дюйма 480 × 320,
- 2,8" дюйма 400 × 240,
- 2,4" дюйма 320 × 240,
- 1,8" дюйма 220 × 176.
Выбрав правильный дисплей, пришло время выбрать правильный контроллер. Если вы хотите отображать символы, тексты, цифры и статические изображения и скорость отображения не важна, платы Atmega328 Arduino (такие как Arduino UNO) являются правильным выбором.
Если размер вашего кода является большим, UNO может оказаться недостаточной. Вместо этого вы можете использовать Arduino Mega2560. И если вы хотите показывать изображения с высоким разрешением и движения с высокой скоростью, вы должны использовать ARM-модули Arduino, такие как Arduino DUE.
Драйверы и библиотеки
В электронике / компьютерном оборудовании драйвер дисплея обычно представляет собой полупроводниковую интегральную схему (но может альтернативно содержать конечную машину, состоящую из дискретной логики и других компонентов), который обеспечивает функцию интерфейса между микропроцессором, микроконтроллером, ASIC или периферийным интерфейсом общего назначения и конкретным типом устройства отображения, например LCD, LED, OLED, ePaper, CRT, Nixie и т.п.
Драйвер дисплея обычно принимает команды и данные с использованием стандартного универсального последовательного или параллельного интерфейса общего назначения, такого как TTL, CMOS, RS232, SPI, I2C и т.д. и генерирует сигналы с подходящим напряжением, током, временем и демультиплексированием, чтобы реализовать на дисплее отображение нужного текста или изображения.
Производители ЖК-дисплеев используют разные драйверы в своих продуктах. Некоторые из них более популярны, а некоторые из них неизвестны. Чтобы легко запускать ваш экран, вы должны использовать библиотеки LCD Arduino и добавить их в свой код. В противном случае запуск дисплея может быть очень осложнен. В Интернете есть много бесплатных библиотек, но важным моментом в библиотеках является их совместимость с драйвером ЖК-дисплея. Драйвер вашего ЖК-дисплея должен быть известен вашей библиотеке. В этой статье мы используем библиотеку Adafruit GFX и библиотеку MCUFRIEND KBV и примеры кода. Вы сможете скачать их по сопутствующим ссылкам.
Разархивируйте MCUFRIEND KBV и откройте MCUFRIEND_kbv.CPP. Вы увидите список драйверов, которые поддерживаются библиотекой MCUFRIEND.
Откройте папку с примерами (англ. - Example). Существует несколько примеров кода, которые вы можете запустить на Arduino. Подключите ЖК-дисплей и проверьте некоторые примеры.
Список комплектующих
Для реализации многих проектов, связанных с TFT LCD нам понадобится набор некоторых комплектующих, которые мы уже обсудили выше:
- 3.5-дюймовый цветной TFT-дисплей ElectroPeak × 1
- 2,4-дюймовый дисплей TFT LCD ElectroPeak × 1
- Arduino UNO R3 × 1
- Arduino Mega 2560 × 1
- Arduino DUE × 1
Программное обеспечение
Также для работы с Ардуино нам обычно нужна Arduino IDE.
Вы должны добавить библиотеку, а затем загрузить код. Если вы впервые запускаете плату Arduino, не волнуйтесь. Просто выполните следующие действия:
После загрузки кода примера пришло время узнать, как создавать изображения на ЖК-дисплее.
Библиотека
В первой строке добавлена основная графическая библиотека для дисплеев (написанная Adafruit).
Вторая добавляет библиотеку, которая поддерживает драйверы экранов дисплея MCUFRIEND Arduino.
Эти библиотеки сейчас не нужны, но вы можете их добавить.
Основные команды
Класс и объект
Эта строка делает объект с именем TFT из класса MCUFRIEND_kbv и обеспечивает связь SPI между ЖК-дисплеем и Arduino.
Запуск ЖК-дисплея
Функция tft.readID считывает ID с дисплея и помещает его в переменную идентификатора. Затем функция tft.begin получает идентификатор и ЖК-дисплей готов к работе.
Разрешение экрана
По этим двум функциям вы можете узнать разрешение дисплея. Просто добавьте их в код и поместите выходные данные в переменную uint16_t. Затем прочитайте его из последовательного порта Serial.println();. Сначала добавьте Serial.begin (9600); в setup().
Цвет экрана
Функция fillScreen меняет цвет экрана на цвет t. Это должна быть 16-битная переменная, содержащая код цвета UTFT.
Вы можете добавить эти строки в начало своего кода и просто использовать имя цвета в функциях.
Заполнение пикелей
Функция drawPixel заполняет пиксель в x и y по цвету t.
Функция readPixel считывает цвет пикселя в местоположении x и y.
Рисование линий
Функция drawFastVLine рисует вертикальную линию, которая начинается с местоположения x, y, ее длина - h пикселей, а цвет - t.
Функция drawFastHLine рисует горизонтальную линию, которая начинается с местоположения x и y, длина равна w пикселей, а цвет - t.
Функция drawLine рисует строку, начинающуюся с xi, yi и до xj, yj, цвет - t.
Эти три блока кода рисуют линии, подобные предыдущему коду с 5-пиксельной толщиной.
Функция fillRect рисует заполненный прямоугольник в координатах x и y, w - ширина, h - высота, t - цвет прямоугольника.
Функция drawRect рисует прямоугольник в координатах x и y с шириной w, высотой h и цветом t.
Функция fillRoundRect рисует заполненный прямоугольник с радиусом углов r, в координатах x и y, шириной w и высотой h, цветом t.
Функция drawRoundRect рисует прямоугольник с r радиальными закругленными углами по x и y, с шириной w и высотой h и цветом t.
Рисуем круги
Функция drawCircle рисует круг по координатам x и y, с радиусом r и цветом t.
Функция fillCircle рисует заполненный круг по координатам x и y, радиусом r и цветом t.
Этот код рисует дугу. Можно изменить значение в «for» между 0 и 4000.
Рисование треугольников
Функция drawTriangle рисует треугольник с тремя угловыми координатами x, y и z и t цветом.
Функция fillTriangle рисует заполненный треугольник с тремя угловыми координатами x, y, z и t цветом.
Отображение текста
Этот код устанавливает позицию курсора на x и y.
Первая строка задает цвет текста. Следующая строка задает цвет текста и его фона.
Этот код устанавливает размер текста величиной s. Само число s меняется в диапазоне от 1 до 5.
Этот код отображает символ.
Первая функция отображает строку и перемещает курсор на следующую строку.
Вторая функция просто отображает строку.
Эта функция изменяет шрифт текста. Вы должны добавить эту функцию и библиотеки шрифтов.
Эта функция может заставить текст исчезать. Вы должны добавить её в свой код.
Вращение экрана
Этот код поворачивает экран. 0 = 0°, 1 = 90°, 2 = 180°, 3 = 270°.
Инвертирование цветов экрана
Этот код инвертирует цвета экрана.
Этот код передает код RGB и получает цветовой код UTFT.
Прокрутка экрана
Этот код прокручивает ваш экран. Maxroll - максимальная высота прокрутки.
Сброс
Этот код сбрасывает экран.
Отображение монохромных изображений
Сначала вы должны преобразовать свое изображение в шестнадцатеричный код. Загрузите программное обеспечение по ссылке ниже. Если вы не хотите изменять настройки программного обеспечения, вы должны инвертировать цвет изображения, отразить изображение горизонтально (зеркально) и повернуть его на 90 градусов против часовой стрелки.
Теперь добавьте его в программное обеспечение и преобразуйте его. Откройте экспортированный файл и скопируйте шестнадцатеричный код в Arduino IDE. x и y - местоположения изображения. sx и sy - размеры изображения. Вы можете изменить цвет изображения на последнем input.
Отображение цветного изображения RGB
Загрузите изображение и скачайте преобразованный файл, с которым могут работать библиотеки UTFT. Теперь скопируйте шестнадцатеричный код в Arduino IDE. x и y - местоположения изображения. sx и sy - размер изображения.
Вы можете ниже качать программу-конвертер изображений в шестнадцатеричный код:
Предварительно созданные элементы
Загрузка
В этом шаблоне мы просто использовали строку и 8 заполненных кругов, которые меняют свои цвета по порядку. Чтобы нарисовать круги вокруг статической точки, вы можете использовать sin(); и cos(); функции. Вы должны задать величину PI. Чтобы изменить цвета, вы можете использовать функцию color565(); и заменить свой код RGB.
Классический текст
В этом шаблоне мы выбрали классический шрифт и использовали функцию для затухания текста.
Представление/презентация логотипа
В этом шаблоне мы преобразовали файл a.jpg.webp в файл .c и добавили его в код, написали строку и использовали отображаемый код затухания. Затем мы использовали код прокрутки, чтобы переместить экран влево. Загрузите файл .h и добавьте его в папку эскиза Arduino.
Точечная диаграмма
В этом шаблоне мы использовали линии рисования, заполненные круги и функции отображения строк.
Температура
В этом шаблоне мы использовали sin(); и cos(); функции для рисования дуг с желаемой толщиной и отображаемым числом с помощью функции текстовой печати. Затем мы преобразовали изображение в шестнадцатеричный код и добавили его в код и отобразили изображение с помощью функции растрового изображения. Затем мы использовали функцию рисования линий, чтобы изменить стиль изображения. Загрузите файл .h и добавьте его в папку эскиза Arduino.
Круговая диаграмма
В этом шаблоне мы создали функцию, которая принимает числа как входные данные и отображает их как круговую диаграмму. Мы просто используем дугу рисования и заполненные функции круга.
Музыка
В этом шаблоне мы добавили преобразованное изображение в код и затем использовали две черные и белые дуги для создания указателя громкости. Скачайте файл .h и добавьте его в папку эскиза Arduino.
Спидометр
В этом шаблоне мы добавили преобразованное изображение и используем функцию дуги и печати для создания этого датчика. Загрузите файл .h и добавьте его в папку эскиза Arduino.
Веселый человечек
В этом шаблоне мы отображаем простые изображения один за другим очень быстро с помощью функции растрового изображения. Таким образом, вы можете сделать свою анимацию этим трюком. Загрузите файл .h и добавьте его в папку эскиза Arduino.
Изображение
В этом шаблоне мы просто показываем некоторые изображения с помощью функций RGBbitmap и bitmap. Просто создайте код для сенсорного экрана и используйте этот шаблон. Загрузите файл .h и добавьте его в папку эскиза Arduino.
Скачайте архив с файлами .h ниже:
- Скорость воспроизведения всех файлов GIF отредактирована, они сделаны быстрее или медленнее для лучшего понимания. Скорость движений зависит от скорости вашего процессора или типа кода, а также от размера и толщины элементов в коде.
- Вы можете добавить код изображения на главной странице, но он заполняет всю страницу. Таким образом, вы можете сделать файл a.h и добавить в папку эскиза.
- В этой статье мы только что разобрали отображение элементов на ЖК-дисплее. Следите за следующим урокам, чтобы узнать, как используются сенсорные экраны и SD-карты.
- Если у вас есть проблемы с включением библиотек, измените знак кавычки "" на <>.
На этом пока всё. Делитесь этим руководством по TFT LCD для Arduino со своими друзьями и коллегами.
Читайте также: