Мазмұны:

APDS9960 Gesture Sensor іске қосылуы: 5 қадам
APDS9960 Gesture Sensor іске қосылуы: 5 қадам

Бейне: APDS9960 Gesture Sensor іске қосылуы: 5 қадам

Бейне: APDS9960 Gesture Sensor іске қосылуы: 5 қадам
Бейне: Расшифровка балансира ячеек литиевой батареи 18650 2024, Шілде
Anonim
APDS9960 Gesture Sensor іске қосылуы
APDS9960 Gesture Sensor іске қосылуы
APDS9960 Gesture Sensor іске қосылуы
APDS9960 Gesture Sensor іске қосылуы
APDS9960 Gesture Sensor іске қосылуы
APDS9960 Gesture Sensor іске қосылуы

Кіріспе

Бұл нұсқаулықта SparkFun_APDS-9960_Sensor_Arduino_Library көмегімен APDS9960 Gesture Sensor қондырмасын қалай құруға болатыны көрсетілген.

Кіріспе

Сондықтан сіз өзіңізге бөгелмейтін не деп сұрайтын шығарсыз? Немесе бұл үшін бұғаттау?

Ең бастысы, бұғатталмайтын нәрсенің болуы неге маңызды?

Жақсы, сондықтан микропроцессор бағдарламаны іске қосқанда, ол код жолдарын дәйекті түрде орындайды және осылайша сіз оларды жазу тәртібіне сәйкес функцияларға қоңырау шалады және қайтарады.

Блоктаушы қоңырау - бұл орындалуды тоқтатуға әкелетін кез келген функционалдылыққа қоңырау, яғни шақырылған функция орындалмайынша, қоңырау шалушы орындалуды жалғастырмайды.

Сонымен, бұл неге маңызды?

Егер сіз температураны оқу, түймені оқу және дисплейді жаңарту сияқты көптеген функцияларды жүйелі түрде орындау қажет кодты жазған болсаңыз, дисплейді жаңартатын код бұғаттау қоңырауы болса, сіздің жүйеңіз жауап бермейді. түймешіктер басылады және температура өзгереді, себебі процессор дисплейдің жаңартылуын күтеді және батырманың күйін немесе соңғы температураны оқымайды.

Мен өз тарапымнан жергілікті және қашықтағы температура/ылғалдылық мәндерін, қоршаған ортаның жарық деңгейін, барометрлік қысымды оқитын, уақытты бақылайтын, осы параметрлердің барлығын СКД -де көрсететін, uSD -ге кіретін WiFi -мен жұмыс істейтін IoT жұмыс үстелі құрылғысы бар MQTT құрғым келеді. нақты уақытта картаны, түймелердің кіруін оқыңыз, шығыс жарық диодтарына жазыңыз және IoT инфрақұрылымындағы заттарды бақылау үшін қимылдарды бақылаңыз және олардың барлығын ESP8266-12 басқарады.

Өкінішке орай, мен таба алатын APDS9960 кітапханасының жалғыз екі көзі SpagoFun және AdaFruit кітапханалары болды, олардың екеуі де Avago (ADPS9960 өндірушісі) қосымшасының кодынан алынған және «readGesture» деп аталатын қоңырауға ие (1) {}; Жоғарыда жобада қолданылған кезде ADPS9960 сенсоры қаныққан кезде ESP8266-12E қалпына келеді (яғни объект жақын жерде болған кезде немесе сенсорды жарықтандыратын басқа ИК көзі болған кезде).

Нәтижесінде, бұл мінез-құлықты шешу үшін мен ыммен өңдеуді екінші процессорға ауыстыруды шештім, осылайша ESP8266-12E негізгі микроконтроллерге айналды және осы жүйенің құлы, жоғарыда 1 және 2 суреттерде көрсетілгендей, жүйеге шолу және жүйенің құрамы диаграммалары.. 3 -сурет схеманың прототипін көрсетеді.

Қолданыстағы кодыма қажет өзгертулерді шектеу үшін мен сонымен қатар «APDS9960_NonBlocking» деп аталатын орауыш класс/кітапхана жаздым.

Бұдан әрі блокталмаған шешімді егжей-тегжейлі түсіндіру.

Маған қандай бөлшектер қажет?

Егер сіз APDS9960_NonBlocking кітапханасымен жұмыс істейтін I2C шешімін құрғыңыз келсе, сізге келесі бөліктер қажет болады.

  1. ATMega328P 1 жеңілдік
  2. Мұнда PCF8574P 1 жеңілдік
  3. Мұнда 6 дана 10К резистор
  4. Мұнда 1K резисторынан 4 өшіру
  5. 1N914 диодты өшіру мұнда
  6. Мұнда 1 PN2222 NPN транзисторы
  7. Мұнда 1 өшіру 16 МГц кристалл
  8. Бұл жерде 0.1uF 2 конденсаторлары бар
  9. Электролиттік конденсатордың 1000 фокусы 1 жерде
  10. Электролиттік конденсатордың 1 фунт сығымы мұнда
  11. Мұнда 22pF 2 конденсаторы бар

Егер сіз параллель интерфейс арқылы қимыл сенсорының шығуын оқығыңыз келсе, онда сіз PCF8574P пен үш ажыратылған 10K резисторды тастай аласыз.

Маған қандай бағдарламалық қамтамасыз ету қажет?

Arduino IDE 1.6.9

Маған қандай дағдылар қажет?

Жүйені орнату үшін бастапқы кодты (берілген) қолданыңыз және қажетті схеманы құрыңыз, сізге мыналар қажет болады;

  • Электрониканы аз түсіну,
  • Arduino және оның IDE туралы білімі,
  • Ендірілген Arduino -ны қалай бағдарламалау керектігі туралы түсінік
  • Кейбір шыдамдылық.

Тақырыптар қамтылды

  • Схемаға қысқаша шолу
  • Бағдарламалық қамтамасыз ету туралы қысқаша шолу
  • APDS9960 Gesture Sensing Device тестілеу
  • Қорытынды
  • Әдебиеттер

1 -қадам: схемаға шолу

Схемаға шолу
Схемаға шолу

Схема екі бөлімге бөлінеді;

  • Біріншісі - R8… 10 және IC1 резисторлары арқылы жүзеге асатын параллель түрлендіруге арналған I2C сериялық. Мұнда R8… R10 8 биттік енгізу -шығару IC1 чипі мен NXP PCF8574A үшін I2C мекенжайын орнатады. Бұл құрылғы үшін жарамды мекенжай диапазондары сәйкесінше 0x38… 0x3F құрайды. «I2C_APDS9960_TEST.ino» ұсынылған I2C бағдарламалық жасақтамасының мысалында#анықтайтын 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 - бұл APDS9960 үшін C6 тартылатын I2C тартқыш резисторлары, жергілікті жеткізу рельсін ажыратуды қамтамасыз етеді.
    • U1, C1, C2 және Q1 ендірілген Arduino Uno құрайды және сәйкесінше сағат.
    • Соңында C3 және C4 U1 үшін жергілікті жеткізу рельсін ажыратуды қамтамасыз етеді.

2 -қадам: Бағдарламалық қамтамасыз етуге шолу

Бағдарламалық қамтамасыз етуге шолу
Бағдарламалық қамтамасыз етуге шолу
Бағдарламалық қамтамасыз етуге шолу
Бағдарламалық қамтамасыз етуге шолу
Бағдарламалық қамтамасыз етуге шолу
Бағдарламалық қамтамасыз етуге шолу

Кіріспе

Бұл бастапқы кодты сәтті құрастыру үшін сізге ендірілген Arduino Uno U1 бағдарламалау үшін келесі қосымша кітапханалар қажет болады;

SparkFun_APDS9960.h

  • Авторы: Стив Куинн
  • Мақсаты: Бұл jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library-ден бөлінген SparkFun APDS9960 сенсорының айырықша нұсқасы. Ол жөндеуге көмектесетін бірнеше модификацияға ие және жалған іске қосуды азайту үшін сенсибилизацияланбаған детекторға ие.
  • Кімнен:

APDS9960_NonBlocking.h

  • Авторы: Стив Куинн
  • Мақсаты: APDS9960 Gesture Sensor қондырғысын Arduino кодына енгізу үшін таза интерфейсті қамтамасыз етеді.
  • Кімнен:

Егер сіз бұған қалай қол жеткізуге болатынын білмесеңіз, енгізілген Arduino Uno (ATMega328P) микроконтроллерін қалай бағдарламалау туралы келесі Нұсқаулықты қараңыз;

ATTINY85, ATTINY84 және ATMEGA328P БАҒДАРЛАУ: ARDUINO ISP ретінде

Функционалды шолу

ATMega328P ендірілген қосалқы микроконтроллер ADPS9960 интернетінен INT желісін сұрайды. Бұл жол төмендегенде микроконтроллер ADPS9960 регистрлерін оқиды және жарамды қимылдың бар -жоғын анықтайды. Егер жарамды қимыл анықталса, 0x0… 0x6, 0xF қимасының коды В портына қойылады және 'nGestureAvailable' төмен деп бекітіледі.

Негізгі құрылғы 'nGestureAvailable' белсенді екенін көргенде, ол В портындағы мәнді оқиды, содан кейін деректердің қабылданғанын растау үшін 'nGestureClear' импульсті болады.

Қосалқы құрылғы «nGestureAvailable» мәнін жоғары деңгейге шығарады және В портындағы деректерді өшіреді. Жоғарыдағы 5-сурет логикалық анализатордан толық анықтау/оқу циклі кезінде алынған экранды көрсетеді.

Кодқа шолу

Жоғарыдағы 1 -сурет U1 бағдарламалық жасақтамасы Arduino Uno ендірілген бағдарламалық жасақтамасы қалай жұмыс істейтінін, 2 -суретпен бірге фондық/алдыңғы функциялардың өзара әрекеттесуін көрсетеді. 3 -сурет - бұл APDS9960_NonBlockinglibrary қалай пайдалану керектігін көрсететін код сегменті. 4 -сурет Arduino Uno Digital Pins пен ATMega328P нақты аппараттық түйреуіштері арасындағы салыстыруды береді.

Ендірілген қосалқы микроконтроллер APDS9960 -ты инициализациялайды, бұл оның INT шығысын іске қосуға мүмкіндік береді және енгізу -шығаруды конфигурациялайды, INT0 векторын үзу үшін GESTURE_CLEAR () үзіліс қызмет көрсету тәртібін (ISR) тіркейді, енгізу -шығаруды конфигурациялайды (Digital pin 2, Hardware IC pin 4), оны құлап жатқан триггер үшін конфигурациялау. Бұл негізгі құрылғыдан nGestureClear кірісін қалыптастырады.

APDS9960 -дан «INT» үзіліс шығыс түйіні U1 кіріс ретінде конфигурацияланған Digital Pin 4, IC IC Pin 6 аппараттық желісіне қосылады.

Digital pin 7, Hard IC IC pin 13-тегі 'nGestureAvailable' сигнал желісі шығыс ретінде конфигурацияланған және жоғары, белсенді емес (бекітілмеген) орнатылған.

Соңында В портының 0… 3 биттері сәйкесінше шығыс ретінде конфигурацияланып, төменге орнатылады. Олар әр түрлі анықталған қимыл түрлерін білдіретін деректер жиегін құрайды; Ешқайсысы = 0x0, Қате = 0xF, Жоғары = 0x1, Төмен = 0x2, Сол = 0x3, Оң = 0x4, Жақын = 0x5 және Фар = 0x6.

Сандық пин 4 оқу арқылы APDS9960 Interrupt шығысының INT үнемі шығуын сұрайтын «Цикл» фондық тапсырмасы жоспарланған. APDS9960 интерфейсінің шығысы сенсордың іске қосылғанын көрсететін белсенділігі төмен болған кезде микроконтроллер кез келген қимылды түсіндіруге тырысады 'readGesture () 'with it's while (1) {}; шексіз цикл.

Егер жарамды қимыл анықталса, бұл мән В портына жазылады, 'nGestureAvailable' шығысы бекітіледі және логикалық семафор 'bGestureAvailable' орнатылады, бұл кез келген қимылдардың тіркелуіне жол бермейді.

Мастер белсенді 'nGestureAvailable' шығысын анықтағаннан кейін, ол осы жаңа мәнді оқиды және «nGestureClear» белсенді төменгі деңгейін импульстейді. Бұл төмендеу шегі 'ISR GESTURE_CLEAR ()' тапсырмасын іске қосады, ол «Loop» өңдік тапсырманың орындалуын тоқтатады, В портын, «bGestureAvailable» семафорын және «nGestureAvailable» шығуын өшіреді.

«GESTURE_CLEAR ()» алдыңғы тапсырмасы енді тоқтатылды және «Цикл» фондық тапсырмасы қайта жоспарланды. APDS9960 басқа қимылдарын енді сезуге болады.

Үзіліс тудыратын алдыңғы/фондық тапсырмаларды осылайша қолдану арқылы қосымша құрылғының 'readGesture ()' потенциалды шексіз циклы негізгі құрылғының жұмысына әсер етпейді және қосалқы құрылғының орындалуына кедергі болмайды. Бұл нақты уақыттағы өте қарапайым операциялық жүйенің (RTOS) негізін құрайды.

Ескертпе: 'n' префиксі белсенді төмен немесе 'nGestureAvailable' сияқты бекітілгенін білдіреді

3 -қадам: Блокталмаған APDS9960 қимылды сезу құрылғысын тексеру

Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау
Блокталмаған APDS9960 қимылды сезу құрылғысын сынау

Кіріспе

APDS9960 модулі +5в-пен қамтамасыз етілсе де, ол бортта +3v3 реттегішті қолданады, яғни оның I2C желілері +3v3-ке сәйкес келеді, +5в емес. Сондықтан мен деңгейлік ауыстырғыштардың қажеттілігін болдырмау үшін +3v3 үйлесімді Arduino Due сынақ микроконтроллері ретінде пайдалануды таңдадым.

Егер сіз нақты Arduino Uno қолданғыңыз келсе, онда I2C желілерін U1 деңгейіне жылжыту қажет. Келесі нұсқаулықты қараңыз, онда мен пайдалы слайдтар жиынтығын (I2C_LCD_With_Arduino) тіркедім, онда I2C қолдану бойынша көптеген практикалық кеңестер берілген.

I2C интерфейсін тексеру

Жоғарыдағы 1 және 2 суреттер жүйені I2C интерфейсіне қалай орнату және бағдарламалау керектігін көрсетеді. Алдымен сізге APDS9960_NonBlocking кітапханасын жүктеу және орнату қажет болады. Мұнда

Параллель интерфейсті тексеру

3 және 4 суреттер параллельді интерфейс үшін бірдей

4 -қадам: Қорытынды

Қорытынды
Қорытынды

Жалпы

Код жақсы жұмыс істейді және ешбір жалған позитивсіз қимылдарды жауап ретінде анықтайды. Ол бірнеше аптадан бері менің келесі жобамда қосымша құрылғы ретінде жұмыс істеп тұр. Мен әр түрлі сәтсіздік режимдерін қолданып көрдім (сонымен қатар Quinn-дің үй шаруашылығындағы могги), бұл бұрын ESP8266-12 қалпына келтіруге әкелді, ешқандай теріс әсері жоқ.

Мүмкін болатын жақсартулар

  • Айқын. APDS9960 Gesture Sensor кітапханасын бұғатталмайтын етіп қайта жазыңыз.

    Шындығында мен Broadcom -ға хабарластым, ол мені жергілікті дистрибьюторға қойды, ол менің қолдау сұрауымды бірден елемеді, мен SparkFun немесе AdaFruit емеспін деп ойлаймын. Сондықтан бұл біраз уақыт күтуге тура келеді

  • Кодты кіші қосымша микроконтроллерге жіберіңіз. Бір тапсырма үшін ATMega328P пайдалану - бұл шамадан тыс жұмыс. Мен бастапқыда ATTiny84 -ке қарағаныммен, оны қолдануды тоқтаттым, себебі кодтың құрастырылған өлшемі шекара сызығына сәйкес келетінін сездім. Басқа I2C кітапханасымен жұмыс істеу үшін APDS9960 кітапханасын өзгерту қажет қосымша шығынмен.

5 -қадам: Әдебиеттер

Ендірілген arduino бағдарламалау үшін қажет (ATMega328P - U1)

SparkFun_APDS9960.h

  • Авторы: Стив Куинн
  • Мақсаты: Бұл jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library-ден бөлінген SparkFun APDS9960 сенсорының айырықша нұсқасы. Ол жөндеуге көмектесетін бірнеше модификацияға ие және жалған іске қосуды азайту үшін сенсибилизацияланбаған детекторға ие.
  • Кімнен:

Бұл бөгелмейтін функцияны arduino кодына ендіру және жұмыс мысалдарын келтіру қажет

APDS9960_NonBlocking.h

  • Авторы: Стив Куинн
  • Мақсаты: APDS9960 Gesture Sensor қондырғысын Arduino кодына енгізу үшін таза интерфейсті қамтамасыз етеді.
  • Кімнен:

Нақты уақыттағы операциялық жүйе

https://kk.wikipedia.org/wiki/Real-time_operating_system

APDS9960 мәліметтер парағы

https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf

Ұсынылған: