- Передумови
- Кругова діаграма
- Процес обробки повітряної миші
- Програмування Arduino для Air Mouse
- Сценарій драйвера Python
- Тестування Arduino Air Mouse
Ніколи не замислювалися над тим, як наш світ рухається до захоплюючої реальності. Ми постійно знаходимо нові способи та методи взаємодії з навколишнім за допомогою віртуальної реальності, змішаної реальності, доповненої реальності тощо. Щодня з’являються нові пристрої з цими технологіями швидкого темпу, щоб вразити нас своїми новими інтерактивними технологіями.
Ці захоплюючі технології використовуються в іграх, інтерактивних заходах, розвагах та багатьох інших додатках. У цьому підручнику ми будемо знати про такий інтерактивний метод, який дає вам новий спосіб взаємодії з вашою системою замість використання нудної миші. Наші ігрові виродки повинні знати, що кілька років тому ігрова компанія Nintendo продає ідею 3D-інтерактивного методу для взаємодії зі своїми консолями за допомогою портативного контролера, відомого як контролер Wii. Він використовує акселерометр, щоб знайти ваші жести для гри та надіслати їх до системи бездротовим способом. Якщо ви хочете дізнатись більше про цю технологію, ви можете перевірити їх патент EP1854518B1, це дасть вам повне уявлення про те, як працює ця технологія.
Натхненний цією ідеєю, ми збираємося створити "повітряну мишу", щоб взаємодіяти із системами, просто переміщаючи консоль у повітрі, але замість використання 3-мірних координат координат, ми будемо використовувати лише 2-мірні посилання координат, тому ми можемо імітувати дії комп’ютерної миші, оскільки миша працює у двох вимірах X та Y.
Концепція цієї бездротової 3D-повітряної миші дуже проста, ми будемо використовувати акселерометр, щоб отримати значення прискорення дій та рухів “Повітряної миші” вздовж осей x та y, а потім на основі значень акселерометром ми будемо керувати курсором миші та виконувати певні дії за допомогою драйверів програмного забезпечення python, що працюють на комп'ютері.
Передумови
- Arduino Nano (будь-яка модель)
- Модуль акселерометра ADXL335
- Модуль Bluetooth HC-05
- Кнопки
- Комп'ютер, встановлений на Python
Щоб дізнатись більше про встановлення python на комп’ютері, дотримуйтесь попереднього підручника з Arduino-Python LED Controlling.
Кругова діаграма
Щоб керувати комп’ютером рухами руки, вам потрібен акселерометр, який видає прискорення по осях X та Y, а також, щоб зробити всю систему бездротовою, для передачі сигналу у вашу систему використовується бездротовий модуль.
Тут використовується акселерометр ADXL335, це потрійний модуль на основі MEMS, що виводить прискорення по осях X, Y та Z, але, як було сказано раніше, для управління мишею нам знадобиться лише прискорення лише по осях X та Y. Дізнайтеся більше про використання акселерометра ADXL335 з Arduino з нашими попередніми проектами:
- Система оповіщення про аварії на базі Arduino за допомогою GPS, GSM та акселерометра
- Гра в пінг-понг за допомогою Arduino та акселерометра
- Робот, керований жестами на основі акселерометра, за допомогою Arduino
- Сигналізація сповіщувача землетрусу за допомогою Arduino
Тут штифт акселерометра Xout та Yout підключені до аналогових, A0 та A1 висновків Arduino і для передачі сигналів від Arduino до системи тут використовується модуль Bluetooth HC-05, оскільки Bluetooth працює через Tx та Rx контактні з'єднання, тому ми використовуємо програмні послідовні висновки D2 і D3. Він підключається за допомогою послідовного програмного забезпечення, тому що якщо ми підключимо Bluetooth до апаратного послідовного і почнемо отримувати зчитування через консоль python, це буде відображати помилки для швидкості невідповідності передачі даних, оскільки Bluetooth буде взаємодіяти з пітоном на власній швидкості передачі даних. Дізнайтеся більше про використання модуля Bluetooth, переглядаючи різні проекти на основі Bluetooth, використовуючи різні мікроконтролери, включаючи Arduino.
Тут ми використали три кнопки - одну для спрацьовування повітряної миші, а інші дві для клацання лівою та правою кнопкою миші, як показано на малюнку нижче:
Процес обробки повітряної миші
Блок-схема показує технологічний процес роботи Arduino Air Mouse:
1. Система постійно перевіряє, чи натискається механічний спусковий гачок, доки він не буде натиснутий, і ми зможемо працювати нормально за допомогою комп'ютерної миші.
2. Коли система виявляє натискання кнопки, елемент керування мишею передається повітряній миші.
3. Після натискання кнопки спуску система починає передавати показання миші на комп'ютер. Зчитування системи складається з показань акселерометра та показань лівого та правого клацання.
4. Показання системи складаються з потоку даних 1 байт або 8 бітів, в якому перші три біти складаються з координат X, другі три біти складаються з координат Y, другий останній біт - це біт стану для отримання статус лівого клацання миші, а останній біт - це біт стану для отримання статусу правої кнопки миші.
5. Значення перших трьох бітів, тобто X-координата, може коливатися від 100 <= Xcord <= 999, тоді як значення для Y-координати може коливатися від 100 <= Ycord <= 800. Значення для клацання правою кнопкою миші та клацання лівою клавішею є двійковими значеннями або 0, або 1, в яких 1 означає, що клацання здійснено, а 0 - те, що користувач не здійснює клацання.
6. Щоб відбивання кнопки не впливало на положення курсору, після кожного натискання кнопки спуску миші зберігається відома затримка в 4 секунди.
7. Для правої та лівої клацання в повітряній миші ми повинні спочатку натиснути ліву або праву кнопку, а після цього натиснути кнопку спускового гачка, щоб перейти до положення повітряної миші, де ми хочемо.
Програмування Arduino для Air Mouse
Arduino слід запрограмувати на зчитування значень прискорення по осях X та Y. Повна програма дається в кінці, нижче наведені важливі фрагменти з коду.
Налаштування глобальних змінних
Як вже було сказано, ми підключимо модуль Bluetooth до послідовних контактів програмного забезпечення. Тож для встановлення послідовності програмного забезпечення нам потрібно оголосити бібліотеку програмного забезпечення серійною та налаштувати висновки для Tx та Rx. В Arduino Nano і Uno Pin 2 і 3 можуть працювати як програмні послідовники. Далі ми оголошуємо об’єкт Bluetooth із послідовної бібліотеки програмного забезпечення для встановлення контакту для Tx та Rx.
#включати
Налаштування порожнечі ()
У функції налаштування ми збираємося встановити змінні, щоб повідомити програмі, чи будуть вони діяти як вхідні чи вихідні дані. Кнопка тригера буде встановлена як вхідна підтяжка, а лівий та правий клацання оголошуються як вхідні та встановлюються як високі, щоб вони діяли як вхідні пульпи.
Також встановіть швидкість передачі даних для послідовного зв'язку та зв'язку Bluetooth на 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (тригер, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Цикл порожнечі ()
Як ми повинні були б спускову кнопку , щоб сказати, коли ми повинні направити систему потоку даних, тому ми створили весь код усередині в той час як цикл, який буде безперервно контролювати цифрове стан тригера підтягуючим, як вона йде на низькому рівні це буде передайте його далі для обробки.
Як ми прикріпили світлодіод, щоб повідомити нам про стан системи для того, коли натиснута кнопка запуску, ми спочатку встановити привели до низьких поза в той час циклу, як це умова по замовчуванням і високий всередині в той час як цикл, який буде загорятися світлодіод щоразу, коли натискається кнопка тригера.
Для читання стану кнопки лівого та правого клацання ми загалом оголосили дві змінні lclick і rclick , значення яких спочатку були встановлені на 0.
І в циклі встановіть значення цих змінних відповідно до цифрового стану кнопки лівого та правого клацання, щоб перевірити, натиснуті кнопки чи ні.
Ми зчитували б значення X та Y вихідних штифтів акселерометра, використовуючи функцію analogRead, і зіставляли б ці значення з розміром екрана, щоб вказівник миші рухався по всьому екрану. Оскільки розмір екрана - це пікселі на екрані, нам потрібно налаштувати його відповідно, і оскільки нам потрібно вихідне значення, яке має три цифри, ми навмисно встановили діапазон для X як 100 <= X <= 999 і, аналогічно, значення для Y як 100 <= Y <= 800. Пам'ятайте, що пікселі зчитуються з верхнього лівого кута, тобто верхній лівий кут має значення (0,0), але оскільки ми оголосили три цифри для x та y, наші значення будуть зчитуватися з точки (100 100).
Крім того, надрукуйте значення координат і стан клацання на послідовному та Bluetooth за допомогою функцій Serial.print та bluetooth.print, які вони допомагають отримувати значення на послідовному моніторі та через вашу систему через Bluetooth.
Нарешті, через відбивання кнопки одне значення може бути повторене, що призведе до того, що курсор миші затримається над однією позицією, тому, щоб позбутися цього, ми повинні додати цю затримку.
void loop () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = карта (xh, 286 429 100 999); ycord = карта (yh, 282 427 100 800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); ще Serial.print (0); if (rstate == LOW) Serial.print (1); ще Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); ще bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); ще bluetooth.print (0); затримка (4000); }}
Сценарій драйвера Python
На даний момент ми завершили роботу з апаратним забезпеченням та його частиною прошивки, тепер для роботи повітряної миші нам потрібен скрипт драйвера, який може декодувати сигнали від повітряної миші в рухи курсору, тому для цього ми вибрали Python. Python - це мова сценаріїв, і під сценаріями ми маємо на увазі, що це допомагає нам отримати контроль над іншою програмою, оскільки тут ми контролюємо курсор миші.
Тож відкрийте свою оболонку python і отримайте наступні бібліотеки, встановлені за допомогою команд нижче:
встановити серійний піп встановити
Серійний бібліотека для Python, який допомагає нам, щоб отримати дані з послідовних інтерфейсів, таких як COM - порти, а також дозволяє нам маніпулювати, тоді pyautogui є бібліотека для Python, щоб отримати контроль над функціями графічного інтерфейсу, в даному випадку, миша.
Тепер давайте перейдемо до коду драйверів, перше, що нам потрібно зробити, це імпортувати послідовну і pyautogui бібліотеки, а потім із послідовної бібліотеки, ми повинні встановити com-порт для зв'язку зі швидкістю передачі даних 9600, так само, як працює Bluetooth.serial . Для цього вам потрібно підключити модуль Bluetooth до вашої системи, а потім у системних налаштуваннях ви повинні перевірити, до якого порту він підключений.
Наступна справа - прочитати послідовний зв’язок з Bluetooth на систему і постійно підтримувати її, постійно зберігаючи решту коду в безперервному циклі за допомогою while 1.
Як вже було сказано, Arduino розсилає 8 бітів, перший 6 для координат, а останні два для стану кнопок. Тож прочитайте всі біти за допомогою ser.read і встановіть його довжину до 8 бітів.
Потім розділіть біти для координат курсору та клацання, нарізавши їх, а потім розділіть біти курсору на координати X та Y окремо. Те саме стосується лівого та правого клацання.
Тепер із зв'язку ми отримуємо байтовий рядок, і нам потрібно перетворити його в ціле число, щоб вони могли поміститися для координат, ми робимо це, декодуючи їх, а потім вводячи в цілі числа.
Тепер для переміщення курсору ми використовуємо функцію pyautogui moveto , яка приймає в якості аргументів цілочисельні координати і переміщує курсор у це положення.
Наступна перевірка на клацання, ми робимо це, використовуючи останні два біти та функцію клацання pyautogui, клік за замовчуванням залишається одним, однак ми можемо встановити його праворуч, оголосивши значення кнопки праворуч, ми також можемо визначити кількість кліків до встановіть для подвійного клацання, встановивши параметр кліків на 2.
Нижче наведено повний код Python, який буде запущений на комп'ютері:
імпорт серійний імпорт pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (кнопка = 'вправо', клацання = 2)
Тестування Arduino Air Mouse
Отже, для роботи Air Mouse підключіть до неї джерело живлення. Це може бути від слота Arduino Nano USB або від регульованого 5v джерела живлення за допомогою 7805 IC. Потім запустіть сценарій драйвера python, встановивши com-порт, до якого підключений ваш Bluetooth. У міру запуску сценарію ви бачите затримку в часі, коли блимає Bluetooth, це означає, що він підключений до вашої системи. Потім для його роботи натисніть кнопку спускового гачка, і ви побачите, що положення координат зміниться, і якщо ви хочете клацнути лівою або правою кнопкою миші, то спочатку натисніть ліву або праву кнопку та тригерну кнопку разом, ви побачите дію клацання на змінене розташування курсору.
Перегляньте детальне робоче відео нижче.