Мазмуну:
- 1 -кадам: Районго жалпы сереп
- 2 -кадам: Программаны карап чыгуу
- 3 -кадам: NonBlocking APDS9960 жаңсоо сезүү түзмөгүн тестирлөө
- 4 -кадам: Жыйынтык
- 5 -кадам: Шилтемелер
Video: Бөгөттөлбөгөн APDS9960 жаңсоо сенсорун ишке ашыруу: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Преамбула
Бул көрсөтмө 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 чечимин түзгүңүз келсе, анда сизге төмөнкү бөлүктөр талап кылынат.
- ATMega328Pден 1 арзандатуу бул жерде
- 1 өчүрүү PCF8574P бул жерде
- 6 өчүрүү 10K каршылыгы бул жерде
- 1 өчүрүүчү 4 резистор бул жерде
- 1 өчүрүү 1N914 диод бул жерде
- 1 өчүрүү PN2222 NPN транзистору бул жерде
- 1 өчүрүү 16 МГц кристалл бул жерде
- Бул жерден 0.1uF конденсаторлорун 2 өчүрүү
- 1 өчүрүү 1000uF электролитикалык конденсатор бул жерде
- 1 өчүрүү 10uF электролитикалык конденсатор бул жерде
- 2 өчүрүү 22pF Capacitors бул жерде
Эгерде сиз параллель интерфейс аркылуу жаңсоо сенсорунун чыгармасын окууну кааласаңыз, анда PCF8574P жана үч өчүрүлгөн 10K каршылыгын түшүрө аласыз.
Мага кандай программа керек?
Arduino IDE 1.6.9
Мага кандай көндүмдөр керек?
Системаны орнотуу үчүн, баштапкы кодду колдонуңуз (берилген) жана керектүү схеманы түзүү үчүн сизге төмөнкүлөр керек болот;
- Электрониканы минималдуу түшүнүү,
- Arduino жана анын IDE билими,
- Колдонулган Arduino программасын түшүнүү
- Кээ бир Сабыр.
Темалар камтылган
- Районго кыскача сереп
- Программаны кыскача карап чыгуу
- APDS9960 Жаңсоо Сезгич Түзмөгүн Сыноо
- Жыйынтык
- Шилтемелер
1 -кадам: Районго жалпы сереп
Район эки бөлүккө бөлүнөт;
- Биринчиси, 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 жаңсоо сезүү түзмөгүн тестирлөө
Преамбула
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
Сунушталууда:
Бир фазалуу инверторду кантип иштеп чыгуу жана ишке ашыруу керек: 9 кадам
Бир фазалуу инверторду кантип долбоорлоо жана ишке ашыруу керек: Бул Нускамада Dialogтун GreenPAK ™ CMIC'терин электрдик электроникада колдонууну изилдейт жана ар кандай башкаруу методологияларын колдонуу менен бир фазалуу инвертордун ишке ашырылышы көрсөтүлөт. Q аныктоо үчүн ар кандай параметрлер колдонулат
APDS9960 жаңсоо сенсорун Arduino менен кантип колдонуу керек: 7 кадам
APDS9960 жаңсоо сенсорун Arduino менен кантип колдонсо болот: Бул үйрөткүчтө Visuino программасын колдонуп OLED дисплейде кол менен көрсөтмөлөрдү көрсөтүү үчүн Arduino менен APDS9960 Жест сенсорун кантип колдонууну үйрөнөбүз. Видеону көрүңүз
AD / Protelдеги мозаикалык дизайнды кантип тез ишке ашыруу керек: 3 кадам
AD / Protelдеги Мозаикалык Дизайнды кантип тез ишке ашыруу керек: ПХБ дизайнында биз тез -тез монтажга кантип жетүү үчүн монтажды колдонобуз? Төмөнкү ыкмалар киргизилген; Өзүңүздүн ПХБ тактаңызды жасоо үчүн бул жерди басыңыз: http://www.starivergroup.com/ Altium/Protelде чогултуу жолу Ассамблея деп аталган нерсе чындыгында
RaspberryPi менен TicTacToe жабдыктарын ишке ашыруу: 4 кадам
TicTacToe аппараттык жабдууларын RaspberryPi аркылуу ишке ашыруу: Бул долбоор малинанын пиин колдонуп, эки оюнчуну билдирген эки башка түстүү LEDди колдонуп, интерактивдүү TicTacToe моделин түзүүгө багытталган. Бул жердеги идея муну аллеяда кеңири масштабда ишке ашыруу болгон - 3x3 жарым глобустун торун элестетип көрүңүз (li
UIди ишке ашыруу оңой -- Джойстик жана баскычтар менен OLED дисплейи: 6 кадам
UIди ишке ашыруу оңой || Joystick & Buttons менен OLED дисплейи: Бул модулда OLED дисплейи бар, эки баскыч, 5 тараптуу джойстик жана 3 огунун акселерометри бар. Бул долбоор үчүн UI орнотууда пайдалуу. Эй, балдар кандай? Akarsh бул жерде CETech.Today биз баары бир модулду карап чыгабыз