Qwerty клавиатура для ардуино

Ардуино и клавиатуры (полный гайд)

Привет, жители Хабра! Сегодня я решил сделать полный гайд по клавиатурам для Arduino.
Внимание! Статья ориентирована преимущественно на новичков!

Во многих проектах появляется необходимость создания возможности ввода данных пользователем. Если вам нужно реализовать большое количество кнопок(относительно), то подключать их по-отдельности становится и долго, и нерационально. Для этой цели лучше выбрать какую-нибудь клавиатуру, но как и к любому выбору, к нему нужно подходить осознано. Какие же бывают виды клавиатур и как с ними взаимодействовать?

Глобально, все модули данного типа можно поделить на две большие категории: матричные и аналоговые.

Матричные клавиатуры

Самый простой, дешёвый и популярный вид клавиатур. Он относительно прост в изготовлении и заполняет собой большую часть рынка модулей ардуино. Выглядит чаще всего следующим образом:

Принцип работы

Понять как устроена данная клавиатура можно изучив следующую схему:

Чтобы понять какая кнопка была нажата, нужно подавать сигнал на первые четыре контакта модуля и смотреть какой сигнал возвращается со второй. Но не стоит пугаться того, что вам придется писать алгоритмы обработки для восьми пинов вручную — в этом нам поможет готовая библиотека «keypad.h», благодаря которой нам не придется изобретать велосипед.

Подключение к плате

Подключение собственно модуля

В этой статье я воспользуюсь следующей схемой подключения:

У Вас наверное возникает вопрос: «Почему я решил использовать пины со второго по девятый, пропустив нулевой и первый?» — дело в том, что некоторые модули, используют их в качестве каналов RX и TX для получения и передачи данных соответственно. К примеру, блютуз модуль. Поэтому с учётом возможного дополнения проекта другими модулями, было решено оставить данные пины подключения свободными.

Написание скетча

Для начала, для того, чтобы получить возможность использовать библиотеку для подключения клавиатур в коде, нужно установить её на ваше устройство. Это можно сделать следующим образом: в самой Arduino IDE нажимаем Скетч -> Подключить библиотеку -> Управлять библиотеками… либо используем комбинацию горячих клавиш «Ctrl + Shift + I». В поиске вбиваем «keypad.h»(без скобочек) и нажимаем «Установка».

После установки приступаем к написанию скетча:

Плюсы и минусы

Минусы

Плюсы

Аналоговые клавиатуры

Принцип работы

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

Подключение к плате

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

Итак: аналоговый выход клавиатуры соединяем с любым аналоговым пином на плате, контакт VCC на плате соединяем с 3.3V(не смотрите на надпись на самой клавиатуре, которая гласит о 5V — это ошибка), а GND на плате с GND на модуле. Вы можете воспользоватся следующей схемой:

Написания скетча

Здесь не нужно использовать сторонние библиотеки, т.к. всё предельно просто и понятно. Вот собственно и сам код, который считывает нажатую кнопку и выводит её номер, от 1 до 16(слева на право, с верху в низ) либо 0 если ничего не нажато, в монитор порта.

Плюсы и минусы

Плюсы

Минусы

Итоги

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

На этом у меня всё. Оставляйте свои вопросы в комментариях, пишите своё мнение и встретимся на просторах Хабра!

Источник

Qwerty клавиатура для ардуино

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

В этом уроке рассмотрим, как настроить клавиатуру на Arduino . Сначала узнаем, как Arduino обнаруживает нажатия клавиш, а затем, как найти распиновку любой клавиатуры. В качестве простого примера посмотрим, как выводить нажатия клавиш на мониторе порта и на ЖК-дисплее. Наконец, узнаем, как активировать реле 5 В, когда пароль введен правильно.

В этой статье будем использовать матричную мембранную клавиатуру 4X4 (также есть код и схемы соединений для матричных клавиатур 3X4) . Мембранные клавиатуры тонкие и имеют клейкую подложку, так что вы можете прикрепить их к большинству плоских поверхностей. Вы также можете приобрести телефонные клавиатуры, которые имеют более толстые кнопки, если вам нравится этот стиль больше. Даже клавиатуры от старых разобранных телефонов будут работать с Arduino.

КАК РАБОТАЮТ КЛАВИАТУРЫ

Кнопки на клавиатуре расположены в строках и столбцах. Клавиатура 3X4 имеет 4 строки и 3 столбца, а клавиатура 4X4 имеет 4 строки и 4 столбца:

Под каждым ключом находится мембранный переключатель. Каждый переключатель в ряду соединен с другими переключателями в ряду с помощью токопроводящего слоя. Каждый переключатель в столбце подключен одинаково — одна сторона переключателя соединена со всеми другими переключателями в этом столбце с помощью проводящей трассы. Каждая строка и столбец выводятся на один контакт, всего 8 контактов на клавиатуре 4X4:

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

Схема для клавиатуры 4X4 показывает, как соединяются строки и столбцы:

Arduino определяет, какая кнопка нажата, определяя вывод строки и столбца, который подключен к кнопке.

Это происходит в четыре этапа:

1. Во-первых, когда ни одна из кнопок не нажата, все выводы столбца удерживаются на HIGH (1) уровне, а все выводы строки — в LOW (0):

2. Когда кнопка нажата, вывод столбца становится LOW (0) уровнем, поскольку HIGH (1) ток из столбца течет на вывод LOW (0) строки:

3. Теперь Arduino знает, в каком столбце находится кнопка и ему остается найти строку, в которой находится кнопка. Он делает это, переключая каждый из выводов строки в HIGH уровень и одновременно читая все контакты столбца, чтобы определить, какой вывод столбца возвращает HIGH:

4. Когда вывод столбца снова становится HIGH, Arduino определяет вывод строки, связанный с кнопкой:

Из диаграммы выше видно, что комбинация строки 2 и столбца 2 может означать только то, что нажата кнопка с цифрой 5.

ПОДКЛЮЧАЕМ КЛАВИАТУРУ К ARDUINO

Расположение выводов для большинства мембранных клавиатур будет выглядеть следующим образом:

Следуйте схемам ниже, чтобы подключить клавиатуру к Arduino Uno, в зависимости от того, какая у вас клавиатура 3X4 или 4X4:

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

Чтобы все это добро у нас заработало нам понадобится установить библиотеку Keypad от Mark Stanley и Alexander Brevig. Эта библиотека отвечает за настройку выводов и опрос различных столбцов и строк. Чтобы установить библиотеку клавиатуры, выберите «Управление библиотеками» и выполните поиск « keypad ». Нажмите на библиотеку, затем нажмите установить.

После установки библиотеки клавиатур вы можете загрузить этот код в Arduino, если вы используете клавиатуру 4X4:

const byte ROWS = 4;
const byte COLS = 4;

byte rowPins[ROWS] = <9, 8, 7, 6>;
byte colPins[COLS] = <5, 4, 3, 2>;

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() <
Serial.begin(9600);
>

void loop() <
char customKey = customKeypad.getKey();

if (customKey) <
Serial.println(customKey);
>
>

Или этот код е сли вы используете клавиатуру 3X4:

const byte ROWS = 4;
const byte COLS = 3;

byte rowPins[ROWS] = <9, 8, 7, 6>;
byte colPins[COLS] = <5, 4, 3>;

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() <
Serial.begin(9600);
>

void loop() <
char customKey = customKeypad.getKey();

if (customKey) <
Serial.println(customKey);
>
>

Строки 3 и 4 в приведенном выше коде устанавливают количество строк и столбцов на клавиатуре.

Строки 6-11 определяют, какие символы печатаются при нажатии определенной кнопки на клавиатуре. Символы расположены так же, как они отображаются на клавиатуре. Если ваша клавиатура имеет другую раскладку, вы можете определить, какие символы будут печататься при нажатии кнопки. Например, скажем, у вашей клавиатуры есть столбец букв слева, а не справа. Вы просто изменили бы это на это:

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

ИСПОЛЬЗОВАНИЕ ЖК-ДИСПЛЕЯ С КЛАВИАТУРОЙ

Теперь посмотрим, как выводить нажатия клавиш на ЖК-дисплее. Клавиатуры 4X4 используют 8 контактов, а клавиатуры 3X4 используют 7 контактов. Это занимает много пинов, поэтому мы будем использовать ЖК-дисплей с поддержкой I2C. В этом случае для подключения к Arduino потребуется всего 4 провода.

Чтобы использовать ЖК-дисплей с поддержкой I2C на Arduino, необходимо установить библиотеку LiquidCrystal I2C от Marco Schwartz. Эта библиотека хороша тем, что включает в себя большинство функций, доступных в стандартной библиотеке LiquidCrystal. Чтобы установить его, загрузите ZIP-файл ниже, затем перейдите в Sketch> Включить библиотеку> Добавить ZIP-библиотеку:

Библиотека Wire необходима для добавления поддержки связи I2C. Он поставляется в комплекте с Arduino IDE, поэтому его не нужно устанавливать. Но если по какой-либо причине он не установлен в вашей системе, перейдите в Управление библиотеками и найдите «wire», чтобы установить его.

После установки библиотек подключите контакты заземления и Vcc на ЖК-дисплее к Arduino, затем подключите выводы SDA и SCL на ЖК-дисплее в соответствии с таблицей ниже для различных плат Arduino:

Затем подключите клавиатуру к Arduino. Это должно выглядеть примерно так (для Arduino Uno):

Как только все подключится, загрузите этот код в Arduino:

#include
#include

#include

const byte ROWS = 4;
const byte COLS = 4;

byte rowPins[ROWS] = <9, 8, 7, 6>;
byte colPins[COLS] = <5, 4, 3, 2>;

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

LiquidCrystal_I2C lcd(0x21, 16, 2);

void setup() <
lcd.backlight();
lcd.init();
>

void loop() <
char customKey = customKeypad.getKey();
if (customKey) <
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(customKey);
>
>

Вам необходимо добавить адрес I2C вашего ЖК-дисплея в строке 20:

LiquidCrystal_I2C lcd (0x21, 16, 2);

I2C-адрес моего ЖК-дисплея — 0x21, но ваш, может быть другим. Адрес I2C вашего ЖК-дисплея должен быть указан в техническом описании , но если нет, вы можете найти его, запустив этот скетч I2C_Scanner .

ИСПОЛЬЗОВАНИЕ ПАРОЛЯ ДЛЯ АКТИВАЦИИ РЕЛЕ

Одним из наиболее полезных приложений клавиатуры является ее использование для ввода пароля. Вы можете установить пароль и заставить Arduino активировать реле или другой модуль, если пароль правильный. Следующий код активирует реле 5 В, если пароль введен правильно:

#include
#include

#include

#define Password_Length 8

int signalPin = 12;

char Data[Password_Length];
char Master[Password_Length] = «123A456»;
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

const byte ROWS = 4;
const byte COLS = 4;

byte rowPins[ROWS] = <9, 8, 7, 6>;
byte colPins[COLS] = <5, 4, 3, 2>;

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

LiquidCrystal_I2C lcd(0x21, 16, 2);

void setup() <
lcd.init();
lcd.backlight();
pinMode(signalPin, OUTPUT);
>

lcd.setCursor(0,0);
lcd.print(«Enter Password:»);

customKey = customKeypad.getKey();
if (customKey) <
Data[data_count] = customKey;
lcd.setCursor(data_count,1);
lcd.print(Data[data_count]);
data_count++;
>

if(data_count == Password_Length-1) <
lcd.clear();

if(!strcmp(Data, Master)) <
lcd.print(«Correct»);
digitalWrite(signalPin, HIGH);
delay(5000);
digitalWrite(signalPin, LOW);
>
else <
lcd.print(«Incorrect»);
delay(1000);
>

void clearData() <
while(data_count !=0) <
Data[data_count—] = 0;
>
return;
>

Вы можете изменить пароль в строке 10, заменив текст 123A456 своим собственным паролем:

char Master [Password_Length] = «123A456»;

Длина пароля должна быть установлена ​​в строке 5:

#define Password_Length 8

Пароль в приведенном выше примере имеет длину всего 7 символов, но длина пароля на самом деле больше, чем 7, поскольку в конце строки добавлен нулевой символ. Например, если ваш пароль длиной 5 символов, вы должны ввести 6 для длины пароля.

Выходной контакт, который активирует реле, определяется в строке 7:

int signalPin = 12;

Схема подключения к Arduino выглядит так:

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

Источник

Adblock
detector