Sisällysluettelo:

Estämätön APDS9960 -eleanturin toteutus: 5 vaihetta
Estämätön APDS9960 -eleanturin toteutus: 5 vaihetta

Video: Estämätön APDS9960 -eleanturin toteutus: 5 vaihetta

Video: Estämätön APDS9960 -eleanturin toteutus: 5 vaihetta
Video: 18. helmikuuta 2020 2024, Marraskuu
Anonim
Estämätön APDS9960 -eleanturin toteutus
Estämätön APDS9960 -eleanturin toteutus
Estämätön APDS9960 -eleanturin toteutus
Estämätön APDS9960 -eleanturin toteutus
Estämätön APDS9960 -eleanturin toteutus
Estämätön APDS9960 -eleanturin toteutus

Johdanto

Tässä oppaassa kerrotaan, kuinka APDS9960-eleanturin estovapaa toteutus luodaan SparkFun_APDS-9960_Sensor_Arduino_Library -ohjelman avulla.

Johdanto

Joten luultavasti kysyt itseltäsi, mikä on esto? Tai jopa estää sen vuoksi?

Vielä tärkeämpää on, miksi on tärkeää, että jokin esto ei ole oikein?

Ok, joten kun mikroprosessori suorittaa ohjelman, se suorittaa peräkkäin koodirivejä ja soittaa näin funktioille ja palaa funktioista niiden kirjoittamisjärjestyksen mukaisesti.

Estävä puhelu on vain puhelu mihin tahansa toimintoon, joka pysäyttää suorituksen, eli toimintokutsun, jossa soittaja ei jatka suorittamista ennen kuin kutsutun toiminnon suorittaminen on valmis.

Joten miksi tämä on tärkeää?

Jos olet kirjoittanut jonkin koodin, jonka on suoritettava säännöllisesti useita toimintoja peräkkäin, kuten lämpötilan lukeminen, painikkeen lukeminen ja näytön päivittäminen, jos näytön päivityskoodi on estopuhelu, järjestelmäsi ei vastaa painikkeiden painallukset ja lämpötilan muutokset, koska prosessori viettää koko ajan odottamaan näytön päivitystä eikä lue painikkeen tilaa tai viimeisintä lämpötilaa.

Omalta osaltani haluan luoda MQTT: n WiFi -yhteensopivan IoT -pöytäkoneen avulla, joka lukee sekä paikalliset että etäiset lämpötila-/kosteusarvot, ympäristön valotasot, ilmanpaineen, seuraa aikaa, näyttää kaikki nämä parametrit nestekidenäytöllä, kirjautuu uSD: hen kortti reaaliajassa, lue painikkeiden tulot, kirjoita ulostulo-LEDeille ja seuraa eleitä hallitakseni asioita IoT-infrastruktuurissani ja hallita niitä kaikkia ESP8266-12 -laitteella.

Valitettavasti ainoat kaksi APDS9960 -kirjaston lähdettä, jotka löysin, olivat SparkFun- ja AdaFruit -kirjastot, jotka molemmat irrotettiin Avagon (ADPS9960 -valmistaja) sovelluskoodista ja joissa on kutsu nimeltä readGesture, joka sisältää jonkin aikaa (1) {}; silmukka, joka yllä olevassa projektissa käytettäessä saa ESP8266-12E: n nollautumaan aina, kun ADPS9960-anturi kyllästyy (eli kun kohde pysyi lähellä tai jos anturia valaisi toinen infrapunalähde).

Tämän vuoksi tämän ongelman ratkaisemiseksi päätin siirtää eleiden käsittelyn toiseen prosessoriin, jolloin ESP8266-12E: stä tuli päämikro-ohjain ja tästä järjestelmästä orja, kuten on kuvattu kuvissa 1 ja 2, järjestelmän yleiskatsaus ja järjestelmän koostumuskaaviot.. Kuva 3 esittää prototyyppipiirin.

Rajoittaakseni muutoksia, joita minun oli tehtävä nykyiseen koodiini, kirjoitin myös kääreluokan/kirjaston, jonka mielikuvitus oli APDS9960_NonBlocking.

Seuraavassa on yksityiskohtainen selitys estovapaasta ratkaisusta.

Mitä osia tarvitsen?

Jos haluat rakentaa I2C -ratkaisun, joka toimii APDS9960_NonBlocking -kirjaston kanssa, tarvitset seuraavat osat.

  1. 1 ATMega328P pois täältä
  2. 1 pois PCF8574P täältä
  3. 6 off 10K vastukset täällä
  4. 4 off 1K vastukset täällä
  5. 1 pois päältä 1N914 Diodi täällä
  6. 1 pois PN2222 NPN Transistor täältä
  7. 1 off 16MHz crystal täällä
  8. 2 pois 0,1uF kondensaattorit täällä
  9. 1 off 1000uF elektrolyyttikondensaattori täällä
  10. 1 off 10uF elektrolyyttikondensaattori täällä
  11. 2 off 22pF kondensaattoria täällä

Jos haluat lukea eleanturin ulostulon rinnakkaisliitännän kautta, voit pudottaa PCF8574P: n ja kolme 10K -vastusta pois.

Mitä ohjelmistoja tarvitsen?

Arduino IDE 1.6.9

Mitä taitoja tarvitsen?

Asenna järjestelmä käyttämällä lähdekoodia (mukana) ja luo tarvittavat piirit, joita tarvitset:

  • Minimaalinen käsitys elektroniikasta,
  • Tieto Arduinosta ja sen IDE: stä
  • Ymmärtäminen sulautetun Arduinon ohjelmoinnista (katso Ohjeet 'ATTiny85: n, ATTiny84: n ja ATMega328P: n ohjelmointi: Arduino ISP: nä')
  • Jonkin verran kärsivällisyyttä.

Käsitellyt aiheet

  • Lyhyt katsaus piiriin
  • Lyhyt yleiskatsaus ohjelmistosta
  • APDS9960 -eleiden tunnistuslaitteen testaus
  • Johtopäätös
  • Viitteet

Vaihe 1: Piirin yleiskatsaus

Piirin yleiskatsaus
Piirin yleiskatsaus

Piiri on jaettu kahteen osaan;

  • Ensimmäinen on sarja I2C rinnakkaismuunnokseen, joka suoritetaan vastuksen R8… 10 ja IC1 kautta. Tässä R8… R10 asettaa I2C -osoitteen 8 -bittiselle I/O -laajenninsirulle IC1 ja NXP PCF8574A. Tämän laitteen kelvolliset osoitealueet ovat 0x38… 0x3F. I2C -ohjelmistoesimerkissä 'I2C_APDS9960_TEST.ino'##define GESTURE_SENSOR_I2C_ADDRESS olisi muutettava tämän osoitealueen mukaiseksi.
  • Kaikki muut komponentit muodostavat orjaan upotetun Arduino Unon ja niillä on seuraavat toiminnot;

    • R1, T1, R2 ja D1 tarjoavat orjalaitteen nollaustulon. Tässä aktiivinen korkea pulssi IC1 - P7: ssä pakottaa U1: n nollautumaan.
    • R3, R4 ovat virranrajoitusvastuksia sulautetulle laitteelle, joka ohjelmoi TX/RX -linjoja.
    • C5 ja R7 antavat Arduino IDE: lle automaattisesti ohjelmoida U1: n liitetyn FTDI -laitteen DTR -linjan pulssin kautta.
    • R5 ja R6 ovat I2C -vetovastus APDS9960: lle ja C6 tarjoaa paikallisen syöttökiskon irrotuksen.
    • U1, C1, C2 ja Q1 muodostavat upotetun Arduino Unon ja kellon.
    • Lopuksi C3 ja C4 tarjoavat paikallisen syöttökiskon irrotuksen U1: lle.

Vaihe 2: Ohjelmiston yleiskatsaus

Ohjelmiston yleiskatsaus
Ohjelmiston yleiskatsaus
Ohjelmiston yleiskatsaus
Ohjelmiston yleiskatsaus
Ohjelmiston yleiskatsaus
Ohjelmiston yleiskatsaus

Johdanto

Tämän lähdekoodin kääntämiseksi tarvitset seuraavat ylimääräiset kirjastot sulautetun Arduino Uno U1: n ohjelmoimiseksi;

SparkFun_APDS9960.h

  • Kirjailija: Steve Quinn
  • Tarkoitus: Tämä on haarukkaversio SparkFun APDS9960 -anturista, joka on haarautunut osoitteesta jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library. Siinä on muutamia muutoksia, jotka auttavat virheenkorjauksessa, ja siinä on herkistymätön ilmaisin, joka vähentää väärää laukaisua.
  • Lähde:

APDS9960_NonBlocking.h

  • Kirjailija: Steve Quinn
  • Tarkoitus: Tarjoaa puhtaan käyttöliittymän upottaaksesi tämän estottömän APDS9960-eleanturin toteutuksen Arduino-koodiin.
  • Lähde:

Katso seuraava opas, kuinka ohjelmoida upotettu Arduino Uno (ATMega328P) -mikro -ohjain, jos et tiedä kuinka tämä saavutetaan;

ATTINY85: n, ATTINY84: n ja ATMEGA328P: N OHJELMOINTI: ARDUINO AS ISP

Toiminnallinen yleiskatsaus

Sulautettu ATMega328P -orjamikro ohjaa INT -linjaa ADPS9960: sta. Kun tämä viiva laskee, mikrokontrolleri lukee ADPS9960 -rekisterit ja määrittää, onko ele tunnistettu. Jos keltainen ele on havaittu, tämän eleen koodi 0x0… 0x6, 0xF asetetaan porttiin B ja "nGestureAvailable" on alhainen.

Kun päälaite näkee 'nGestureAvailable' aktiivisena, se lukee portin B arvon ja antaa sitten väliaikaisen signaalin 'nGestureClear' alhaiseksi vahvistaakseen tietojen vastaanottamisen.

Tämän jälkeen orjalaite poistaa nGestureAvailable-arvon korkealta ja tyhjentää tiedot portista B. Yllä olevassa kuvassa 5 näkyy näytön kaappaus, joka on otettu loogisesta analysaattorista koko tunnistus-/lukusyklin aikana.

Koodin yleiskatsaus

Yllä olevassa kuvassa 1 kerrotaan, miten U1: n sulautettu orja Arduino Uno -ohjelmisto toimii, ja kuvassa 2, miten molemmat tausta-/etualan tehtävät ovat vuorovaikutuksessa. Kuva 3 on koodisegmentti, jossa kuvataan APDS9960_NonBlockinglibrary -kirjaston käyttö. Kuva 4 esittää kartoituksen Arduino Uno Digital Pinsin ja ATMega328P: n varsinaisten laitteistotappien välillä.

Nollauksen jälkeen upotettu orja -mikrokontrolleri alustaa APDS9960: n, jolloin eleiden tunnistus käynnistää sen INT -lähdön ja määrittää sen I/O -liitännän., määrittämällä se laskevan reunan liipaisimelle. Tämä muodostaa päälaitteen nGestureClear -tulon.

APDS9960: n keskeytyslähtönasta 'INT' on kytketty digitaaliseen nastaan 4, laitteiston IC -nastaan 6, joka on määritetty U1: n tuloksi.

'NGestureAvailable' -signaalilinja digitaalisessa nastassa 7, laitteiston IC-nastassa 13 on määritetty ulostuloksi ja asetettu korkeaksi, ei-aktiiviseksi (ei-vahvistettu).

Lopuksi portin B bitit 0… 3 on konfiguroitu lähdöiksi ja asetettu matalalle. Nämä muodostavat datan napin, joka edustaa erilaisia havaittuja eleitä; Ei mitään = 0x0, virhe = 0xF, ylös = 0x1, alas = 0x2, vasen = 0x3, oikea = 0x4, lähellä = 0x5 ja kaukana = 0x6.

Taustatyötehtävä 'Loop' on ajoitettu ja se kysyy jatkuvasti APDS9960: n keskeytyslähtöä INT lukemalla digitaalinen nasta 4. Kun APDS9960: n INT -ulostulo aktivoituu alhaiseksi osoittaen, että anturi on lauennut, mikrokontrolleri yrittää tulkita eleitä kutsumalla 'readGesture () 'kanssa sen ollessa (1) {}; loputon silmukka.

Jos keltainen ele on havaittu, tämä arvo kirjoitetaan porttiin B, 'nGestureAvailable' -lähtö vahvistetaan ja boolen semafor 'bGestureAvailable' asetetaan, mikä estää uusien eleiden kirjaamisen.

Kun isäntä havaitsee aktiivisen nGestureAvailable -lähdön, se lukee tämän uuden arvon ja pulssi 'nGestureClear' aktiivisen alhaisen. Tämä putoava reuna käynnistää etualan tehtävän ISR GESTURE_CLEAR () aikataulun, joka keskeyttää taustatehtävän Loop suorittamisen, tyhjentää portin B, bGestureAvailable -semaforin ja nGestureAvailable -tuloksen.

Etualan tehtävä GESTURE_CLEAR () on nyt keskeytetty ja taustatehtävä Loop on ajoitettu uudelleen. APDS9960: n muut eleet voidaan nyt havaita.

Käyttämällä keskeytyskäynnistettyjä etualan/taustatehtäviä tällä tavalla orjalaitteen "readGesture ()": n mahdollinen ääretön silmukka ei vaikuta päälaitteen toimintaan eikä estä orjalaitteen suorittamista. Tämä muodostaa perustan hyvin yksinkertaiselle reaaliaikaiselle käyttöjärjestelmälle (RTOS).

Huomautus: Etuliite n tarkoittaa aktiivista alhaista tai väitettyä kuten nGestureAvailable

Vaihe 3: Estävän APDS9960 -eleentunnistuslaitteen testaus

Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus
Estävän APDS9960 -eleentunnistuslaitteen testaus

Johdanto

Vaikka APDS9960-moduulin mukana toimitetaan +5V, se käyttää sisäistä +3v3-säädintä, mikä tarkoittaa, että sen I2C-linjat ovat +3v3-yhteensopivia eivätkä +5v. Tästä syystä päätin käyttää +3v3 -yhteensopivaa Arduino Due -laitetta testimikro -ohjaimena välttääksesi tasonsiirtimien tarpeen.

Jos kuitenkin haluat käyttää todellista Arduino Unoa, sinun on siirrettävä I2C -linjat tasolle U1. Katso seuraava Instructable, johon olen liittänyt hyödyllisen diasarjan (I2C_LCD_With_Arduino), joka sisältää paljon käytännön vinkkejä I2C: n käytöstä.

I2C -rajapinnan testaus

Yllä olevat kuvat 1 ja 2 esittävät järjestelmän asentamisen ja ohjelmoinnin I2C -liitäntää varten. Sinun on ensin ladattava ja asennettava APDS9960_NonBlocking -kirjasto. tässä

Rinnakkaisliitäntätestaus

Kuvat 3 ja 4 esittävät samaa rinnakkaisliitäntää varten

Vaihe 4: Johtopäätös

Johtopäätös
Johtopäätös

Yleistä

Koodi toimii hyvin ja havaitsee eleet reagoivasti ilman vääriä positiivisia. Se on ollut käynnissä muutaman viikon orjalaitteena seuraavassa projektissani. Olen kokeillut monia erilaisia vikatiloja (ja niin on myös utelias Quinn-kotitalousmoggie), joka johti aiemmin ESP8266-12-nollaustilaan ilman negatiivisia vaikutuksia.

Mahdollisia parannuksia

  • Ilmeinen. Kirjoita APDS9960-eleanturikirjasto uudelleen estämättömäksi.

    Itse asiassa otin yhteyttä Broadcomiin, joka otti minut paikalliselle jakelijalle, joka jätti välittömästi huomiotta tukipyyntöni, en vain ole SparkFun tai AdaFruit. Joten tätä on todennäköisesti odotettava hetki

  • Siirrä koodi pienempään orja -mikro -ohjaimeen. ATMega328P: n käyttäminen yhteen tehtävään on hieman liioittelua. Vaikka alun perin katsoin ATTiny84: tä, lopetin sen käyttämisen, koska koin koodin kootun koon olevan reunaviiva. Lisäkustannukset, kun APDS9960 -kirjastoa on muutettava toimimaan eri I2C -kirjaston kanssa.

Vaihe 5: Viitteet

Pakollinen sulautetun arduinon ohjelmointiin (ATMega328P - U1)

SparkFun_APDS9960.h

  • Kirjailija: Steve Quinn
  • Tarkoitus: Tämä on haarukkaversio SparkFun APDS9960 -anturista, joka on haarautunut osoitteesta jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library. Siinä on muutamia muutoksia, jotka auttavat virheenkorjauksessa, ja siinä on herkistymätön ilmaisin, joka vähentää väärää laukaisua.
  • Lähde:

Pakko upottaa tämä esto-toiminto arduino-koodiin ja antaa toimivia esimerkkejä

APDS9960_NonBlocking.h

  • Kirjailija: Steve Quinn
  • Tarkoitus: Tarjoaa puhtaan käyttöliittymän upottaaksesi tämän estottömän APDS9960-eleanturin toteutuksen Arduino-koodiin.
  • Lähde:

Reaaliaikainen käyttöjärjestelmä

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

APDS9960 tuotetiedot

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

Suositeltava: