- Потребне компоненте
- Увод у АПДС-9960 дигитални близински РГБ сензор и покрет
- Кружни дијаграм
- Програмирање Ардуина за гестове и детекцију боја
Данас већина телефона долази са функцијом управљања покретима за отварање или затварање било које апликације, покретање музике, присуствовање позивима итд. Ово је врло згодна функција за уштеду времена, а такође изгледа и фино управљање било којим уређајем помоћу покрета. Раније смо користили акцелерометар за изградњу робота којим се управља гестама и ваздушног миша који контролише геста. Али данас учимо да повезујемо сензор покрета АПДС9960 са Ардуином. Овај сензор такође има РГБ сензор за откривање боја, који ће се такође користити у овом упутству. Дакле, не морате да користите одвојене сензоре за детекцију геста и боја, иако је доступан наменски сензор за детекцију боја - ТЦС3200 сензор у боји који смо већ користили са Ардуином за израду машине за сортирање боја.
Потребне компоненте
- Ардуино УНО
- АПДС9960 РГБ и сензор геста
- ЛЦД 16к2
- ДПДТ прекидач
- Пот 100К и отпорник 10К
- Помоћни каблови
Увод у АПДС-9960 дигитални близински РГБ сензор и покрет
АПДС9960 је вишенаменски сензор. Може да открије покрете, амбијентално осветљење и РГБ вредности у светлости. Овај сензор се такође може користити као сензор близине и углавном се користи у паметним телефонима за онемогућавање екрана осетљивог на додир током присуства позиву.
Овај сензор се састоји од четири фотодиоде. Ове фотодиоде детектују рефлектовану инфрацрвену енергију коју преноси уграђена ЛЕД. Дакле, кад год се изврши било какав гест, ова инфрацрвена енергија постаје ометана и рефлектује се натраг у сензор, сада сензор открива информације (смер, брзину) о гесту и претвара их у дигиталне информације. Овај сензор се може користити за мерење удаљености препреке откривањем рефлектоване ИЦ светлости. Има УВ и ИР филтере за блокирање за детекцију РГБ боја и производи 16-битне податке за сваку боју.
Извод сензора АПДС-9960 приказан је испод. Овај сензор ради на комуникацијском протоколу И 2 Ц. Троши струју од 1µА и напаја се од 3.3В, па будите опрезни и немојте га повезивати са 5В пином. ИНТ пин овде је прекидни пин који се користи за погон И 2 Ц комуникације. А ВЛ пин је опциони пин за напајање за уграђену ЛЕД диоду ако ПС краткоспојник није повезан. Ако је ПС краткоспојник затворен, тада требате напајати само ВЦЦ пин, он ће пружити напајање и модулу и ИР ЛЕД-у.
Кружни дијаграм
Везе за АПДС960 са Ардуином су врло једноставне. Користићемо ДПДТ дугме за пребацивање између два начина РГБ осетљивости и осетљивости геста. Прво су И2Ц комуникациони пинови СДА и СЦЛ АПДС9960 повезани на Ардуино пин А4 и А5. Као што је раније речено, радни напон сензора је 3,3 в, тако да су ВЦЦ и ГНД АПДС9960 повезани на 3,3 В и ГНД Ардуина. Прекидни пин (ИНТ) АПДС9960 повезан је са Д2 пином Ардуина.
За ЛЦД, пинови за податке (Д4-Д7) повезани су на дигиталне пинове Д6-Д3 Ардуина, а РС и ЕН пинови повезани су на Д6 и Д7 Ардуино. В0 ЛЦД екрана је повезан са лонцем, а 100К лонац се користи за контролу осветљености ЛЦД екрана. За ДПДТ дугмад користили смо само 3 пина. Други пин је повезан за Д7 пин Ардуина за улаз, а друга два су повезана на ГНД и ВЦЦ праћени отпорником од 10К.
Програмирање Ардуина за гестове и детекцију боја
Програмски део је једноставан и лаган, а комплетни програм са демо видеом дат је на крају овог водича.
Прво морамо да инсталирамо библиотеку коју је направио Спаркфун. Да бисте инсталирали ову библиотеку, идите на Скица-> Укључи библиотеку-> Управљање библиотекама.
Сада у траку за претрагу унесите „Спаркфун АПДС9960“ и кликните на дугме за инсталацију када видите библиотеку.
И ми смо спремни за полазак. Хајде да почнемо.
Дакле, прво морамо укључити све потребне датотеке заглавља. Прва датотека заглавља ЛикуидЦристал.х користи се за ЛЦД функције. Друга датотека заглавља Вире.х користи се за И 2 Ц комуникацију, а последња СпаркФун_АПДС996.х користи се за АПДС9960 сензор.
#инцлуде
Сада смо у следећим редовима дефинисали иглице за дугме и ЛЦД.
цонст инт буттонПин = 7; цонст инт рс = 12, ен = 11, д4 = 6, д5 = 5, д6 = 4, д7 = 3; ЛЦД ЛикуидЦристал (рс, ен, д4, д5, д6, д7);
У следећем делу дефинисали смо макро за пин прекида који је повезан на дигитални пин 2 и једну променљиву буттонСтате за тренутно стање дугмета и иср_флаг за рутину услуге прекида.
#дефине АПДС9960_ИНТ 2 инт буттонСтате; инт иср_флаг = 0;
Следеће се креира објекат за СпаркФун_АПДС9960, тако да можемо приступити покретима покрета и дохватити РГБ вредности.
СпаркФун_АПДС9960 апдс = СпаркФун_АПДС9960 (); уинт16_т амбиент_лигхт = 0; уинт16_т ред_лигхт = 0; уинт16_т греен_лигхт = 0; уинт16_т блуе_лигхт = 0;
У функцији подешавања , први ред је преузимање вредности са дугмета (ниско / високо), а други и трећи ред дефинишу прекид и пин дугмета као улаз. апдс.инит () иницијализује АПДС9960 сензор, а лцд.бегин (16,2) иницијализује ЛЦД.
воид сетуп () { буттонСтате = дигиталРеад (буттонПин); пинМоде (АПДС9960_ИНТ, ИНПУТ); пинМоде (буттонПин, ИНПУТ); апдс.инит (); лцд.бегин (16, 2); }
У функцији петље први ред добија вредности са дугмета и чува их у претходно дефинисаној променљивој буттонСтате . Сада у следећим редовима проверавамо вредности са дугмета, ако је висока онда омогућимо сензор светлости, а ако је низак иницијализујемо сензор геста.
АттацхИнтеррупт () је функција се користи за спољну прекид који је у овом случају сензора прекид. Први аргумент у овој функцији је број прекида. У Ардуину УНО постоје два дигитална пина за прекиде - 2 и 3 означена са ИНТ.0 и ИНТ.1. И спојили смо га на пин 2, па смо тамо написали 0. Други аргумент позива функцију интерруптРоутине () која је касније дефинисана. Последњи аргумент је ПАДАЊЕ тако да ће покренути прекид када пин пређе са високог на нижи ниво. Овде сазнајте више о Ардуино прекидима.
воид лооп () { буттонСтате = дигиталРеад (буттонПин); иф (буттонСтате == ХИГХ) { апдс.енаблеЛигхтСенсор (труе); }
У следећем делу проверавамо да ли има дугмета. Ако је висока, покрените поступак за РГБ сензор. Затим проверите да ли сензор светлости очитава вредности или не. Ако не може да прочита вредности, у том случају одштампајте ону „ Грешка при читању светлосних вредности“. А ако тада може да прочита вредности, упоредите вредности три боје и која год да је највећа, одштампајте ту боју на ЛЦД.
иф (буттонСтате == ХИГХ) { иф (! апдс.реадАмбиентЛигхт (амбиент_лигхт) - ! апдс.реадРедЛигхт (ред_лигхт) - ! апдс.реадГреенЛигхт (греен_лигхт) - ! апдс.реадБлуеЛигхт (блуе_лигхт)) { лцд.принт („Грешка при читању светлосних вредности“); } елсе { иф (ред_лигхт> греен_лигхт) { иф (ред_лигхт> блуе_лигхт) { лцд.принт ("Ред"); кашњење (1000); лцд.цлеар (); } ……. ………..
У следећим редовима поново проверите да ли је дугме за дугме, а ако је мало, обрадите сензор геста. Затим проверите да ли је иср_флаг и ако је 1 онда се позива функција детацхИнтеррупт () . Ова функција се користи за искључивање прекида. Следећи ред позива хандлеГестуре () који је функција дефинисана касније. У следећим следећим редовима дефинишите иср_флаг на нулу и приложите прекид.
иначе иф (буттонСтате == ЛОВ) { иф (иср_флаг == 1) { детацхИнтеррупт (0); хандлеГестуре (); иср_флаг = 0; аттацхИнтеррупт (0, интерруптРутине, ФАЛЛИНГ); } }
Следећа је функција интерруптРоутине () . Ова функција се користи за окретање променљиве иср_флаг 1, тако да се услуга прекида може покренути.
воид интерруптРоутине (). { иср_флаг = 1; }
Функција хандлеГестуре () је дефинисана у следећем делу. Ова функција прво проверава доступност сензора покрета. Ако је доступан, онда чита вредности покрета и проверава који је то гест (ГОРЕ, ДОЉЕ, ДЕСНО, ЛЕВО, ДАЛЕКО, БЛИЗУ) и штампа одговарајуће вредности на ЛЦД.
воид хандлеГестуре () { иф (апдс.исГестуреАваилабле ()) { свитцх (апдс.реадГестуре ()) { цасе ДИР_УП: лцд.принт ("УП"); кашњење (1000); лцд.цлеар (); пауза; случај ДИР_ДОВН: лцд.принт ("ДОЛЕ"); кашњење (1000); лцд.цлеар (); пауза; случај ДИР_ЛЕФТ: лцд.принт ("ЛЕВО"); кашњење (1000); лцд.цлеар (); пауза; случај ДИР_РИГХТ: лцд.принт ("ДЕСНО"); кашњење (1000); лцд.цлеар (); пауза; случај ДИР_НЕАР: лцд.принт ("НЕАР"); кашњење (1000); лцд.цлеар (); пауза; случај ДИР_ФАР: лцд.принт ("ФАР"); кашњење (1000); лцд.цлеар (); пауза; подразумевано: лцд.принт ("НОНЕ"); кашњење (1000); лцд.цлеар (); } } }
На крају, отпремите код у Ардуино и сачекајте да се сензор покрене. Сада док је дугме ИСКЉУЧЕНО, значи да је у режиму покрета. Покушајте да померите руке у левом, десном, горе, доле смеру. За даљњи покрет држите руку на удаљености од 2-4 инча од сензора 2-3 секунде и уклоните је. А за покрет у близини држите руку далеко од сензора, а затим је приклоните и уклоните.
Сада УКЉУЧИТЕ дугме да бисте га пребацили у режим очитавања боја и узмите црвене, плаве и зелене предмете један по један у близини сензора. Исписаће боју предмета.