Orodha ya maudhui:

Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960: Hatua 5
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960: Hatua 5

Video: Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960: Hatua 5

Video: Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960: Hatua 5
Video: Пора уходить! Как сварить верстак полуавтоматом HAMER MIG-250 Synergic или обустройство новой студии 2024, Julai
Anonim
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960
Utekelezaji wa Sensorer ya Uzuiaji wa APDS9960

Utangulizi

Maelezo haya yanayoweza kufundishwa jinsi ya kuunda utekelezaji usiozuia wa Sensor ya Ishara ya APDS9960 ukitumia SparkFun_APDS-9960_Sensor_Arduino_Library.

Utangulizi

Kwa hivyo labda unajiuliza ni nini kisichozuia? Au hata kuzuia kwa jambo hilo?

Muhimu zaidi ni kwanini ni muhimu kuwa na kitu kisichozuia chochote sawa?

Sawa, kwa hivyo wakati microprocessor inaendesha programu kwa utaratibu hutekeleza mistari ya nambari na kwa kufanya hivyo hufanya simu kwenda na kurudi kutoka kwa kazi kulingana na utaratibu ambao uliwaandika.

Simu ya kuzuia ni wito tu kwa aina yoyote ya utendaji ambayo inasababisha kusimamishwa kwa utekelezaji, ikimaanisha simu ya kufanya kazi ambapo mpigaji hataanza tena utekelezaji mpaka kazi inayoitwa imalize kutekeleza.

Kwa nini hii ni muhimu?

Katika hali ambayo umeandika nambari kadhaa ambayo inahitaji kutekeleza mara kwa mara kazi nyingi mfululizo kama kusoma joto, soma kitufe na kusasisha onyesho, ikiwa nambari ya kusasisha onyesho itakuwa simu ya kuzuia, mfumo wako hautakubali vyombo vya habari vya kifungo na mabadiliko ya joto, kwani processor itatumia wakati wote kusubiri onyesho kusasisha na sio kusoma hali ya kifungo au joto la hivi karibuni.

Kwa upande wangu nataka kuunda MQTT juu ya kifaa cha desktop cha IoT chenye uwezo wa WiFi ambacho kinasoma maadili ya ndani na ya mbali ya hali ya hewa / unyevu, viwango vya taa iliyoko, shinikizo la kibaometri, hufuatilia wakati, kuonyesha vigezo hivi vyote kwenye LCD, ingia kwenye uSD kadi katika wakati halisi, soma pembejeo za vitufe, andika kwa pato za LED na ufuatilie ishara kudhibiti vitu kwenye miundombinu yangu ya IoT na yote ambayo inapaswa kudhibitiwa na ESP8266-12.

Kwa bahati mbaya vyanzo viwili tu vya maktaba ya APDS9960 niliyoweza kupata ni maktaba ya SparkFun na AdaFruit, ambazo zote ziliruka kutoka kwa nambari ya maombi kutoka kwa Avago (mtengenezaji wa ADPS9960) na kumiliki simu iitwayo 'readGesture' ambayo ina muda (1) {}; kitanzi ambacho kinapotumika katika mradi hapo juu husababisha ESP8266-12E kuweka upya wakati wowote sensor ya ADPS9960 imejaa (yaani. wakati kitu kilibaki karibu, au kulikuwa na chanzo kingine cha IR kinachoangazia sensa).

Kwa hivyo kusuluhisha tabia hii nilichagua kuhamisha usindikaji wa Ishara kwa processor ya pili ambayo ESP8266-12E ikawa mdhibiti mkuu na mfumo huu mtumwa, kama ilivyoonyeshwa kwenye picha 1 & 2 hapo juu, Muhtasari wa Mfumo na michoro ya Muundo wa Mfumo mtawaliwa.. Picha 3 inaonyesha mzunguko wa mfano.

Ili kupunguza mabadiliko niliyohitaji kufanya kwa nambari yangu iliyopo niliandika pia darasa la kanga / maktaba inayoitwa 'APDS9960_NonBlocking'.

Ifuatayo ni ufafanuzi wa kina wa suluhisho lisilokuzuia.

Ninahitaji Sehemu Gani?

Ikiwa unataka kujenga suluhisho la I2C linalofanya kazi na maktaba ya APDS9960_NonBlocking utahitaji sehemu zifuatazo.

  1. 1 off ATMega328P hapa
  2. 1 off PCF8574P hapa
  3. 6 off 10K Resistors hapa
  4. 4 off 1K Resistors hapa
  5. 1 off 1N914 Diode hapa
  6. Punguzo 1 PN2222 NPN Transistor hapa
  7. 1 off 16MHz kioo hapa
  8. 2 off 0.1uF Capacitors hapa
  9. 1 off 1000uF Electrolytic Capacitor hapa
  10. 1 off 10uF Electrolytic Capacitor hapa
  11. 2 off 22pF Capacitors hapa

Ikiwa unataka kusoma pato la sensorer ya ishara kupitia kiolesura kinachofanana basi unaweza kuacha PCF8574P na tatu za vipinga 10K.

Ninahitaji programu gani?

Kitambulisho cha Arduino 1.6.9

Ninahitaji ujuzi gani?

Kuweka mfumo, tumia nambari ya chanzo (iliyotolewa) na unda mizunguko inayohitajika utahitaji zifuatazo;

  • Uelewa mdogo wa umeme,
  • Ujuzi wa Arduino na ni IDE,
  • Uelewa wa jinsi ya kupanga Arduino iliyoingia (Tazama Kupangilia 'Programu ya ATTiny85, ATTiny84 na ATMega328P: Arduino Kama ISP')
  • Uvumilivu fulani.

Mada zimefunikwa

  • Muhtasari mfupi wa mzunguko
  • Muhtasari mfupi wa programu
  • Kujaribu Kifaa cha kuhisi ishara za APDS9960
  • Hitimisho
  • Marejeo

Hatua ya 1: Muhtasari wa Mzunguko

Muhtasari wa Mzunguko
Muhtasari wa Mzunguko

Mzunguko umegawanywa katika sehemu mbili;

  • Ya kwanza ni serial I2C kwa uongofu sawa unaofanikiwa kupitia vipinga R8… 10 na IC1. Hapa R8… R10 weka anwani ya I2C kwa kitita 8 cha I / O cha kupanua IC1 NXP PCF8574A. Masafa halali ya kifaa hiki ni 0x38… 0x3F mtawaliwa. Katika mfano wa programu ya I2C iliyotolewa 'I2C_APDS9960_TEST.ino' '#fafanua GESTURE_SENSOR_I2C_ADDRESS' itahitaji kubadilishwa ili kukidhi masafa haya ya anwani.
  • Vipengele vingine vyote huunda Arduino Uno iliyoingia na kuwa na kazi zifuatazo;

    • R1, T1, R2 na D1 hutoa pembejeo ya kuweka upya kifaa cha mtumwa. Hapa mapigo ya juu ya kazi kwenye IC1 - P7 yatalazimisha U1 kuweka upya.
    • R3, R4, ni vipingamizi vya sasa vya upeo wa programu zilizopachikwa za laini za TX / RX.
    • C5 na R7 huruhusu Arduino IDE kusanikisha moja kwa moja U1 kupitia mapigo kwenye laini ya DTR ya kifaa kilichoambatishwa cha FTDI.
    • R5 na R6 ni I2C ya kuvuta vinjari kwa APDS9960 na C6 ikitoa upunguzaji wa reli ya usambazaji wa ndani.
    • U1, C1, C2 na Q1 huunda Arduino Uno iliyoingia na ni saa kwa mtiririko huo.
    • Mwishowe C3 na C4 hutoa usambazaji wa reli ya ndani kwa U1.

Hatua ya 2: Muhtasari wa Programu

Muhtasari wa Programu
Muhtasari wa Programu
Muhtasari wa Programu
Muhtasari wa Programu
Muhtasari wa Programu
Muhtasari wa Programu

Utangulizi

Ili kufanikiwa kukusanya nambari hii ya chanzo utahitaji maktaba zifuatazo za ziada kupanga programu iliyoingizwa ya Arduino Uno U1;

606. Mchaji haupati

  • Na: Steve Quinn
  • Kusudi: Hili ni toleo lenye uma wa Sura ya SparkFun APDS9960 iliyopigwa kutoka jonn26 / SparkFun_APDS-9960_Sensor_Arduino_Library. Inayo marekebisho machache kusaidia kwa utatuzi na ina kichunguzi-cha kuhamasisha kupunguza uchochezi wa uwongo.
  • Kutoka:

APDS9960_NonBlocking.h

  • Na: Steve Quinn
  • Kusudi: Hutoa kiolesura safi kupachika utekelezaji huu wa kuzuia wa Sensorer ya Ishara ya APDS9960 kwenye nambari yako ya Arduino.
  • Kutoka:

Tazama ifuatayo Inayoweza kufundishwa juu ya jinsi ya kupanga mdhibiti mdogo wa Arduino Uno (ATMega328P) ikiwa haujui jinsi ya kufanikisha hii;

KUPANGA ATTINY85, ATTINY84 NA ATMEGA328P: ARDUINO AS ISP

Muhtasari wa Kazi

ATMega328P iliyoingia mtumwa microcontroller anapiga kura ya mstari wa INT kutoka ADPS9960. Mstari huu unaposhuka mdhibiti mdogo anasoma sajili za ADPS9960 na huamua ikiwa kumekuwa na ishara halali iliyohisi. Ikiwa ishara halali imegunduliwa, nambari ya ishara hii 0x0… 0x6, 0xF imewekwa kwenye Bandari B na 'nGestureAvailable' imesisitizwa kuwa chini.

Wakati kifaa cha Master kinapoona 'nGestureAvailable' inafanya kazi, inasoma thamani kwenye Port B kisha inavuta 'nGestureClear' chini kwa muda mfupi kutambua kupokewa kwa data.

Kifaa cha watumwa basi kinasisitiza 'nGestureAvailable' juu na inafuta data kwenye Port B. Pic 5 hapo juu inaonyesha skrini iliyochukuliwa kutoka kwa analyzer ya mantiki wakati wa mzunguko kamili wa kugundua / kusoma.

Muhtasari wa Kanuni

Piga picha 1 hapo juu juu ya jinsi programu katika U1 mtumwa iliyoingizwa Arduino Uno inavyofanya kazi, pamoja na Pic 2 jinsi kazi mbili za nyuma / za mbele zinaingiliana. Pic 3 ni sehemu ya nambari inayoelezea jinsi ya kutumia APDS9960_NonBlockinglibrary. Picha 4 inatoa ramani kati ya Pini za Dijiti za Arduino Uno na pini halisi za vifaa kwenye ATMega328P.

Baada ya kuweka tena mdhibiti mdogo wa mtumwa aliyepachikwa anaanzisha APDS9960 kuruhusu utambuzi wa ishara kuchochea pato lake la INT na kusanikisha ni I / O, ikiambatanisha utaratibu wa usumbufu wa huduma (ISR) 'GESTURE_CLEAR ()' kukatiza vector INT0 (Dijiti ya Dijiti 2, Hardware IC siri 4), kuisanidi kwa kichocheo cha kingo kinachoanguka. Hii huunda pembejeo ya nGestureClear kutoka kwa kifaa kikuu.

Pini ya kukatiza pato 'INT' kutoka APDS9960 imeunganishwa na Dijiti ya Dijiti 4, Hardware IC Pin 6 ambayo imewekwa kama pembejeo kwa U1.

Mstari wa ishara ya 'nGestureAvailable' kwenye pini ya Dijitali 7, Hardware IC ya 13 imesanidiwa kama pato na imewekwa juu, isiyotumika (imesisitizwa).

Mwishowe Port B bits 0… 3 mtawaliwa zimeundwa kama matokeo na zinawekwa chini. Hizi huunda nibble ya data ambayo inawakilisha aina anuwai za ishara; Hakuna = 0x0, Kosa = 0xF, Juu = 0x1, Chini = 0x2, Kushoto = 0x3, Kulia = 0x4, Karibu = 0x5 na Mbali = 0x6.

Kazi ya nyuma 'Loop' imepangwa ambayo huendelea kupiga kura APDS9960 Usumbufu wa pato INT kupitia kusoma Dijiti ya Dijiti 4. Wakati pato la INT kutoka APDS9960 inakuwa hai chini inayoonyesha kitovu kimesababishwa na mdhibiti mdogo anajaribu kutafsiri ishara yoyote kwa kupiga simu 'readGesture () 'na ni wakati (1) {}; kitanzi kisicho na mwisho.

Ikiwa ishara halali imegunduliwa, thamani hii imeandikwa kwa Port B, pato la 'nGestureAvailable' linathibitishwa na semaphore ya boolean 'bGestureAvailable' imewekwa, kuzuia ishara yoyote zaidi kuingia.

Mara tu bwana anapogundua pato la 'nGestureAvailable' inasoma thamani hii mpya na kunde 'nGestureClear' iko chini. Ukingo huu unasababisha kazi ya mbele 'ISR GESTURE_CLEAR ()' kupangiliwa kusitisha utekelezaji wa kazi ya nyuma 'Loop', kusafisha Port B, 'bGestureAvailable' semaphore na 'nGestureAvailable'.

Kazi ya mbele 'GESTURE_CLEAR ()' sasa imesimamishwa na kazi ya mandharinyuma 'Loop' imepangwa tena. Ishara zaidi kutoka APDS9960 sasa zinaweza kuhisi.

Kwa kutumia usumbufu uliosababisha kazi za mbele / nyuma kwa njia hii njia isiyo na kipimo katika 'readGesture ()' ya kifaa cha mtumwa haitaathiri kifaa kikuu kutoka kwa kufanya kazi na haizuii utekelezaji wa kifaa cha watumwa pia. Hii inaunda msingi wa mfumo rahisi sana wa uendeshaji wa wakati halisi (RTOS).

Kumbuka: Kiambishi awali 'n' inamaanisha kazi ya chini au imesisitizwa kama ilivyo katika 'nGestureAvailable'

Hatua ya 3: Kupima kifaa kisichozuia APDS9960 cha kugundua ishara

Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960
Kujaribu Kifaa kisichozuia cha Ishara ya APDS9960

Utangulizi

Hata ingawa moduli ya APDS9960 hutolewa na + 5v inatumia kibodi + 3v3 mdhibiti ikimaanisha kuwa mistari ya I2C ni + 3v3 inatii na sio + 5v. Hii ndio sababu nilichagua kutumia + 3v3 inayofuatana na Arduino Kutokana kama mdhibiti mdogo wa mtihani, ili kukomesha hitaji la wanaohama ngazi.

Ikiwa hata hivyo, unataka kutumia Arduino Uno halisi basi utahitaji kusawazisha laini za I2C hadi U1. Tazama yafuatayo yanayofundishwa ambapo nimeambatanisha seti ya slaidi inayofaa (I2C_LCD_With_Arduino) ambayo inatoa vidokezo vingi vya kutumia I2C.

Upimaji wa Kiolesura cha I2C

Picha 1 na 2 hapo juu zinaonyesha jinsi ya kuweka na kupanga mfumo wa kiolesura cha I2C. Utahitaji kupakua na kusanikisha maktaba ya APDS9960_NonBlocking kwanza. hapa

Upimaji Sambamba Sambamba

Picha 3 na 4 zina undani sawa kwa kiolesura Sambamba

Hatua ya 4: Hitimisho

Hitimisho
Hitimisho

Mkuu

Nambari inafanya kazi vizuri na hugundua ishara kwa kujibu bila chanya yoyote ya uwongo. Imekuwa ikifanya kazi kwa wiki chache sasa kama kifaa cha watumwa katika mradi wangu unaofuata. Nimejaribu njia nyingi tofauti za kutofaulu (na kadhalika moggie wa nyumbani wa Quinn) ambaye hapo awali alisababisha usanidi wa ESP8266-12, bila athari mbaya.

Maboresho yanayowezekana

  • Ya wazi. Andika tena maktaba ya Sifa ya Ishara ya APDS9960 kuwa isiyozuia.

    Kweli niliwasiliana na Broadcom ambaye aliniweka kwa msambazaji wa ndani ambaye mara moja alipuuza ombi langu la msaada, mimi sio SparkFun au AdaFruit, nadhani. Kwa hivyo hii italazimika kusubiri kwa muda

  • Peleka nambari hiyo kwa mdhibiti mdogo wa mtumwa. Kutumia ATMega328P kwa kazi moja ni ujazo zaidi. Ingawa hapo awali niliangalia ATTiny84, niliacha kutumia moja kwani nilihisi saizi iliyokusanywa ya nambari hiyo ilikuwa sawa na laini ya mpaka. Pamoja na kichwa kilichoongezwa cha kurekebisha maktaba ya APDS9960 kufanya kazi na maktaba tofauti ya I2C.

Hatua ya 5: Marejeo

Inahitajika kupanga mpango wa arduino iliyoingia (ATMega328P - U1)

606. Mchaji haupati

  • Na: Steve Quinn
  • Kusudi: Hili ni toleo lenye uma wa Sura ya SparkFun APDS9960 iliyopigwa kutoka jonn26 / SparkFun_APDS-9960_Sensor_Arduino_Library. Inayo marekebisho machache kusaidia kwa utatuzi na ina kigunduzi chenye uhamasishaji kupunguza uchochezi wa uwongo.
  • Kutoka:

Inahitajika kupachika kazi hii isiyozuia kwenye nambari yako ya arduino na upe mifano iliyofanya kazi

APDS9960_NonBlocking.h

  • Na: Steve Quinn
  • Kusudi: Hutoa kiolesura safi kupachika utekelezaji huu wa kuzuia wa Sensorer ya Ishara ya APDS9960 kwenye nambari yako ya Arduino.
  • Kutoka:

Mfumo wa Uendeshaji wa Muda Halisi

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

Hati ya APDS9960

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

Jedwali la PCF8574A

Ilipendekeza: