- Предуслови
- Кружни дијаграм
- Ток процеса за ваздушног миша
- Програмирање Ардуина за ваздушни миш
- Питхон Дривер Сцрипт
- Тестирање Ардуино ваздушног миша
Да ли сте се икад запитали како се наш свет креће ка уроњеној стварности. Непрекидно проналазимо нове начине и методе за интеракцију са нашим окружењем користећи виртуелну стварност, мешовиту стварност, проширену стварност итд. Свакодневно излазе нови уређаји са овим технологијама брзог ритма како би нас импресионирали својим новим интерактивним технологијама.
Ове потапајуће технологије користе се у играма, интерактивним активностима, забави и многим другим апликацијама. У овом упутству ћемо знати о таквој интерактивној методи која вам даје нови начин интеракције са вашим системом уместо да користите досадног миша. Наши гејкови морају знати да неколико година уназад Нинтендо компанија за игре на срећу продаје идеју 3Д интерактивне методе за интеракцију са њиховим конзолама уз помоћ ручног контролера познатог као Вии контролер. Користи акцелерометар за проналажење ваших гестова за игру и бежично слање у систем. Ако желите да сазнате више о овој технологији, можете погледати њихов патент ЕП1854518Б1, то ће вам дати потпуну представу о томе како ова технологија функционише.
Инспирисани овом идејом, направићемо „ваздушног миша“ за интеракцију са системима само померањем конзоле у ваздуху, али уместо да користимо тродимензионалне референце координата, користићемо само дводимензионалне референце координата, тако да можемо имитирати рад рачунарског миша пошто миш ради у две димензије Кс и И.
Концепт који стоји иза овог бежичног 3Д ваздушног миша врло је једноставан, користићемо акцелерометар да бисмо добили вредност убрзања радњи и кретања „ваздушног миша“ дуж к и и осе, а затим на основу вредности акцелерометар ћемо контролисати курсор миша и изводити одређене радње уз помоћ софтверских управљачких програма питхон који раде на рачунару.
Предуслови
- Ардуино Нано (било који модел)
- Модул акцелерометра АДКСЛ335
- Блуетоотх ХЦ-05 модул
- Тастери
- Питхон инсталиран рачунар
Да бисте сазнали више о инсталирању питхон-а у рачунар, следите претходни водич о Ардуино-Питхон ЛЕД Цонтроллинг-у.
Кружни дијаграм
Да бисте управљали рачунаром покретима руке, потребан вам је акцелерометар који даје убрзање дуж Кс и И осе, а да би цео систем постао бежичан, Блуетоотх модул се користи за бежични пренос сигнала у ваш систем.
Овде се користи акцелерометар АДКСЛ335, то је троструки осовински модул заснован на МЕМС-у који избацује убрзање дуж Кс, И и З осе, али као што је претходно речено за управљање мишем требало би нам убрзање само дуж Кс и И осе. Сазнајте више о коришћењу АДКСЛ335 акцелерометра са Ардуином са нашим претходним пројектима:
- Систем за узбуњивање незгода на бази Ардуина који користи ГПС, ГСМ и акцелерометар
- Пинг Понг игра користећи Ардуино и Акцелерометар
- Робот управљан гестовима на основу акцелерометра користећи Ардуино
- Аларм за детектор земљотреса користећи Ардуино
Овде су Ксоут и Иоут пин акцелерометара повезани на аналогне, А0 и А1 пинове Ардуина и за пренос сигнала са Ардуина на систем овде се користи Блуетоотх модул ХЦ-05, с обзиром да Блуетоотх ради преко Тк и Рк пин везе, тако да користимо софтверске серијске пинове Д2 и Д3. Повезан је помоћу софтверског серијског, јер ако повежемо Блуетоотх са хардверским серијским и почнемо да добијамо очитања преко питхон конзоле, показаће се грешке у брзини неподударања брзина, јер би Блуетоотх комуницирао са питхоном на сопственој брзини преноса. Сазнајте више о коришћењу Блуетоотх модула пролазећи кроз разне пројекте засноване на Блуетоотх-у користећи различите микроконтролере, укључујући Ардуино.
Овде смо користили три тастера - један за активирање ваздушног миша, а други два за леви и десни клик као што је приказано на доњој слици:
Ток процеса за ваздушног миша
Дијаграм тока приказује ток процеса ваздушног миша заснованог на Ардуину:
1. Систем непрекидно проверава да ли се притиска механички окидач док се не притисне да бисмо могли нормално да вежбамо помоћу рачунарског миша.
2. Када систем детектује притискање тастера, контрола миша се преноси на ваздушни миш.
3. Када се притисне дугме окидача, систем почиње да преноси очитавања миша на рачунар. Системско очитавање састоји се од очитавања акцелерометра и очитавања за леви и десни клик.
4. Очитавања система састоје се од тока података од 1 бајта или 8 битова, у којем се прва три бита састоје од Кс-координата, друга три бита састоје се од И-координата, други последњи бит је статусни бит за добијање статус левог клика миша и последњи бит је статусни бит за добивање статуса десног клика.
5. Вредност прва три бита, односно Кс-координата може се кретати од 100 <= Ксцорд <= 999, док се вредност за И-координату може кретати од 100 <= Ицорд <= 800. Вредности за десни клик и леви клик су бинарне вредности или 0 или 1 у којима 1 означава да је клик извршен, а 0 да корисник није извршио клик.
6. Да одбијање дугмета не би утицало на положај курсора, задржава се познато одлагање од 4 секунде након сваког клика на дугме окидача миша.
7. За десни и леви клик у ваздушном мишу прво морамо притиснути леви или десни тастер, а након тога морамо притиснути дугме окидача да бисмо се померили у положај ваздушног миша тамо где желимо.
Програмирање Ардуина за ваздушни миш
Ардуино треба програмирати да очитава вредности убрзања у Кс и И оси. Комплетан програм се даје на крају, испод су важни фрагменти са кодом.
Постављање глобалних променљивих
Као што је претходно речено, повезаћемо Блуетоотх модул са софтверским серијским пиновима. Дакле, да бисмо поставили серијски софтвер, морамо прогласити библиотеку серијског софтвера и поставити пинове за Тк и Рк. У Ардуино Нано и Уно Пин 2 и 3 могу радити као серијски софтвер. Даље, декларишемо Блуетоотх објекат из серијске библиотеке софтвера за постављање пина за Тк и Рк.
#инцлуде
Поништавање подешавања ()
У функцији подешавања поставићемо променљиве како би програму рекли да ли ће деловати као улаз или излаз. Дугме окидача би било постављено као повлачење улаза, а леви и десни клик се проглашавају улазним и постављају као високи да би се понашали као улазни пуллупови.
Такође подесите брзину преноса за серијску и Блуетоотх комуникацију на 9600.
воид сетуп () { пинМоде (к, ИНПУТ); пинМоде (и, ИНПУТ); пинМоде (окидач, ИНПУТ_ПУЛЛУП) пинМоде (лцлицк, ИНПУТ); пинМоде (рцлицк, ИНПУТ); пинМоде (лед, ИЗЛАЗ); дигиталВрите (лцлицк, ХИГХ); дигиталВрите (рцлицк, ХИГХ); Сериал.бегин (9600); блуетоотх.бегин (9600); }
Воид лооп ()
Као што би нам било потребно дугме окидача да бисмо знали када треба да систему пошаљемо ток података, тако смо поставили читав код унутар вхиле петље која ће континуирано надгледати дигитално стање пулл-уп окидача, јер се спушта ниско предати даље на обраду.
Како смо приложили ЛЕД да нас обавештавају о статусу система када се притисне дугме окидача, првобитно смо поставили лед на лов изван вхиле петље као подразумеваног стања и високо унутар вхиле петље која ће осветлити лед кад год се притисне дугме окидача.
Да бисмо прочитали статус дугмета за леви и десни клик, глобално смо прогласили две променљиве лцлицк и рцлицк чије су вредности првобитно постављене на 0.
И у петљи подесите вредност тих променљивих према дигиталном статусу левог и десног дугмета да бисте проверили да ли су тастери притиснути или не.
Читали бисмо вредности Кс и И излазних пинова акцелерометра користећи функцију аналогРеад и мапирали бисмо те вредности у величину екрана да би се показивач миша кретао по целом екрану. Будући да су величина екрана пиксели на екрану, морамо је подесити у складу с тим, а како нам је потребна излазна вредност од три цифре, намерно смо поставили опсег за Кс као 100 <= Кс <= 999 и слично вредност за И као 100 <= И <= 800. Запамтите, пиксели се читају из горњег левог угла, тј. Горњи леви угао има вредност (0,0), али пошто смо прогласили три цифре за к и и, наше вредности би се читале из тачке (100.100).
Даље, одштампајте вредност координата и статус клика преко серијског и Блуетоотх-а уз помоћ функција Сериал.принт и блуетоотх.принт које помажу у преношењу вредности на серијски монитор и преко вашег система путем Блуетоотх-а.
Напокон, због одбијања дугмета може се поновити једна вредност која би довела до задржавања курсора миша на једном положају, па да бисмо се тога решили морамо додати ово одлагање.
воид лооп () { дигиталВрите (лед, ЛОВ); вхиле (дигиталРеад (покретач) == ЛОВ) { дигиталВрите (лед, ХИГХ); лстате = дигиталРеад (лцлицк); рстате = дигиталРеад (рцлицк); кх = аналогРеад (к); их = аналогРеад (и); кцорд = мапа (кх, 286,429,100,999); ицорд = мапа (их, 282.427.100.800); Сериал.принт (кцорд); Сериал.принт (ицорд); иф (лстате == ЛОВ) Сериал.принт (1); елсе Сериал.принт (0); иф (рстате == ЛОВ) Сериал.принт (1); елсе Сериал.принт (0); блуетоотх.принт (кцорд); блуетоотх.принт (ицорд); иф (лстате == ЛОВ) блуетоотх.принт (1); иначе блуетоотх.принт (0); иф (рстате == ЛОВ) блуетоотх.принт (1); иначе блуетоотх.принт (0); кашњење (4000); }}
Питхон Дривер Сцрипт
До сада смо завршили са хардвером и његовим фирмваре-ом, сада да би ваздушни миш радио, морамо имати скрипту управљачког програма која би могла декодирати сигнале из ваздушног миша у покрете курсора, па смо за ово изабрали Питхон. Питхон је скриптни језик и овде под скриптирањем подразумевамо да нам помаже да добијемо контролу над другим програмом, као што овде контролирамо курсор миша.
Дакле, отворите своју питхон љуску и инсталирајте следеће библиотеке помоћу наредби испод:
пип инсталл сериал пип инсталл пиаутогуи
Серијски је библиотека за питона који нам помаже да се подаци из серијског интерфејса, као што су ЦОМ порта и такође нам омогућава да манипулишу, док пиаутогуи је библиотека за питон да преузме контролу над ГУИ функција, у овом случају, миш.
Сада ћемо доћи до кода за управљачке програме, прво што треба да урадимо је увоз серијске и пиаутогуи библиотеке, а затим из серијске библиотеке морамо да поставимо цом порт за комуникацију брзином преноса од 9600, исто као и Блуетоотх.сериал ради на. Да бисте то урадили, морате повезати Блуетоотх модул са системом, а затим у системским подешавањима требате проверити на који цом порт је повезан.
Следећа ствар је читати серијску комуникацију са Блуетоотх-а на систем и непрекидно га непрекидно држати у непрекидној петљи кода уз помоћ док 1.
Као што је претходно речено, Ардуино шаље 8 битова, првих 6 за координате, а последња два за статус тастера за клик. Дакле, прочитајте све битове уз помоћ сер.реад и подесите његову дужину на 8 битова.
Затим поделите битове за координате курсора и кликове тако што ћете их исећи, а затим даље сечите битове курсора на Кс и И координате одвојено. Исто важи и за леви и десни клик.
Сада из комуникације добијамо низ бајтова и морамо га претворити у цео број како би могли да се уклопе у координате. То радимо декодирањем и потом укуцавањем у целобројне бројеве.
Сада за померање курсора користимо функцију пиаутогуи мовето , која узима као аргументе те целобројне координате и помера курсор на ту позицију.
Следећа провера за кликове, то радимо коришћењем последња два бита и пиаутогуи-јевом функцијом клика, задати клик је леви, међутим можемо је поставити удесну декларишући вредност дугмета удесно, такође можемо дефинисати број кликова на подесите га на двоструки клик подешавањем параметра кликова на 2.
Испод је целокупни Питхон код који треба покренути на рачунару:
импорт сериал импорт пиаутогуи сер = сериал.Сериал ('цом3', 9600) вхиле 1: к = сер.реад (8) цурсор = к цлицк = к к = цурсор и = цурсор л = цлицк р = цлицк кцор = инт (к.децоде ('утф-8')) ицор = инт (и.децоде ('утф-8')) пиаутогуи.мовеТо (кцор, ицор) иф л == 49: пиаутогуи.цлицк (цлицкс = 2) елиф р = = 49: пиаутогуи.цлицк (дугме = 'десно', кликови = 2)
Тестирање Ардуино ваздушног миша
Дакле, за управљање ваздушним мишем прикључите му извор напајања. Може бити из Ардуино Нано УСБ слота или из 5в регулисаног напајања помоћу 7805 ИЦ. Затим покрените скрипту за питхон управљачки програм подешавањем цом порта на који је повезан Блуетоотх. Како се скрипта изводи, видећете временски заостатак трептања Блуетоотх-а, што значи да је повезан са вашим системом. Затим за његово руковање притисните дугме окидача и видели бисте да би се положај координата променио и ако желите леви или десни клик, а затим прво притисните леви или десни тастер и дугме окидача, видећете акцију клика на промењена локација курсора.
Погледајте детаљан радни видео испод.