- Предварителни условия
- Електрическа схема
- Процес на потока за въздушната мишка
- Програмиране на Arduino за Air Mouse
- Python Driver Script
- Тестване на Arduino Air Mouse
Някога чудили ли сте се как нашият свят се движи към завладяващата реалност. Непрекъснато откриваме нови начини и методи за взаимодействие с обкръжаващата ни среда, използвайки виртуална реалност, смесена реалност, добавена реалност и др. Нови устройства излизат всеки ден с тези бързи темпове, за да ни впечатлят от новите си интерактивни технологии.
Тези потапящи технологии се използват в игри, интерактивни дейности, развлечения и много други приложения. В този урок ще знаем за такъв интерактивен метод, който ви дава нов начин за взаимодействие с вашата система, вместо да използвате скучна мишка. Нашите играчи трябва да знаят, че преди няколко години Nintendo компания за игри продава идея за 3D интерактивен метод за взаимодействие с техните конзоли с помощта на ръчен контролер, известен като Wii контролер. Той използва акселерометъра, за да намери вашите жестове за игра и да ги изпрати безжично към системата. Ако искате да научите повече за тази технология, можете да разгледате техния патент EP1854518B1, това ще ви даде пълна представа за това как работи тази технология.
Вдъхновени от тази идея, ще направим „Въздушна мишка“, за да взаимодействаме със системите само чрез преместване на конзолата във въздуха, но вместо да използваме триизмерни координатни референции, ще използваме само двуизмерни координатни референции, така че можем да имитираме действията на компютърната мишка, тъй като мишката работи в две измерения X и Y.
Концепцията зад тази безжична 3D въздушна мишка е много проста, ще използваме акселерометър, за да получим стойността на ускорението на действията и движенията на „въздушната мишка“ по оста x и y, а след това на базата на стойностите на акселерометърът ще контролираме курсора на мишката и ще изпълняваме определени действия с помощта на софтуерните драйвери на python, работещи на компютър.
Предварителни условия
- Arduino Nano (всеки модел)
- Модул акселерометър ADXL335
- Модул Bluetooth HC-05
- Бутони
- Компютър с инсталиран Python
За да научите повече за инсталирането на python в компютър, следвайте предишния урок за Arduino-Python LED Controlling.
Електрическа схема
За да управлявате компютъра си с движенията на ръката си, ви е необходим акселерометър, който издава ускорението по оста X и Y и за да направи цялата система безжична, се използва Bluetooth модул за безжично предаване на сигнала към вашата система.
Тук се използва акселерометър 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 ще комуникира с python на своя собствена скорост на предаване. Научете повече за използването на 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.
#include
Настройка за празнота ()
Във функцията за настройка ще зададем променливите, за да кажем на програмата дали ще действат като вход или изход. Бутонът за задействане ще бъде настроен като входно издърпване, а лявото и дясното щракване се декларират като входно и се настройват като високо, за да действат като входни издърпвания.
Също така задайте скоростта на предаване за серийна и 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); }
Цикъл Void ()
Тъй като бихме се нуждали от бутон за задействане, за да кажем кога трябва да изпратим на системата потока от данни, така настроихме целия код вътре в цикъл while, който непрекъснато ще наблюдава цифровото състояние на изтеглящия спусък, тъй като той отива ниско, ще предайте го за обработка.
Тъй като прикачихме светодиод, който да ни информира за състоянието на системата, когато бутонът на спусъка е натиснат, първоначално зададохме led на ниско ниво извън цикъл while като това е условие по подразбиране и високо вътре в цикъл while, което ще светне led при всяко натискане на бутона за задействане.
За да прочетем състоянието на бутона за ляв и десен бутон, ние декларирахме глобално две променливи 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 () { digitalWrite (led, LOW); докато (digitalRead (спусък) == 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); ако (lstate == LOW) bluetooth.print (1); друго bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); иначе bluetooth.print (0); забавяне (4000); }}
Python Driver Script
Към момента приключихме с хардуера и неговата част на фърмуера, сега, за да работи въздушната мишка, трябва да имаме скрипт на драйвер, който може да декодира сигналите от въздушната мишка в движенията на курсора, така че за това избрахме Python. Python е скриптов език и под скриптове тук имаме предвид, че ни помага да получим контрола върху другата програма, тъй като тук контролираме курсора на мишката.
Така че отворете вашата обвивка на python и инсталирайте следните библиотеки, като използвате командите по-долу:
pip install serial pip install pyautogui
В сериала е библиотека за питон, който ни помага да получите данни от серийни интерфейси като COM портове, а също ни позволява да го манипулират, докато pyautogui е библиотека за питон, за да получите контрол върху функциите на GUI, в този случай, мишка.
Сега нека да стигнем до кода за драйверите, първото нещо, което трябва да направим, е да импортираме серийната и pyautogui библиотеките, а след това от серийната библиотека, трябва да зададем com порта за комуникация със скорост на предаване 9600, същото като Bluetooth.serial работи на. За това трябва да свържете Bluetooth модула към вашата система и след това в системните настройки трябва да проверите към кой com порт е свързан.
Следващото нещо е да прочетете серийната комуникация от Bluetooth към системата и да я поддържате непрекъснато, поддържайте останалата част от кода в непрекъснат цикъл с помощта на while 1.
Както беше казано по-рано, че Arduino изпраща 8 бита, първо 6 за координатите и последните две за състоянието на бутоните за щракване. Така че прочетете всички битове с помощта на ser.read и задайте дължината му на 8 бита.
След това разделете битовете за координатите на курсора и щракнете, като ги нарязвате, и след това разделяйте битовете на курсора на координати X и Y отделно. Същото важи и за левия и десния бутон.
Сега от комуникацията получаваме байтов низ и трябва да го преобразуваме в цяло число, за да могат да се поберат за координатите, правим това, като ги декодираме и след това ги въвеждаме в цели числа.
Сега, за да преместите курсора използваме pyautogui moveto функция, която приема като аргументи тези координати цяло число и премества курсора тази позиция.
Следваща проверка за кликванията, ние правим това, като използваме последните два бита и функцията за щракване на pyautogui, кликването по подразбиране е ляво, но можем да го зададем вдясно, като декларираме стойността на бутона вдясно, можем също да дефинираме броя на кликванията към задайте го на двойно щракване, като настроите параметъра за щраквания на 2.
По-долу е даден пълният код на Python, който ще се изпълнява на компютъра:
импортиране сериен импорт pyautogui ser = serial.Serial ('com3', 9600) докато 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) ако l == 49: pyautogui.click (щраквания = 2) elif r = = 49: pyautogui.click (бутон = 'надясно', кликвания = 2)
Тестване на Arduino Air Mouse
Така че, за да работите с Air Mouse, прикрепете към нея източник на захранване. Може да бъде от USB слота Arduino Nano или от 5v регулирано захранване, използващо 7805 IC. След това стартирайте скрипта на драйвера на python, като зададете com порта, към който е свързан вашият Bluetooth. Докато скриптът работи, ще видите забавяне във времето при мигане на Bluetooth, което означава, че е свързан с вашата система. След това, за да го задействате, щракнете върху бутона за задействане и ще видите положението на координатите ще се промени и ако искате лявото или дясното щракване, след това първо натиснете бутон за ляво или дясно и бутона за задействане, ще видите действието на щракването при променено местоположение на курсора.
Проверете подробното работещо видео по-долу.