Arduino с несколькими кнопками – будет ли проблемой питание?

У меня есть запасной Arduino Uno, который, как я решил, можно попытаться превратить в игровой контроллер. Первая очевидная проблема, которая сразу же возникла, заключалась в том, что на плате недостаточно цифровых входных контактов, но я думаю, что смогу обойти это, используя аналоговые контакты с соответствующими внешними резисторами (действительно ли это возможно?).

Еще одна проблема, более серьезная, заключается в том, что я не уверен, как мне нужно будет подключать кнопки микропереключателя к плате. Предполагая, что они замыкают цепь при нажатии (SPST), я мог бы просто подключить один контакт к входному контакту, установить режим INPUT_PULLUP, а другой подключить к земле. Однако, поскольку я мало знаю о том, как работают такие схемы, у меня сразу возникают сомнения по поводу двух вещей. Учитывая, что плата будет использоваться в качестве контроллера, о внешнем источнике питания не может быть и речи, и я бы хотел полагаться только на питание через USB. Поскольку я хочу использовать большое количество кнопок (до пятнадцати), из осторожности я беспокоюсь, что замыкание на землю такого количества входных контактов может привести к перегрузке... регулятора, я думаю?

Итак, мой вопрос заключается в следующем: безопасно ли использовать несколько, потенциально одновременно нажимаемых, кнопок, подключенных к входным контактам на плате Arduino Uno, питаемой исключительно от порта USB? Кроме того, чтобы внести ясность: нормально ли подключать их все к общей земле на плате?

, 👍2

Обсуждение

Это игра для Arduino или вы планируете управлять чем-то другим, например PlayStation?, @Nick Gammon

@Ник, я бы хотел, чтобы это был «универсальный» USB-контроллер. Я нашел проект UnoJoy, который должен охватить основы USB-коммуникации в моем случае; Я выясню, смогу ли я внести в него дальнейшие изменения, как только запущу его. Кроме того, спасибо за перенос вопроса, изначально я не был уверен, к какому домену он относится., @yakcyll

В этом случае я поддерживаю предложение Игнасио рассмотреть возможность использования другого Arduino, например Leonardo. Я использую один из них для преобразования нажатий кнопок в шаблон для форумов, описанный [здесь](http://forum.arduino.cc/index.php?topic=112965.0)., @Nick Gammon

Вместо этого вы можете использовать V-USB (виртуальный USB), попробуйте поискать его., @Nick Gammon

@Ник, да, у Леонардо есть встроенная поддержка USB и больше контактов цифрового ввода! Поскольку у меня уже есть запасной Uno, я пока продолжу использовать этот, но обязательно рассмотрю возможность покупки Leo для будущих проектов подобного рода. Спасибо!, @yakcyll

недостаточно цифровых входных контактов и что? почему? как? Я имею в виду... У тебя 20 кеглей. Если для последовательной связи используются 2, у вас все равно останется 18 контактов. Соедините их в матрицу, и у вас получится 81 возможная кнопка. Разве для вашего контроллера недостаточно 81 кнопки? ;), @frarugi87

@ Frarugi87, если считать аналоговые контакты, то да, это 18! Однако, когда я впервые задал этот вопрос, я не был уверен, смогу ли я использовать для этой цели аналоговые контакты; Я думал, что на Uno у меня ограничено 12 цифровых контактов, отсюда и вопрос. Однако я не думал подключать их к матрице; придется выяснить, как это сделать, чтобы обеспечить максимальное количество одновременно нажимаемых кнопок, но спасибо большое за предложение!, @yakcyll

@yakcyll Ну, с помощью 12 контактов вы можете подключить до 36 кнопок. И все они могут быть нажаты одновременно (вам просто нужно использовать частоту сканирования большую, чем желаемая отзывчивость). В любом случае этого легко добиться, поскольку обычно вы хотите, чтобы кнопки реагировали в течение десятков (даже 50) миллисекунд, и вы можете сканировать их с частотой, более чем в 10 раз большей), @frarugi87


2 ответа


Лучший ответ:

2

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

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

Каждое подтягивание на AVR составляет от 20 до 50 кОм. Это означает, что потребление тока при нажатии всех 15 кнопок составляет не более около \$15 \cdot {5 \text{В} \более 20\text{k}\Omega} = 3,75\text{мА}\$. Этого недостаточно для USB-соединения.

Что касается использования аналоговых соединений, от A0 до A5 также имеется возможность цифрового GPIO, что означает, что вы должны обращаться с ними точно так же, как с цифровыми контактами (A6 и A7 не имеют цифрового GPIO, если вы не используете ATmegaXX8PB со специальным ядром).

А теперь плохие новости.

Arduino Uno основан на ATmega328P, который нет встроенной возможности USB. Он связывается с хостом через последовательное соединение через мост USB-UART. Если вы используете настоящий (или достаточно реальный) Uno, то этот мост — это ATmega16U2, который представляет собой MCU, который имеет встроенные возможности USB, поэтому его можно перепрограммировать для интерпретации последовательного потока от '328P и подключите USB-хост к хосту.

Но если это не так, вам нужно будет либо запустить на хосте какое-то программное обеспечение, которое преобразует последовательный поток в действия HID, либо вам придется запустить программный USB-стек на '328P, например V- USB, который позволит вам напрямую использовать низкоскоростной USB 1.1.

Я рекомендую посмотреть, сможете ли вы приобрести плату на базе Arduino или другую плату AVR с ATmegaXXU4, чтобы вы могли использовать Мышь и Клавиатуру напрямую, вместо того, чтобы использовать возиться с профилями HID и программным USB. Если это не ваше дело, конечно.

,

Игнасио, похоже, что этот SE, к сожалению, не поддерживает математические символы., @Nick Gammon

Да, моя плата должна быть совместима с Uno R3 и, по-видимому, имеет встроенный контроллер ATmega16U2 для управления связью по USB. Если я правильно вас понял, это означает, что я могу его запрограммировать или найти подходящую прошивку в другом месте, чтобы оно представляло себя как обычное HID-устройство, вместо того, чтобы писать для него специальную прошивку, верно?, @yakcyll

@yakcyll: Правильно, хотя кнопки все равно придется обрабатывать с помощью '328P., @Ignacio Vazquez-Abrams

@NickGammon: Он также не поддерживает CircuitLab. Иногда я удивляюсь, как нам вообще удается что-то сделать :P, @Ignacio Vazquez-Abrams

Я бы хотел, чтобы те, кто мигрирует, учли это. Я _создал_ схемы в редакторе вопросов EE, вырезал и вставил разметку сюда, и все работает. Однако я не знаю, будут ли удалены схемы, если нет записей об их использовании в EE. Кто-нибудь знает?, @Transistor


2

Да, подключать несколько кнопок к земле безопасно. Подтягивающие резисторы имеют довольно высокое сопротивление — около 10 кОм, и из закона Ома мы знаем, что

I = V / R = 5 V / 10k = 0.5 mA

на кнопку. Мощность USB составляет около 500 мА.

Добро пожаловать в StackExchange.

,

Транзистор, похоже, этот SE, к сожалению, не поддерживает математические символы. ;), @Nick Gammon