Ардуино: подключение матричной клавиатуры
В мире электроники клавиатурой называют устройство, состоящее из отдельных кнопок, которое позволяет вводить информацию в компьютер или в иной электронный прибор.
Клавиатуры имеют массу вариантов исполнения. На старых персональных компьютерах использовались клавиатуры с механическими клавишами, которые имели большой ход и были почти также удобны как клавиши на старых печатных машинках. Последние 15-20 лет широко применяются мембранные клавиатуры, которые проще и дешевле в изготовлении. Именно такую клавиатуру мы будем подключать к Ардуино.
Популярная в Ардуино проектах матричная мембранная клавиатура имеет 12 или 16 кнопок. С нижней части клавиатуры выходит шлейф, заканчивающийся dupont розеткой.
Устройство матричной клавиатуры
Матричная клавиатура состоит из кнопок, образующих матрицу mxn, т.е. таблицу, где m — количество строк, а n — количество столбцов. Для урока мы воспользуемся клавиатурой 4х3. Если мы рассмотрим её шлейф, то увидим, что он состоит из 7 дорожек. Дорожки с номерами 1-4 (обозначим их Row1-Row4) — это строки матрицы с первой по четвёртую, а дорожки с номерами 5-7 (Col1-Col3) — столбцы с первого по третий.
Каждая кнопка — это область пересечения токопроводящих дорожек. При нажатии на участок, обозначающий кнопку, происходит соединению дорожек и замыкание одного из выводов строк 1-4 с одним из выводов столбцов 1-3.
Подключение матричной клавиатуры к Ардуино
Для отображения вводимой с клавиатуры информации мы воспользуемся жк дисплеем c I2C интерфейсом. Благодаря этому интерфейсу, схема не будет перегружена проводами. Подробно о дисплеях для Ардуино рассказывается в одном из предыдущих уроков — Ардуино: вывод текста на ЖК дисплей.
Подключение дисплея с шиной I2C осуществляется по следующей схеме:
ЖК дисплей | GND | VCC | SDA | SCL |
Ардуино Уно | GND | +5V | A4 | A5 |
Матричная клавиатура имеет 7 выводов, которые подключаются к любым цифровым выводам. В нашем примере мы задействуем выводы 2-8. Выводы 0 и 1, как правило, не используют при подключении клавиатуры, поскольку они предназначены для UART интерфейса.
Схема подключения клавиатуры к Ардуино:
Матричная клавиатура | Row1 | Row2 | Row3 | Row4 | Col1 | Col2 | Col3 |
Ардуино Уно | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
Внешний вид макета:
Программа:
Чтобы работать с клавиатурой можно воспользоваться библиотекой Keypad.
В этой программе также используются библиотеки и
, т.к. для вывода информации мы воспользовались LCD-дисплеем с интерфейсом I2C.
Кодовый замок
Используя макет, который мы собрали, можно сделать устройство, позволяющее вводить пароль с клавиатуры. Для примера напишем простой код, работающий с паролем из четырёх цифр.
#37. Подключение матричной клавиатуры 4х4 Arduino
Сегодня в уроке рассмотрим принцип работы матричной клавиатуры 4х4. Подключим клавиатуру 4х4 к Arduino и напишем скетч для получения значений при нажатии на кнопки.
Технические параметры матричной клавиатуры для Arduino.
- Разъём: PLS-8;
- Тип шлейфа: плоский, гибкий, 8 pin;
- Длина шлейфа: 75 мм;
- Размер: 77×69×2 мм;
- Масса: 7 г.
Принцип работы клавиатуры 4х4 для Arduino.
Клавиатура выполнена в виде матрицы 4×4, каждая кнопка является областью воздушного зазора между двумя диэлектрическими слоями с нанесенным на них токопроводящим покрытием. Дорожки покрытия одного слоя нанесены горизонтально (выводы 1—4), а другого вертикально (выводы 5—8). Нажатие на кнопку приводит к соединению дорожки одного слоя с дорожкой другого и замыканию одного из выводов 1—4 с одним из выводов 5—8.
Принцип работы очень простой, при нажатии кнопки замыкается контакт между столбцом и строкой, между ними начинает течь ток. Например, при нажатии клавиши «4» происходит короткое замыкание столбца 1 и строки 2. Схема клавиатуры 4 x 4 показана на рисунке ниже.
Подключение матричной мембранной клавиатуры к Arduino.
Необходимые детали:
- Arduino UNO R3.
- Матричная мембранная клавиатура 4х4, 16 кнопок.
- Провод DuPont.
- Кабель USB 2.0.
Схема подключения матричной клавиатуры к Arduino UNO.
Схема подключения матричной клавиатуры к Arduino NANO.
Подключаем матричную клавиатуру к Arduino начиная с 2 цифрового пина до 9. Как показано на схеме подключения.
Установка библиотек:
В данном примере будем использовать библиотеку «Keypad.h» скачать ее можно в «Менеджере библиотек» или внизу статьи в разделе «файлы для скачивания».
В строке поиска вводим «Keypad» находим библиотеку «Keypad by Mark Stanley» и устанавливаем ее.
Пример скетча для работы матричной мембранной клавиатуры с Arduino.
В коде определяем количество рядов и колонок. Данный параметр зависит от типа клавиатуры.
Также указываем массив символов кнопок.
И наконец, пины подключения клавиатуры к Arduino.
Принцип работы достаточно простой. Считываем состояние кнопок и если было нажатие, выводим в монитор порта символ нажатой клавиши.
Загрузите скетч и откройте «Последовательный монитор» из Arduino IDE и вы получим следующий результат.
На основе данного урока можно сделать кодовый замок по аналогии с кодовым замком, который я делал на дисплее Nextion. Но на этом возможности применения матричной клавиатуры в Arduino проектах не заканчивается. С помощью матрицы кнопок можно управлять элементами умного дома, станком с ЧПУ и пр.
Появились вопросы или предложения, не стесняйся, пиши в комментарии!
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока.
И до встречи в следующем уроке.
Понравилась статья? Поделитесь ею с друзьями:
Урок 13. Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino
Теперь научимся подключать устройство ввода к Ардуине. В этом примере разберемся, как подключить мембранную клавиатуру 4*4
Данный пример будет выполнять две задачи:
- Первая задача: определяет, какая из клавиш была нажата на клавиатуре и передать информацию по сериал порту на компьютер, где в «мониторе последовательного порта «.
- Вторая задача: при каждом нажатии клавиш издавать звуковой сигнал. У каждой клавиши звуковой сигнал будет разный.
В данном уроке нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
Сборка:
1) Клавиатуру удобнее всего подключить к Ардуине проводками Папа-Папа.
Контакты на клавиатуре отсчитываются слева на право.
Клавиатура 4*4 | Arduino (uno) |
---|---|
Контакт 1 | pin 11 |
Контакт 2 | pin 10 |
Контакт 3 | pin 9 |
Контакт 4 | pin 8 |
Контакт 5 | pin 7 |
Контакт 6 | pin 6 |
Контакт 7 | pin 5 |
Контакт 8 | pin 4 |
Контакты к которым подключаем клавиатуру, могут быть перенастроены на любые другие цифровые контакты. Настраиваются здесь:
2) Звуковой сигнал будет издаваться с помощью зуммера, его подключаем следующим образом:
Зуммер | Arduino |
---|---|
GND | GND |
IO | pin 3 |
VCC | 5V или 3V |
Контакт Pin3 так же может быть изменен на любой удобный вам цифровой выход. Настраивается здесь:
Скетч:
Теперь, если все подключено и библиотеки установлены, можно приступить к загрузке скетча.
Видео:
Подключение матричной клавиатуры 4×4 к Ардуино без библиотеки
Часто бывает, что в проекте, над которым мы работаем, необходимо иметь в распоряжении довольно много кнопок. Уже с обычной цифровой клавиатурой, подключив каждую кнопку к отдельному контакту, мы будем использовать 12 контактов ввода/вывода (цифры 0-9, #, *).
В сегодняшней статье мы узнаем, как подключить, подобную клавиатуру, используя как можно меньше контактов.
Подключение матричной клавиатуры 4×4 к Ардуино
Для экономии выводов микроконтроллера нам нужно правильно соединить кнопки между собой. Идея состоит в том, чтобы расположить их в виде матрицы, создавая строки и столбцы, как на схеме ниже:
Благодаря такому расположению мы можем подключить 16 кнопок, используя всего 8 контактов GPIO.
Принцип действия
Чтобы прочитать состояние каждой кнопки, все контакты, к которым подключены столбцы, должны быть установлены в состояние INPUT_PULLUP.
Затем установить контакты, к которым подключены строки как выходы с состоянием HIGH. Теперь все, что осталось, — это использовать несколько циклов, чтобы установить состояние LOW по одной строке за раз, а затем прочитать состояния входов столбца. Когда мы просканируем каждую строку, мы узнаем, какая кнопка нажата.
Реализация
Ниже приводим код который обрабатывает нажатие кнопки клавиатуры:
Рассмотрим код подробнее.
Для начала объявим несколько констант, чтобы код был легко читаемым:
ROWS и COLS — это выводы Ардуино, к которым подключены контакты клавиатуры (строки и столбцы соответственно).
NUM_ROWS и NUM_COLS вычисляются автоматически на основе ROWS и COLS и обозначают количество строк и столбцов.
Последняя константа — это KEYS, двумерный массив, содержащий односимвольное представление нажатой клавиши.
Пришло время инициализировать клавиатуру:
Первое, что мы делаем, — запускаем наш последовательный порт, чтобы увидеть позже результаты.
Затем мы устанавливаем все строки как выходы с состоянием LOW (хотя на этом этапе не имеет значения, высокое или низкое состояние), а столбцы как входы, подтянутые к источнику питания (INPUT_PULLUP). Наконец, мы просто печатаем в последовательный порт, что клавиатура была успешно инициализирована, и отображаем раскладку клавиатуры.
В основном цикле программы мы просто вызываем функцию readKey(), которая возвращает символ, соответствующий нажатой клавише:
Итак, давайте посмотрим, что стоит за этой функцией:
Как видите ничего сложного. Мы перебираем все строки и на каждой итерации строки перебираем столбцы, считывая их состояния. Перед проверкой столбцов нам нужно убедиться, что только одна строка находится в состоянии LOW, а остальные — в состоянии HIGH. Цикл делает за нас всю работу.
На каждой итерации x является неизменным, а переменная row изменяется с 0 на NUM_ROWS — 1. По этой причине после завершения всех итераций этого цикла логическое условие x! = Row будет ложным только один раз (когда x равно row), поэтому только одна строка перейдет в состояние LOW.
Теперь мы можем приступить к проверке столбцов. Как видите, сразу после обнаружения нажатой кнопки мы выходим из функции, возвращая первую нажатую кнопку.
Вы можете задать вопрос, зачем писать свой код, если имеется готовая библиотека для поддержки таких клавиатур. На то есть две простые причины:
- Стоит знать, как реализовывается такой функционал.
- Заглянув внутрь готовой библиотеки, мы можем увидеть, что есть много кода, который мы, вероятно, никогда не будем использовать — наш код будет занимать меньше места, что очень ценно при программировании микроконтроллеров.