Перчатка - мышь. Виртуальность становится реальнее.

Fluffy
Offline
Зарегистрирован: 01.06.2011

 

 

Здравствуйте. Сегодня я хочу поделиться с вами своим, не побоюсь этого слова, достижением. Я сделал необычную мышь. Это манипулятор в виде перчатки, имеющий 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» и по технологии изготовления печатных плат в домашних условиях мы с папой вытравили эту маленькую платку дома. После чего я подключил его к МК и экспериментировал с ним.

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

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

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

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

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

Прошивка МК

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

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

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

Принцип действия: в отдельном потоке в бесконечном цикле опрашивается нужный ком — порт. Программа получает данные от перчатки (от МК) и выполняет соответствующие действия. Например, если нажата кнопка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 - "липучка"

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

 

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Не берусь судить об удобстве использования, но задумка и реализация - 5 баллов.

Fluffy
Offline
Зарегистрирован: 01.06.2011

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

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Можно наверно отслеживать событие нажатия клавиатуры и в течение, к примеру, 0.3 секунды после этого не реагировать на сигналы с перчатки. 0.3 секунды, чтобы нивелировать задержки в передачи с ардуино по serial и  обработке.

Fluffy
Offline
Зарегистрирован: 01.06.2011

 вобщем надо подумать. засыпаю уже.

Mogalkov
Offline
Зарегистрирован: 23.06.2011

 Прикольно, но махать рукой имхо устанешь, это тренажер какойто получается.

egor.barsukoff
Offline
Зарегистрирован: 22.08.2011

 С другом захотели повторить сия чудо

Автор, напиши пожалуста на egor.barsukoff@yandex.ru

Fluffy
Offline
Зарегистрирован: 01.06.2011

 спрашивайте, постараюсь ответить на ваши вопросы.

egor.barsukoff
Offline
Зарегистрирован: 22.08.2011

За сколько примерно вы сотворили такой девайс? Немного не понял механизма нажатия кнопок.

А также нам нажна сама схема (для ЛУТа) и код прошивки

Fluffy
Offline
Зарегистрирован: 01.06.2011

Девайс обошелся около 300 грн

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

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

Arran
Offline
Зарегистрирован: 09.01.2012

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

email: bezgerts@gmail.com

skype: bezgerts

KBSH
Offline
Зарегистрирован: 21.05.2014

объясните, почему акселерометр не подходит для передачи данных о перемещии?

Fluffy
Offline
Зарегистрирован: 01.06.2011

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

KBSH
Offline
Зарегистрирован: 21.05.2014

каким же образом тогда фиксируются перемещения в этом устройстве? http://compulenta.computerra.ru/tehnika/gadgets/10011846/

KBSH
Offline
Зарегистрирован: 21.05.2014

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