Как стать автором
Обновить

Mouse Track — виртуальность становится реальнее

Время на прочтение 5 мин
Количество просмотров 21K


Статья №2
Статья №3

Здравствуйте. Сегодня я хочу поделиться с вами своим, не побоюсь этого слова, достижением. Я сделал необычную мышь. Это манипулятор в виде перчатки, имеющий 5 клавиш и акселерометр. Но обо всем по порядку. Сначала небольшая предыстория.

Проект «Arduino»

Все началось с того, что я узнал о проекте «Arduino». «Arduino» — это аппаратная вычислительная платформа, основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере (например,Macromedia Flash, Processing, Max/MSP, Pure Data, SuperCollider). — говорит нам википедия. Немного объясню. По сути, Arduino — это отладочная плата на базе микроконтроллеров фирмы Atmel. Конечно, купить платку ардуино намного дороже, чем купить микроконтроллер (далее МК) и сделать отладочную плату самому. Но, в этом проекте есть один большой плюс (думаю, за этот плюс стоить заплатить) для больших новичков в программировании, который упрощает процесс написание программ и прошивки МК — это среда разработки Arduino IDE, которая включает в себя основные библиотеки для работы с периферийными устройствами МК. Язык разработки Wiring — это тот же С++, только с библиотеками и функциями для работы с МК (стандартные функции языка, конечно же, доступны).

Итак, мне стало интересно и я заказал себе отладочную плату на базе МК Atmega 1280. А позже и две маленькие платки на базе МК Atmega 328. Но сейчас не об этом. Попробовав свои силы в небольших «проектах», я решил сделать что-то действительно интересное. А интересно было сделать мышь — перчатку.

Акселерометр и идея перчатки

Недолго думая, я заказал акселерометр MMA7260QR2. Думал реализовать движение мыши именно при помощи акселерометра. Но после экспериментов с ним понял, что принцип его действия не позволит сделать именно перемещение курсора мыши. Поэтому я решил применить его для другой функции — он заменит ролик мыши, а так же некоторые другие действия. Но опять же, обо всем по порядку.

Идея такова: на перчатке расположено устройство с 5ю кнопками и акселерометром. Данные передаются МК-ом в компьютер по компорту (моя плата ардуино подключается по mini-usb, то есть ком порт реализован на шине usb при помощи микросхемы-конвертера FTDI, поэтому компьютер видит ардуино как ком порт), программа на компьютере обрабатывает принятые данные и действует в зависимости от них. Перемещение курсора я решил реализовать при помощи веб-камеры и светодиода на перчатке, так как с акселерометром не получилось бы. Свободно распространяемая программа FreeTrack позволяет это реализовать. Вкратце, это свободно распорстраняемая программа, которая обрабатывает видео с веб-камеры и получает данные о расположении светодиода (или нескольких светодиодов) в пространстве. Программа предназначена для трэкинга в -авиа, -авто симуляторах, шутерах и так далее. Имеет функцию «эмулировать мышь», которой я и воспользовался.

Посетив местный магазин радиотоваров я купил 5 микропереключателей («микрики» в народе) от мышек и принялся разрабатывать плату (платформу, которую позже помещу на перчатку), на которой должны быть расположены:
1) плата микроконтроллера;
2) 5 «микриков»;
3) светодиод инфракрасный;
4) акселерометр.

Акселерометр нужно было «посадить» на собственную платку (его размеры составляют 6х6 мм), что я с папой и сделал. По мануалу к акселерометру я вычертил плату в программе «Sprint Layout» и по технологии изготовления печатных плат в домашних условиях (при помощи лазерного принтера и утюга) мы с папой вытравили эту маленькую платку дома. После чего я подключил его к МК и экспериментировал с ним.

Arduino nano: описание

Микроконтроллер
ATmega328
Рабочее напряжение (логическая уровень)
5 В
Входное напряжение (рекомендуемое)
7-12 В
Входное напряжение (предельное)
6-20 В
Аналоговый ввод
8 линий. АЦП 10-ти битный
Цифровые Входы/Выходы
14 (6 из которых могут использоваться как выходы ШИМ)
Постоянный ток через вход/выход
40 мА
Флеш-память
32 Кб (ATmega328) при этом 2 Кб используются для загрузчика
ОЗУ
2 Кб
EEPROM
1 Кб
Тактовая частота
16 МГц
Размеры
1.85 см x 4.2 см



Изготовление платы — платформы

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

Итак, имея все необходимое для сборки девайса, я принялся за разработку схемы подключения всего этого к МК. Честно говоря, сложного ничего нет. Но мне приходилось не один раз перечерчивать схему. Закончив схему, я обратился к папе за помощью в изготовлении печатной платы всё по той же технологии изготовления печатных плат в домашних условиях. После того, как изготовили плату, я увидел один промах — место для акселерометра получилось не там, где планировалось, изза того, что при черчении схемы платы не учел габаритные размеры кнопок. Ну что ж, на своих ошибках учатся.

Пайка платы — платформы

Этот этап для меня был самым сложным, так как я плохо паяю. Но, после того, как папа показал как правильно это делается и помог мне, паять мне стало легче. Подробно расписывать этот этап не буду. Покажу лишь результат — плату с распаянными МК и деталями на ней.
Вот так выглядит плата в сборе.

Прошивка МК

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

Могу сказать, что имея базовые знания языка С++ и принципов программирования, прошивку написать несложно. Этому способствует и среда разработки Arduino IDE, благодаря которой не приходится часами читать даташиты на МК и выяснять какой регистр отвечает за какую функцию МК. Но и это, конечно, тоже несложно, и это нужно знать хотя бы для себя, знать с чем имеешь дело. Но ардуино позволяет сделать «быстрый старт» не углубляясь в тонкости программировани МК, чем я и пользуюсь.

Программа «Mouse Track» для приема данных от перчатки

Принцип действия: в отдельном потоке в бесконечном цикле опрашивается нужный ком — порт. Программа получает данные от перчатки (от МК) и выполняет соответствующие действия. Например, если нажата кнопка1, то это сообщается по ком-порту программе и она осуществляет действие «кнопка1 нажата». Если кнопка1 отпущена — сообщается «кнопка1 отпущена». Программу я написал на Delphi 7. Реализовал следущее — на каждый палец можно присвоить одно из 5ти действий мыши (ЛКМ, СКМ, ПКМ, ролик вверх, ролик вних) либо одно из 4х действий с окном (закрыть, свернуть, переместить, максимизировать/восстановить). С акселерометром та же ситуация — на наклоны вправо, влево, вперед, назад можно назначить те же функции. Также регулируется «мертвая зона» акселерометра. Наклон акселерометра я измеряю от 0% до 100%. Так вот, порог срабатывания команды акселерометра по наклону можно регулировать. Например, команда будет выполняться, если порог будет выставлен 50%, то есть если акселерометр наклонится наполовину. И так для каждой оси. Кстати о осях. В акселерометре, что я использовал, их 3 — это x, y, z. Но я задействовал только x и y.



Во вкладках «эмуляция мыши» такие функции: ЛКМ, СКМ, ПКМ, прокрутить ролик вверх/вниз. Во вкладках «Действие с окном» такие функции: переместить окно, закрыть окно, свернуть окно, максимизировать/восстановить окно.



Также можно использовать «Горячие клавиши» перчатки. То есть сочетания некоторых клавиш для вызова присвоенной программы.



Конструкция и внешний вид

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

1 — плата Arduino nano на базе МК Atmega328; 2 — кнопка; 3 — инфракрасный светодиод; 4 — акселерометр MMA7260QR2; 5 — направляющая (из велосипедного тормозного троса); 6 — «липучка»



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


UPD
Облегчил внешний вид и отказался от перчатки (неудобно печатать на клавиатуре, потому что плотная ткань и не чувствуется касания)


Статья №2
Статья №3
Теги:
Хабы:
+141
Комментарии 126
Комментарии Комментарии 126

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн