Каталог
|
HID-Маніпулятор на базі Arduino Pro Micro2024-05-21 Все статьи →HID (Human Interface Device) - це стандарт підключення пристроїв вводу-виводу через шину USB. По такому стандарту до комп’ютера зазвичай підключаються миші, клавіатури, ігрові контролери, джойстики та інші пристрої для вводу або виводу інформації по USB. Сьогоднішня мета - створити HID пристрій, що зможе виконувати функції миші для комп’ютера, в основному, під час користування шоломом віртуальної реальності.
Проблема полягає в тому, що підключення напряму до шини USB - заняття не з легких. Шина USB дуже універсальна, тому перед початком спілкування по ній треба ідентифікувати свій пристрій та надіслати USB контролеру свій HID Report Descriptor, у якому описується весь функціонал пристрою, які змінні та з якими значеннями він буде використовувати, як та коли він буде їх відсилати тощо, відсилати їх звісно також треба по таймінгам та враховуючи handshake’и. Це все дуже складно для того, що планується зробити сьогодні, тому обмежимося готовими варіантами, про які піде мова далі. Проектування та збір компонентної бази. Одразу до проектування пристрою перейти неможливо, майже всі подальші рішення у цьому проекті будуть прийматися базуючись на виборі мікроконтролера, що буде центральним елементом нашої системи. Вибір мікроконтролера. Враховуючи те, що хотілося б уникнути роботи з HID Report Descriptor’ами та іншими складностями інтерфейсу USB, контролер буде обиратися такий, щоб мав змогу зробити це за нас.
За такими характеристиками вибір впав на Arduino Pro Micro та Arduino Leonardo.
Arduino pro micro
Arduino Leonardo Окрім, очевидно, розміру та комплектації, плати мають ряд відмінностей, але що найважливіше вони мають спільну рису - чіп, на базі якого вони побудовані може спілкуватися з USB контролером напряму, без, як це зазвичай відбувається, конвертору USB-UART, це дозволяє використовувати плату як HID одразу з коробки. Pro Micro побудована на базі оригінального Leonardo та майже нічим не гірша, проте розробляла її не Arduino, а компанія Sparkfun. У нашому конкретному випадку та частина функціонала яку втрачає Pro Micro відносно Leonardo нам не сильно потрібна, проте різниця у розмірах на користь Pro Micro буде плюсом. Також плюсом буде ціна даного модулю. Тому для пристрою було обрано плату Arduino Pro Micro. Розпіновка плати Arduino Pro Micro Вибір функціональних компонентів. До функціональних компонентів віднесемо акселерометр та пару кнопок. У якості акселерометру було обрано Акселерометр і гіроскоп MPU-6050. Плата MPU6050
Спілкування з ним проходить по протоколу IIC (I2C), що дозволяє з’єднатися з нашим мікроконтролером за допомогою 2х провідників та декількох строк коду.
Також візьмемо 2 ось такі кнопки: Кнопка PBS-33B без фіксації OFF-(ON) Проектування пристрою. Проектування проводимо у САПР DipTrace, де довелося додати кілька кастомних компонентів.
Схема у САПР DipTrace
На цій схемі видно підключення I2C шини SCL-PIN3, SDA-PIN2 та підключення кнопок до PIN7 та PIN8 контролеру. Також, звичайно, підключення землі та живлення. Сам мікроконтролер потім підключається до комп’ютера через USB, на схемі цього не вказано. Написання коду.
Код як завжди пишемо у середовищі Arduino IDE. **ПОСИЛАННЯ НА КОД ПРОЕКТУ**
Окрім стандартних, у коді використані бібліотеки для зчитування даних з MPU6050, та емуляції контролером Arduino Pro Micro комп’ютерної миші. Багато місця у коді займає виконана досить неефективно, проте просто та швидко перевірка та обробка подвійного кліку кнопкою та її натискання. Майже весь комп’ют, що бере на себе ця програма, використовують строки у методі GetData(), тут проходить зчитування даних з MPU6050 та, найголовніше, їх лінійна інтерполяція, а саме експоненційне згладжування, без нього курсор миші буде постійно перебувати у стані безконтрольних конвульсій, та і в цілому буде занадто різким, що не дуже гарно. До речі чутливість миші можна налаштувати у строчці Mouse.Move(-lrZ, lrY), де можна додати модифікатори на кшталт -LrZ*0.5.
На рахунок функціоналу, що виконують кнопки. Так як ця миша планувалася для використання разом з шоломом віртуальної реальності, її робота майже завжди була у емуляторі VR контролеру Driver4VR, у якому, для основної маси функцій, використовується лише права кнопка миші та скролл, саме тому кнопки будуть виконувати функції правого кліку, скроллу, та, через деякі неточності акселерометру і не ідеального експоненційного згладжування, виставлення датчику в робочу область, з якої він, під час довгої роботи виходить. Кнопка на піні 7 слугує для правого кліку, кнопка на піні 8 при одноразовому кліку та утриманні переключає мишу у скролл-режим, а при подвійному кліку та утриманні відключає сенсор, для його переведення у робочу область. Збирання пристрою.
Пристрій збираємо, як справжні саморобщики, навісним монтажем. Для перемичок були використані звичайні макетні кабелі тато-тато. Для з’єднання датчику з кнопками і контролеру взяти довгий провідник вита пара, в якого у висновку вийшов авторський кабель “1.5 виті пари”, через те, що від контролеру до датчику з кнопками йде 6 провідників.
Монтувалося все, заради тесту, на звичайну робочу перчатку, на двосторонній скотч, провідники для кнопок просто пустилися через саму тканину. Як фінальний варіант використовувати не дуже зручно, але протестувати весь функціонал вдасться.
Датчик та кнопки змонтовані на перчатці.
Мікроконтролер, вид зверху.
Мікроконтролер, вид знизу. Висновки. У результаті роботи створили готовий HID маніпулятор. Функціонал цього пристрою наразі обмежений лише бібліотеками, на базі яких створений. При бажанні і зміні декількох строчок коду він може перетворитися на геймпад, джойстик, клавіатуру, будь-який HID пристрій, кількість кнопок та перемикачів в якому обмежена кількістю цифрових входів на мікроконтролері, кількість аналогових осей - до 6, 3 з яких використані у цьому проекті. У цьому виді пристрій можна використовувати як і задумувалося автором - дуже бюджетний та простий контролер для VR. Можна використовувати як звичайну мишу, за бажанням додавши кнопку для здійснення лівого кліку, по аналогії з правим, зостається лиш скопіювати та вставити з невеликою модифікацією вже готового коду. Головною метою цієї статті було показати концепт, показати можливість створення таких пристроїв на базі мікроконтролерів, можливість їх кастомізації під себе та під свої цілі, будь це комп’ютерна гра або 3D моделювання чи скульптурування. Посилання:
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
|