Kézmozdulat-érzékelő
2017. szeptember 14. írta: eNeS

Kézmozdulat-érzékelő

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.
adps.jpg

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:

  1. VL = külön táp az IR megvilágító LED számára (3-4.5V, opcionális, nem használom)
  2. GND = Raspberry GND
  3. VCC = Raspberry 3V3 (2.4-3.6V)
  4. SDA = Raspberry SDA
  5. SCL = Raspberry SCL
  6. 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)

rpi_apds_2.png

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)

rpi_lht0.jpg

Ez után a Devices menüben valamelyik EDIT gombra kattintva felvehetünk egy APDS9960 típusú eszközt.

rpi_apds_1.jpg

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:

https://bitekmindenhol.blog.hu/api/trackback/id/tr1812828616

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.

Nincsenek hozzászólások.