Как подключить дисплей от магнитолы к ардуино

Обновлено: 07.07.2024

Какие бывают дисплеи для Ардуино и как их подключить

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

Содержание статьи

Виды дисплеев

Дисплеи можно разделить на:

Сегментные (такие, как на цифровых часах);

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

Они могут быть как жидкокристаллическими, так и светодиодными. Алфавитно-цифровые дисплеи можно встретить на старой бытовой технике, игрушках, промышленной технике и прочем. Их еще называют знакосинтезирующими, текстовыми, символьными. Состоят из набора крупных пикселей. Могут быть выполнены по LCD, TFT и OLED-технологии.

К графическим дисплеям можно отнести даже монитор или экран смартфона, особых пояснений я думаю не требуется. В статье речь пойдет конкретно о совместной работе знакосинтезирующих или символьных дисплеях и Ардуино.

Знакосинтезирующие дисплеи

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

Где первые две цифры – количество символов в строке, а вторая пара – количество строк. Таким образом дисплей с названием 1602 может отображать одновременно 2 строки по 16 символов.

По типу ввода данных различают дисплеи:

С параллельным вводом данных;

С вводом данных по протоколу I2C.

Параллельный ввод данных предполагает передачу 8 или 4-битных слов по 10 или 6 выводам соответственно (рис. ниже – схема подключения для управления 4 битами). Кроме данных на дисплей подаётся питание. Учитывайте это при проектировании, в противном случае вам может не хватить пинов платы Ардуино.

Передача данных на дисплей с помощью I2С займет 4 пина вашей Arduino, 2 из которых питание, а 2 – данные. Но подробнее рассмотрим этот вопрос немного ниже.

Среди отечественных производителей можно выделить фирму МЭЛТ. Среди продукции, которой есть целый ряд различных дисплеев. Например, ниже изображен дисплей с маркировкой 20S4, по аналогии с предыдущей рассмотренной, это говорит нам о том, что он отображает 4 строки по 20 знаков.

Он построен на контроллере КБ1013ВГ6, от ОАО «АНГСТРЕМ», который аналогичен HD44780 фирмы HITACHI и KS0066 фирмы SAMSUNG. На которых построены подавляющее большинство китайских дисплеев. Кстати он, как и дисплеи на перечисленных чипах поддерживает стандартную библиотеку параллельного управления Arduino IDE, но о ней позже.

Знакосинтезирующие дисплеи бывают с подсветкой и без неё, также могут отличаться цветом изображаемых символов. Яркость подсветки и контрастность изображения обычно регулируется. Ниже приведет пример схемы из даташита, на упомянутый выше МЭЛТ.

Переменный резистор R и служит для регулировки яркости.

Подключение

Подключение будем рассматривать на дисплее типа 1602. В первую очередь обратите внимание на подписи выводов. Встречается два варианта, нумерации. На двух рисунках ниже всё нормально – от 1 до 16 вывода.

Отметим, что под VSS понимается земля. В остальном назначения выводов идентичны. Но часто можно встретить и нестандартную нумерацию:

Что вы видите? Контакты подписаны только 1, 14 и 15. Причем в неправильной последовательности. В остальном – 15 и 16 контакт всё также остались анодом и катодом подсветки, а 1 и 2 – общий контакт и плюс питания. Будьте бдительны и обращайте внимание при подключении на этот факт!

2 – (Vcc) «+» питания. Чаще всего это 5 вольт.

3 – регулировка контрастности символов. Осуществляется через потенциометр, установленный между «+» питания и этим контактом. Чем выше напряжение – тем меньше яркость и энергопотребление.

4 – (RS) Адресный сигнал. По наличию сигнала от ардуино на этом входе контроллер дисплея понимает, на линии данных сигнал команды (перемещение курсора, например) или кода символа для отображения.

5 – (E) разрешения доступа к данным. Когда здесь логическая «1» - дисплей выполняет команду или выводит символ.

6-14 – через эти пины обеспечивается параллельный ввод данных.

15 – (BLA) анод подсветки. Чтобы она зажглась на всю яркость – сюда подают +5В.

16 – (BLC) катод подсветки. Подключают к земле.

Один из примеров подключения к Ардуино в 4 битовом режиме мы рассмотрели выше. Теперь взгляните на схему подключения в 8 битовом режиме управления. Кстати вы могли заметить переменный резистор. Он и нужен для регулировки яркости подсветки, как было сказано ранее.

Таким образом у вас оказываются занятыми половина входов платы Arduino UNO. Конечно если вы будете использовать MEGA – это будет не столь существенной проблемой, но всё же это не рационально, особенно если вы собираетесь подключать группу датчиков и клавиш управления.

Чтобы высвободить входы используйте конвертер I2C для LCD экрана (именно так он называется, и вы сможете найти его в магазинах под таким названием).

Если будете покупать этот модуль отдельно от дисплея не забудьте о расположении и нумерации выводов, которую мы рассмотрели ранее.

Гребёнка, изображенная снизу просто припаивается к дисплею, а четыре контакта на торце платы – подключаются к пинам Arduino, также есть третья группа из двух контактов (на фото сзади) – это включение подсветки, модели поставляются с установленной перемычкой.

Схема такого модуля выглядит следующим образом:

А вот так он выглядит припаянным непосредственно к контактам дисплея. Большинство моделей продаются уже распаянными.

Однако для его использования вам нужно будет найти в сети библиотеку LiquidCrystal_I2C её нет в стандартном наборе актуального на момент написания статьи Arduino IDE.

Напомним цоколевку плат Arduino UNO, по нумерации контактов она в принципе совпадает и с Nano и некоторыми другими (для увеличения нажмите на рисунок).

Для работы по I2C нужно сформировать 2 информационных сигнала – SDA и SCL, обратите внимание в нижний правый угол рисунка. Эти выводы в ардуино совмещены с A4 и A5 аналоговыми входами.

Переназначить их вы на другие выводы не можете.

Тогда монтажная схема подключения будет иметь вид:

Согласитесь, проводов намного меньше! От ардуино к дисплею идут всего 4 провода. А сигнальных пина использовано всего два!

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

Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

Программа

Естественно нам нужен какой-то скетч, который может показывать изображение на символьном дисплее. Если вы хотите «напрямую» работать с дисплеем – придется изучить даташиты и таблицы символов на каждое конкретное изделие. Но Ардуино была создана для простого и быстрого прототипирования электронных устройств. Поэтому мы пойдем другим путём и воспользуемся благами цивилизации. Мы уже упомянули, что в стандартном наборе библиотек в Arduino IDE есть готовое решение для работы с LCD-дисплеями. Найти его можно здесь:

Кстати после нажатия строка с объявлением о подключении библиотеки появляется автоматически.

Также в Arduino IDE есть несколько примеров для работы с дисплеем. Они отражают базовые операции и функции.

Рассмотрим простейший «Хэлоу ворд». Пример полностью совпадает с тем, что есть в стандартном наборе IDE, я лишь перевёл текст комментариев на русский язык. Обратите внимание – это пример работы в 4-битном режиме.

Работа с I2C практически аналогична:

Обратите внимание, что в этом примере кода первой командой указан несколько размер дисплея, количество строк и символов, но и его I2C адрес. А именно – 0x27, что соответствует отсутствующим перемычкам. Вообще это нужно для того, чтобы подключить на два сигнальных провода несколько дисплеев (8 штук).

Официальную документацию к библиотеке liquidcrystal с примерами и пояснениями вы сможете найти на официальном сайте Arduino:

Полезные ссылки

Подборка видеоуроков по теме

Чтобы вам не было сложно освоить навык работы с дисплеем мы сделали подборку видеоуроков по этой теме.

Заключение

Оказывается, подружить плату Arduino и дисплей совсем не сложно. Вам доступна возможность как параллельной передачи данных, так и последовательной с помощью шины I2C, что выбрать – решать вам, как по удобству, так и по требованиям к быстродействию системы в целом. Пишите в комментариях какие вопросы нужно рассмотреть подробнее и что конкретно вы бы хотели видеть по теме микроконтроллеров!

Еще больше информации про Ардуино и особенности его использования в различных схемах смотрите в электронной книге - Ардуино для чайников. Иллюстрированное практическое руководство.

Совсем недавно вышел новый курс Максима Селиванова "Программирование дисплеев Nextion". Это "arduino" в мире дисплеев с сенсорным экраном. Но, информации по нему очень мало.

Дисплей Nextion

Что такое дисплеи Nextion? Если кратко, то эти дисплеи представляют собой программируемые дисплеи с тачскрином и UART для создания самых разных интерфейсов на экране. Для программирования используется очень удобная и простая среда разработки, которая позволяет создавать даже очень сложные интерфейсы для различной электроники буквально за пару вечеров! А все команды передаются через интерфейс UART на микроконтроллер или компьютер.

Здесь есть все что бы начать работать с дисплеями Nextion на новом уровне: Программирование дисплеев NEXTION

Максим Селиванов - автор видеокурсов "Программирование микроконтроллеров для начинающих", "Программирование микроконтроллеров на языке С", "Создание устройств на микроконтроллерах". Подробее о нем и его видеокурсах смотрите здесь - Обучение программированию и созданию устройств на микроконтроллерах

Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!

Записывайтесь в онлайн-университет от GeekBrains:

Обучение Интернет вещей и современные встраиваемые системы

Изучить C, механизмы отладки и программирования микроконтроллеров;

Получить опыт работы с реальными проектами, в команде и самостоятельно;

Получить удостоверение и сертификат, подтверждающие полученные знания.

Starter box для первых экспериментов в подарок!

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

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


В данной записи поговорим о выводе сигнала REMOTE из штатной автомагнитолы.

Кому больше нравится видео формат — переходим в конец записи и смотрим видео

В качестве REMOTE можно использовать, например, подключение к зажиганию. Так, в принципе, и делает большинство. И это хороший вариант, у которого есть свои + и -. Можно также поискать дорожки на плате магнитолы, на которых появляется напряжение при её включении, но найти такие не всегда удаётся.
Дело в том, что в современных штатных магнитолах (да и не только штатных) применяются последние несколько лет микросхемы усилителей с цифровым управлением по шине I2C. Для производителя магнитолы это удобно: помимо управления включением усилителя магнитолы, они получают дополнительные плюшки — возможность диагностировать состояние проводки и акустических систем, ну а шина I2C уже есть в любой магнитоле (она применяется уже много лет) и поставить в магнитолу МС усилителя с управлением по I2C производителю магнитолы ничего не стоит. Поэтому подключиться к ножке STND-BY как раньше в таких магнитолах уже не получится. Ножка эта есть, но для управления усилителем она, как правило, не используется.
Можно подключиться к подсветке дисплея или к другим цепям магнитолы, но там свои нюансы.
В этом видео я покажу ещё один способ получить сигнал REMOTE. Мы сделаем небольшое устройство — перехватчик команд к микросхеме усилителя. Соответственно, напряжение на выходе REMOTE у нас будет появляться ровно тогда, когда магнитола посчитает нужным включить свой встроенный усилитель. Перехватчик никак не будет влиять на обмен процессора с микросхемой усилителя, но летящие команды видеть будет. Делать будем перехватчика на основе самой маленькой платы из arduino-подобных, а точнее — из её китайской копии. Выводить сигнал REMOTE будем из штатной магнитолы SWING-II для Skoda Octavia A7.
Поехали…


К сожалению, в разных магнитолах применяются разные микросхемы усилителя с отличающимся протоколом обмена. Поэтому прошивка для перехватчика нужна своя для каждой из таких микросхем.
Для начала разбираем магнитолу и смотрим, какая микросхема усилителя установлена внутри. В данной магнитоле применена TDF8546:



Прошиваем атмегу, крепим плату arduino внутри магнитолы и подпаиваем к плате магнитолы.
Подключить нужно питание 3.3В, на плате магнитолы подходящих точек подключения полно, я выбрал следующие:


Далее, нужно подключить линии I2C. На мелких платах arduino линия SDA обычно на выводе A4, линия SCL на выводе A5. На магнитоле подключиться к шине I2C проще всего на контактах микросхемы усилителя (открываете документацию на вашу микросхему и находите, на каких выводах сигналы SDA и SCL).

Также с платы arduino нужно вывести сам выход REMOTE. Ножка микроконтроллера B.5 (для выложенных прошивок), на мелких arduino обычно выведена на вывод, обозначенный "13". Но следует учесть, что этот вывод имеет напряжение лог. 1 = 3,3В, поэтому его нужно ещё раскачать до 12В. Я в данном случае поставил управляемый линейный стабилизатор 78R12, которому на 4 ножку завёл сигнал REMOTE с arduino. Таким образом, стабилизатор у меня включается тогда, когда магнитола включает свой встроенный усилитель.

