Arduino с несколькими кнопками – будет ли проблемой питание?
У меня есть запасной Arduino Uno, который, как я решил, можно попытаться превратить в игровой контроллер. Первая очевидная проблема, которая сразу же возникла, заключалась в том, что на плате недостаточно цифровых входных контактов, но я думаю, что смогу обойти это, используя аналоговые контакты с соответствующими внешними резисторами (действительно ли это возможно?).
Еще одна проблема, более серьезная, заключается в том, что я не уверен, как мне нужно будет подключать кнопки микропереключателя к плате. Предполагая, что они замыкают цепь при нажатии (SPST), я мог бы просто подключить один контакт к входному контакту, установить режим INPUT_PULLUP
, а другой подключить к земле. Однако, поскольку я мало знаю о том, как работают такие схемы, у меня сразу возникают сомнения по поводу двух вещей. Учитывая, что плата будет использоваться в качестве контроллера, о внешнем источнике питания не может быть и речи, и я бы хотел полагаться только на питание через USB. Поскольку я хочу использовать большое количество кнопок (до пятнадцати), из осторожности я беспокоюсь, что замыкание на землю такого количества входных контактов может привести к перегрузке... регулятора, я думаю?
Итак, мой вопрос заключается в следующем: безопасно ли использовать несколько, потенциально одновременно нажимаемых, кнопок, подключенных к входным контактам на плате Arduino Uno, питаемой исключительно от порта USB? Кроме того, чтобы внести ясность: нормально ли подключать их все к общей земле на плате?
@yakcyll, 👍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
Да, подключать несколько кнопок к земле безопасно. Подтягивающие резисторы имеют довольно высокое сопротивление — около 10 кОм, и из закона Ома мы знаем, что
I = V / R = 5 V / 10k = 0.5 mA
на кнопку. Мощность USB составляет около 500 мА.
Добро пожаловать в StackExchange.
Транзистор, похоже, этот SE, к сожалению, не поддерживает математические символы. ;), @Nick Gammon
- Первая настройка - отказ в доступе к usb-порту - ubuntu 14.04
- Как переключить светодиод при нажатии кнопки?
- Определение того, была ли нажата и отпущена кнопка
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Может ли Arduino взаимодействовать с USB-устройствами без USB-хост-экрана?
- Нажать клавишу Windows, используя «keyboard.press();»
- Если USB дает 5 В, как Arduino может подавать 5 В на контакт 5 В? (И еще вопрос)
- Устранение дребезга кнопки с помощью прерывания
Это игра для 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