Բովանդակություն:
- Քայլ 1. Շրջանների ակնարկ
- Քայլ 2: Softwareրագրաշարի ակնարկ
- Քայլ 3. Փորձարկեք APDS9960 չփակող ժեստերի զգայարանների սարքը
- Քայլ 4: Եզրակացություն
- Քայլ 5: Հղումներ
Video: Չարգելափակող APDS9960 Gեստերի ցուցիչի իրականացում. 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Նախաբան
Այս Ուղեցույցը մանրամասնում է, թե ինչպես կարելի է ստեղծել APDS9960 ժեստերի ցուցիչի ոչ արգելափակող իրականացում SparkFun_APDS-9960_Sensor_Arduino_Library- ի միջոցով:
Ներածություն
Այսպիսով, դուք հավանաբար ինքներդ ձեզ հարցնում եք, թե որն է չարգելափակելը: Կամ նույնիսկ արգելափակում այդ հարցում:
Ավելի կարևոր է, թե ինչու է կարևոր որևէ բանի չարգելափակումը ճիշտ լինել:
Լավ, այնպես որ, երբ միկրոպրոցեսորը գործարկում է ծրագիր, այն հաջորդաբար կատարում է կոդի տողեր և դրանով իսկ կանչեր և վերադառնում գործառույթներին `ըստ ձեր գրած կարգի:
Արգելափակման զանգը պարզապես ցանկացած տեսակի ֆունկցիոնալության զանգ է, որն առաջացնում է կատարման դադարեցում, ինչը նշանակում է ֆունկցիայի կանչ, որտեղ զանգահարողը չի վերսկսի կատարումը մինչև կանչված գործառույթի կատարման ավարտը:
Ուրեմն ինչու է սա կարևոր:
Այն դեպքում, երբ դուք գրել եք ինչ -որ ծածկագիր, որը պետք է պարբերաբար կատարի բազմաթիվ գործառույթներ, ինչպիսիք են ՝ ջերմաստիճանը կարդալը, կոճակը կարդալը և էկրանը թարմացնելը, եթե ցուցադրման թարմացման ծածկագիրը արգելափակող զանգ լինի, ձեր համակարգը չի արձագանքի կոճակը սեղմում է և փոխում ջերմաստիճանը, քանի որ պրոցեսորն իր ամբողջ ժամանակը կանցկացնի սպասելով էկրանին թարմացմանը և չի կարդա կոճակի կարգավիճակը կամ վերջին ջերմաստիճանը:
Իմ կողմից, ես ուզում եմ ստեղծել MQTT WiFi- ով աշխատող IoT աշխատասեղան, որը կարդում է ինչպես տեղական, այնպես էլ հեռավոր ջերմաստիճանի/խոնավության արժեքները, շրջապատի լույսի մակարդակը, բարոմետրիկ ճնշումը, հետևում է ժամանակին, ցուցադրում է այս բոլոր պարամետրերը LCD- ով, մուտքագրում uSD քարտը իրական ժամանակում, կարդալ կոճակի մուտքերը, գրել ելքային LED- ներին և վերահսկել ժեստերը ՝ IoT ենթակառուցվածքի իրերը վերահսկելու համար, և որոնք բոլորը պետք է վերահսկվեն ESP8266-12- ով:
Unfortunatelyավոք, APDS9960 գրադարանի միակ երկու աղբյուրները, որոնք ես կարողացա գտնել, SparkFun և AdaFruit գրադարաններն էին, որոնք երկուսն էլ պատռված էին Avago- ի (ADPS9960 արտադրող) հայտի ծածկագրից և ունեին «readGesture» կոչով զանգ, որը պարունակում էր որոշ ժամանակ (1) {}; հանգույց, որը երբ օգտագործվում է վերը նշված նախագծում, առաջացնում է ESP8266-12E- ի վերականգնում, երբ ADPS9960 սենսորը հագեցած է լինում (այսինքն. երբ օբյեկտը մնում է մոտակայքում, կամ սենսորը լուսավորող այլ IR աղբյուր):
Հետևաբար, այս վարքագիծը լուծելու համար ես ընտրեցի theեստերի մշակումը տեղափոխել երկրորդ պրոցեսոր, որի միջոցով ESP8266-12E- ն դարձավ հիմնական միկրոկոնտրոլերը, իսկ այս համակարգը ՝ ստրուկը, ինչպես պատկերված է վերևում 1-ին և 2-րդ նկարներում, Համակարգի ակնարկ և Համակարգի կազմի համապատասխանաբար:. 3 -րդ նկարը ցույց է տալիս սխեմայի նախատիպը:
Իմ գոյություն ունեցող կոդի մեջ անհրաժեշտ փոփոխությունները սահմանափակելու համար ես նաև գրեցի փաթաթման դաս/գրադարան, որը երևակայականորեն կոչվում է «APDS9960_NonBlocking»:
Ստորև ներկայացնում ենք չարգելափակող լուծման մանրամասն բացատրությունը:
Ի՞նչ մասեր են ինձ պետք:
Եթե ցանկանում եք կառուցել I2C լուծումը, որն աշխատում է APDS9960_NonBlocking գրադարանի հետ, ձեզ կպահանջվեն հետևյալ մասերը.
- 1 զեղչ ATMega328P այստեղ
- 1 զեղչ PCF8574P այստեղ
- 6 -ից 10K դիմադրողներ այստեղ
- 4 անջատված 1K դիմադրիչներ այստեղ
- 1 զեղչ 1N914 դիոդ այստեղ
- 1 զեղչ PN2222 NPN տրանզիստոր այստեղ
- 16 ՄՀց բյուրեղից այստեղ 1
- 2 զեղչ 0.1uF կոնդենսատորներ այստեղ
- 1 -ից 1000uF էլեկտրոլիտիկ կոնդենսատոր այստեղ
- 1u 10uF էլեկտրոլիտիկ կոնդենսատոր այստեղ
- 2 անջատված 22pF կոնդենսատորներ այստեղ
Եթե ցանկանում եք կարդալ ժեստերի ցուցիչի ելքը զուգահեռ ինտերֆեյսի միջոցով, ապա կարող եք թողնել PCF8574P- ն և երեք անջատիչ 10K ռեզիստորները:
Ինչ ծրագրային ապահովման կարիք ունեմ:
Arduino IDE 1.6.9
Ի՞նչ հմտություններ են ինձ պետք:
Համակարգը կարգավորելու համար օգտագործեք աղբյուրի կոդը (տրամադրված է) և ստեղծեք անհրաժեշտ սխեմաներ, ձեզ հարկավոր կլինի հետևյալը.
- Էլեկտրոնիկայի նվազագույն տիրապետում,
- Arduino- ի և դրա IDE- ի իմացություն,
- Ներկառուցված Arduino- ի ծրագրավորման ձևի իմացություն (տե՛ս Instructable 'Programming the ATTiny85, ATTiny84 and ATMega328P: Arduino As ISP')
- Որոշ համբերություն:
Coveredածկված թեմաներ
- Շղթայի համառոտ ակնարկ
- Bրագրաշարի համառոտ ակնարկ
- APDS9960 ժեստերի զգացողության սարքի փորձարկում
- Եզրակացություն
- Հղումներ
Քայլ 1. Շրջանների ակնարկ
Շղթան բաժանված է երկու մասի.
- Առաջինը I2C- ի զուգահեռ փոխակերպումն է, որն իրականացվում է R8… 10 և IC1 դիմադրիչների միջոցով: Այստեղ R8… R10- ը սահմանեց I2C հասցեն 8 բիթանոց I/O ընդլայնիչ չիպի IC1- ի և NXP PCF8574A- ի համար: Այս սարքի հասցեների վավեր տիրույթները համապատասխանաբար 0x38… 0x3F են: I2C ծրագրային օրինակում տրված «I2C_APDS9960_TEST.ino» «#սահմանել GESTURE_SENSOR_I2C_ADDRESS» հասցեների այս տիրույթին համապատասխանեցնելու կարիք կա:
-
Բոլոր մյուս բաղադրիչները կազմում են ստրուկի մեջ տեղադրված Arduino Uno- ն և ունեն հետևյալ գործառույթները.
- R1, T1, R2 և D1- ը տրամադրում են ստրուկ սարքի վերակայման մուտքագրում: Այստեղ ակտիվ բարձր զարկերակը IC1 - P7- ի վրա կստիպի U1- ին վերակայել:
- R3, R4- ը ներկառուցված սարքի համար ընթացիկ սահմանափակող դիմադրիչներ են, որոնք ծրագրավորում են TX/RX գծերը:
- C5- ը և R7- ը թույլ են տալիս Arduino IDE- ին ինքնաբերաբար ծրագրավորել U1- ը զարկերակի միջոցով կցված FTDI սարքի DTR գծի վրա:
- R5- ը և R6- ը I2C- ն են APDS9960- ի համար ձգվող դիմադրիչներ C6- ով, որն ապահովում է տեղական մատակարարման երկաթուղու անջատումը:
- U1, C1, C2 և Q1- ը կազմում են համապատասխանաբար տեղադրված Arduino Uno- ն և ժամացույցը:
- Վերջապես C3 և C4- ը ապահովում են տեղական մատակարարման երկաթուղու անջատումը U1- ի համար:
Քայլ 2: Softwareրագրաշարի ակնարկ
Նախաբան
Այս աղբյուրի ծածկագիրը հաջողությամբ կազմելու համար ձեզ հարկավոր են հետևյալ լրացուցիչ գրադարանները ՝ ներկառուցված Arduino Uno U1 ծրագրավորելու համար.
SparkFun_APDS9960.հ
- Հեղինակ ՝ Սթիվ Քուին
- Նպատակը. Սա SparkFun APDS9960 ցուցիչի պատառաքաղացված տարբերակն է, որը պատառաքաղված է jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library- ից: Այն ունի մի քանի փոփոխություն, որոնք կօգնեն կարգաբերել սխալները և ունի ապազգայունացված դետեկտոր ՝ կեղծ հրահրումը նվազեցնելու համար:
- Սկսած ՝
APDS9960_NonBlocking.h
- Հեղինակ ՝ Սթիվ Քուին
- Նպատակը. Ապահովում է մաքուր ինտերֆեյս ՝ ձեր Arduino կոդի մեջ ներդնելու APDS9960 ժեստերի ցուցիչի այս ոչ արգելափակող իրականացումը:
- Սկսած ՝
Տեսեք հետևյալ հրահանգը, թե ինչպես ծրագրավորել ներկառուցված Arduino Uno (ATMega328P) միկրոկոնտրոլերը, եթե ծանոթ չեք դրան հասնելու եղանակներին.
ATTINY85, ATTINY84 և ATMEGA328P ծրագրավորում. ARDUINO AS ISP
Ֆունկցիոնալ ակնարկ
ATMega328P- ի ներկառուցված ստրուկի միկրոկառավարիչը հետազոտում է INT գիծը ADPS9960- ից: Երբ այս գիծը իջնում է, միկրոկառավարիչը կարդում է ADPS9960 գրանցամատյանները և որոշում, թե արդյոք եղել է վավեր ժեստը: Եթե վավեր ժեստ է հայտնաբերվել, ապա այս ժեստի կոդը 0x0… 0x6, 0xF տեղադրվում է B նավահանգստի վրա և «nGestureAvailable» - ը ցածր է պնդվում:
Երբ Գլխավոր սարքը տեսնում է «nGestureAvailable» - ը ակտիվ, այն կարդում է B նավահանգստի արժեքը, այնուհետև ժամանակավորապես ցածր է զարկում «nGestureClear» ՝ տվյալների ստացումը հաստատելու համար:
Ստրուկ սարքն այնուհետև հաստատում է «nGestureAvailable»-ը բարձր և մաքրում է Port B.- ի տվյալները վերևում: Նկարում 5-ը ցույց է տալիս տրամաբանական անալիզատորից վերցված էկրանի բռնում լիարժեք հայտնաբերման/ընթերցման ցիկլի ընթացքում:
Կոդի ակնարկ
Նկար 1 -ը մանրամասն նկարագրում է, թե ինչպես է U1- ում ներդրված ստրուկ Arduino Uno- ի ծրագրակազմը գործում, ինչպես նաև Նկար 2 -ում, թե ինչպես են փոխազդում երկու նախնական/առաջին պլանի առաջադրանքները: Նկար 3 -ը կոդի հատված է, որը նկարագրում է, թե ինչպես օգտագործել APDS9960_NonBlockinglibrary- ը: 4 -րդ նկարը տալիս է քարտեզագրում Arduino Uno թվային կապում և փաստացի ապարատային կապում ATMega328P- ում:
Ներկառուցված ստրուկի միկրոկառավարիչը զրոյացնելուց հետո նախաստորագրում է APDS9960- ը, որը թույլ է տալիս ժեստերի հայտնաբերմանը խթանել իր INT ելքը և կարգավորում է իր մուտքը/ելքը `կցելով ծառայության ընդհատման ռեժիմը (ISR) 'GESTURE_CLEAR ()', որն ընդհատում է INT0 վեկտորը (թվային փին 2, ապարատային IC pin 4):, կազմաձևելով այն ընկնող եզրային ձգանի համար: Սա ձևավորում է nGestureClear մուտքագրումը հիմնական սարքից:
APDS9960- ի «INT» ընդհատման ելքային կապը միացված է Digital Pin 4, Hardware IC Pin 6 -ին, որը կազմաձևված է որպես մուտքագրում U1- ին:
«NGestureAvailable» ազդանշանային գիծը Թվային 7-ի, Hardware IC pin 13-ի վրա կազմաձևված է որպես ելք և դրված է բարձր, անգործուն (չհաստատված):
Վերջապես Port B բիթերը համապատասխանաբար 0… 3 կազմաձևվում են որպես ելքեր և տեղադրվում ցածր մակարդակի վրա: Դրանք կազմում են տվյալների խայթոցը, որը ներկայացնում է հայտնաբերված ժեստերի տարբեր տեսակներ. Ոչ մեկը = 0x0, Սխալ = 0xF, վեր = 0x1, ներքև = 0x2, ձախ = 0x3, աջ = 0x4, մոտ = 0x5 և հեռու = 0x6:
«Loop» ֆոնային առաջադրանքը պլանավորված է, որը անընդհատ հարցումներ է անցկացնում APDS9960 ընդհատման ելքի INT- ի միջոցով ՝ թվային Pin 4 կարդալու միջոցով:) 'it while (1) {}; անվերջանալի հանգույց:
Եթե հայտնաբերվել է վավեր ժեստ, այս արժեքը գրվում է B նավահանգստում, նշվում է «nGestureAvailable» ելքը և սահմանվում է «bGestureAvailable» բուլյան սեմալիստը ՝ կանխելով հետագա ժեստերի մուտքը:
Երբ վարպետը հայտնաբերում է ակտիվ «nGestureAvailable» ելքը, այն կարդում է այս նոր արժեքը և զարկ է տալիս «nGestureClear» ակտիվ ցածր մակարդակին: Այս անկման եզրը առաջ է բերում «ISR GESTURE_CLEAR ()» առաջադրանքի առաջադրանք, որը պետք է դադարեցվի «Loop» ֆոնային առաջադրանքի կատարումը, մաքրելով B նավահանգիստը, «bGestureAvailable» սեմալիստը և «nGestureAvailable» ելքը:
«GESTURE_CLEAR ()» առաջադրանքը այժմ կասեցված է, իսկ «Օղակ» ֆոնային առաջադրանքը ՝ նորից պլանավորված: Այժմ կարելի է զգալ APDS9960- ի հետագա ժեստերը:
Այս կերպ օգտագործելով ընդհատված առաջադրանքի/հետին պլանի առաջադրանքները, ստրուկ սարքի «readGesture ()» պոտենցիալ անվերջ հանգույցը չի ազդի հիմնական սարքի աշխատանքի վրա և չի խոչընդոտի նաև ստրուկ սարքի կատարմանը: Սա իրական ժամանակի շատ պարզ օպերացիոն համակարգի (RTOS) հիմքն է:
Նշում. «N» նախածանցը նշանակում է ակտիվ ցածր կամ հաստատված, ինչպես «nGestureAvailable» - ում
Քայլ 3. Փորձարկեք APDS9960 չփակող ժեստերի զգայարանների սարքը
Նախաբան
Թեև APDS9960 մոդուլը մատակարարվում է +5v- ով, այն օգտագործում է ներկառուցված +3v3 կարգավորիչ, ինչը նշանակում է, որ I2C գծերը համապատասխանում են +3v3 և ոչ +5v: Ահա թե ինչու ես ընտրեցի օգտագործել +3v3 համապատասխանող Arduino Due- ն որպես փորձարկման միկրոկարգավորիչ `մակարդակի փոխարկիչների անհրաժեշտությունը վերացնելու համար:
Եթե, այնուամենայնիվ, ցանկանում եք օգտագործել իրական Arduino Uno- ն, ապա ձեզ հարկավոր է I2C տողերը մակարդակով տեղափոխել U1: Տե՛ս հետևյալ Instructable- ը, որտեղ ես կցել եմ օգտակար սլայդների հավաքածու (I2C_LCD_With_Arduino), որը տալիս է բազմաթիվ գործնական խորհուրդներ I2C- ի օգտագործման վերաբերյալ:
I2C ինտերֆեյսի փորձարկում
Վերևի 1 -ին և 2 -րդ նկարները ցույց են տալիս, թե ինչպես կարգավորել և ծրագրավորել համակարգը I2C ինտերֆեյսի համար: Նախ պետք է ներբեռնեք և տեղադրեք APDS9960_NonBlocking գրադարանը: այստեղ
Ինտերֆեյսի զուգահեռ փորձարկում
3 -րդ և 4 -րդ նկարները նույնն են ներկայացնում զուգահեռ ինտերֆեյսի համար
Քայլ 4: Եզրակացություն
Գեներալ
Կոդը լավ է աշխատում և արձագանքում է ժեստերը ՝ առանց որևէ կեղծ դրականի: Այն արդեն մի քանի շաբաթ է, ինչ գործում է որպես ստրուկ սարք իմ հաջորդ նախագծում: Ես փորձել եմ ձախողման բազմաթիվ տարբեր եղանակներ (և այդպիսին է նաև հետաքրքրասեր Quinn կենցաղային մոգին), որը նախկինում հանգեցրել էր ESP8266-12 վերակայման, առանց բացասական ազդեցության:
Հնարավոր բարելավումներ
-
Ակնհայտը. Նորից գրեք APDS9960 ժեստերի ցուցիչ գրադարանը `չարգելափակելու համար:
Իրականում ես իսկապես կապ հաստատեցի Broadcom– ի հետ, ով ինձ տեղավորեց տեղական դիստրիբյուտորի մոտ, ով անմիջապես անտեսեց աջակցության իմ խնդրանքը, ես ենթադրաբար պարզապես SparkFun կամ AdaFruit չեմ: Այսպիսով, սա, հավանաբար, պետք է սպասի որոշ ժամանակ:
- Տեղադրեք կոդը ավելի փոքր ստրկության միկրոկոնտրոլերի վրա: Մեկ առաջադրանքի համար ATMega328P- ի օգտագործումը մի փոքր ավելորդ է: Թեև ես սկզբում նայեցի ATTiny84- ին, բայց չօգտագործեցի մեկը, քանի որ ես զգացի, որ ծածկագրի կազմված չափը սահմանային գծի պիտանի է: Այլ I2C գրադարանով աշխատելու համար APDS9960 գրադարանը փոփոխելու անհրաժեշտության լրացուցիչ ծախսերով:
Քայլ 5: Հղումներ
Պահանջվում է ներկառուցված arduino- ի (ATMega328P - U1) ծրագրավորման համար
SparkFun_APDS9960.հ
- Հեղինակ ՝ Սթիվ Քուին
- Նպատակը. Սա SparkFun APDS9960 ցուցիչի պատառաքաղացված տարբերակն է, որը պատառաքաղված է jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library- ից: Այն ունի մի քանի փոփոխություն, որոնք կօգնեն կարգաբերել սխալները և ունի ապազգայունացված դետեկտոր ՝ կեղծ հրահրումը նվազեցնելու համար:
- Սկսած ՝
Պահանջվում է ներդնել այս չարգելափակող գործառույթը ձեր arduino կոդի մեջ և տալ մշակված օրինակներ
APDS9960_NonBlocking.h
- Հեղինակ ՝ Սթիվ Քուին
- Նպատակը. Ապահովում է մաքուր ինտերֆեյս ՝ ձեր Arduino կոդի մեջ ներդնելու APDS9960 ժեստերի ցուցիչի այս ոչ արգելափակող իրականացումը:
- Սկսած ՝
Իրական ժամանակի օպերացիոն համակարգ
https://hy.wikipedia.org/wiki/Real-time_operating_system
APDS9960 տվյալների թերթիկ
https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf
Խորհուրդ ենք տալիս:
Gեստերի վերահսկման ռոբոտ ստեղծելու ամենահեշտ ձևը ՝ 7 քայլ (նկարներով)
Gեստերի վերահսկման ռոբոտ պատրաստելու ամենահեշտ ձևը. Վերահսկեք խաղալիքները սուպերհերոսի պես: Իմացեք, թե ինչպես ժեստերով վերահսկվող մեքենա պատրաստել: Սա այն մասին է, թե ինչպես ինքներդ ժեստերով վերահսկվող մեքենա պատրաստել: Հիմնականում սա MPU-6050 3 առանցքի գիրոսկոպի, արագացուցիչի պարզ կիրառություն է: Դուք կարող եք շատ ավելին անել
Իրականացում LiFi, Uso Sencillo: 5 քայլ
Իրականացում LiFi, Օգտագործեք Sencillo: Խնդիրը լուծող հիմնական խնդիրն այն է, որ մենք առաջին հերթին մոտենում ենք, քանի որ մենք կարող ենք տրամադրել մի քանի կոմունիկացիաներ, որոնք օգտագործվում են մեդիա լույսի ներքո, LED- ների ինֆրակարմիր սարքերի միացման միջոցով
Gեստերի կառավարման մեքենա Mpu6050- ի և Arduino- ի միջոցով. 7 քայլ (նկարներով)
Gեստերի կառավարման մեքենա Mpu6050- ի և Arduino- ի միջոցով. Ահա ձեռքի վերահսկիչի ժեստերի կառավարման մեքենա ՝ պատրաստված mpu6050- ի և arduino- ի միջոցով: Ես օգտագործում եմ rf մոդուլը անլար կապի համար
Gեստերի վերահսկիչ ՝ 4 քայլ
Makeեստերի վերահսկիչ. Կատարեք պարզ և օգտակար arduino ժեստերի վերահսկիչ, այն կարող է ընդունել մինչև 9 ժեստ և օգտագործել այդ 9 ժեստերը ՝ 9 տարբեր գործառույթներ անմիջականորեն կամ անլար վերահսկելու համար:
Ֆոտոգալվանային վահանակների կողմնորոշման համակարգի նախագծում և իրականացում ՝ 5 քայլ
Ֆոտովոլտային վահանակների կողմնորոշման համակարգի նախագծում և իրականացում. Ֆոտովոլտային վահանակների կողմնորոշման համակարգի նախագծում և իրականացում