Также 78R12 я дополнил предохранителем на 0,5А и вывел наружу из магнитолы.


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

Внедрять дисплеи в приборную панель не всегда возможно, а развешивать их по торпеде — очередной колхоз, даже когда всё сделано на совесть(что редкость):



Меж тем почти в каждом современном автомобиле есть замечательный штатный(ну или почти как штатный) цветной дисплей, размером 5-7 дюймов, принадлежащий магнитоле.

Если магнитола на Андроиде — то можно написать приложение, которое будет определённым образом забирать данные с Ардуины и выводить на экран. Там есть свои проблемы, но сейчас не о них.

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

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

К сожалению формирование видеосигнала силами микропроцессоров начального уровня — практически невыполнимая задача. Хотя голь на выдумки хитра и существует генератор видеосигнала даже на базе ATmega328:

Правда изображение только чёрно-белое и разрешение всего 128x96.
Тем не менее для нехитрых задач даже такого хватит за глаза.
Тем более что ещё и практически нахаляву…

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


Полюбому так будет и лучше и дешевле, чем ведёрко семисегментных индикаторов или допотопный ЖК-дисплей пожухлого качества, который ещё нужно где-то найти…



Мой вариант на базе Arduino Nano:


Но для формирования видеосигнала Ардуину начального уровня никакого смысла покупать нет.
Даже в нашей тьму-таракани практически за те же деньги можно приобрести более продвинутый вариант Ардуины на базе STM32, которого звать Blue Pill, у которого тактовая частота от 72 до 128Мгц, 20Кб оперативки и 128Кб флэш. Соответственно и скорострельность у него выше и возможностей чуть больше.

Схема подключения всё так же проста, если не сказать — примитивна:


Мой вариант на базе STM32:


На имеющемся оборудовании и программном обеспечении получается сформировать до 512*216 точек монохромного изображения. Цифровые телевизоры такое изображение отображают безропотно. Непонятно пока — сможет ли отображать всю гамму нестандартных разрешений автомобильная магнитола.
Поживём — увидим.

Если бы оперативной памяти было побольше, то можно было бы замахнуться и на цветное изображение, но увы. Потому цвет, надеюсь, будет в следующей серии, на микропроцессоре помощней. Разрешение вряд ли получится изделать свыше 320*240, палитра цветов тоже будет куцая, но мне хватит чего-то подобного за глаза:


Над этим я работаю сейчас, но это тема моей следующей статьи.

Ну а пока результаты моего сегодняшнего эксперимента:



Тестирование проводилось на двух телевизорах. Один — здоровенный LCD, другой — средних размеров кинескопный. Качество картинки на твёрдую четвёрку — до пятёрки не дотягивает ибо присутствуют еле заметные артефакты синхронизации. Но если не приглядываться и не привередничать — то очень даже неплохо. Фотки не впечатляют, потому как пересвечены сильно — снимал ночью под одеялом в полумраке на дисковый телефон, но можете мне поверить наслово — картинка на экране магнитолы оченно недурна…

С японским языком у меня напряг, но разобраться в его иероглифах оказалось проще, чем писать прошивку для микропроцессора с нуля в каком-нибудь кокосе…
Большая Tamakichi от меня благодарность за проделанную работу!

Какие бывают дисплеи для Ардуино и как их подключить

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

Содержание статьи

Виды дисплеев

Дисплеи можно разделить на:

Сегментные (такие, как на цифровых часах);

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

Они могут быть как жидкокристаллическими, так и светодиодными. Алфавитно-цифровые дисплеи можно встретить на старой бытовой технике, игрушках, промышленной технике и прочем. Их еще называют знакосинтезирующими, текстовыми, символьными. Состоят из набора крупных пикселей. Могут быть выполнены по LCD, TFT и OLED-технологии.

К графическим дисплеям можно отнести даже монитор или экран смартфона, особых пояснений я думаю не требуется. В статье речь пойдет конкретно о совместной работе знакосинтезирующих или символьных дисплеях и Ардуино.

Знакосинтезирующие дисплеи

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

Где первые две цифры – количество символов в строке, а вторая пара – количество строк. Таким образом дисплей с названием 1602 может отображать одновременно 2 строки по 16 символов.

По типу ввода данных различают дисплеи:

С параллельным вводом данных;

С вводом данных по протоколу I2C.

Параллельный ввод данных предполагает передачу 8 или 4-битных слов по 10 или 6 выводам соответственно (рис. ниже – схема подключения для управления 4 битами). Кроме данных на дисплей подаётся питание. Учитывайте это при проектировании, в противном случае вам может не хватить пинов платы Ардуино.

Передача данных на дисплей с помощью I2С займет 4 пина вашей Arduino, 2 из которых питание, а 2 – данные. Но подробнее рассмотрим этот вопрос немного ниже.

Среди отечественных производителей можно выделить фирму МЭЛТ. Среди продукции, которой есть целый ряд различных дисплеев. Например, ниже изображен дисплей с маркировкой 20S4, по аналогии с предыдущей рассмотренной, это говорит нам о том, что он отображает 4 строки по 20 знаков.

Он построен на контроллере КБ1013ВГ6, от ОАО «АНГСТРЕМ», который аналогичен HD44780 фирмы HITACHI и KS0066 фирмы SAMSUNG. На которых построены подавляющее большинство китайских дисплеев. Кстати он, как и дисплеи на перечисленных чипах поддерживает стандартную библиотеку параллельного управления Arduino IDE, но о ней позже.

Знакосинтезирующие дисплеи бывают с подсветкой и без неё, также могут отличаться цветом изображаемых символов. Яркость подсветки и контрастность изображения обычно регулируется. Ниже приведет пример схемы из даташита, на упомянутый выше МЭЛТ.

Переменный резистор R и служит для регулировки яркости.

Подключение

Подключение будем рассматривать на дисплее типа 1602. В первую очередь обратите внимание на подписи выводов. Встречается два варианта, нумерации. На двух рисунках ниже всё нормально – от 1 до 16 вывода.

Отметим, что под VSS понимается земля. В остальном назначения выводов идентичны. Но часто можно встретить и нестандартную нумерацию:

Что вы видите? Контакты подписаны только 1, 14 и 15. Причем в неправильной последовательности. В остальном – 15 и 16 контакт всё также остались анодом и катодом подсветки, а 1 и 2 – общий контакт и плюс питания. Будьте бдительны и обращайте внимание при подключении на этот факт!

2 – (Vcc) «+» питания. Чаще всего это 5 вольт.

3 – регулировка контрастности символов. Осуществляется через потенциометр, установленный между «+» питания и этим контактом. Чем выше напряжение – тем меньше яркость и энергопотребление.

4 – (RS) Адресный сигнал. По наличию сигнала от ардуино на этом входе контроллер дисплея понимает, на линии данных сигнал команды (перемещение курсора, например) или кода символа для отображения.

5 – (E) разрешения доступа к данным. Когда здесь логическая «1» - дисплей выполняет команду или выводит символ.

6-14 – через эти пины обеспечивается параллельный ввод данных.

15 – (BLA) анод подсветки. Чтобы она зажглась на всю яркость – сюда подают +5В.

16 – (BLC) катод подсветки. Подключают к земле.

Один из примеров подключения к Ардуино в 4 битовом режиме мы рассмотрели выше. Теперь взгляните на схему подключения в 8 битовом режиме управления. Кстати вы могли заметить переменный резистор. Он и нужен для регулировки яркости подсветки, как было сказано ранее.

Таким образом у вас оказываются занятыми половина входов платы Arduino UNO. Конечно если вы будете использовать MEGA – это будет не столь существенной проблемой, но всё же это не рационально, особенно если вы собираетесь подключать группу датчиков и клавиш управления.

Чтобы высвободить входы используйте конвертер I2C для LCD экрана (именно так он называется, и вы сможете найти его в магазинах под таким названием).

Если будете покупать этот модуль отдельно от дисплея не забудьте о расположении и нумерации выводов, которую мы рассмотрели ранее.

Гребёнка, изображенная снизу просто припаивается к дисплею, а четыре контакта на торце платы – подключаются к пинам Arduino, также есть третья группа из двух контактов (на фото сзади) – это включение подсветки, модели поставляются с установленной перемычкой.

Схема такого модуля выглядит следующим образом:

А вот так он выглядит припаянным непосредственно к контактам дисплея. Большинство моделей продаются уже распаянными.

Однако для его использования вам нужно будет найти в сети библиотеку LiquidCrystal_I2C её нет в стандартном наборе актуального на момент написания статьи Arduino IDE.

Напомним цоколевку плат Arduino UNO, по нумерации контактов она в принципе совпадает и с Nano и некоторыми другими (для увеличения нажмите на рисунок).

Для работы по I2C нужно сформировать 2 информационных сигнала – SDA и SCL, обратите внимание в нижний правый угол рисунка. Эти выводы в ардуино совмещены с A4 и A5 аналоговыми входами.

Переназначить их вы на другие выводы не можете.

Тогда монтажная схема подключения будет иметь вид:

Согласитесь, проводов намного меньше! От ардуино к дисплею идут всего 4 провода. А сигнальных пина использовано всего два!

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

Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

Программа

Естественно нам нужен какой-то скетч, который может показывать изображение на символьном дисплее. Если вы хотите «напрямую» работать с дисплеем – придется изучить даташиты и таблицы символов на каждое конкретное изделие. Но Ардуино была создана для простого и быстрого прототипирования электронных устройств. Поэтому мы пойдем другим путём и воспользуемся благами цивилизации. Мы уже упомянули, что в стандартном наборе библиотек в Arduino IDE есть готовое решение для работы с LCD-дисплеями. Найти его можно здесь:

Кстати после нажатия строка с объявлением о подключении библиотеки появляется автоматически.

Также в Arduino IDE есть несколько примеров для работы с дисплеем. Они отражают базовые операции и функции.

Рассмотрим простейший «Хэлоу ворд». Пример полностью совпадает с тем, что есть в стандартном наборе IDE, я лишь перевёл текст комментариев на русский язык. Обратите внимание – это пример работы в 4-битном режиме.

Работа с I2C практически аналогична:

Обратите внимание, что в этом примере кода первой командой указан несколько размер дисплея, количество строк и символов, но и его I2C адрес. А именно – 0x27, что соответствует отсутствующим перемычкам. Вообще это нужно для того, чтобы подключить на два сигнальных провода несколько дисплеев (8 штук).

Официальную документацию к библиотеке liquidcrystal с примерами и пояснениями вы сможете найти на официальном сайте Arduino:

Полезные ссылки

Подборка видеоуроков по теме

Чтобы вам не было сложно освоить навык работы с дисплеем мы сделали подборку видеоуроков по этой теме.

Заключение

Оказывается, подружить плату Arduino и дисплей совсем не сложно. Вам доступна возможность как параллельной передачи данных, так и последовательной с помощью шины I2C, что выбрать – решать вам, как по удобству, так и по требованиям к быстродействию системы в целом. Пишите в комментариях какие вопросы нужно рассмотреть подробнее и что конкретно вы бы хотели видеть по теме микроконтроллеров!

Еще больше информации про Ардуино и особенности его использования в различных схемах смотрите в электронной книге - Ардуино для чайников. Иллюстрированное практическое руководство.

Совсем недавно вышел новый курс Максима Селиванова "Программирование дисплеев Nextion". Это "arduino" в мире дисплеев с сенсорным экраном. Но, информации по нему очень мало.

Дисплей Nextion

Что такое дисплеи Nextion? Если кратко, то эти дисплеи представляют собой программируемые дисплеи с тачскрином и UART для создания самых разных интерфейсов на экране. Для программирования используется очень удобная и простая среда разработки, которая позволяет создавать даже очень сложные интерфейсы для различной электроники буквально за пару вечеров! А все команды передаются через интерфейс UART на микроконтроллер или компьютер.

Здесь есть все что бы начать работать с дисплеями Nextion на новом уровне: Программирование дисплеев NEXTION

Максим Селиванов - автор видеокурсов "Программирование микроконтроллеров для начинающих", "Программирование микроконтроллеров на языке С", "Создание устройств на микроконтроллерах". Подробее о нем и его видеокурсах смотрите здесь - Обучение программированию и созданию устройств на микроконтроллерах

Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!

Записывайтесь в онлайн-университет от GeekBrains:

Обучение Интернет вещей и современные встраиваемые системы

Изучить C, механизмы отладки и программирования микроконтроллеров;

Получить опыт работы с реальными проектами, в команде и самостоятельно;

Получить удостоверение и сертификат, подтверждающие полученные знания.

Starter box для первых экспериментов в подарок!

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

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


Когда я решил поменять магнитолу в своей машине, я встал перед выбором — потерять штатное управление звуком кнопками на руле, или же покупать специальный (достаточно дорогой) адаптер.
Потом я подумал, почему бы не сделать такой адаптер самому?
Обзор для тех, кто дружит с паяльником.

Сначала суть проблемы.
Во многих машинах есть штатно установленное управление магнитолой на руле. Кнопки эти работают по принципу резистивной клавиатуры, что позволяет передавать сигнал всего по двум проводам.
Например, нажимаем кнопку увеличения громкости — в цепи появляется сопротивление 130 Ом.
Нажимаем уменьшение громкости — появляется сопротивление 240 Ом и т.п.

На многих современных магнитолах также есть возможность подключения проводного пульта дистанционного управления. Но проблема в том, что стандарты у всех производителей автомобилей и автомагнитол разные. Например, у магнитол Pioneer для увеличения громкости надо «подать» сопротивление 16 кОм.

Поэтому, между рулем и магнитолой нужен специальный адаптер, который будет конвертировать значения сопротивлений в понятные магнитоле.

Когда я поискал такой адаптер для своей машины, оказалось, что он стоит больше 50$. Учитывая, что сама магнитола мне досталась за какие-то смешные 30-35$, я решил попробовать сколхозить адаптер самостоятельно на ардуине. Готовой схемы на тот момент в интернетете не было, пришлось изобретать самому.

Заранее хочу извиниться за возможные неточности и ошибки — я плохо разбираюсь в электронике. Всю информацию по крупицам собирал из гугля. :)

В своем проекте использовал следующие компоненты:
1. Автомобиль Suzuki Swift
2. Автомагнитола Pioneer MVH-X165UI (купил в оффлайне)
3. Arduino Nano, можно и Mini (купил на ebay за 2.5$)
4. MCP4131, цифровой потенциометр на 100k (купил в оффлайне за 1$, почему-то на ebay они достаточно дорогие)
5. Резистор 10k
6. Макетная плата
7. Понижающий конвертер (step down buck converter за 1.5$), чтобы из 12V сделать 5V

Принцип простой — на входе измеряем сопротивление с кнопок на руле. Если сопротивление соответствует нажатию какой-то кнопки, то на выходе на потенциометре выставляем соответствующее сопротивление, требуемое магнитоле.

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


Также в сети обнаружилась следующая схема проводного пульта для магнитолы Pioneer (используется 3.5mm штеккер):

Кнопок Preset Up/Down у меня на руле нет, поэтому я использовал только два контакта на штеккере — Tip и Sleeve.

Т.к. диапазон требуемых магнитоле сопротивлений от 1К до 62К, то я купил микросхему MCP4131 — это цифровой потенциометр на 100К с 129 шагами регулировки. 129 шагов достаточно, т.к. нам не нужна супер точность, магнитола понимает сопротивления с разбросом где-то в 10-20%.
Ну и не обязательно покупать именно MCP4131, думаю, подойдет любой другой digipot с подобными характеристиками.

В интернете есть инструкции по использованию цифрового потенциометра с ардуиной, мне понравилось вот это видео, очень подробно и доступно.

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


Схема подключения получилась такая:

Сопротивление измеряется на пине A5 с помощью делителя напряжения с резистором 10К.


Потенциометр подключен по следующей схеме:

4, 7 — GND
8 — +5V
1 — arduino pin 4 (можно выбрать другой)
2 — arduino pin 13
3 — arduino pin 11
6 — к магнитоле, контакт «Tip» на штеккере


Фото готовой платы.

С обратной стороны фотографий не сохранилось, т.к. это было год назад и я не планировал писать обзор. Ну и там ничего интересного — куча перемычек и плохая пайка :)

Ардуина может работать от 12V, но я решил поставить понижающий до 5V конвертор. Во-первых, я от него же запитал видеорегистратор, тем самым освободил гнездо прикуривателя. Во-вторых, я читал, что напряжение в автомобильной сети грязное и нестабильное, может плавать на несколько вольт, как вниз, так и вверх. Конвертер такие скачки выдержит, а ардуина может и погореть. Чтобы еще «почистить» питание я добавил несколько защитных элементов — диод, стабилитрон, конденсатор. Схему подсмотрел вот тут. Насчет её необходимости у меня некоторые сомнения, но решил — пусть будет.

На этом все.
Устройство нормально работает в машине уже около года.
А я сэкономил некоторую сумму денег и получил ценный опыт.

Читайте также: