usb клавиатура на arduino это реально?

strobe
Offline
Зарегистрирован: 01.11.2011

Здравствуйте.

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

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

1) представлятся клавиатурой т.е умел давать команды ОС о нажатии стандартных клавиш (в том числе модификаторов).

2) двигать курсор (эмулировать работу мыши) одновременно с нажатиями клавиатуры. Для примера например могбы послать что то вроде такого: на клавиатуре зажат Alt + перемешение мыши.

В общем мне хотелось бы узнать насколько сложно на базе arduino сделать подобное устройство? нужен ли для этого usb host (на плате или USB Host Shield) - т.е хардварно подходит arduino для такого проекта или не очень?

Я так понимаю тут полюбому нужно будет писать драйвер HID устройства.

Я прочитал, что вроде как стандартные платы общаются хоть и через usb но по серийному порту - возможно этого достаточно уже чтобы написать драйвер который мапит сигналы от платы на клавиатуру?

Еще где то натыкался что в MEGA варинате есть второй контроллер который отвечает за usb и его можно прошить чтобы устройство представлялось клавиатурой или мышью - отсюда вопрос если нужно и то и то это уже сильно сложнее?

 

 

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

>представлятся клавиатурой т.е умел давать команды ОС о нажатии стандартных клавиш

Да возможно. 

>на клавиатуре зажат Alt + перемешение мыши

Получается что вам нужно по USB представится сразу двумя устройствами. Без глубоко вникания в протоколы USB, "конечные точки", это вряд ли получится (если вообще возможно). Как вариант - цепануть к ардуине два дополнительных Atmega8U. Один будет представлять ее систему "как клавиатуру", а второй "как мышку". Или попытаться предствиться USB хабом и эмулировать "за ним" два различных устройства.

>нужен ли для этого usb host

Нет. Он вам понадобится если вы захотите обычные usb мышку и клавиатуру подключать к ардуине.

>его можно прошить чтобы устройство представлялось клавиатурой или мышью

Да. Пробегало такое на форумах. Делают. Но это "грязнохак", пока, официально ардуина не поддерживает перепрограмливание этого контроллера. Это в "планах на будущие" (как я понимаю, для этого и перешли на него, вместо ft232).

К тому же, как я понимаю, в момент этой перешивки вы потеряете возможность заливать в него скетчи из arudinoIDE. Больше он не будет "ком-портом" и еще нужно, заранее, решить вопрос "как вы его в первоначальное" состояние возвращать будете.

Есть еще вариант "программно" реализовать USB, но тогда "ардуинка будет достаточно сильно им занята". Вот напрмер тут "клавиатуру" делают www.practicalarduino.com/projects/virtual-usb-keyboard, хотя если задача просто "сделать клавиатуру с кастомными кнопками", то этого достаточно будет.

Третий подход: Если вы не будете "раздавать свое устройство другим", то в ардуине вообще ничего не менять. пусть пишет в обычный serial, а уж на компе сделать программулину, которая, в зависимости от того что прислала ардуины, эмулирует нажатие клавишь, мыши, запускает/стопает программы и т.п. Если свою программину писать в лом, то можно посмотреть на что-то типа AutoIt, разобраться как там читать команды из ком-порта, и уже "рулить компом" она умеет на славу :)

 

 

 

 

strobe
Offline
Зарегистрирован: 01.11.2011

 Большое спасибо!

 

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

Собственно вариант со своей прогой мне вполне нравится, но честно говоря я пока не представляю каким образом приходит сигнал 

по serial порту и это меня беспокойт, по той причине, что если добиватся одновременной работы клавиатуры с мышью для меня будет

сильно важна синхронность действий и быстрый отклик мыши.

Собственно программа минимум это просто кастомная клавиатура , максимум это клавиатура совмещенная с сенсорами (тачскрин, слайдеры и тп) позволяющая управлять хитрым десктопным софтом.

Также я где-то видел проект который использовал готовую программу (кажется MouseTraсk) для перемещения курсора посредством сигналов с arduino, думаю там принцип аналогичный.

И еще, пожалуйста подскажите, какую плату лучше взять для начала (если не заниматся перепрошивкой встроенной Atmega8U)
китайскую Arduino Pro Mini или UNO?

И напоследок, а нельзя ли не что подобное сделать на базе TI LaunchPad(MSP-EXP430G2)? уж больно он доступен (в магазинах в наличии и ценник приятный) 

 а совместно с Capacitive Touch BoosterPack (430BOOST-SENSE1) уже есть и готовый тачпад (собственно наверное можно тк один из примеров BoosterPack это запуск приложений в винде по нажатию кнопок).

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 >но честно говоря я пока не представляю каким образом приходит сигнал

Ну что вы на ардуине в Serial.write/print вывели, то на компе через serial.read и прочитается. Пошлете "строку" прийдет строка. Пошлете байт - прийдет байт. Какой смысл вкладыать в эти команды - сугубо ваше дело. Главное что-бы этот "смысл" совпадал и со стороны ардуины и со стороны компа.

>сильно важна синхронность действий

ну синхронность то будет делатся на стороне компа. Например ардуина сообщила "тут на 3-тем пине сигнал появлися", а уж "что это означает", реакцию  "нажать alt на клавиатуре и резко дернуть мышью" это уже ваша прога на компе делает.

> быстрый отклик мыши

Ну тут уж сами считайте. С какой частотой ваши тачпады данные будут гнать и в каком объеме. Serial он действительно не шибко быстрый. 115200 максимум. С другой стороны "быстрая реакция" это тоже индивидуальное понятие. Некоторые геймеры разницу между проводной и радио-мышкой по скорости реакции улавливают. Миллесекунды задержки чувствуют. Если там частоты очень большие будет, то может даже сама ардуину не будет успевать обрабатывать.

>Arduino Pro Mini или UNO

UNO конечно. У Pro же нет USB. Как минимум кабель-конвертер докупать нужно будет. Что-бы хотя-бы скетч в нее влить. Если выбирать то скорее между UNO и Nano. Uno - если собираетесь использовать шилды и собирать "бутерброды", nano если работать на беспаечной макетке или использовать в конечном устройстве.

> а нельзя ли не что подобное сделать на базе

Да можно, конечно. Если все действительно упрется в "скорость", то наверное даже нужно. Вот только к ардуино это уже не будет иметь никакого отношения. Ни по железу, ни по софту. Там с C и ASM разбиратся нужно будет. В принципе тоже ничего страшного. Большинство с микроконтроллерами, на самом деле, работает именно так.

Вот кстати ссылочка, где тоучпад к ардуине подключают www.instructables.com/id/The-5-Karduinoss-pad

strobe
Offline
Зарегистрирован: 01.11.2011

 > Как минимум кабель-конвертер докупать нужно будет.

просто по странному стечению обстоятельств у меня уже имеется USB>TTL (пришлось им воспользоватся для реанимации HDD)

Ну в целом еще раз вам большое спасибо! для себя многое уяснил. Видимо закажу UNO + какойнибуть startedkit, а пока буду ждать попробую поизучать TI LaunchPad

Maverik
Offline
Зарегистрирован: 12.09.2012

К тому же, как я понимаю, в момент этой перешивки вы потеряете возможность заливать в него скетчи из arudinoIDE. Больше он не будет "ком-портом" и еще нужно, заранее, решить вопрос "как вы его в первоначальное" состояние возвращать будете.

asp-программатором ?