Реклама ⓘ
Главная » Компьютерная электроника
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

USB педаль или однокнопочная клавиатура для ПК

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

Для устройства можно использовать любой микроконтроллер AVR, совместимый с библиотекой V-USB. Эта библиотека программно реализует USB 1.1, чего более чем достаточно для клавиатур, геймпадов, MIDI контроллеров и прочих низкоскоростных устройств. Я же решил не мучаться с изготовлением платы, а использовать Digispark (цена на AliExpress 1-2$). Это отладочная плата, построенная на микроконтроллере ATtiny85 с прошивкой через USB порт. Забегая вперед скажу, что код легко помещается и в ATTiny25, но вот под bootloader уже места не остается...

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

Схема устройства получилась ну очень простой (к Digispark добавлены только кнопка и резистор)... У некоторых читателей наверное сразу возник вопрос про дребезг контактов, ведь кнопка силовая. Она и на старте эксплуатации будет дико дребезжать. В схеме же аппаратная защита отсутствует. Стандартное решение, которое я называю Arduino Style, предлагает ввести задержку. Однако тут вступает в игру программная реализация USB, которая отжирает очень много процессорного времени. Пока микроконтроллер посылает компьютеру сообщение, кнопка перестает дребезжать, что продемонстрировано на осциллограмме. На канале 1 висит сама кнопка, на канале 2 выход микроконтроллера, где логическая 1 устанавливается при детектировании изменения состояния кнопки, а логический 0 - готовность обрабатывать следующее срабатывание.

Сразу уточню про софт. Это альтернативное ПО для кучи вариантов железа. Называется Sigrok. Я же его использую в паре с Hantek 6022BL (причем как в Windows, так и в Linux).

Если вы решитесь на аппаратную защиту, то схема стандартная. Включает в себя пару резисторов, конденсатор и триггер Шмитта (74HC14AD). Чтобы все поместилось в корпусе педали, можно взять микросхему в миниатюрном корпусе SOT-23-5 со всего одним триггером (SN74LVC1G14).

Теперь про программное обеспечение. Сборка осуществляется командой make. Дополнительно в Makefile добавлена цель upload, которая вызывает утилиту micronucleus. Утилита заливает прошивку в микроконтроллер через bootloader, который заранее загружается в него через программатор. В официальном репозитории проекта имеется прошивка, фьюзы и сама утилита.

Для обновления ПО клавиатуры предусмотрена комбинация из пяти зажиганий индикатора CAPS LOCK подряд (нажатие на саму педаль сбрасывает счетчик), которая вызывает срабатывание watchdog, что и переводит устройство в bootloader.

Клавиатура передает компьютеру пакеты с состоянием клавиш. Состоит он из нескольких полей: модификатор (например SHIFT), зарезервированный байт и коды нажатых клавиш. Код 0 означает, что ничего не нажато. Файл usb_hid_keys.h содержит все возможные коды клавиш. В основном файле прошивки описаны две функции для формирования этих пакетов. Первая (buildReport) оперирует с сырыми данными. Полученные аргументы просто подставляются в свои места. Вторая (buildReportChar) чуть сложнее. Она работает с символами (правда только буквы), но имеет одно забавное свойство. Она передаст именно ту букву, которую хотели отправить. С учетом регистра. Если хотим передать символ 'a', то будет напечатан именно он вне зависимости от состояния CAPS LOCK. Если быть более точным, то функция при необходимости ещё "нажимает" клавишу SHIFT.

Отдельного пояснения требует следующий фрагмент кода.

usbDeviceDisconnect(); // enforce re-enumeration
wdt_reset();
_delay_ms(500);
usbDeviceConnect();

Данный код эмулирует физическое отключение устройства от порта USB. Компьютер определяет наличие устройство по подтяжке шин данных. Функции usbDeviceDisconnect и usbDeviceConnect прижимают данные выводы к логическому 0 и отпускают их. Если этого не сделать, то компьютер будет некорректно работать с устройством. Он будет думать, что у нему подключена плата в режиме bootloadera, но это уже не так. В результате невозможна ни перепрошивка, ни работа как клавиатуры.

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

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

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

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Кнопка1 В идеале, педальПоиск в магазине ОтронВ блокнот
Резистор
10 кОм
1 Для подтяжки входаПоиск в магазине ОтронВ блокнот
 
Отладочная плата Digispark1 Готовый вариантПоиск в магазине ОтронВ блокнот
 
МК AVR 8-бит
ATtiny85
1 Для самостоятельной сборкиПоиск в магазине ОтронВ блокнот
Резистор
68 Ом
2 Для самостоятельной сборкиПоиск в магазине ОтронВ блокнот
Стабилитрон3.6 В2 Для самостоятельной сборкиПоиск в магазине ОтронВ блокнот
Резистор
10 кОм
1 Для самостоятельной сборкиПоиск в магазине ОтронВ блокнот
Резистор
1.5 кОм
1 Для самостоятельной сборкиПоиск в магазине ОтронВ блокнот
Предохранитель0.1 А1 Можно исключитьПоиск в магазине ОтронВ блокнот
 
Триггер ШмиттаSN74LVC1G141 Или аналог (74HC14AD)Поиск в магазине ОтронВ блокнот
Конденсатор100 нФ1 Поиск в магазине ОтронВ блокнот
Резистор
10 кОм
1 Поиск в магазине ОтронВ блокнот
Резистор
47 Ом
1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (6) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Kamikadza #
Молодец! Все-таки написал статью!
Ответить
0
andro #
А кварц не нужен?
Ответить
0

[Автор]
walhi #
В схеме digispark он не используется. Работает на встроенном генераторе на 16.5 МГц. Стабильно.
Ответить
0
Вадим #
Добры день. А подскажите возможно ли код перенести для прошивки через Arduino? Нужна педаль - пробел.
С таким кодом

#define button_pin 2
#include "DigiKeyboard.h"
void setup() {
pinMode(button_pin, INPUT);
}

void loop()

{
if (!digitalRead(button_pin)) {delay(50); if (!digitalRead(button_pin)) {
DigiKeyboard.sendKeyStroke(KEY_SPACE);
while (!digitalRead(button_pin)) delay(50);
}}
}

Все работает до перезагрузки ПК, после только передернуть шнур нужно, что бы опять работало. Как можно побороть? Плата digispark, подтягивающий резистор и педаль.
Ответить
0

[Автор]
walhi #
Увы, не юзаю кодовую базу ардуины. При перезагрузке ПК он точно не в bootloader-е зависает?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

USB-реле (2 канала)
USB-реле (2 канала)
Конструктор УНЧ 60 Вт на LM3886 Ручной фен 450 Вт с регулировкой температуры
вверх