Ничего не найдено :(
    В гостях у Самоделкина! » С сайтов » Спец » 64-клавишная матричная клавиатура для работы с Arduino

    64-клавишная матричная клавиатура для работы с Arduino


    Мастер-самодельщик работает над проектом, который будет иметь встроенную клавиатуру и здесь есть проблема: как включить клавиатуру в прототип платы разработки? В проекте нельзя использовать USB-клавиатуру или существующую клавиатуру на базе Arduino, потому что клавиатура в реальном проекте подключена напрямую к микроконтроллеру, который обрабатывает все другие функции. Для решения проблемы мастер разработал 64-клавишную матрицу клавиатуры для прототипирования печатной платы.

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

    Мастер включил подробный код с комментариями. На клавиатуре 64 клавиши, включая модификаторы для shift, caps, ctrl, alt, fn и «special». Также есть шесть дополнительных клавиш, которые можно использовать для чего угодно. Функции каждой отдельной клавиши могут быть определены индивидуально.

    Инструменты и материалы:
    -Тактильная кнопка мгновенного действия 6x6x5 мм - 64 шт;
    -Диод 1N4148 - 64 шт;
    -Штыревой разъем;
    -Микросхема 74HC595;
    -Перемычки;
    -Макетная плата;
    -Arduino Uno;

    Шаг первый: принцип работы матрицы клавиатуры
    На этой клавиатуре 64 клавиши. Если бы мы подключили каждую из этих кнопок напрямую к плате разработки, нам потребовалось бы 64 контакта ввода-вывода. Это много выводов и больше, чем доступно на большинстве плат. Чтобы уменьшить количество разъемов до разумного числа, можно использовать матрицу клавиатуры, для которой требуется только количество выводов, равное квадратному корню (с округлением в большую сторону) из числа клавиш.

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

    Поскольку устройство работает с микроконтроллером, «активировать» означает установить для этой строки значение LOW или HIGH. В этом случае мы устанавливаем для строки значение LOW, потому что используем встроенные подтягивающие резисторы микроконтроллера на входных контактах столбцов. Без подтягивающего резистора вывод будет реагировать непредсказуемо, и будут регистрироваться ложные нажатия кнопок.

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

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

    Матрица клавиатуры требует количества контактов, равного квадратному корню из числа клавиш, но в данной конструкции клавиатуры всего 11 контактов (а должно быть 16). Контактов 11 потому что в конструкции используется сдвиговый регистр 74HC595. Этот регистр позволяет использовать только три контакта ввода / вывода Arduino для управления до 8-ми выходных контактов. Эти три контакта позволяют отправить байт (восемь бит) в регистр сдвига, который устанавливает для своих восьми выходных контактов значение HIGH или LOW. Используя регистр сдвига для выводов выходной строки, мы экономим 5 полных выводов ввода / вывода.

    Можно использовать регистр сдвига и для входных контактов, но здесь нужен другой тип регистра. Такой детали у мастера не было в наличии. К тому же использование сдвигового регистра для ввода также усложняет чтение столбцов и может вызвать проблемы с дребезгом клавиш.
    schematic.pdf

    64-клавишная матричная клавиатура для работы с Arduino

    Шаг второй: дизайн печатной платы
    Теперь, когда есть понимание работы клавиатуры, мастер разрабатывает печатную плату в KiCAD. Он просто поместил символ кнопки и символ диода, затем скопировал и вставил их, пока не получил сетку из 64 ключей. Затем я добавил два символа разъемов 1x8: один для строк и один для столбцов. Одна сторона кнопок была соединена в столбцы, а другая сторона кнопок была соединена в ряды.

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

    Обращаем особое внимание на номера контактов. У KiCAD есть проблема, когда номера выводов условного обозначения диода не совпадают с номерами выводов посадочного места. Это приводит к тому, что диоды находятся в обратном порядке, что является серьезной проблемой, учитывая их полярность. Чтобы решить эту проблему мастеру пришлось создать специальную посадочную площадку для диода с зеркальными местами контактов.

    Создав схему и назначив символы, мастер перешел к разводке печатной платы. Контур платы был создан в Autodesk Fusion 360, экспортирован как DXF, а затем импортирован в KiCAD на слое Edge Cuts. Большая часть работы после этого заключалась в простом расположении кнопок так, чтобы их расположение было похоже на обычную клавиатуру.

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



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

    Шаг четвертый: подключение клавиатуры к Arduino
    Подключение выглядит сложно, но на самом деле все довольно просто.
    Восемь перемычек идут от контакта столбца прямо к следующим контактам Arduino:
    Column 1 > A0
    Column 2 > A1
    Column 3 > A2
    Column 4 > A3
    Column 5 > A4
    Column 6 > A5
    Column 7 > 5
    Column 8 > 6
    Затем устанавливаем сдвиговый регистр 74HC595 на макетную плату. Точка указывает на контакт 1. Регистр сдвига имеет два контакта, подключенных к 5 В, и два контакта, подключенных к земле.

    Для подключения сдвигового регистра к Arduino нужно всего три провода:
    Shift (Clock) 11 > 4
    Shift (Latch) 12 > 3
    Shift (Data) 14 > 2
    По какой-то глупой причине выходные контакты сдвигового регистра расположены нелогично. Обратите особое внимание на схему распиновки сдвигового регистра при подключении их к выводам.
    Row 1 > Shift (Q0) 15
    Row 2 > Shift (Q1) 1
    Row 3 > Shift (Q2) 2
    Row 4 > Shift (Q3) 3
    Row 5 > Shift (Q4) 4
    Row 6 > Shift (Q5) 5
    Shift 7 > Shift (Q6) 6
    Shift 8 > Shift (Q7) 7
    К контактам Arduino 0 и 1 ничего не подключается. Эти контакты используются для последовательного порта и вызывают конфликты.



    Шаг пятый: прошивка
    В статье приводится два кода. Первый старый, второй доработанный с учетом недостатков. Вводная часть работает для обоих кодов.
    Все в коде имеет подробные комментарии. В основном, контакты настраиваются как входы и выходы. Основной цикл просто содержит функцию таймера. Каждые 5 мс он вызывает функцию сканирования клавиатуры. Эта функция вызывает отдельную функцию для установки регистра сдвига перед проверкой каждого столбца. Нажатые клавиши выводят свое значение в Serial.

    Если вы хотите изменить то, что печатается при нажатии клавиши, просто измените Serial.print ("_"); в операторе if, соответствующем условию. Например, вы можете установить, что будет печататься, когда вы удерживаете FN и нажимаете N. То же самое верно для любой другой клавиши с каждым модификатором.

    Многие ключи вообще ничего не делают в этом коде, потому что он просто печатает в Serial. Это означает, что клавиша Backspace не действует, потому что вы не можете удалить из последовательного монитора - эти данные уже получены. Однако вы можете изменить это если хотите.
    Эта клавиатура предназначена для создания прототипов более сложных проектов. Вот почему легко изменить ее функциональность. Если, например, вы хотите распечатать набранный текст на OLED-экране, вы можете просто заменить каждый Serial.print ( на display.print ( или все, что требуется для вашего конкретного дисплея). Инструмент Replace All в Arduino IDE отлично подходит для замены всех этих значений одним быстрым шагом.

    Новый код полностью переписан и работает лучше, чем исходный код. В основном это было сделано для решения проблемы с алгоритмом, который не позволял вводить символы при каждом нажатии клавиши. Исходный код проверял, чтобы конкретная клавиша была нажата не последней . Это вызывало проблему, если удерживались 2 или более клавиши, что приводило к вводу чего-то вроде "fgfgfgfgfgfgfgfgfgfg". Это также не позволяло вводить одну и ту же клавишу снова и снова очень быстро, например, когда вы набираете две буквы m в слове "bummer.".
    Новый код решает обе эти проблемы. Вместо того, чтобы отслеживать последнюю нажатую клавишу, устройство проверяет состояние всей клавиатуры и сравнивает его со всем состоянием клавиатуры в последнем цикле. Это означает, что цикл может выполняться намного быстрее, и можно очень быстро вводить один и тот же ключ снова и снова. Производительность значительно улучшена. Все символы также находятся в массивах вверху, поэтому можно легко их найти и изменить. Для каждого модификатора есть независимые массивы. Код также намного короче.
    Единственным недостатком этого нового кода является то, что он использует больше динамической памяти, хотя и использует значительно меньше места для программы. На Arduino Uno теперь используется: 3532 байта (10%) пространства для хранения программ и 605 байтов (29%) динамической памяти.

    В качестве дополнительного бонуса этот код также хорошо работает на быстрых микроконтроллерах, таких как ARM Cortex-M4. Интервальный таймер для проверки клавиатуры находится в микросекундах, поэтому он будет работать одинаково на любой плате. Также можно легко настроить частоту проверки клавиатуры. По умолчанию запускается один цикл каждые 500 микросекунд. Для проверки клавиатуры требуется 8 циклов, что в общей сложности составляет 4000 микросекунд (4 миллисекунды или 250 раз в секунду).
    ProtoKeyboardV1.1-Shifted.ino (старый код)
    ProtoKeyboardV1-Bits.ino (новый код)

    Источник (Source)
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
    Подборки: клавиатура

    Карманная метеостанция - температура + влажность

    Устройство для подсчета количества находящихся в помещении людей

    10
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    8
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    9
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 9.0 из 10 (голосов: 1 / История оценок)

    Добавить комментарий

    1 комментарий
    Korolev
    В проекте нельзя использовать USB-клавиатуру или существующую клавиатуру на базе Arduino, потому что клавиатура в реальном проекте подключена напрямую к микроконтроллеру, который обрабатывает все другие функции.
    Любопытно, а вариант использования любой готовой клавиатуры, да хоть ноутбучной, используя шины плёночной матрицы, до контроллера, не рассматривался? scratch 

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии