Мазмуну:

Бөгөттөлбөгөн APDS9960 жаңсоо сенсорун ишке ашыруу: 5 кадам
Бөгөттөлбөгөн APDS9960 жаңсоо сенсорун ишке ашыруу: 5 кадам

Video: Бөгөттөлбөгөн APDS9960 жаңсоо сенсорун ишке ашыруу: 5 кадам

Video: Бөгөттөлбөгөн APDS9960 жаңсоо сенсорун ишке ашыруу: 5 кадам
Video: How to Leave a Group Chat on iPhone 2024, Июль
Anonim
Бөгөттөө APDS9960 жаңсоо сенсорун ишке ашыруу
Бөгөттөө APDS9960 жаңсоо сенсорун ишке ашыруу
Бөгөттөө APDS9960 жаңсоо сенсорун ишке ашыруу
Бөгөттөө APDS9960 жаңсоо сенсорун ишке ашыруу
Бөгөттөө APDS9960 жаңсоо сенсорун ишке ашыруу
Бөгөттөө APDS9960 жаңсоо сенсорун ишке ашыруу

Преамбула

Бул көрсөтмө SparkFun_APDS-9960_Sensor_Arduino_Library аркылуу APDS9960 жаңсоо сенсорунун бөгөттөлбөгөн ишке ашырылышын кантип түзүү керектиги жөнүндө кеңири маалымат.

Киришүү

Демек, сиз өзүңүзгө эмне тоскоол болбогонун сурап жатасызбы? Же ал тургай, бул үчүн бөгөт коюу?

Андан да маанилүүсү, эмне үчүн тоскоол болбогон нерсенин туура болушу маанилүү?

Макул, ошондуктан микропроцессор программаны иштеткенде, ал коддун линияларын ырааттуу түрдө аткарат жана муну менен сиз аларды жазуу тартибине ылайык функцияларга чалып, кайра кайтып келет.

Бөгөттөөчү чалуу - бул аткаруунун токтоп калышына алып келген ар кандай функцияларга болгон чалуу, башкача айтканда, чакырылган функция аткарылып бүтмөйүнчө, чалуучу кайра аткарылбайт.

Демек, бул эмне үчүн маанилүү?

Эгерде сиз кодду жазсаңыз, анда температураны окуу, баскычты окуу жана дисплейди жаңыртуу сыяктуу көптөгөн функцияларды ырааттуу түрдө аткарышыңыз керек, эгерде дисплейди жаңыртуу коду бөгөттөөчү чалуу болсо, системаңыз жооп бербейт баскыч басылат жана температура өзгөрөт, анткени процессор дисплейдин жаңырышын күтүп, баскычтын статусун же акыркы температурасын окубай, убактысынын баарын жумшайт.

Өз кезегимде, мен жергиликтүү жана алыскы температура/нымдуулуктун маанилерин, айланадагы жарыктын деңгээлин, барометрдик басымды окуган, убакытты эсепке алган, бул параметрлердин бардыгын ЖКда көрсөтүүчү, uSDге кирүүчү WiFi жөндөмдүү IoT рабочий түзмөгүнүн үстүнөн MQTT түзгүм келет. реалдуу убакытта карта, баскычтын киришин окуу, LED диапазонуна жазуу жана IoT инфраструктурасындагы нерселерди көзөмөлдөө үчүн жаңсоолорду көзөмөлдөө жана алардын баарын ESP8266-12 көзөмөлдөө.

Тилекке каршы, мен таба алган APDS9960 китепканасынын эки булагы SpagoFun жана AdaFruit китепканалары болду, экөө тең Авагонун колдонмо кодунан (ADPS9960 өндүрүүчүсү) алынган жана "readGesture" аттуу чалууга ээ (1) {}; Жогоруда долбоордо колдонулганда ADPS9960 сенсору каныккан сайын ESP8266-12E баштапкы абалга келтирет (б.а. объект жакын турганда же сенсорду жарык кылган башка ИК булагы болгондо).

Демек, бул жүрүм-турумду чечүү үчүн мен жаңсоолорду иштетүүнү экинчи процессорго жылдырууну чечтим, мында ESP8266-12E башкы микроконтроллер болуп калды жана бул система кул, жогоруда 1 жана 2-сүрөттөрдө сүрөттөлгөндөй, системага жалпы сереп жана тутумдун курамы схемалары. Pic 3 прототиптин схемасын көрсөтөт.

Учурдагы кодума киргизишим керек болгон өзгөртүүлөрдү чектөө үчүн, мен "APDS9960_NonBlocking" деп элестетүү менен оролуучу класс/китепкана жаздым.

Андан кийин блокировкасыз чечимдин деталдуу түшүндүрмөсү келтирилген.

Мага кандай бөлүктөр керек?

Эгерде сиз APDS9960_NonBlocking китепканасы менен иштеген I2C чечимин түзгүңүз келсе, анда сизге төмөнкү бөлүктөр талап кылынат.

  1. ATMega328Pден 1 арзандатуу бул жерде
  2. 1 өчүрүү PCF8574P бул жерде
  3. 6 өчүрүү 10K каршылыгы бул жерде
  4. 1 өчүрүүчү 4 резистор бул жерде
  5. 1 өчүрүү 1N914 диод бул жерде
  6. 1 өчүрүү PN2222 NPN транзистору бул жерде
  7. 1 өчүрүү 16 МГц кристалл бул жерде
  8. Бул жерден 0.1uF конденсаторлорун 2 өчүрүү
  9. 1 өчүрүү 1000uF электролитикалык конденсатор бул жерде
  10. 1 өчүрүү 10uF электролитикалык конденсатор бул жерде
  11. 2 өчүрүү 22pF Capacitors бул жерде

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

Мага кандай программа керек?

Arduino IDE 1.6.9

Мага кандай көндүмдөр керек?

Системаны орнотуу үчүн, баштапкы кодду колдонуңуз (берилген) жана керектүү схеманы түзүү үчүн сизге төмөнкүлөр керек болот;

  • Электрониканы минималдуу түшүнүү,
  • Arduino жана анын IDE билими,
  • Колдонулган Arduino программасын түшүнүү
  • Кээ бир Сабыр.

Темалар камтылган

  • Районго кыскача сереп
  • Программаны кыскача карап чыгуу
  • APDS9960 Жаңсоо Сезгич Түзмөгүн Сыноо
  • Жыйынтык
  • Шилтемелер

1 -кадам: Районго жалпы сереп

Circuit Overview
Circuit Overview

Район эки бөлүккө бөлүнөт;

  • Биринчиси, R8… 10 жана IC1 резисторлору аркылуу ишке ашырылган параллелдүү конверсияга I2C сериясы. Бул жерде R8… R10 I2C дарегин 8 биттик I/O кеңейтүүчү чип IC1 жана NXP PCF8574A үчүн койду. Бул түзмөктүн жарактуу даректер диапазону тийиштүү түрдө 0x38… 0x3F. I2C программасынын мисалында 'I2C_APDS9960_TEST.ino' '#define 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 -кадам: Программаны карап чыгуу

Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо

Преамбула

Бул булак кодун ийгиликтүү чогултуу үчүн, камтылган Arduino Uno U1ди программалоо үчүн сизге төмөнкү кошумча китепканалар керек болот;

SparkFun_APDS9960.h

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

APDS9960_NonBlocking.h

  • Автору: Стив Куинн
  • Максаты: APDS9960 жаңсоо сенсорунун Arduino кодуңузга бөгөт коюуну ишке ашыруу үчүн таза интерфейс менен камсыз кылат.
  • Кимден:

Төмөнкү Инструкцияны караңыз, эгер сиз буга кантип жетишүү керектигин билбесеңиз, анда Arduino Uno (ATMega328P) микроконтроллерин кантип программалоо керек;

ATTINY85, ATTINY84 жана ATMEGA328P ПРОГРАММАЛОО: ARDUINO ISP катары

Функционалдык сереп

ATMega328P камтылган кул микроконтроллери ADPS9960дан INT линиясын сурамжылайт. Бул линия төмөндөгөндө микроконтроллер ADPS9960 регистрлерин окуйт жана жарактуу жаңсоонун бар же жок экенин аныктайт. Эгерде жарактуу жаңсоолор аныкталса, бул жаңсоо үчүн код 0x0… 0x6, 0xF В портуна жайгаштырылат жана 'nGestureAvailable' төмөн деп ырасталат.

Негизги түзмөк 'nGestureAvailable' активдүү экенин көргөндө, ал В портундагы маанини окуйт, андан кийин "nGestureClear" маалыматын алгандыгын ырастоо үчүн убактылуу төмөндөйт.

Кул түзмөк анда "nGestureAvailable" бийиктигин ырастайт жана Port B. Pic 5теги маалыматтарды тазалайт. Сүрөт 5 толугу менен аныктоо/окуу циклинде логикалык анализатордон алынган экранды көрсөтөт.

Code Overview

Жогорудагы 1 -сүрөт U1деги Arduino Uno камтылган программалык камсыздоонун кандай иштээрин, 2 -сүрөт менен бирге эки фондук/алдыңкы пландагы милдеттердин кандайча өз ара аракеттенишерин түшүндүрөт. 3 -сүрөт - бул APDS9960_NonBlockinglibraryди кантип колдонууну түшүндүргөн код сегмент. Сүрөт 4 Arduino Uno Digital Pins менен ATMega328P боюнча иш жүзүндөгү жабдык казыктарынын ортосундагы картаны берет.

Киргизилген кул микроконтроллери APDS9960 кыймылын аныктоого мүмкүндүк берип, анын INT чыгарылышын баштайт жана анын I/O конфигурациялоо кызматын (ISR) 'GESTURE_CLEAR ()' векторун үзгүлтүккө учуратуу үчүн конфигурациялайт (Digital pin 2, Hardware IC pin 4), аны түшүп бараткан триггер үчүн конфигурациялоо. Бул негизги түзмөктөн nGestureClear киргизүүнү түзөт.

APDS9960дан "INT" үзүлүү пини Digital Pin 4, Hardware IC Pin 6 менен туташкан, ал U1ге киргизүү катары конфигурацияланган.

Digital pin 7деги 'nGestureAvailable' сигнал линиясы, Аппараттык IC пин 13 чыгаруу катары конфигурацияланган жана активдүү эмес (активдүү эмес).

Акырында В портунун 0… 3 биттери чыгуулар катары конфигурацияланган жана эң төмөнкү деңгээлге коюлган. Бул ар кандай табылган жаңсоолордун түрлөрүн чагылдырган маалымат чучугун түзөт; Жок = 0x0, Error = 0xF, Up = 0x1, Down = 0x2, Left = 0x3, Right = 0x4, Near = 0x5 and Far = 0x6.

"Цикл" фондук тапшырмасы пландаштырылган, ал APDS9960 үзгүлтүккө чыгаруу INTти Digital Pin 4 окуу аркылуу сурамжылайт, качан APDS9960дан INT чыгышы сенсордун иштей баштаганын көрсөтүп, активдүү төмөн болуп калганда, микроконтроллер "readGesture () 'while with (1) {}; чексиз цикл.

Эгерде жарактуу жаңсоо аныкталса, бул мааниси В портуна жазылат, 'nGestureAvailable' чыгарылышы ырасталат жана логикалык семафор 'bGestureAvailable' коюлуп, мындан ары жаңсоолордун киришине жол бербейт.

Мастер активдүү 'nGestureAvailable' чыгарылышын аныктагандан кийин, бул жаңы маанини окуйт жана "nGestureClear" активдүү деңгээлин төмөндөйт. Бул түшүп жаткан чек "ISR GESTURE_CLEAR ()" алдыңкы милдетин "Loop" фондук тапшырмасынын аткарылышын токтотууну пландап, В портун, "bGestureAvailable" семафорун жана "nGestureAvailable" чыгарууну пландаштырат.

"GESTURE_CLEAR ()" алдыңкы пландагы тапшырмасы токтотулду жана "Цикл" фондук тапшырмасы кайра пландаштырылды. APDS9960тын башка жаңсоолорун азыр сезсе болот.

Мындай жол менен үзгүлтүккө учураган алдыңкы/фондук тапшырмаларды колдонуу менен, кулдук түзүлүштүн 'readGesture ()' потенциалдуу чексиз цикли башкы түзмөктүн иштешине таасирин тийгизбейт жана кулдук түзүлүшүнүн аткарылышына тоскоол болбойт. Бул абдан жөнөкөй реалдуу убакытта иштөө тутумунун (RTOS) негизин түзөт.

Эскертүү: 'n' префикси активдүү төмөн же 'nGestureAvailable' сыяктуу ырасталган дегенди билдирет

3 -кадам: NonBlocking APDS9960 жаңсоо сезүү түзмөгүн тестирлөө

NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо
NonBlocking APDS9960 жаңсоо сезүү түзмөгүн сыноо

Преамбула

APDS9960 модулу +5v менен камсыздалганына карабастан, ал бортто +3v3 жөндөгүчтү колдонот, бул I2C линиялары +3v3 менен шайкеш жана +5v эмес. Дал ушул себептен, мен деңгээлди которгучтарга болгон муктаждыкты жоюу үчүн +3v3 шайкеш келген Arduino Due'ди микро контроллер катары колдонууну чечтим.

Эгерде сиз чыныгы Arduino Uno колдонууну кааласаңыз, анда I2C линияларын U1 деңгээлине которушуңуз керек. I2Cди колдонуу боюнча көптөгөн практикалык кеңештерди берген пайдалуу слайд топтомун (I2C_LCD_With_Arduino) тиркеген төмөнкү Нускаманы караңыз.

I2C Interface тестирлөө

1 жана 2 -сүрөттөр I2C интерфейси үчүн системаны кантип орнотууну жана программалоону көрсөтөт. Адегенде APDS9960_NonBlocking китепканасын жүктөп алып, орнотушуңуз керек болот. бул жерде

Parallel Interface Testing

3 жана 4 -сүрөттөр параллелдүү интерфейс үчүн бирдей

4 -кадам: Жыйынтык

Жыйынтык
Жыйынтык

General

Код жакшы иштейт жана жаңсоолорду жалган позитивсиз жооптуу түрдө аныктайт. Бул менин кийинки долбоорумда кулдук түзмөк катары бир нече жумадан бери иштеп жатат. Мен көптөгөн EF8266-12 баштапкы абалга алып келген эч кандай терс эффектисиз, көптөгөн ар кандай ийгиликсиз режимдерди (жана Куинндин үй тиричилиги моггиси да) сынап көрдүм.

Мүмкүн болгон жакшыртуулар

  • Ачык. APDS9960 Gesture Sensor китепканасын бөгөттөө үчүн кайра жазыңыз.

    Чындыгында, мен Broadcom менен байланыштым, ал мени жергиликтүү дистрибьюторго тапшырды, ал менин суранычымды дароо четке какты, мен SparkFun же AdaFruit эмесмин. Ошентип, бул, балким, бир аз күтүүгө туура келет

  • Кодду кичирээк кулдук микроконтроллерге порт кылыңыз. ATMega328Pти бир тапшырманы колдонуу - бул бир аз ашыкча нерсе. Мен башында ATTiny84 карасам да, бирөөнү колдонууну токтотуп койдум, анткени коддун чогултулган өлчөмү чек ара сызыгына туура келгенин сездим. Башка I2C китепканасы менен иштөө үчүн APDS9960 китепканасын өзгөртүү керек болгон кошумча чыгымдар менен.

5 -кадам: Шилтемелер

Камтылган arduino программасы үчүн талап кылынат (ATMega328P - U1)

SparkFun_APDS9960.h

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

Бул тоскоолдук кылбаган функцияны arduino кодуңузга киргизүү жана иштелген мисалдарды берүү үчүн талап кылынат

APDS9960_NonBlocking.h

  • Автору: Стив Куинн
  • Максаты: APDS9960 жаңсоо сенсорунун Arduino кодуңузга бөгөт коюуну ишке ашыруу үчүн таза интерфейс менен камсыз кылат.
  • Кимден:

Реалдуу убакытта иштөө тутуму

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

APDS9960 маалымат жадыбалы

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

Сунушталууда: