Подключение LCD Keypad Shield. LCD часы, сигнализация и таймер с детектором движения на Arduino Управляем мощной нагрузкой с микроконтроллера

В процессе поиска компонентов для проекта «Бани на Ардуино» наткнулся на модуль LCD 1602 keypad shield. На борту модуля имеется 5 кнопок и экран 1602. Кнопки + дисплей - это отличное сочетание. Можно организовать многоуровневое меню и с помощью кнопок реализовать перемещение в нем. Модуль отлично подойдет для быстрой отладки приложений, работающих с дисплеем 1602.

Пример программы для работы Ардуино с модулем LCD 1602 keypad shield

Представленный ниже алгоритм, выводит на экран модуля 1602 LCD keypad shield Arduino две строки. В первой строке отображается надпись Temp.: C – место для вывода показаний с датчика температуры. Во второй строке отображается таймер, считающий время после запуска программы. Алгоритм в будущем отлично подойдет для проекта .

#include "Time.h" //библиотека для работы со временем #include "LiquidCrystal.h" //библиотека для работы с дисплеем LCD 1602. Некоторые люди ищут в сети русификатор библиотеки LCD 1602 keypad shield, не понимаю зачем, но с уверенностью могу сказать, что его нет))) LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //выводы необходимые для работы дисплея. //При работе с модулем 1602 LCD keypad shield Arduino эти выводы заняты всегда и их не поменять, //в противном случае возникнут проблемы с отладкой void setup() { //настройки дисплея pinMode(9, OUTPUT); analogWrite(9,100); lcd.begin(16,2); //настройки времени setTime(0,0,0,1,10,2015); } void loop() { //вывод данных на дисплей lcd.clear(); lcd.print("Temp.: "); lcd.print(" C"); lcd.setCursor(0, 1); lcd.print("Time: "); lcd.print(hour()); lcd.print(":"); lcd.print(minute()); lcd.print(":"); lcd.print(second()); delay(1000); //без задержки дисплей будет мерцать, //поэтому лучше использовать ее кратную времени таймера }

Для тех, кому не терпится проверить, как работают кнопки модуля LCD 1602 keypad shield, привожу рабочий демонстрационный скетч для Ардуино. Код был найден в сети, мною добавлены исчерпывающие комментарии и исправлены ошибки.

#include "Wire.h" // библиотека для работы с протоколом I2C #include "LiquidCrystal.h" //библиотека для работы с дисплеем LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //как обычно, пины необходимые для работы LCD 1602 keypad shield int button; //переменная хранит данные о текущей активированной кнопке // константы нажатых кнопок const int BUTTON_NONE = 0;//ничего не нажато const int BUTTON_RIGHT = 1;//нажата кнопка вправо const int BUTTON_UP = 2;//нажата кнопка вверх const int BUTTON_DOWN = 3;//нажата кнопка вниз const int BUTTON_LEFT = 4;//нажата кнопка влево const int BUTTON_SELECT = 5;//нажата кнопка выбор //процедура определения нажатой кнопки int getPressedButton() { int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0) if (buttonValue < 100) { return BUTTON_RIGHT; } else if (buttonValue < 200) { return BUTTON_UP; } else if (buttonValue < 400){ return BUTTON_DOWN; } else if (buttonValue < 600){ return BUTTON_LEFT; } else if (buttonValue < 800){ return BUTTON_SELECT; } return BUTTON_NONE; } void setup() { lcd.begin(16, 2); lcd.print("сайт"); } //в основном цикле также нет ничего сложного, переменной button передается информация о нажатой кнопке //и с помощью оператора выбора на экран выводится информация сигнализирующая какая кнопка была нажата void loop() { button = getPressedButton(); switch (button) { case BUTTON_RIGHT: // при нажатии кнопки выводим следующий текст lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: RIGHT"); break; case BUTTON_LEFT: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: LEFT"); break; case BUTTON_UP: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: UP"); break; case BUTTON_DOWN: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: DOWN"); break; case BUTTON_SELECT: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("BUTTON: SELECT"); break; } }

Примеры проектов на 1602 LCD keypad shield Arduino поражают. В сети можно найти алгоритмы программ от часов до игр!

Or Freeduino board. It includes a 2x16 LCD display and 6 momentary push buttons. Pins 4, 5, 6, 7, 8, 9 and 10 are used to interface with the LCD. Analog Pin 0 is used to read the push buttons. The LCD shield supports contrast adjustment and backlit on/off functions. It also expands analog pins for easy analog sensor reading and display.

Sample Code

/******************************************************* Description: Reads an analog input on pin 1, prints the result to the LCD. This program takes the temperture sensor LM35 for example. Connection: Plug the LCD Keypad to the UNO(or other controllers) Temperture sensor: S(blue) -- A1() Note: A0 has been occupied. VCC(red) -- VCC GND(black) -- GND ********************************************************/ #include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // select the pins used on the LCD panel unsigned long tepTimer ; void setup(){ lcd.begin(16, 2); // start the library } void loop(){ lcd.setCursor(0, 0); // set the LCD cursor position int val; // variable to store the value coming from the analog pin double data; // variable to store the temperature value coming from the conversion formula val=analogRead(1); // read the analog in value: data = (double) val * (5/10.24); // temperature conversion formula if(millis() - tepTimer > 500){ // output a temperature value per 500ms tepTimer = millis(); // print the results to the lcd lcd.print("T: "); lcd.print(data); lcd.print("C"); } }

Expected Results

FAQ

Q&A Some general Arduino Problems/FAQ/Tips
Q1 I do not understand your schematic. There are too many connectors illustrated than are actually on the shield. Could you show me a mapping?
A1 The J1-J8 include the both the user interface, i.e. Analog pins, APC220(Serial) pins, Digital pins, and the pins connected with the lower Arduino card, e.g. Uno/ Leonardo. Here is a simple mapping picture.
Q2 Why my LCD keypad cannot display anything on the while all right on ?
A2 It works well if uploaded by Arduino 1.5.3 version, however, the latest 1.6.* have discard pin Definition for Edison . So you have to add pinMode(); into the setup() like this:
void setup() { for(int i=4;i<10;i++){ pinMode(i,OUTPUT); } lcd.begin(16, 2); // set up the LCD"s number of columns and rows }

Сегодня расскажу об очень популярном модуле 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.robotchip.ru"); // Вывести текст Serial.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.robotchip.ru" ) ; // Вывести текст

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 перейти на следующию строку

Проект, который отлично впишется в интерьер вашего 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.

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

Похожие статьи

© 2024 tricolor-ofis-prodazh.ru. Нужные устройства.