Все почалося з того, що я дізнався про проект «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 У
Цифрові Входи / Виходи
14 (6 з яких можуть використовуватися як виходи ШІМ)
Аналогові входи
8
Постійний струм через вхід / вихід
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.