Cov txheej txheem:

NonBlocking APDS9960 Gesture Sensor Siv: 5 Kauj Ruam
NonBlocking APDS9960 Gesture Sensor Siv: 5 Kauj Ruam

Video: NonBlocking APDS9960 Gesture Sensor Siv: 5 Kauj Ruam

Video: NonBlocking APDS9960 Gesture Sensor Siv: 5 Kauj Ruam
Video: Iot Cohort 5 - Chad Waples 2024, Lub Xya hli ntuj
Anonim
NonBlocking APDS9960 Gesture Sensor Siv
NonBlocking APDS9960 Gesture Sensor Siv
NonBlocking APDS9960 Gesture Sensor Siv
NonBlocking APDS9960 Gesture Sensor Siv
NonBlocking APDS9960 Gesture Sensor Siv
NonBlocking APDS9960 Gesture Sensor Siv

Zaj lus piv txwv

Cov lus qhia ntxaws no yuav ua li cas thiaj tsim kev txwv tsis pub siv ntawm APDS9960 Gesture Sensor siv SparkFun_APDS-9960_Sensor_Arduino_Library.

Taw qhia

Yog li koj yuav zaum nug koj tus kheej dab tsi yog qhov tsis thaiv? Los yog tseem thaiv rau qhov teeb meem ntawd?

Tseem ceeb dua vim li cas nws thiaj tseem ceeb kom tsis txhob thaiv ib yam dab tsi?

Ok, yog li thaum lub microprocessor khiav qhov program nws ua ntu zus ua kab ntawm cov cai thiab ua li ntawd hu xov tooj rau thiab rov qab los ntawm kev ua haujlwm raws li qhov kev txiav txim uas koj tau sau lawv.

Kev hu xov tooj tsuas yog hu rau txhua yam kev ua haujlwm uas ua rau ncua kev ua tiav, lub ntsiab lus hu ua qhov haujlwm uas tus hu yuav tsis rov pib ua haujlwm kom txog thaum lub luag haujlwm hu ua tiav.

Yog li vim li cas qhov no tseem ceeb?

Hauv qhov xwm txheej uas koj tau sau qee cov cai uas yuav tsum tau ua tiav ntau txoj haujlwm ua ntu zus xws li nyeem qhov ntsuas kub, nyeem lub pob thiab hloov kho cov zaub, yuav tsum yog cov cai los hloov kho cov lus yog hu xov tooj, koj lub kaw lus yuav tsis teb rau. khawm nias thiab hloov pauv qhov kub thiab txias, raws li tus txheej txheem yuav siv sijhawm tag nrho nws lub sijhawm tos rau cov zaub kom hloov pauv thiab tsis nyeem cov xwm txheej khawm lossis qhov kub tshaj.

Rau kuv ib feem kuv xav tsim MQTT dhau WiFi muaj peev xwm IoT desktop ntaus ntawv uas nyeem ob qho tib si hauv cheeb tsam thiab thaj chaw deb ntawm huab cua/huab cua, qhov teeb pom kev ib puag ncig, ntsuas ntsuas siab, ua raws lub sijhawm, tso tawm tag nrho cov ntsuas no ntawm LCD, nkag mus rau uSD daim npav hauv lub sijhawm tiag tiag, nyeem cov ntawv nkag, sau rau cov LEDs thiab saib xyuas lub ntsej muag kom tswj tau yam hauv kuv li IoT cov txheej txheem thiab txhua yam uas yuav tsum tau tswj los ntawm ESP8266-12.

Hmoov tsis zoo tsuas yog ob qhov chaw ntawm APDS9960 lub tsev qiv ntawv kuv tuaj yeem pom yog SparkFun thiab AdaFruit cov tsev qiv ntawv, ob qho tib si uas tau ripped los ntawm daim ntawv thov los ntawm Avago (ADPS9960 chaw tsim khoom) thiab muaj lub npe hu ua 'readGesture' uas muaj ib ntus (1) {}; lub voj uas thaum siv hauv txoj haujlwm saum toj no ua rau ESP8266-12E rov pib dua thaum twg los xij ntawm ADPS9960 lub teeb pom kev dhau los (piv txwv li. thaum ib yam khoom tseem nyob ze, lossis muaj lwm qhov IR teeb pom lub teeb pom kev zoo).

Thiaj li txhawm rau daws tus cwj pwm no kuv tau xaiv txav cov txheej txheem ntawm Gestures mus rau tus txheej txheem thib ob uas ESP8266-12E dhau los ua tus tswv microcontroller thiab tus txheej txheem no tus qhev, raws li tau hais hauv Pics 1 & 2 saum toj no, Txheej Txheem Txheej Txheem thiab Cov Txheej Txheem Txheej Txheem. Daim duab 3 qhia txog cov qauv hluav taws xob.

Txhawm rau txwv qhov kev hloov pauv uas kuv xav tau los ua rau kuv tus lej uas twb muaj lawm Kuv kuj tau sau ib chav qhwv ntawv/tsev qiv ntawv xav txog lub npe 'APDS9960_NonBlocking'.

Dab tsi hauv qab no yog cov lus piav qhia ntxaws txog qhov tsis thaiv kev daws teeb meem.

Kuv Xav Tau Qhov Twg?

Yog tias koj xav tsim I2C cov tshuaj uas ua haujlwm nrog APDS9960_NonBlocking lub tsev qiv ntawv koj yuav xav tau cov hauv qab no.

  1. 1 tawm ATMega328P ntawm no
  2. 1 tawm PCF8574P ntawm no
  3. 6 tawm 10K Resistors ntawm no
  4. 4 tawm 1K Resistors ntawm no
  5. 1 tawm 1N914 Diode ntawm no
  6. 1 tawm PN2222 NPN Transistor ntawm no
  7. 1 tawm 16MHz siv lead ua ntawm no
  8. 2 tawm 0.1uF Capacitors ntawm no
  9. 1 tawm 1000uF Electrolytic Capacitor ntawm no
  10. 1 tawm 10uF Electrolytic Capacitor ntawm no
  11. 2 tawm 22pF Capacitors ntawm no

Yog tias koj xav nyeem cov lus piav tes piav tes piav tes sensor tso tawm ntawm qhov sib txuas ua ke ces koj tuaj yeem tso PCF8574P thiab peb tawm 10K resistors.

Kuv xav tau software twg?

Arduino IDE 1.6.9

Kuv xav tau txuj ci dab tsi?

Txhawm rau teeb tsa cov txheej txheem, siv cov cai hauv paus (muab) thiab tsim cov khoom siv hluav taws xob tsim nyog koj yuav xav tau cov hauv qab no;

  • Tsawg me ntsis ntawm cov khoom siv hluav taws xob,
  • Paub txog Arduino thiab nws yog IDE,
  • Kev nkag siab txog yuav ua li cas rau txheej txheem kev teeb tsa Arduino (Saib Qhia "Programming ATTiny85, ATTiny84 thiab ATMega328P: Arduino Raws li ISP ')
  • Ib txhia ua siab ntev.

Cov ncauj lus npog

  • Cov lus qhia luv luv ntawm Circuit Court
  • Cov ntsiab lus luv luv ntawm software
  • Kev Xeem APDS9960 Gesture Sensing Device
  • Xaus
  • Cov neeg ua tim khawv

Kauj Ruam 1: Txheej Txheem Txheej Txheem

Txheej txheem cej luam
Txheej txheem cej luam

Lub Circuit Court tau muab faib ua ob ntu;

  • Thawj zaug yog ntu I2C mus rau kev sib hloov pauv hloov pauv tau ua tiav ntawm resistors R8 … 10 thiab IC1. Ntawm no R8… R10 teeb tsa I2C chaw nyob rau 8 ntsis I/O nthuav dav nti IC1 tus NXP PCF8574A. Qhov chaw nyob raug rau cov cuab yeej no yog 0x38… 0x3F feem. Hauv I2C software piv txwv muab 'I2C_APDS9960_TEST.ino' '#define GESTURE_SENSOR_I2C_ADDRESS' yuav tsum tau hloov kho kom haum rau qhov chaw nyob no.
  • Tag nrho lwm cov khoom tsim ua qhev kos rau Arduino Uno thiab muaj cov haujlwm hauv qab no;

    • R1, T1, R2 thiab D1 muab cov khoom siv qhev rov pib dua. Nov yog lub siab ua haujlwm siab ntawm IC1 - P7 yuav yuam kom U1 rov pib dua.
    • R3, R4, yog tam sim no txwv cov neeg tawm tsam rau cov cuab yeej teeb tsa kev teeb tsa TX/RX kab.
    • C5 thiab R7 tso cai rau Arduino IDE kom ua haujlwm tau yooj yim U1 ntawm lub plawv dhia ntawm kab DTR ntawm cov khoom FTDI txuas.
    • R5 thiab R6 yog I2C rub cov neeg tawm tsam rau APDS9960 nrog C6 muab cov khoom siv tsheb nqaj hlau txiav tawm.
    • U1, C1, C2 thiab Q1 tsim lub cim Arduino Uno thiab nws yog lub moos ib feem.
    • Thaum kawg C3 thiab C4 muab cov tsheb nqaj hlau hauv nroog txiav rau U1.

Kauj ruam 2: Software Txheej Txheem

Software Txheej Txheem
Software Txheej Txheem
Software Txheej Txheem
Software Txheej Txheem
Software Txheej Txheem
Software Txheej Txheem

Zaj lus piv txwv

Txhawm rau ua kom tiav cov peev txheej no koj yuav xav tau cov tsev qiv ntawv ntxiv hauv qab no los ua haujlwm rau hauv Arduino Uno U1;

SparkFun_APDS9960.h

  • Los ntawm: Steve Quinn
  • Lub Hom Phiaj: Qhov no yog rab diav rawg ntawm SparkFun APDS9960 Sensor rab rawg los ntawm jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library. Nws muaj qee qhov kev hloov kho los pab daws qhov teeb meem thiab muaj lub ntsuas ntsuas kom tsis txhob hnov qab txhawm rau txo qis qhov tshwm sim.
  • Los ntawm:

APDS9960_NonBlocking.h

  • Los ntawm: Steve Quinn
  • Lub Hom Phiaj: Muab kev sib cuam tshuam huv si txhawm rau txhawm rau ua qhov kev txwv tsis pub siv APDS9960 Gesture Sensor rau hauv koj li Arduino code.
  • Los ntawm:

Saib cov lus qhia hauv qab no ntawm yuav ua li cas rau txheej txheem kev teeb tsa Arduino Uno (ATMega328P) microcontroller yog tias koj tsis paub txog yuav ua li cas thiaj ua tiav qhov no;

PROGRAMMING THE ATTINY85, ATTINY84 THIAB ATMEGA328P: ARDUINO AS ISP

Txheej txheem cej luam

Lub ATMega328P embedded qhev microcontroller pov npav INT kab los ntawm ADPS9960. Thaum txoj kab no qis qis microcontroller nyeem ADPS9960 cov ntawv sau npe thiab txiav txim siab yog tias muaj qhov ua tau zoo piav tes piav taw. Yog tias tau piav tes piav taw siv tau, tus lej rau qhov piav tes no 0x0… 0x6, 0xF tau muab tso rau ntawm Port B thiab 'nGestureAvailable' tau lees tias qis.

Thaum Tus Thawj Saib Xyuas lub cuab yeej pom 'nGestureAvailable' nquag, nws nyeem tus nqi ntawm Chaw nres nkoj B tom qab ntawv 'nGestureClear' qis ib ntus kom lees paub tias tau txais cov ntaub ntawv.

Cov cuab yeej qhev tom qab de-lees paub 'nGestureAvailable' siab thiab tshem tawm cov ntaub ntawv ntawm Chaw nres nkoj B.

Txoj Cai Txheej Txheem

Pic 1 saum toj no qhia meej li cas software hauv U1 tus qhev kos npe Arduino Uno ua haujlwm, nrog rau Pic 2 li cas ob lub keeb kwm yav dhau/yav dhau los ua haujlwm sib cuam tshuam. Daim duab 3 yog ntu ntu qhia txog yuav siv APDS9960_NonBlockinglibrary li cas. Daim duab 4 muab daim duab qhia ntawm Arduino Uno Digital Pins thiab cov cuab yeej kho vajtse tiag ntawm ATMega328P.

Tom qab rov pib teeb tsa tus qhev microcontroller pib ua APDS9960 tso cai piav tes piav taw kom ua rau nws INT tso tawm thiab teeb tsa nws yog I/O, txuas txuas cuam tshuam kev pabcuam niaj hnub (ISR) 'GESTURE_CLEAR ()' cuam tshuam vector INT0 (Digital pin 2, Khoos phis tawj tus pin 4), teeb tsa nws rau qhov poob qis txhais. Qhov no yog nGestureClear cov tswv yim los ntawm tus tswv cuab.

Cov cuam tshuam cuam tshuam tus pin 'INT' los ntawm APDS9960 txuas nrog Digital Pin 4, Khoos Phis Tawj IC Pin 6 uas tau teeb tsa ua cov tswv yim rau U1.

Qhov 'nGestureAvailable' teeb liab kab ntawm Digital tus pin 7, Kho vajtse IC tus pin 13 tau teeb tsa ua qhov tso tawm thiab teeb tsa siab, tsis ua haujlwm (tsis lees paub).

Thaum kawg Port B cov khoom 0… 3 feem tau teeb tsa raws li cov txiaj ntsig thiab teeb qis. Cov no tsim cov ntaub ntawv nibble uas sawv cev rau ntau yam kev piav tes piav taw hom; Tsis muaj = 0x0, Yuam kev = 0xF, Up = 0x1, Down = 0x2, Left = 0x3, Right = 0x4, Ze = 0x5 and Far = 0x6.

Lub luag haujlwm yav dhau los 'Loop' tau teem tseg uas txuas ntxiv qhov kev xaiv tsa APDS9960 cuam tshuam cov txiaj ntsig INT los ntawm kev nyeem Digital Pin 4. Thaum INT tso tawm los ntawm APDS9960 dhau los ua qhov qis qis qhia tau tias lub ntsuas tau ua rau lub microcontroller sim txhais cov lus taw tes los ntawm kev hu 'readGesture () 'nrog nws thaum (1) {}; voj kawg

Yog tias tau piav qhia txog kev piav tes piav taw, tus nqi no tau sau rau Chaw nres nkoj B, qhov 'nGestureAvailable' tso tawm tau lees paub thiab boolean semaphore 'bGestureAvailable' tau teeb tsa, tiv thaiv ib qho ntxiv taw los ntawm kev nkag mus.

Thaum tus tswv pom qhov ua haujlwm 'nGestureAvailable' tso tawm nws nyeem tus nqi tshiab no thiab 'nGestureClear' ua haujlwm qis. Qhov ntog ntog no ua rau txoj haujlwm ua ntej 'ISR GESTURE_CLEAR ()' kom tau teem sijhawm ncua kev ua haujlwm tom qab 'Loop', tshem tawm Chaw nres nkoj B, 'bGestureAvailable' semaphore thiab 'nGestureAvailable' tso tawm.

Txoj haujlwm ua ntej 'GESTURE_CLEAR ()' tam sim no raug tshem tawm thiab tom qab ua haujlwm 'Loop' rov teem sijhawm. Kev piav tes piav taw ntxiv los ntawm APDS9960 tam sim no tuaj yeem nkag siab.

Los ntawm kev siv cuam tshuam cuam tshuam rau yav tom ntej/keeb kwm yav dhau los ua txoj hauv kev no lub peev xwm tsis muaj qhov kawg nyob hauv 'readGesture ()' ntawm cov cuab yeej qhev yuav tsis cuam tshuam rau tus tswv lub cuab yeej los ntawm kev ua haujlwm thiab yuav tsis cuam tshuam kev ua tiav ntawm tus qhev ntaus ntawv. Qhov no yog lub hauv paus ntawm lub sijhawm ua haujlwm yooj yim heev (RTOS).

Nco tseg: Cov ntawv ua ntej 'n' txhais tau tias ua haujlwm qis lossis lees paub zoo li hauv 'nGestureAvailable'

Kauj Ruam 3: Xeem NonBlocking APDS9960 Gesture Sensing Device

Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device
Kuaj Cov NonBlocking APDS9960 Gesture Sensing Device

Zaj lus piv txwv

Txawm hais tias APDS9960 tus qauv tau muab nrog +5v nws siv lub rooj tsav xwm +3v3 tus tswj lub ntsiab lus nws yog I2C kab yog +3v3 ua raws thiab tsis yog +5v. Qhov no yog vim li cas kuv thiaj xaiv siv +3v3 ua raws Arduino Due raws li kev ntsuas micro tswj, kom obviate xav tau rau qib shifters.

Txawm li cas los xij, koj xav siv qhov tseeb Arduino Uno ces koj yuav tsum tau hloov qib I2C kab mus rau U1. Saib cov lus qhia hauv qab no qhov twg kuv tau txuas cov txheej txheem swb uas muaj txiaj ntsig (I2C_LCD_With_Arduino) uas muab ntau cov lus qhia rau kev siv I2C.

Kev Ntsuas I2C Interface

Pics 1 thiab 2 saum toj no qhia yuav teeb tsa thiab ua haujlwm li cas rau I2C interface. Koj yuav tsum rub tawm thiab teeb tsa APDS9960_NonBlocking lub tsev qiv ntawv ua ntej. nov

Kev Ntsuam Xyuas Kev Sib Txawv Parallel

Pics 3 thiab 4 nthuav qhia tib yam rau Parallel interface

Kauj ruam 4: Xaus

Xaus
Xaus

General

Txoj cai ua haujlwm tau zoo thiab pom cov lus taw tes ua haujlwm yam tsis muaj qhov ua tsis raug. Nws tau nce thiab ua haujlwm rau ob peb lub lis piam tam sim no ua cov cuab yeej qhev hauv kuv qhov haujlwm tom ntej. Kuv tau sim ntau yam tsis ua tiav hom (thiab yog li muaj qhov xav paub Quinn tsev neeg moggie) uas yav dhau los ua rau ESP8266-12 rov pib dua, tsis muaj qhov tsis zoo.

Muaj peev xwm txhim kho

  • Qhov pom tseeb. Rov sau APDS9960 Gesture Sensor lub tsev qiv ntawv kom tsis txhob thaiv.

    Qhov tseeb kuv tau hu rau Broadcom uas tso kuv mus rau tus xa khoom hauv zos uas tam sim tsis quav ntsej kuv qhov kev thov txhawb nqa, Kuv tsuas yog tsis yog SparkFun lossis AdaFruit, kuv twv. Yog li qhov no tej zaum yuav tau tos ib pliag

  • Hloov cov cai rau tus qhev me me microcontroller. Siv ATMega328P rau ib txoj haujlwm yog me ntsis ntawm kev ua dhau. Txawm hais tias kuv tau pib saib ntawm ATTiny84, nres luv ntawm kev siv ib qho raws li kuv xav tias qhov suav sau me me ntawm cov cai yog kab ciam teb haum. Nrog rau kev siv nyiaj ntxiv ntawm kev hloov kho APDS9960 lub tsev qiv ntawv los ua haujlwm nrog I2C lub tsev qiv ntawv sib txawv.

Kauj Ruam 5: Cov neeg ua tim khawv

Yuav tsum tau ua qhov program kos rau arduino (ATMega328P - U1)

SparkFun_APDS9960.h

  • Los ntawm: Steve Quinn
  • Lub Hom Phiaj: Qhov no yog rab diav rawg ntawm SparkFun APDS9960 Sensor rab rawg los ntawm jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library. Nws muaj qee qhov kev hloov kho los pab daws qhov teeb meem thiab muaj lub ntsuas ntsuas kom tsis txhob hnov qab txhawm rau txo qis qhov tshwm sim.
  • Los ntawm:

Yuav tsum tau txhawm rau ua qhov tsis thaiv qhov ua haujlwm no rau hauv koj cov lej arduino thiab muab piv txwv ua haujlwm

APDS9960_NonBlocking.h

  • Los ntawm: Steve Quinn
  • Lub Hom Phiaj: Muab kev sib cuam tshuam huv si txhawm rau txhawm rau ua qhov kev txwv tsis pub siv APDS9960 Gesture Sensor rau hauv koj li Arduino code.
  • Los ntawm:

Lub Sijhawm Ua Haujlwm Tiag

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

Cov ntaub ntawv APDS9960

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

Pom zoo: