Ардуино как usb устройство

Обновлено: 06.07.2024

Добрый день
Имеется простая на вид задача, но я не могу ничего с ней сделать
Имеется Arduino DUE c двумя usb выходами.
Нужно:
1. Что бы при подключении к компьютеру через Native USB Port плата определялась не как COM-port, а как USB-устройство
2. В делфи принять на максимально возможной скорости данные. (Из-за этого DUE и выбрали). Нужно несколько тысяч чтений в секунду.

Скетч в ардуинке очень простой - пишет в SerialUSB миллисекунды.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Arduino Due и PCA9685
Подскажите, как заставить работать Arduino Due и контролером PCA9685. Использую вот эту.

Прошить мк SAM3X8E от Arduino DUE
Приветствую всех! Подскажите, пожалуйста, ведь правильно, что можно прошить (новый, купленный).

Принять на нулевой скорости?

Что говорит гугл:

Для СОМ-порта стандартными являются следующие скорости: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/с. Идти копать огороды и не лезть в программирование и МК.

Нет. Due нужен как раз чтоб не через ком-порт работать, и при этом скорость не будет ограничена обычными значениями скорости ком-порта.
Я вычитал, что инициализация нулем позволяет работать на максимальной скорости. Это стандартный код с сайта

Собственный USB порт (Native USB port) подключен к SAM3X. Это позволяет осуществлять последовательную связь (CDC) посредством USB. Таким образом обеспечивается подключение к монитору последовательной шины, или другим приложениям на вашем компьютере. Также это дает Due возможность эмулировать для присоединенного компьютера USB мышь или клавиатуру

Ну так Вы код пишите который предназначен для Serial (СOM порта).
Для работы с USB нужно наверное использовать другие либы, и вероятно писать свой драйвер для ПК.

Serial и SerialUSB разные вещи
с обычным Serial и портом для программирования никаких вопросов нет. Прекрасно все работает. Но медленно.

Ну так в чем конкретно вопрос если есть пример кода?

1. Что бы при подключении к компьютеру через Native USB Port плата определялась не как COM-port, а как USB-устройство
2. В делфи принять эти данные, отправленные через SerialUSB. Через Serial - приходят по ком-порту. Через SerialUSB - нет, с ним как-то по другому надо

В делфи принять эти данные, отправленные через SerialUSB.

Добавлено через 3 минуты
Хотя нет. По Вашей ссылке ниже код на Python и там используется обычное соединение по COM порту.

Для меня это странно так как если речь идет о USB обычно говорят о каком то классе HID устройства которое соответственно определяется и под который пишется драйвер. Но подчеркну что у меня нет должного уровня знаний.
Стоит брать руководство/протокол по USB и его изучать его.

1. Что бы при подключении к компьютеру через Native USB Port плата определялась не как COM-port, а как USB-устройство

Есть много классов USB устройств. Вам какой нужен?

Это позволяет осуществлять последовательную связь (CDC) посредством USB.

Класс CDC это виртуальный COM порт. Учитывая что многое делается программно, что увеличивает нагрузку на МК, через USART удастся добиться большой скорости обмена.

Если нужна большая скорость обмена, лучше взять МК с USB HS (например STM32F407) и писать код в нормальной IDE, потому что ArduinoIDE и высокая скорость не совместимы.

Я про ArduinoIDE с ее библиотеками и стилем написания кода.

Стиль и библиотеки то отличные.

Код STM выглядит во многом менее читаемым.

Наверное, Communication Device (CDC) или Human Interface Device (HID)
К сожалению, я точно не знаю. Я пытаюсь разобраться со стандартом, но там так много информации, что мозги закипают и становится только еще менее понятно
Какой нужен тип для того, что бы считать один-два аналоговых сигнала?

В комплекте есть USBHost Library - примеры прошивают DUE в мышь или клавиатуру, которые, при подключении к Native USB port определяются как HID-совместимая мышь, а не ком-порт.
Но мне нужно не это, хотя это уже хоть какое-то направление.

Использование Arduino как USB-UART преобразователь:

На платах Arduino c USB портом (у некоторых плат нет USB порта) уже есть USB-UART преобразователь на базе чипа CH340 или FTDI, или ATmega, или др. Шина USB этих чипов подключена к порту USB, а шина UART к аппаратным выводам TX и RX контроллера платы Arduino.

Всё что нужно сделать для работы платы Arduino в качестве USB-UART преобразователя, это отключить её контроллер от шины UART или заставить его не реагировать на сигналы проходящие по этой шине. Сделать это можно соединив вывод RESET с выводом GND платы Arduino.

Теперь плату Arduino можно подключить к USB порту компьютера, а внешние устройства к выводам TX и RX платы Arduino (обычно это выводы 0 и 1). Обратите внимание на то, что выводы устройств подключаются к плате, не TX к RX, RX к TX, а TX к TX, RX к RX (так как вывод TX чипа преобразователя на плате Arduino подключён к выводу RX самой платы, а вывод RX чипа подключён к выводу TX платы).

Для управления подключённым устройством нужно установить на компьютер программу терминал. Одним из таких терминалов является свободно распространяемая программа Termite с поддержкой Русского языка.

Альтернативный метод:

В качестве альтернативного метода можно воспользоваться двумя шинами UART Arduino: аппаратной и программной. Аппаратная шина используется для подключения Arduino к USB порту компьютера, а программная шина UART используется для подключения модулей к плате Arduino.

Вы просто загружаете скетч, подключаете Arduino к USB порту компьютера, а устройство к выводам указанным в скетче (в примере: вывод D2 это RX - подключается к выводу TX устройства, вывод D3 это TX - подключается к выводу RX устройства).

Этот метод не требует подключения вывода RESET к GND на плате Arduino и не требует установки программы терминал на компьютер.

Управление подключёнными устройствами осуществляется через монитор последовательного порта Arduino IDE (для передачи AT-команд не забудьте установить пункт - добавлять символы NL & CR в нижнем правом углу монитора последовательного порта).

Брать ардуино на Atmega32u4 (leonardo большая, pro micro компактная) она умеет в железный HID и требует всего пары строк инициализации.
А если строить на атмера32, atmega328 (большинство ардуин) то как в ответе от Александр v-usb в помощь.

Upd. Сперва ответил на вопрос шапки, потом прочитал уточнение. Но все равно пускай будет

Самому пытаться программировать USB можно, конечно, но приготовьтесь, что на решение только одной этой задачи у Вас уйдут следующие несколько лет. Проще воспользоваться готовой библиотекой.
В случае, если в микроконтроллере нет встроенного USB-порта, то можно попробовать использовать библиотеку V-USB (виртуальный USB), но как и все чисто софтовые решения, это скорее эмулятор, чем полноценный порт. Требует много процессорного времени, и к тому же качество её работы оставляет желать лучшего. Например, если погрузить компьютер в спящий режим, то V-USB вряд ли это распознает, и придётся каждый раз переподключать микроконтроллер, или нажимать на кнопку сброса.
Так что попробовать стоит, но лично я рекомендую использовать микроконтроллер ATmega32U4, на котором построена плата Arduino Leonardo. Для него поддержка USB HID реализована в самом программном обеспечении Arduino IDE, так что для того, чтобы превратить микроконтроллер в "мышь" и "клавиатуру" (одновременно), достаточно просто загрузить скетч примера.
И наконец, третий вариант. В современных Arduino вместо чипа USB-RS232 используется микроконтроллер ATmega16U2. Это практически тот же Arduino Leonardo, только памяти у него в 2 раза меньше. Можно перепрограммировать в USB HID его, разве что потребуется программатор, потому что он программируется через интерфейс ICSP.

NeiroNx

Также есть от Digispark для Attiny85 - его основа V-USB
Также вам придется узнать что такое "HID дескриптор" и о правилах его написания(в инете есть документация и проги для этого).

До сих пор мы работали только с Arduino UNO. Да вот только то, что я сегодня покажу не работает с Arduino UNO. На самом деле можно, конечно, но в таком случае нужно кое-чего подшаманить, а это кое-чего не так-то и просто. Что же тогда делать? А вот что.

Кроме Arduino UNO существует множество других версий Arduino. Это и Arduino Nano или Mini, когда размер имеет значение, и Arduino Mega, когда пинов и ресурсов на UNO уже не хватает, а еще нужно подключить килограмм датчиков. А если форм-фактор UNO уж больно нравится, а аналоговых пинов не хватает, то на помощь придет Leonardo.

На Leonardo мы сегодня и остановимся. Отличие Leonardo от UNO не только в дополнительных аналоговых пинах, но и в архитектуре. На Leonardo доступен виртуальный Serial port. Что это нам дает? Как минимум то, что 1 и 0 пины, которые отвечают за соединение с компьютером на UNO остаются свободными, а при открытии Serial соединения плата не перезагружается. Примите это во внимание. И главный козырь – компьютер считает Leonardo за HID устройство (Human interface device), а это говорит о том, что Leonardo может притвориться клавиатурой или мышью. Это свойство то мы и будем использовать.

Я люблю играть на электрогитаре. Часто играю в программе Guitar rig. Эта программа является виртуальным гитарным процессором, то есть обрабатывает звук с гитары. К чему все это. При игре нужно переключаться между пресетами, а руки то заняты. Есть решение – приобрести контроллер для этой программы, вот только он больше не выпускается, да и стоит прилично. А что если соорудить педаль самому? Вот что из этого получилось.

Arduino Leonardo или его аналоги

Главное – чтобы плата определялась как HID устройство


Тут уж по вашему вкусу



Тут есть где разгуляться дизайнерской мысли. Я решил не заморачиваться особо и соорудил подобие педали из двух фанерок, обильно смазанных термоклеем. Побаловаться – в самый раз.

Пол царства за термоклей.



Как я уже и говорил, Leonardo может притворяться клавиатурой или мышью. Это осуществляется с помощью встроенной библиотеки. Ниже приведен пример кода. Попробуйте запустить его у себя на компьютере. Должна произойти странная вещь.

Не спешите бежать и рассказывать о восстании машин. Так и было задумано. Теперь разберемся как это работает.

Keyboard.press(button) – эта команда говорит Leonardo о том, что нужно нажать кнопку на клавиатуре. Аргументом принимает букву или специальное обозначение клавиши. KEY_LEFT_CTRL – это левый Ctrl, например. Все обозначения можно посмотреть тут.

Можно нажимать комбинации клавиш. Для этого пропишите несколько строк кода с нужными клавишами. Например, чтобы сохранить текст есть комбинация Ctrl + s, Leonardo тоже сможет сохранить текст если выполнить такой код:

Keyboard.releaseAll() – команда говорит Leonardo отпустить клавиши. Заметьте, что предыдущая команда говорит Leonardo только о нажатии клавиши. Если не прописать Keyboard.releaseAll(), то клавиша будет зажата и дальше. Прямо как в реальности. Попробуйте открыть текстовый редактор и зажать клавишу.

Keyboard.println("Some text") – эта команда отвечает за печать текста. Тут все предельно ясно. Работает как Serial.println.

Там есть и другие функции, но эти – самые основные. Их нам хватит, чтобы сделать педаль для гитары. Если кому интересно, что еще есть в этой библиотеке или в похожей для мыши, то можно открыть примеры/USB и почитать тут. Переходим к сборке педали.

С конструкцией можно подумать, а схема устройства крайне проста. Ниже приведена схема на макетке.


На видео показан тест устройства в Microsoft Word и использование в качестве педали для переключения пресетов в guitar Rig 5. Для этого я создал новый контроллер, запомнил клавишу и задал действие.

Оказывается, существуют и другие Arduino, не менее полезные, а где-то и более полезные чем UNO.

Используя Leonardo в качестве клавиатуры или мыши можно создавать интересные вещи. Например, флешку-розыгрыш на 1 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.

Совсем недавно у нас был урок про то как сделать собственный ноутбук на Raspberry и Arduino. Одна из главных сложностей при создании ноутбука - найти хороший трекпад, который будет им управлять. Можно, в целом, купить готовый, но мы сегодня попробуем создать свой трекпад управляемый Arduino Micro. На самом деле даже готовый работающий трекпад найти очень сложно, так что мы будем спасать трекпад от старого сломанного ноутбука и преобразовывать его в USB-устройство, используя нашу Ардуину.


Шаг 1: Комплектующие

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



К сожалению, есть только несколько типов Ардуино, которые мы можем использовать, это Arduino micro, pro micro и Leonardo, поскольку они могут быть запрограммированы на отображение HID (устройств интерфейса пользователя). Это означает, что они могут отображаться на компьютере как мыши или клавиатуры. Собственно, это то, что Arduino Uno сделать не может.

Шаг 2: Почему это работает?

Причина, по которой мы можем связать трекпад с Arduino, состоит в том, что большинство старых трекпадов от ноутбуков, связаны с компьютером через интерфейс PS/2. Т.е. трекпады имеют выходы PS/2, которые передают данные. Эти данные затем считываются Arduino и преобразуются в другие данные, которые могут быть отправлены на компьютер через интерфейс USB.


Теперь я должен отметить, что не все портативные трекпады одинаковы, почти все старые ноутбуки используют интерфейс PS / 2, но некоторые более новые используют интерфейс USB вместо интерфейса PS / 2.

Если вам удастся найти один из этих трекпадов USB вместо PS / 2, вы можете просто указать название трекпада и найти USB-пин-код и подключить его к USB-компьютеру, и он будет работать. Однако для этого проекта мы будем использовать более распространенный трекпад PS / 2 и использовать Arduino, чтобы превратить его в USB-мышь.

Шаг 3: Подключение

Соединения для этого проекта довольно просты. Все, что нам нужно сделать, это найти 4 вывода (припои) на нашем трекпаде. Их довольно легко найти, поскольку они обозначены как T10 (данные), T11 (часы) и T20, а заземление - просто большая открытая металлическая плоскость. Нам нужно тщательно припаять провода к каждому из этих выводов, а затем подключить их к соответствующим цифровым выводам Arduino.

  • T10 соединяем с выводом 10 Arduino micro
  • T11 соединяем с выводом 9 Arduino micro
  • T20 соединяем с питанием 5В Arduino micro
  • Земля соединяется с землей (GND) Arduino micro

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

Шаг 4: Установка некоторых библиотек

Нам понадобится установить две библиотеки в среду разработки Arduino:

  • библиотека "Мышка" - скачать здесь
  • библиотека PS/2 - скачать здесь

Скачайте их, откройте Arduino IDE и загрузите файлы библиотек в неё. Библиотека PS/2 используется для получения данных с трекпада, а библиотека "Мышка" позволяет нам принимать эти данные и превращать их в команды для мыши, которые компьютер может читать через порт USB.

Шаг 5: Код

Теперь, когда у нас есть установленные библиотеки, мы можем загрузить наш код в Arduino. Код можно найти ниже, но нужно отметить, что код не будет загружаться или компилироваться, пока не будет выбрана плата Arduino micro или Leonardo. Вспомните об этом если вы получите ошибку при компиляции кода. После загрузки кода Arduino должен перезагрузиться как HID-устройство и на компьютере отобразиться как мышь.

Шаг 6: Завершение и устранение неисправностей

Итак, теперь, когда вы касаетесь сенсорной панели, вы должны заметить некоторое движение на экране. Поскольку Arduino работает как USB-устройство, вы можете подключить его к любому компьютеру, и он мгновенно загрузится как USB-мышь, независимо от операционной системы или типа компьютера.

Если вы не хотите проходить весь процесс программирования и подключения Arduino, вы можете просто купить переходник PS/2 в USB. Но мы бы не рекомендовали это, поскольку это создает беспорядок с данными, поступающими с трекпада и может сделать его непригодным. Плюс, используя Arduino, мы можем полностью настроить все, что касается мыши и так как нам хочется - скорость мыши и всякие действия, такие как двойное нажатие и прокрутка. Это всё можно настроить под себя. Больше информации можно найти на сайте Arduino.

Напоминаем, что данный трекпад отлично дополнит наш проект по созданию ноутбука на базе Raspberry и Arduino.

Читайте также: