Néha jó lenne, ha gombok, illetve érintőképernyő nyomogatása nélkül tudnánk parancsokat kiadni. Az egyik megoldás erre a hangvezérlés, ami praktikusnak tűnik, de egyelőre nem kívánom bemikrofonozni a saját lakásomat, nem beszélve arról, hogy elég erőforrásigényes.. e helyett találtam egy praktikus érzékelőt az APDS-9960-at, ami meg tudja mondani milyen irányba mozog előtte a kezem. Egy helyen találóan Jedi-szenzornak nevezik ("Nem ezek a droidok, amiket keresnek!"), máshol a Különvélemény c. filmben látott 3D vezérlőkesztyűhöz hasonlítják.
No azért ennyire nem profi az eszköz, de az 500Ft-os szabadpiaci beszerzési árához képest nem rossz.
Felismeri a négy alapirányt: balról-jobbra, jobbról-balra, fentről-le, lentről-fel, illetve a kéz közelítését, valamint távolítását, ez lenne az 5 és 6. vezérlési lehetőség. Ebből a közelítésen kívül mindent ki tudtam próbálni, de azért azt is tudni kell, hogy nem 100% a felismerési aránya, és 10-15 cm távolságra lát el.
Maga a modul ilyenforma, legalábbis az olcsóbb kínai klón, az eredeti piros. Viszont nem összetévesztendő a 9930-al, az ahhoz általam talált függvénykönyvtárból hiányzik a kézmozdulat-érzékelés és nem is mindenhol tüntetik fel, hogy tudna ilyet a hardver, így inkább maradtam a 9960 típusnál.
A 9960 alapvetően három különféle funkcióra használható, 1. kézmozdulat-érzékelés (gesture), 2. RGB fényérzékelő, 3. közelítés érzékelő
Ám azt is jó tudni, hogy nem egyidőben, hanem a három közül egyszerre egy funkciót tud ellátni. Tehát vagy a fényt tudom mérni, vagy azt érzékelni, hogy mozog-e egy kéz előtte... További érdekesség azok számára, akik be szeretnék építeni, hogy nem elég egy kis lyuk az érzékelő előtt, nem találtam rá semmi leírást milyen szögben lát, de a mozgásirányt csak úgy tudta megbecsülni, ha majd a modul szélességével megegyező nyílás van előtte.
Bekötése:
- VL = külön táp az IR megvilágító LED számára (3-4.5V, opcionális, nem használom)
- GND = Raspberry GND
- VCC = Raspberry 3V3 (2.4-3.6V)
- SDA = Raspberry SDA
- SCL = Raspberry SCL
- INT = Raspberry GPIO (ennek státusza változik, ha mozgást észlel, amire eseményfigyelőt lehet ültetni)
Mivel I2C eszköz, a Raspberryn engedélyeznünk kell az I2C-t:
sudo nano /boot/config.txt
És a következő sort kell a config.txt-be illeszteni:
dtparam=i2c_arm=on,i2c_baudrate=400000
Újraindítás után parancssorból ezt beírva látnunk kell a 39-es címen az eszközt, ebből láthatjuk, hogy sikeres volt a forrasztás és a bekötés:
i2cdetect -y 1
Használati példa:
1. python-apds9960 letöltése
git clone https://github.com/liske/python-apds9960.git
2. belépünk a python-apds9960 mappába és kipróbáljuk a tesztkódokat
python test-ambient.py
A fény mennyiségéről ad egy viszonyszámot, ha letakarva a szenzort csökken az érték, a szenzor működik.
python test-prox.py
A szenzor előtt álló objektum távolságát mutatja, a számot normalizálni kell használat előtt :) Ha a szám változik a kéz közelítésére és távolítására, akkor az eszköz működik
python-gesture.py
Az előtte mozgó objektum haladási irányát adja vissza.
Ha az INTERRUPT-ok nem jönnek, vagy állandóan jönnek, jó tudni, hogy a példakódban 7-es lábra vannak állítva BOARD számozás szerint (ez BCM4), amit vagy átállítunk arra, amire az INT csatlakozót kötöttük a Raspberryn, vagy átkötjük a BCM4-re az INT-et.
Fontos!
Ha a fényérzékelés és a közelítés érzékelés működik, de a kézmozdulatokat egyáltalán nem akarja érzékelni, az apds mappa device.py fájljában szövegszerkesztővel át kell írni a következő sort erről:
self.setLEDBoost(APDS9960_LED_BOOST_300)
erre:
self.setLEDBoost(APDS9960_LED_BOOST_100)
Nekem bejött, működik. Elképzelhető, hogy a kínai klón nem tudja a LED fényerejét emelni 100%-ról, vagy csak kellene az a külön VL tápforrás, amihez még egy ellenállást is le kellene forrasztani.. de én az átírást egyszerűbb megoldásnak találtam.
További használati lehetőség: Az ESPEasy DEV 2.x változatában is szerepel pluginként.
Adatlap: https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf
Egyszerű használata pedig az alábbi.
RPIEasy mintabeállítás:
Először a Hardware->Plugins&controller dependencies menüpont alatt győződjünk meg róla, hogy az APDS9960 minden függősége rendben van, ha nincs, akkor azt egy piros X jelzi, amire kattintva települ a hiányzó rész. (kivéve ha nincs root joga az RPIEasy-nek)
Majd átlépve a Hardware/Pinout&Ports menübe, engedélyezzük az I2C-t, ez után a Submit gomb és újraindítás következik. (nem keverendő össze az I2S-el, amire nem sok szükség van, így azt letiltjuk)
Ez után a Devices menüben valamelyik EDIT gombra kattintva felvehetünk egy APDS9960 típusú eszközt.
A Name-Név beállítás kötelező elem, az Enabled bepipálásával engedélyezzük az eszköz működését, I2C címet nem lehet választani, mivel ez a típusú eszköz csak egyetlen címen érhető el - ha jól kötöttük be és elérhető.
Ha felvettük a Controllers menüben már a Domoticz HTTP/MQTT közül valamelyiket, akkor a Send to Controller engedélyezése után, ha Submit-ot nyomunk, beírható a Domoticz-ban szereplő virtuális IDX azonosító szám.
Amennyiben az ADPS "INT" lábát bekötöttük a Raspberry valamely GPIO-jára azt adjuk meg az Interrupt pin beállításnál. (javasolt Input-Pullup típusra állítani a pint, mivel a láb LOW-ra húzásával jelzi az eszköz, hogy mozgást észlelt)
A Gesture mezőben egy számot fogunk kapni, amit pl a Domoticz oldalon egy Selector Switch többállású kapcsolóval fogadhatunk.
Ezen számok jelentése:
- 0 = semmi esemény/nem értelmezhető mozdulat
- 10=Bal
- 20=Jobb
- 30=Fel
- 40=Le
- 50=Közeledés
- 60=Távolodás
Van egy másik üzemmód is, amikor visszaadja az érzékelt objektum távolságát, és a megvilágítás mértékét, ezt egy dupla értékben tudja továbbítani, de ezzel együtt nem megy a mozgásérzékelés funkció, és 70-200mm érzékelési távolsága nem túl sok mindenre jó.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.