Joystick на AT91SAM7
Вступление
Случилось так, что мой малыш, как и полагается мальчику, увлекается машинками. Когда он подрос до 5 лет начал играть в симулятор Master Rally. Играть одному не интересно, поэтому я стал принимать в этом участие. Очень скоро стало понятно, что дискретное управление с клавиатуры не позволяет мне в равной степени конкурировать и бороться за победу. Тогда я подумал о втором руле.
Оказалось, что каждый раз доставать и устанавливать 2 руля — непростая и очень надоедливая процедура. Поэтому я решил купить джойстик пистолетного типа — как для управления радиоуправляемыми машинками.
Поискав в интернете, я понял, что такие не производятся и не продаются. Поскольку я уже был хорошо знаком с контроллером AT91SAM7, я решил быстренько сделать USB джойстик на его базе, используя простейший джойстик от старой радиоуправляемой игрушки. Эта статья описывает как это сделать. Я уже год пользуюсь, но вот решил поделиться.
Что использовать?
Джойстик сделан на базе отладочной платы фирмы Olimex. Подробнее про эту плату можно почитать в этом документе.
Еще нам потребуется джойстик от какой-нибудь старой радиоуправляемой игрушки и USB кабель. Вот что получилось у итоге. Внутрь стандартного джойстика с 3 кнопками и двумя светодиодами была добавлена отладочная плата. Самым сложным элементом конструкции оказалось соединение курка с переменным резистором R1. (См. схему) Здесь я использовал резистор с нелинейной характеристикой, чтобы получить большее изменение сопротивления при небольшом угле поворота.
Вначале возвратная пружинка на руле отсутствовала (Резистор R2). Но практика показала, что при этом управлять сложно, поскольку пальцы не чувствуют текущее положение руля, что приводит к нарушению тактильной обратной связи между рулем и человеком. На фото ниже видно, как установлена пружинка.
Схема
Вот такая получилась схема:
Нужно добавить, что переменные резисторы могут быть от 1 до 15 кОм, и желательно с линейной характеристикой для руля, для газа и тормоза — по желанию. Сначала я поставил старый проволочный (как я считал более надежный) резистор на руль, но через пару месяцев он сдох, поэтому был заменен на обычный импортный, который оказался надежнее. Светодиод VD1 проблесковый, он мигает короткими вспышками, если устройство успешно подключилось к компьютеру. VD2 загорается при включении кнопки S3.
Software
Для написания программы использовались примеры с диска фирмы Atmel, находящиеся в свободном доступе в интернете. Вот тут можно найти проект. В этом проекте лежит рабочий бинарник для версии AT91SAM7S256. (\Mouse\FLASH\Exe\USB.bin) Его можно непосредственно залить в контроллер. Для версии S64 бинарник непосредственно при написании блога не проверен. Желающие повозиться или что-то изменить могут установить себе среду IAR Systems и побаловаться. Достоинство проекта — он не требует специального драйвера по Windows XP или 7, подхватывается системой как стандартный джойстик. При желании можно изменить количество кнопок и осей. Контроллер содержит 8- канальный АЦП и много портов. Для программирования контроллера через USB порт нужно использовать программку SAM-BA 2.15. Вся информация и это программка доступны на сайте компании Atmel.