Мышка на ардуино своими руками

Добавил пользователь Morpheus
Обновлено: 16.09.2024

Библиотеки Mouse и Keyboard

Эти базовые библиотеки позволяют платам Arduino Leonardo, Micro или Due при подключении к компьютеру определяться как обычная мышь и/или клавиатура.

Предосторожности при использовании библиотек Mouse и Keyboard: при постоянной работе библиотек Mouse или Keyborad могут возникнуть сложности во время программирования вашего устройства. Функции, подобные Mouse.move() или Keyboard.print() могут перемещать курсор и сигнализировать о нажатии клавиш подключенному компьютеру, поэтому должны вызываться только тогда, когда вы готовы контролировать их работу. Рекомендуется использовать какую-нибудь систему управления, позволяющую выключать подобную функциональность, например, в зависимости от положения переключателя или сигнала на выводе, состояние которого вы можете контролировать.

Перед использованием функций библиотек Mouse или Keyboard непосредственно с компьютером, лучше всего протестировать их возвращаемые значения с помощью функции Serial.print(). Так вы сможете удостовериться в правильности отправляемых значений. Подробнее см. примеры работы с библиотеками Mouse и Keyboard ниже.

Мышь (библиотека Mouse)

Функции для работы с мышью позволяют Leonardo, Micro или Due контролировать движение курсора на подключенном компьютере. Обновление позиции курсора всегда осущетсвляется относительно его предыдущего положения.

Клавиатура (библиотека Keyboard)

Функции для работы с клавиатурой позволяют Leonardo, Micro или Due отправлять подключенному компьютеру сигналы о нажатии клавиш.

Примечание: Библиотека Keyboard позволяет отправлять не все ASCII-символы, в частности она не позволяет отправлять непечатаемые символы. Библиотека также поддерживает использование клавиш-модификаторов, которые при одновременном нажатии с другой клавишей изменяют ее поведение. Дополнительную информацию о поддерживаемых клавишах и их применении см. здесь.

Данный пример демонстрирует управление курсором мыши с использованием Arduino Leonardo. Arduino Leonardo обладает возможностью эмулировать работу USB-устройств(например, клавиатуры или мыши), в результате с помощью джойстика и нескольких кнопок мы сможем превратить Arduino Leonardo в мышку.

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

Используя библиотеку Mouse, вы можете управлять экранным курсором компьютера с помощью Arduino Leonardo, Micro или Due.

В этом конкретном примере используются пять кнопок для перемещения экранного курсора. Четыре кнопки направлены (вверх, вниз, влево, вправо), а одна — для щелчка левой кнопкой мыши. Движение курсора от Arduino всегда относительно. Каждый раз, когда ввод читается, позиция курсора обновляется относительно его текущей позиции.

Всякий раз, когда нажимается одна из кнопок со стрелками, Arduino перемещает мышь, отображая HIGH-вход в диапазон от 5 в соответствующем направлении.

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


Рекомендуем почитать:


Любознательный хакер Фрэнси Кэпел (Franci Kapel) решил выяснить это наверняка — и разобрал свою старую мышку Logitech RX 250, которая содержит оптический сенсор ADNS-5020. Как выяснилось, сенсор записывает видео разрешением 15х15 пикселов в черно-белом диапазоне. Сенсор также вычисляет перемещение мыши по осям X-Y.

Чтобы сделать из мышки веб-камеру, Фрэнси подключил сенсор к контроллеру Arduino, который соединяется с персональным компьютером по кабелю Ethernet. При этом нужно отключить некоторые контакты сенсора с мышью, а между 5-вольтовым входом и контактом NRESET впаять резистор 10k. Окончательная схема контактов к плате с подключением резистора должна выглядеть так.

Сегодня давайте рассмотрим еще одну функцию HID для микроконтроллера AT90USB162. На этот раз сделаем на основе этого микроконтроллера HID совместимую мышь, но не простую, а на основе датчика акселерометра ADXL345. Программная часть проекта будет писаться на CodeVisionAVR, соответственно функции будут использоваться те же, что и в статье про акселерометр ADXL345, но переписанные под CodeVisionAVR. Схему такой мыши будет не трудно собрать начинающим радиолюбителям и поэтому главный упор полезности заключается именно в интересе сделать что-то подобное самому, повысить свой уровень в сборке схем, ну и, конечно, узнать, как же сделать мышь своими руками.

Сначала электрическая схема мышки:


Схема построена на основе микроконтроллера AVR AT90USB162, который поддерживает USB интерфейс на аппаратном уровне. Схема питается от USB порта компьютера или ноутбука – напряжение питания 5 вольт, но для работы датчика акселерометра необходимо напряжение 3,3 вольта, поэтому дополнительно используется стабилизатор напряжения AMS1117 на 3,3 вольта. Если такого не имеется можно заменить на любой другой стабилизатор на данное напряжение или на крайний случай заменить вовсе на стабилитрон номиналом 3,3 вольта, так как потребление тока ADXL345 очень небольшое. Сам микроконтроллер питается от USB порта напрямую от 5 вольт, в связи с этим кварцевый резонатор используется на максимальную частоту, поддерживаемую микроконтроллером – 16 МГц. Можно, конечно, использовать и кварц на 8 МГц, но тогда нужно будет перекомпилировать прошивку с такими настройками. Я использовал для изготовления данной схемы уже ранее изготовленную отладочную плату на основе микроконтроллера AT90USB162 и модуль акселерометра ADXL345, на котором уже присутствует стабилизатор для питания датчика. Кнопки S1 и S2 используются как правая и левая клавиши компьютерной мышки. Кнопки S3 и S4 необходимы для управления микроконтроллером, а именно использования пользовательской прошивки или bootloader’a для загрузки пользовательской прошивки посредством USB интерфейса. Если вы хотите сменить прошивку микроконтроллера, то для этого необходимо проделать следующие манипуляции: нажать и удерживать кнопку reset, далее нажать и удерживать вторую кнопку – HWB, далее отпустить кнопку reset и наконец, отпустить кнопку HWB. Так активируется bootloader и можно загрузить новую прошивку, после загрузки нажать reset или выключить и включить питание схемы и тогда активируется снова пользовательская прошивка. Резисторы R5 и R6 подтягивают плюс питания к выводам, к которым подключены кнопки для корректной их работы, в процессе основной работы подтягивающий резистор кнопки reset исключает самопроизвольное перезапускание микроконтроллера при наличии помех на этом выводе. В схеме используется два светодиода – LED1 и LED2. LED1 нужен лишь для индикации наличия напряжения на плате. Второй светодиод LED2 можно использовать для пользовательской индикации в данной прошивке он задействован как индикатор успешной инициализации всех функций схемы устройства – несколько раз моргает при успешном старте. При желании можно функционал поменять. Перемычкой Jmp1 можно светодиод включать и отключать на плате. Резисторы R1 и R4 ограничивают ток, проходящий через светодиоды, чтобы они не сгорели в процессе. Если используются яркие светодиоды, то номиналы этих резисторов можно делать достаточно большими, так как для свечения таким светодиодам достаточно уже тока в единицы миллиампер. Для подключения микроконтроллера к шине данных USB необходимо использовать резисторы R2 и R3 номиналом 22 Ом согласно документации (даташиту). Обмен информацией между акселерометром и микроконтроллером происходит через шину I2C. Встроенная библиотека программного I 2 C CodeVisionAVR имеет ограничение по скорости в 100 кГц. Этого вполне достаточно и схема работает стабильно, хотя возможности акселерометра позволяют поднять частоту до 400 кГц и ускорить обмен данными. Резисторы R8 и R9 необходимы для работы I 2 C интерфейса – они формируют логическую единицу на линиях передачи информации. Номиналы этих резисторов можно брать смело в пределах 4,7 – 10 кОм.

Со схемой разобрались, теперь можно собирать устройство, как отмечалось, я использовал отладочную плату на AT90USB162 и модуль датчика акселерометра ADXL345:


Кнопки правого и левого кликов вынесены также на отдельном модуле четырех кнопок.



Для прошивки микроконтроллер используется софт от компании Atmel – Flip, посредством которого можно прошивать микроконтроллеры через USB напрямую. Процесс прошивки данным методом описан в статье, посвященной отладочной плате AT90USB162.

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


CodeVisionAVR выбран в качестве компилятора по причине того, что он на стандартном уровне содержит библиотеки для работы с USB устройствами, что упрощает проектирование несложных устройств с применением этого интерфейса. Также плюсом является генератор начального кода для микроконтроллеров, что также в некоторой степени упрощает работу.

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

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

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