Բովանդակություն:

Չարգելափակող APDS9960 Gեստերի ցուցիչի իրականացում. 5 քայլ
Չարգելափակող APDS9960 Gեստերի ցուցիչի իրականացում. 5 քայլ

Video: Չարգելափակող APDS9960 Gեստերի ցուցիչի իրականացում. 5 քայլ

Video: Չարգելափակող APDS9960 Gեստերի ցուցիչի իրականացում. 5 քայլ
Video: Стриминг данных в MongoDB: жив или нет? / Java Tech Talk 2024, Հուլիսի
Anonim
Չարգելափակող APDS9960 ժեստերի ցուցիչի իրականացում
Չարգելափակող APDS9960 ժեստերի ցուցիչի իրականացում
Չարգելափակող APDS9960 ժեստերի ցուցիչի իրականացում
Չարգելափակող APDS9960 ժեստերի ցուցիչի իրականացում
Չարգելափակող APDS9960 ժեստերի ցուցիչի իրականացում
Չարգելափակող APDS9960 ժեստերի ցուցիչի իրականացում

Նախաբան

Այս Ուղեցույցը մանրամասնում է, թե ինչպես կարելի է ստեղծել 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. 1 զեղչ ATMega328P այստեղ
  2. 1 զեղչ PCF8574P այստեղ
  3. 6 -ից 10K դիմադրողներ այստեղ
  4. 4 անջատված 1K դիմադրիչներ այստեղ
  5. 1 զեղչ 1N914 դիոդ այստեղ
  6. 1 զեղչ PN2222 NPN տրանզիստոր այստեղ
  7. 16 ՄՀց բյուրեղից այստեղ 1
  8. 2 զեղչ 0.1uF կոնդենսատորներ այստեղ
  9. 1 -ից 1000uF էլեկտրոլիտիկ կոնդենսատոր այստեղ
  10. 1u 10uF էլեկտրոլիտիկ կոնդենսատոր այստեղ
  11. 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րագրաշարի ակնարկ

Softwareրագրային ապահովման ակնարկ
Softwareրագրային ապահովման ակնարկ
Softwareրագրային ապահովման ակնարկ
Softwareրագրային ապահովման ակնարկ
Softwareրագրային ապահովման ակնարկ
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 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող APDS9960 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող APDS9960 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող APDS9960 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող APDS9960 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող APDS9960 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող APDS9960 ժեստերի զգայարանային սարքը
Փորձարկվում է չփակող 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

Խորհուրդ ենք տալիս: