Tartalomjegyzék:
- 1. lépés: Áramkör áttekintése
- 2. lépés: A szoftver áttekintése
- 3. lépés: A nem blokkoló APDS9960 gesztusérzékelő eszköz tesztelése
- 4. lépés: Következtetés
- 5. lépés: Hivatkozások
Videó: Nem blokkoló APDS9960 gesztusérzékelő megvalósítása: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Preambulum
Ez az útmutató leírja, hogyan hozhat létre blokkolásmentes megvalósítást az APDS9960 gesztusérzékelőből a SparkFun_APDS-9960_Sensor_Arduino_Library segítségével.
Bevezetés
Tehát valószínűleg azt kérdezi magától, hogy mi az, ami nem blokkol? Vagy akár blokkolni is?
Ennél is fontosabb, hogy miért fontos, hogy a blokkolásmentes minden rendben legyen?
Rendben, tehát amikor egy mikroprocesszor futtat egy programot, akkor sorban végrehajtja a kódsorokat, és ezzel hívásokat kezdeményez, és visszatér azokból a függvények szerint, ahogyan azokat írta.
A blokkoló hívás csak hívás bármilyen funkcióra, amely a végrehajtás leállítását okozza, vagyis olyan függvényhívást, amelyben a hívó nem folytatja a végrehajtást, amíg a hívott funkció végrehajtása befejeződik.
Akkor miért fontos ez?
Abban az esetben, ha olyan kódot írt, amelynek rendszeresen számos funkciót kell végrehajtania egymás után, mint például a hőmérséklet leolvasása, a gomb elolvasása és a kijelző frissítése, ha a kijelző frissítésére szolgáló kód blokkoló hívás, akkor a rendszer nem reagál gombnyomások és hőmérsékletváltozások, mivel a processzor minden idejét azzal várja, hogy a kijelző frissül, és nem olvassa le a gomb állapotát vagy a legújabb hőmérsékletet.
A magam részéről szeretnék létrehozni egy MQTT -t WiFi -n keresztül képes IoT asztali eszközön, amely leolvassa mind a helyi, mind a távoli hőmérséklet/páratartalom értékeket, a környezeti fényszintet, a légköri nyomást, nyomon követi az időt, megjeleníti ezeket a paramétereket egy LCD -n, bejelentkezik az uSD -re kártyát valós időben, olvassa be a gombok bemeneteit, írjon a kimeneti LED-ekhez és figyelje a gesztusokat az IoT infrastruktúrámban lévő dolgok vezérléséhez, és mindezt egy ESP8266-12 vezérli.
Sajnos csak az APDS9960 könyvtár két forrását találtam, amelyek a SparkFun és az AdaFruit könyvtárak voltak, mindkettő az Avago (az ADPS9960 gyártó) alkalmazáskódjából lett kitörve, és egy „readGesture” nevű hívást tartalmaz, amely egy ideig tartalmaz (1) {}; hurok, amely a fenti projektben való használatakor az ESP8266-12E alaphelyzetbe állítását eredményezi, amikor az ADPS9960 érzékelő telítődik (azaz amikor egy tárgy a közelben maradt, vagy ha az infravörös forrás megvilágította az érzékelőt).
Következésképpen ennek a viselkedésnek a kiküszöbölésére úgy döntöttem, hogy a gesztusok feldolgozását áthelyezem egy második processzorba, ahol az ESP8266-12E lett a fő mikrovezérlő, ez a rendszer pedig a szolga, amint azt a fenti 1. és 2. kép, a rendszer áttekintése és a rendszerösszetétel diagramja mutatja.. A 3. kép a prototípus áramkört mutatja.
Annak érdekében, hogy korlátozzam a meglévő kódomon végrehajtandó módosításokat, írtam egy csomagoló osztályt/könyvtárat is, fantáziadúsan „APDS9960_NonBlocking” néven.
Az alábbiakban részletesen ismertetjük a blokkolásmentes megoldást.
Milyen alkatrészekre van szükségem?
Ha az AP29960_NonBlocking könyvtárral működő I2C megoldást kívánja létrehozni, akkor a következő alkatrészekre lesz szüksége.
- 1 kedvezmény az ATMega328P -ről itt
- 1 kedvezmény PCF8574P -ről itt
- 6 off 10K ellenállás itt
- 4 off 1K ellenállás itt
- 1 ki 1N914 dióda itt
- 1 kedvezmény PN2222 NPN tranzisztor itt
- Itt 1 db 16MHz -es kristály
- 2 ki 0,1uF kondenzátor itt
- Itt 1 db 1000uF elektrolit kondenzátor
- 1 off 10uF elektrolit kondenzátor itt
- 2 db 22pF kondenzátor itt
Ha le szeretné olvasni a gesztusérzékelő kimenetét a párhuzamos interfészen keresztül, akkor elengedheti a PCF8574P -t és három 10K -s ellenállást.
Milyen szoftverre van szükségem?
Arduino IDE 1.6.9
Milyen készségekre van szükségem?
A rendszer beállításához használja a (mellékelt) forráskódot, és hozza létre a szükséges áramkört, a következőkre lesz szüksége;
- Minimális elektronikai ismeretek,
- Az Arduino és az IDE ismerete,
- A beágyazott Arduino programozásának megértése (lásd az utasításokat „Az ATTiny85, ATTiny84 és ATMega328P programozása: Arduino mint ISP”)
- Némi türelem.
Érintett témák
- Az áramkör rövid áttekintése
- A szoftver rövid áttekintése
- Az APDS9960 gesztusérzékelő eszközének tesztelése
- Következtetés
- Hivatkozások
1. lépés: Áramkör áttekintése
Az áramkör két részre van osztva;
- Az első a soros I2C párhuzamos átalakítás, amelyet az R8… 10 és IC1 ellenállásokon keresztül hajtanak végre. Itt R8… R10 állítsa be az IC2 és a NXP PCF8574A 8 bites I/O bővítő chip I2C címét. Az eszköz érvényes címtartományai 0x38… 0x3F. Az „I2C_APDS9960_TEST.ino” I2C szoftver példában a #define GESTURE_SENSOR_I2C_ADDRESS címet kell módosítani, hogy megfeleljen ennek a címtartománynak.
-
Az összes többi összetevő egy slave beágyazott Arduino Uno -t alkot, és a következő funkciókkal rendelkezik:
- Az R1, T1, R2 és D1 slave eszköz reset bemenetet biztosít. Itt az IC1 - P7 aktív magas impulzusa kényszeríti az U1 alaphelyzetbe állítását.
- Az R3, R4 áramkorlátozó ellenállások a TX/RX vonalakat programozó beágyazott eszközhöz.
- A C5 és az R7 lehetővé teszi, hogy az Arduino IDE automatikusan programozza az U1 -et egy csatlakoztatott FTDI eszköz DTR vonalán lévő impulzuson keresztül.
- Az R5 és R6 I2C felhúzó ellenállások az APDS9960 készülékhez, a C6 pedig a helyi tápcsatornák leválasztását biztosítja.
- U1, C1, C2 és Q1 képezik a beágyazott Arduino Uno -t és az órát.
- Végül a C3 és C4 biztosítja az U1 helyi ellátó sín leválasztását.
2. lépés: A szoftver áttekintése
Preambulum
A forráskód sikeres lefordításához a következő kiegészítő könyvtárakra lesz szüksége a beágyazott Arduino Uno U1 programozásához;
SparkFun_APDS9960.h
- Szerző: Steve Quinn
- Cél: Ez a SparkFun APDS9960 érzékelő villás változata a jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library forrásból. Néhány módosítással segíti a hibakeresést, és érzéketlenített érzékelővel rendelkezik a hamis indítás csökkentése érdekében.
- Innen:
APDS9960_NonBlocking.h
- Szerző: Steve Quinn
- Cél: Tiszta felületet biztosít az APDS9960 gesztusérzékelő nem blokkoló megvalósításának beágyazásához az Arduino kódjába.
- Innen:
A beágyazott Arduino Uno (ATMega328P) mikrovezérlő programozásáról lásd az alábbi útmutatót, ha nem ismeri ennek elérését;
ATTINY85, ATTINY84 ÉS ATMEGA328P PROGRAMOZÁSA: ARDUINO ISP
Funkcionális áttekintés
Az ATMega328P beágyazott szolga mikrovezérlő lekérdezi az INT vonalat az ADPS9960 -ból. Amikor ez a sor lecsökken, a mikrokontroller beolvassa az ADPS9960 regisztereket, és megállapítja, hogy érvényes gesztusérzékelés történt -e. Ha érvényes gesztust észlelt, ennek a gesztusnak a kódja 0x0… 0x6, 0xF kerül a B portra, és az „nGestureAvailable” érték alacsony.
Amikor a mester eszköz aktívnak látja az „nGestureAvailable” értéket, akkor beolvassa a B porton lévő értéket, majd ideiglenesen alacsony ngestureclear impulzust jelez az adatok fogadásának megerősítésére.
A szolga eszköz ezután megszünteti az „nGestureAvailable” értékét, és törli az adatokat a B porton. A fenti 5. ábrán egy logikai elemzőből vett képernyőrablás látható a teljes észlelési/olvasási ciklus során.
Kód áttekintés
A fenti 1. kép részletezi, hogyan működik az U1 -ben található szoftver, a beágyazott szolga Arduino Uno, valamint a 2. kép, hogyan hat a két háttér/előtér feladat. A 3. kép egy kódrészlet, amely az APDS9960_NonBlockinglibrary használatát mutatja be. A 4. kép feltérképezi az Arduino Uno Digital Pins és az ATMega328P valódi hardvertűit.
Az alaphelyzetbe állítást követően a beágyazott szolga mikrokontroller inicializálja az APDS9960 -at, lehetővé téve a gesztusérzékelésnek az INT kimenet aktiválását, és konfigurálja az I/O -t, csatolva a megszakítási szolgáltatási rutinot (ISR) 'GESTURE_CLEAR ()' az INT0 vektor megszakításához (2. digitális tű, hardver IC 4. tű), konfigurálása leeső élű triggerhez. Ez képezi a nGestureClear bemenetet a fő eszközről.
Az APDS9960 „INT” megszakító kimeneti csapja a Digital Digital 4, Hardware IC Pin 6 csatlakozóhoz van csatlakoztatva, amely U1 bemenetként van konfigurálva.
Az „nGestureAvailable” jelvonal a 7. számú digitális tűn, a hardver IC 13. tűjén kimenetként van konfigurálva, és magas, inaktív (nincs érvényesítve).
Végül a B port 0… 3 bitjei kimenetként vannak konfigurálva, és alacsonyra vannak állítva. Ezek alkotják az adatrágást, amely a különböző észlelt gesztustípusokat reprezentálja; Nincs = 0x0, hiba = 0xF, fel = 0x1, le = 0x2, bal = 0x3, jobb = 0x4, közel = 0x5 és távol = 0x6.
A „Hurok” háttérfeladat ütemezése megtörténik, amely folyamatosan lekérdezi az APDS9960 megszakítás INT kimenetét a 4. digitális tűn. Ha az APDS9960 INT kimenete alacsony szintre lép, jelezve, hogy az érzékelő aktiválódott, a mikrokontroller megpróbálja értelmezni a gesztusokat a „readGesture () 'with while (1) {}; végtelen hurok.
Ha érvényes gesztust észlelt, akkor ezt az értéket a B portba írja, érvényesíti az „nGestureAvailable” kimenetet, és beállítja a „bGestureAvailable” logikai szemaforot, megakadályozva a további gesztusok naplózását.
Miután a mester észleli az aktív „nGestureAvailable” kimenetet, beolvassa ezt az új értéket, és impulzusként „nGestureClear” impulzust küld. Ez a csökkenő él elindítja az „ISR GESTURE_CLEAR ()” előtérbeli feladat ütemezését, amely felfüggeszti a „Loop” háttérfeladat végrehajtását, törli a B portot, a „bGestureAvailable” szemaforot és az „nGestureAvailable” kimenetet.
A „GESTURE_CLEAR ()” előtérbeli feladat most fel van függesztve, és a „Hurok” háttérfeladat ütemezett. Az APDS9960 további gesztusai most érzékelhetők.
A megszakítás által kiváltott előtér/háttér feladatok ilyen módon történő használatával a slave eszköz „readGesture ()” lehetséges végtelen ciklusa nem befolyásolja a master eszköz működését, és nem akadályozza a slave eszköz végrehajtását sem. Ez egy nagyon egyszerű valós idejű operációs rendszer (RTOS) alapját képezi.
Megjegyzés: Az „n” előtag aktív alacsony vagy azt jelenti, hogy az „nGestureAvailable”
3. lépés: A nem blokkoló APDS9960 gesztusérzékelő eszköz tesztelése
Preambulum
Annak ellenére, hogy az APDS9960 modult +5 V tápfeszültséggel szállítják, beépített +3v3 szabályozót használ, ami azt jelenti, hogy az I2C vonalak +3v3 kompatibilisek, és nem +5v. Ezért úgy döntöttem, hogy a +3v3 -kompatibilis Arduino Due -t használom teszt mikrovezérlőként, hogy elkerüljem a szintváltók szükségességét.
Ha azonban tényleges Arduino Uno -t szeretne használni, akkor az I2C vonalakat szintre kell tolnia U1 -re. Lásd az alábbi Instructable alkalmazást, ahol egy hasznos diakészletet csatoltam (I2C_LCD_With_Arduino), amely sok praktikus tippet ad az I2C használatához.
I2C interfész tesztelés
A fenti 1. és 2. kép bemutatja, hogyan kell beállítani és programozni a rendszert az I2C interfészhez. Először le kell töltenie és telepítenie kell az APDS9960_NonBlocking könyvtárat. itt
Párhuzamos interfész tesztelés
A 3. és 4. kép ugyanazt mutatja a párhuzamos felületen
4. lépés: Következtetés
Tábornok
A kód jól működik, és érzékenyen érzékeli a gesztusokat, hamis pozitív eredmények nélkül. Néhány hete működik és működik, mint rabszolga eszköz a következő projektemben. Sok különböző hibamódot kipróbáltam (és a kíváncsi Quinn háztartási moggie is), amelyek korábban ESP8266-12 visszaállítást eredményeztek, negatív hatás nélkül.
Lehetséges fejlesztések
-
A nyílvánvaló. Írja át újra az APDS9960 gesztusérzékelő könyvtárát, hogy ne legyen blokkoló.
Valójában kapcsolatba léptem a Broadcom -tal, aki egy helyi forgalmazóhoz fordított, aki azonnal figyelmen kívül hagyta a támogatási kérelmemet, azt hiszem, nem vagyok SparkFun vagy AdaFruit. Tehát erre valószínűleg még várni kell egy darabig
- Portolja át a kódot egy kisebb szolga mikrovezérlőbe. Az ATMega328P használata egy feladathoz kissé túlzás. Bár kezdetben megnéztem az ATTiny84 -et, abbahagytam annak használatát, mivel úgy éreztem, hogy a kód összeállított mérete határvonalra illeszkedik. Az APDS9960 könyvtárat úgy kell módosítani, hogy egy másik I2C könyvtárral működjön.
5. lépés: Hivatkozások
A beágyazott arduino programozásához szükséges (ATMega328P - U1)
SparkFun_APDS9960.h
- Szerző: Steve Quinn
- Cél: Ez a SparkFun APDS9960 érzékelő villás változata a jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library forrásból. Néhány módosítással segíti a hibakeresést, és érzéketlenített érzékelővel rendelkezik a hamis indítás csökkentése érdekében.
- Innen:
Szükséges, hogy ezt a nem blokkoló funkciót beágyazza az arduino kódjába, és dolgozzon példákat
APDS9960_NonBlocking.h
- Szerző: Steve Quinn
- Cél: Tiszta felületet biztosít az APDS9960 gesztusérzékelő nem blokkoló megvalósításának beágyazásához az Arduino kódjába.
- Innen:
Valós idejű operációs rendszer
https://en.wikipedia.org/wiki/Real-time_operating_system
APDS9960 Adatlap
https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf
Ajánlott:
Kamera blokkoló: 5 lépés
Fényképezőgép -blokkoló: A Kamera -blokkoló olyan gép, amely blokkolja laptopja kameráját, hogy video -hívás közben magánélethez jusson, vagy akár biztonságot is nyújtson az internetről. Más blokkolókkal ellentétben a kamera blokkolóm egyszerűen blokkolhatja és feloldhatja a kamerát
Egyfázisú inverter tervezése és megvalósítása: 9 lépés
Egyfázisú inverter tervezése és kivitelezése: Ez az Instructable a Dialog GreenPAK ™ CMIC-jeinek használatát vizsgálja a teljesítményelektronikai alkalmazásokban, és bemutatja az egyfázisú inverter megvalósítását különböző vezérlési módszerek használatával. Különböző paramétereket használnak a q meghatározására
Az APDS9960 gesztusérzékelő használata Arduino -val: 7 lépés
Az APDS9960 gesztusérzékelő használata az Arduino -val: Ebben az oktatóanyagban megtanuljuk, hogyan kell használni az APDS9960 gesztusérzékelőt az Arduino -val, hogy megjelenítse a kézre vonatkozó utasításokat az OLED kijelzőn a Visuino szoftver segítségével. Nézze meg a videót
A TicTacToe hardver megvalósítása a RaspberryPi használatával: 4 lépés
A TicTacToe hardver megvalósítása a RaspberryPi segítségével: A projekt célja egy interaktív TicTacToe modell felépítése két különböző színű LED segítségével, amelyek a málna pi -t használó két játékost jelölik. Az ötlet az volt, hogy ezt nagyobb léptékben valósítsuk meg egy sikátorban - képzeljünk el egy 3x3 félgömbrácsot (li
Egyszerű a WiFI -vezérlés otthoni megvalósítása: 5 lépés
Egyszerűen megvalósítható WiFI-vezérlés otthonában: Az ESP-01S olcsó és könnyen használható vezeték nélküli megoldás. Más érzékelőkkel és hajtóművekkel kombinálva a távfelügyelet és vezérlés kényelmesen megvalósítható. Ebben a projektben egy intelligens kapcsolót fogok építeni a ventilátor vezérléséhez az ESP-01S Rela segítségével