Браузеры. Восстановление. Windows. Оптимизаторы. Антивирус

Рассматриваемый шилд представляет собой плату с встроенными модулями индикации и управления. Индикация осуществляется с помощью LCD-дисплея TC1602, управление – через встроенные кнопки. Есть возможность регулировки яркости дисплея прямо на плате с помощью подстроечного резистора. Плата снабжена разъемами, в которые могут быть подключены другие устройства, например, датчики. Для работы с экраном используются пины 4-10, для определения нажатия кнопок – только один аналоговый пин A0. Свободными являются цифровые пины 0-3, 11-13 и аналоговые пины A1-A5.

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

Технические характеристики

  • Тип дисплея: LCD 1602, символьный, 4-х битный режим.
  • Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
  • Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
  • Технология: STN, Transflective, Positive.
  • Контроллер дисплея: HD44780U.
  • Предельная частота обновления экрана: 5Гц
  • Питание дисплея: 5 Вольт
  • Кнопки: 6 кнопок (5 кнопок управления и Reset).
  • Дополнительные элементы: регулировка яркости подсветки (потенциометр).
  • Рабочая температура экрана: от -20 °С до +70 °С;
  • Температура хранения экрана: от -30 °С до +80 °С.

Распиновка LCD shield для подключения к Arduino

Контакт дисплея LCD 1602 Описание Контакт на LCD Shield
Пины LCD экрана
GND Земля
VDD Питание 5В
Contrast Управление контрастом Потенциометр
RS Команды/Данные 8
R/W Чтение/Запись
Enable Включение (активирование) 9
DB0 Не используется
DB1 Не используется
DB2 Не используется
DB3 Не используется
DB4 Дата 1 4
DB5 Дата 2 5
DB6 Дата 3 6
DB7 Дата 4 7
Back LED + Включение подсветки 10
Back LED – Питание подсветки
Пины для кнопок
Кнопка UP Управляющая кнопка A0
Кнопка DOWN Управляющая кнопка A0
Кнопка LEFT Управляющая кнопка A0
Кнопка RIGHT Управляющая кнопка A0
Кнопка SELECT Управляющая кнопка A0
Reset Reset
ICSP ICSP для перепрошивки встроенного микроконтроллера HD44780U
UART Контакты для UART соединения 0, 1

Дополнительные элементы шилда

  • Индикаторный светодиод (включается при подключении питания к плате).
  • Контактные площадки для подключения аналоговых устройств (GND, VSS, пин данных).
  • Потенциометр для регулирования контрастностью экрана.

Подключение платы LCD Shield к Arduino

Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.

Скетч для экрана на Arduino LCD shield

Для работы с LCD экранами обычно используют популярную библиотеку LiquidCrystal . На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными контактами экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Последовательность аргументов конструктора:

  • RS (8)
  • Enable (9)
  • data(4)
  • data(5)
  • data(6)
  • data(7)

Ничего сложного в работе с объектом нет. В setup() мы инициализируем объект, указывая ему количество символов и строк:

Lcd.begin(16, 2);

Для вывода информации на дисплей используем метод print():

Lcd.print (“Arduino Master!”);

Текст выведется в место текущего нахождения курсора (в начале работы скетча это первая строка и первый символ). Для указания произвольного положения курсора можно использовать функцию setCursor(<столбец>, <строка>):

Lcd.setCursor(0, 0); // Первый символ первой строки lcd.setCursor(0, 1); // Первый символ второй строки lcd.setCursor(2, 1); // Третий символ второй строки

Кнопки LCD Keypad Shield

На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка формирует определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции ;

Значения уровня сигнала на пине A0 в зависимости от выбранной кнопки:

Нажатие кнопки Значение на аналоговом пине
RIGHT 0-100
UP 100-200
DOWN 200-400
LEFT 400-600
SELECT 600-800
Клавиша не нажата 800-1023

Пример скетча работы с кнопками LCD Keypad Shield:

Int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right // Выполняем какое-то действие для кнопки вправо. } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP // Выполняем какое-то действие для кнопки вверх } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN // Выполняем действие для кнопки вниз } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT // Выполняем действие для кнопки влево } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT // Выполняем действие для кнопки выбора пункта меню } else { // Все остальные значения (до 1023) будут означать, что нажатий не было }

В выбранном методе кодирования есть два главных недостатка:

  • Нельзя отслеживать одновременное нажатие нескольких кнопок;
  • Возможные искажения сигнала могут привести к ложным срабатываниям.

Нужно учитывать эти ограничения, выбирая этот шлд в своих проектах, если вы планируете использовать устройство в системах с большим количеством помех, которые могут искажать сигнал на входе A0, из-за чего АЦП может сформировать ошибочное значение и скетч в результате выполнит другие инструкции.

Пример скетча для работы с экраном и кнопками меню

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

#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_SELECT 5 #define BTN_NONE 10 int detectButton() { int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right return BTN_RIGHT; } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP return BTN_UP; } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT return BTN_SELECT; } else { // Все остальные значения (до 1023) будут означать, что нажатий не было return BTN_NONE; } } void clearLine(int line){ lcd.setCursor(0, 1); lcd.print(" "); } void printDisplay(String message){ Serial.println(message); lcd.setCursor(0, 1); lcd.print(message); delay(1000); clearLine(1); } void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("Arduino Master"); delay(3000); lcd.setCursor(0, 0); lcd.print("Arduino Master"); } void loop() { int button = detectButton(); switch (button) { case BTN_UP: printDisplay("UP"); break; case BTN_DOWN: printDisplay("DOWN"); break; case BTN_LEFT: printDisplay("LEFT"); break; case BTN_RIGHT: printDisplay("RIGHT"); break; case BTN_SELECT: printDisplay("SELECT"); break; default: //printDisplay("Press any key"); break; } }

Краткие выводы по плате расширения LCD keypad shield

Плата расширения LCD Keypad достаточно популярная, она проста и удобна для использования в проектах Arduino. Сегодня ее можно легко купить практически в любом интернет-магазине.

Плюсы LCD Shield:

  • Упрощает подключение жидкокристаллического экрана.
  • Уменьшает общие размеры устройства, т.к. убирает выступающие провода и монтажные платы.
  • Сокращает количество ошибок, связанных с неправильным монтажом и подключением.
  • Добавляет функциональность кнопочного управления, если на плате установлены кнопки (LCD Keypad shield).

Недостатки:

  • Стоимость шилда выше, чем стоимость отдельного экрана.
  • Не всегда нужна дополнительная функциональность в виде кнопок.
  • Шилд потребляет больше энергии, чем отдельные элементы платы.

Проект, который отлично впишется в интерьер вашего DIY угла, комнаты, гаража или офиса, в котором вы собираете роботов и всякие гиковские автоматизированные проекты на Arduino.

На выходе проекта вы получите в пределах одного модуля следующие фичи:

  • Часы!;
  • Отображение даты и времени на LCD экране;
  • Встроенный счетчик времени (для того, чтобы засекать время, затраченное на один проект);
  • Будильник (чтобы напоминать о том, что вы засиделись и пора устроить себе разминку);
  • Отслеживание движения (сберегает заряд аккумулятора, отключая LCD экран, когда вас нет рядом);
  • Отлично впишется в ваш интерьер Arduino-разработчика!

Необходимые материалы для проекта

  • LCD Keypad Shield (LCD шилд с кнопками) для Arduino (в данном случае - от производителя DFRobot)
  • Часы реального времени (RTC) DS1307 (от Adafruit);
  • Закрывающийся бокс (можно найти в радиомагазине или заказать у китайцев);
  • Зуммер (Piezo Buzzer);
  • PIR (Пассивный инфракрасный датчик движения);
  • Проводники мама/мама;
  • Джек 2.1 мм;
  • Переходник для батарейки 9 В 5.5 мм / 2.1 мм;
  • Крона 9 В.
Фото деталей и узлов для проекта




Сборка модуля часов реального времени

Порой модуль часов реального времени (например, от компании Adafruit DS1307), поставляется в виде отдельных компонентов. Сборка не должна вызвать проблем. Тем более, есть отличная инструкция по использованию и сборке модуля часов реального времени . Как правило, батарейка идет в комплектации модуля. Работать от одной батарейки он будет не меньше трех лет.

Коннектор для питания

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

Батарейка (крона) на 9 В просто устанавливается на заднюю часть бокса.



Если вы обратили внимание, в боксе есть еще одно отверстие. Это была первая неудачная попытка. Джек в это отверстие не поместился.

Подсоединяем провода ко всем элементам

Очень рекомендую закупить разноцветные проводники типа мама/мама. Стоят они недорого, а процесс сборки облегчают очень сильно. Подключаем проводники к модулю часов реального времени, ПИР датчику движения , зуммеру, чтобы в дальнейшем подключить их к LCD шилду.

Подключаем все к LCD шилду

После этого добавлен кусок кода из скетча от DFRobot для LCD шилда (включая опцию управления кнопками). Этот скетч можно скачать .

Функции кнопок

На LCD шилде кнопки подписаны (смотрите на фото). Первые пять из шести доступных кнопок (button) были запрограммированы следующим образом:


Кнопка #1 (подписана SELECT) - это кнопка Menu. Эта кнопка отвечает за отображение листаемого списка доступных функций (таймер, установка будильника).

Кнопка #2 (подписана LEFT) - кнопка Select. Служит для выбора функции. Примечание: также используется для инкремента на 10 , когда выбраны часы, минуты и т.п.

Кнопки #3 и 4 (подписаны UP и DOWN) - кнопки Increment и Decrement (инкремент и декремент). Используются для уменьшения и увеличения часов и минут при настройке таймера или будильника. Используются также для переключения между временами суток AM и PM.

Кнопка #5 (подписана RIGHT) - GO! Используется для принятия выбранного значения (например, настроенных минут или часов).

Кнопка #6 (отмечена RST) - Reset, которая перезагружает наш Arduino.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Шилд - это плата дополнения. Я предлагаю разделить шилды на полноразмерные и отдельные модули. Полноразмерные своими очертаниями повторяют форму платы Arduino, будь то UNO, Nano или MEGA. Отдельные модули - это платы произвольной формы, созданные для выполнения определенного набора функций. И те и другие могут быть как универсальными, так и для выполнения узконаправленных задач.

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

Начнем с шилда, который не несёт в себе никаких особенных функций, а создан для удобства монтажа ваших проектов. Итак первый в нашем обзоре облегчит монтаж проектов с платой Arduino Nano, правда толку от малых размеров «НАНО» в таком случае ноль.

На плате расположен разъём для подключения штекера от блока пиитания, стабилизатор напряжения, а также клеммные колодки. Они подписаны и соответствуют выводам «Нанки». Кроме того присутствует кнопка «сброс» и светодиод «Питание».

Второй шилд предназначен для платы Uno. На нем расположена беспаечная макетная плата для сборки проекта и выводы, дублирующие те, что на самой ардуине - удобное решение.

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

Вот пример такой платы для Ардуино версии Мега.

Проводная и беспроводная связь

С помощью этих плат можно организовать управление микроконтроллером по сети через кабель Ethernet, например, или беспроводов - через GSM-связь, вставив сим-карту.

Эта плата называется w5100 - содержит Ethernet модуль и модуль SD-кардридера. Это значит, что можно хранить данные, например лог измерений датчиков на карту памяти и управлять системой через web-интерфейс. Чтобы связать с ним ардуино пользуйтесь библиотеками:

    Ethernet library;

Обратите внимание внешне он повторяет концепцию 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 - это со всеми необходимыми защитами и разъёмом для зарядки. Вроде бы ничего особенного, но это обеспечит завершенный вид вашему проекту, а цепи питания не придется размещать рядом с основными платами.

Заключение

Использование шилдов для всех задач проекта позволит избежать излишнего числа перемычек и соединений, а это снизит количество ошибок и лишних перемычек. После сборки вы получите многоэтажный бутерброд из плат заводского изготовления. Такой подход иногда называют «модульная конструкция». Между прочим, это облегчит обслуживание, ремонт и наладку оборудования.

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

Сегодня расскажу об очень популярном модуле LCD keypad shield, разработанный для Arduino UNO, MEGA и другие аналогов. Модуль включает в себя LCD дисплей (16х2) и шесть кнопок. Для взаимодействия контроллера Arduino и модуля, используются цифровые вывода 4, 5, 6, 7, 8, 9, 10 а для чтения состоянии кнопок используется один аналоговый вывод. Также модуль позволяет регулировать контрастность LCD экран, с помощью подстрочного потенциометра RP1 (10кОм). Данный модель отлично подходит для отладки каких-нибудь проектов, мониторинга и так далее.

Технические параметры

Напряжение питания: 5 В
Размер дисплея: 2.6 дюйма
Тип дисплея: 2 строки по 16 символов
Цвет подсветки: синий
Цвет символов: белый
Регулировка контрастности: потенциометр
Габариты: 80мм x 58мм x 20мм

Общие сведения

Большую часть модуля занимает ЖК дисплей, марки LCD 1602 с синей подсветкой, передача данных осуществляется по 4-битному режиму, подробнее в этой . На нижней части расположены шесть кнопок, пять из-за которых используются для навигации и одна кнопка дублирует reset. В верхнем левом углу установлен потенциометр, необходимый для регулировки контрастности ЖК дисплея. Так как LCD keypad shield устанавливается на плату Arduino свеху и фактически занимает разъемы, на модуле расположены дополнительные отверстия, для впаивания проводов или разъемов (на отдельную колодку. выведен интерфейс ICSP).
Из принципиальной схемы, можно увидеть, что база транзистора отвечающая за подсведку модуля подключена к выводу 10 платы Arduino, следовательно, можно отключать ее.

Принцип работы кнопок
Кнопки располагаются в удобном порядке — вверх, вниз, влево, вправо, и SELECT. Все кнопки подключены к одному аналоговому входу «A0» используя цепочку резисторов, которые выдают разное опорное напряжение для «А0» при нажатии любой кнопки. На рисунке показана часть принципиальной схема LCD keypad shield

Их принциписальной схемы видно, если кнопки не нажаты напряжение на «A0» через резистор R2 (2кОм) будет 5В. Другие резисторы не влияют на схему, а при чтении аналогового вывода «A0» будет параметр на верхнем приделе 1023 (или приблизительно). Теперь рассмотрим, что произойдет, если будет нажата кнопка «Вниз». На выводе «А0» будет напряжением, которое разделено между резистором R2 (2кОм) которое подтянуто к +5В и резисторами R3 (330ОМ) и R4 (620Ом) общий суммой 950Ом, которые пытаются тянуть его вниз к 0В. Напряжения на «A0» будет составлять порядка 1.61В, это означает, что если выполнить команду analogRead () на A0, будет возвращено значение около 306, что означает нажатие кнопки «Вниз»
Такой же принцип применим и для других кнопок, напряжением и значение analogRead (), можно посмотреть ниже:

Напряжением и значение analogRead
RIGNT: 0.00В: 0 — 8 bit; 0 — 10 bit
UP: 0.71В: 36 — 8 bit; 145 — 10 bit
DOWN: 1.61В: 82 — 8 bit; 306 — 10 bit
LEFT: 2.47В: 126 — 8 bit; 505 — 10 bit
SELECT: 3.62В: 185 — 8 bit; 741 — 10 bit

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

Назначение выводов
A0: Вывод кнопок
D4: LCD — DB4
D5: LCD — DB5
D6: LCD — DB6
D7: LCD — DB7
D8: LCD – RS
D9: LCD Enable
D10: LCD – отключение подсветки дисплея

Подключение LCD keypad shield к Arduino

Необходимые детали:
Arduino UNO R3 x 1 шт.
LCD модуль keypad (LCD1602, 2×16, 5V)
Кабель USB 2.0 A-B x 1 шт.

Подключение
Установите модуль на плату Arduino UNO, подключите кабель и закрущите данный скетч.

/* Тестирование производилось на Arduino IDE 1.6.12 Дата тестирования 06.12.2016г. */ #include // Подключяем библиотеку LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Указываем порты void setup() { lcd.begin(16, 2); // Инициализируем LCD 16x2 lcd.setCursor(0,0); // Установить курсор на первую строку lcd.print("LCD1602"); // Вывести текст lcd.setCursor(0,1); // Установить курсор на вторую строку lcd.print("www..begin(9600); // Включаем последовательный порт } void loop() { int x; // Создаем переменную x x = analogRead (0); // Задаем номер порта с которого производим считывание lcd.setCursor(10,1); // Установить курсор на вторую строку if (x < 100) { // Если x меньше 100 перейти на следующею строк lcd.print ("Right "); // Вывести текст Serial.print("Value A0 ‘Right’ is:"); // Вывести текст Serial.println(x,DEC); } else if (x < 200) { // Если х меньше 200 перейти на следующию строку lcd.print ("Up "); // Вывести текст Serial.print("Value A0 ‘UP’ is:"); // Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } else if (x < 400){ // Если х меньше 400 перейти на следующию строку lcd.print ("Down "); // Вывести текст Serial.print("Value A0 ‘Down’ is:"); // Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } else if (x < 600){ // Если х меньше 600 перейти на следующию строку lcd.print ("Left "); // Вывести текст Serial.print("Value A0 ‘Left’ is:"); // Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } else if (x < 800){ // Если х меньше 800 перейти на следующию строку lcd.print ("Select"); // Вывести текст Serial.print("Value A0 ‘Select’ is:");// Вывести текст Serial.println(x,DEC); // Вывести значение переменной x } }

Тестирование производилось на Arduino IDE 1.6.12

Дата тестирования 06.12.2016г.

#include // Подключяем библиотеку

LiquidCrystal lcd (8 , 9 , 4 , 5 , 6 , 7 ) ; // Указываем порты

void setup ()

lcd . begin (16 , 2 ) ; // Инициализируем LCD 16x2

lcd . print ("LCD1602" ) ; // Вывести текст

lcd . print ("www.сайт" ) ; // Вывести текст

Serial . begin (9600 ) ; // Включаем последовательный порт

void loop () {

int x ; // Создаем переменную x

x = analogRead (0 ) ; // Задаем номер порта с которого производим считывание

if (x < 100 ) { // Если x меньше 100 перейти на следующею строк

lcd . print ("Right " ) ; // Вывести текст

Serial . print ("Value A0 ‘Right’ is:" ) ; // Вывести текст

// Вывести значение переменной x

else if (x < 200 ) { // Если х меньше 200 перейти на следующию строку

lcd . print ("Up " ) ; // Вывести текст

Serial . print ("Value A0 ‘UP’ is:" ) ; // Вывести текст

Serial . println (x , DEC ) ; // Вывести значение переменной x

else if (x < 400 ) { // Если х меньше 400 перейти на следующию строку

lcd . print ("Down " ) ; // Вывести текст

Serial . print ("Value A0 ‘Down’ is:" ) ; // Вывести текст

Serial . println (x , DEC ) ; // Вывести значение переменной x

else if (x < 600 ) { // Если х меньше 600 перейти на следующию строку

lcd . print ("Left " ) ; // Вывести текст

Serial . print ("Value A0 ‘Left’ is:" ) ; // Вывести текст

Serial . println (x , DEC ) ; // Вывести значение переменной x

else if (x < 800 ) { // Если х меньше 800 перейти на следующию строку

Я знакома с мнением многих технических специалистов об Arduino и в некоторой степени разделяю их взгляд. Тем не менее, например, для быстрой автоматизации, эта платформа очень полезна: она подобно детскому конструктору позволяет собрать и запрограммировать устройство за пару часов, не тратя время на различные «undefined reference to __bss_start__» и «Device not detected».
Однажды для автоматизации очередной рутинной работы мне понадобился дисплей. Я листала Aliexpress и все не могла найти подходящий шилд для Arduno.


Кот для привлечения внимания

Лиха беда начало

Итак, мне нужен был диалоговый пользовательский интерфейс и притом быстро. (Кот был для привлечения внимания, замечено - работает.) Как будто нарочно все производители предлагали самостоятельно вручную рисовать поля ввода и прогресс-бары, программировать обработчики нажатий кнопок, и, словом, делать все то, что мне как раз не хотелось. Поразительно, почему бы не предоставить высокоуровневую библиотеку, которая взяла бы эти заботы на себя? Наверное в 80% случаев все задачи сводятся к простой последовательности:
  1. Отобразить форму с полями ввода.
  2. Подождать, пока пользователь отредактирует поле Foo.
  3. Получить новое значение поля Foo.
  4. Сделать что-то в ответ.
Но отсутствие библиотеки было не единственной препоной. Скудных запасов ROM моей Arduino Uno (а такая же ситуация и у Leonardo, Ethernet, Pro) хватало в лучшем случае на хранение одного изображения при разрешении 128х128 точек. И на код места уже не оставалось.
Пройдясь широким фронтом по Aliexpress, DX и подобным магазинам, я в итоге нашла, выражаясь языком сетевых разработчиков, либо «тонкие тупые» , либо «чересчур жирные» шилды. Первые не решают проблему, но стоят дёшево. Вторые походят на ракетно-зенитный комплекс, и за эту избыточность придется порядочно заплатить. Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича… После некоторых колебаний я решилась заполнить этот досадный маркетинговый пробел.

Что нам стоит шилд построить

Развела плату, заказала несколько первых образцов для опытов, попробовала.


Идея постепенно оформилась. Итак, решение должно быть простым в использовании и обязательно дешёвым (о чем ниже):
  • На борту шилда должен быть микроконтроллер с запасом памяти хотя бы на пару экранов.
  • Чтобы с памятью точно не возникло проблем, можно добавить слот microSD.
  • Также прямо на шилде нужно расположить несколько кнопок.
  • Микроконтроллер должен заниматься «чёрной работой», отрисовывая поля формы и обрабатывая нажатия кнопок таким образом, чтобы, только подав питание на прошитый шилд, можно было листать формы, редактировать поля ввода, ставить птичку в поле для отметки и проч.
  • Микроконтроллер на шилде будет связан с Arduino по одному из доступных последовательных интерфейсов: I2C, SPI или UART. По каналу будут передаваться команды от Arduino; (например, установка начального значения или получение текущего).
  • Чтобы не заставлять Arduino циклически опрашивать шилд в ожидании действий пользователя можно предусмотреть линию GPIO, которая будет выполнять роль внешнего прерывания.
  • В отношении метода программирования шилда можно, конечно, провозгласить известный принцип «только Vim, только хардкор!», но всё же, понимая потребности целевой аудитории этого продукта, весьма полезно разработать дизайнер форм наподобие GTK Glade и предоставить возможность новичкам одним нажатием кнопки этого дизайнера прошить формы в шилд.

Несколько слов о комплектующих

Самым основным комплектующим шилда является дисплейный модуль. От него в наибольшей степени зависит как цена, так и технические характеристики продукта. При поиске подходящего модуля хотелось и рыбку съесть, и на лошади покататься: с одной стороны я исходила из критерия доступности, с другой стороны стоимость модуля должна быть минимальной. В основном эти критерии противоречат друг другу: магазины вроде Терраэлектроники, имеющие отделения по всей стране, предлагали некоторый набор цветных дисплеев распространённых моделей, но цены на них были от 2000 руб и выше; с другой стороны на том же Aliexpress было много хороших вариантов, но все они обладали одним и тем же недостатком: между ними и нашими несчастными пользователями пролегала бездна, в которой погибла не одна тысяча картонных коробок, и поведение которой было столь же легко предсказуемо, как поведение нефтяных котировок или погоды. Все, конечно, поняли о чем речь. Так что моя идея по-прежнему оставалась лишь идеей.
Как это часто бывает, ночная кухонная болтовня за чашкой чая оказывается судьбоносной. Приятель мимоходом поделился, как менял сломанный дисплей на своем HTC. Оказалось, что дисплеи смартфонов, имея несомненно лучшие характеристики, чем товары в каталогах Терраэлектроники, стоят в два-три раза дешевле! Это было открытием. После этого достаточно быстро был найден дисплей, который в России можно купить практически на каждом шагу за копейки; он устанавливался на телефоны Nokia 2600/2650/3100/3200/5100/5140/6100/6220/6610/7210/7250. (Как впоследствии оказалось, я заново открыла Америку, так как именно этот дисплей используется во многих шилдах для Arduino.) Его разрешения - 128×128 точек - вполне хватает, чтобы отобразить форму с тремя-четырьмя полями ввода.

Гляженное лучше хваленного

Многим, наверное, до сих пор не вполне ясно, как пользоваться описываемым гаджетом. Пожалуй проще всего проиллюстрировать это на примере двух стандартных ситуаций:
  • У нас есть цифровой термометр, необходимо отображать его показания на дисплее.
  • Есть сервопривод, требуется задавать параметры его работы. Например, его положение.
Термометр
#include #include #include // Термометр подключается к линии 2 Arduino по протоколу 1-Wire #define ONE_WIRE_BUS 2 /************************************************************* * Эти макросы генерирует Дизайнер форм, * * вам не придётся вписывать их вручную: * *************************************************************/ // номер формы, отображающей значение температуры. #define FORM_TERMO 0 // номер поля, отображающего значение температуры #define FIELD_TERMO 0 // Создаем объект oneWire для коммуникации по интерфейсу oneWire OneWire oneWire(ONE_WIRE_BUS); // Создаем объект sensor для управления датчиком температуры DallasTemperature sensor(&oneWire); // создаем объект lcd для управления LCD шилдом InteLCD lcd; void setup(void) { lcd.init(); sensor.begin(); } void loop(void) { // Запустить измерение температуры sensor.requestTemperatures(); // обновить значение температуры на экране lcd.update(FORM_TERMO, FIELD_TERMO, sensor.getTempCByIndex(0)); delay(1000); }
Сервопривод
#include #include #define FORM_SERVO 0 #define FIELD_SERVO 0 InteLCD lcd; // создать объект lcd для управления LCD шилдом Servo myservo; // создать объект servo для управления сервоприводом void lcdEvent(void); // Обработчик событий от шилда void setup(void) { myservo.attach(9); // указать, что сервопривод на 9 линии lcd.init(); // инициализация lcd } void loop(void) { } void lcdEvent(void) { switch (lcd.event.code) { case InteLCD::FIELD_UPDATED: // если обновлено поле 0 формы 1 if (lcd.event.formid == FORM_SERVO && lcd.event.fieldid == FIELD_SERVO) { // установить позицию сервопривода в соответствии // с полученным от поля ввода значением myservo.write(lcd.event.arg); // подождать пока сервопривод примет нужное положение delay(15); } break; } }

Напоследок

По моим представлением DIY электроника должна развиваться в сторону наибольшей модульности, где каждый модуль предельно прост и закончен. Тогда, как из разнообразных деталей Lego ребенок возводит свой игрушечный замок, пользователь по кирпичикам должен собирать свое устройство, но без использования молотка и напильника. Мой шилд - небольшой шаг в этом направлении.
Буду рада услышать ценные советы и понять, кому же ещё кроме меня не достаёт такой полезной штуки.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: