FőoldalKonstruktőrA Panasonic Grid-EYE v2.0 szenzor használata
2017. május 19., péntek ::

A Panasonic Grid-EYE v2.0 szenzor használata

Hogyan lehet ezt a szenzort egy önállóan működő minihőkameraként felhasználni? A cikksorozat második részében a korábban megismert kiértékelőkit Arduino-pajzsként való felhasználásával egy minimikroprocesszoros alkalmazást építünk, amivel érzékelni tudjuk az emberi kéz közelségét, és segítségével bekapcsolunk egy relét, ezzel szimulálva egy gesztusvezérelt elektronikai rendszert (jelenlét-érzékelésen alapuló vezérlés). Másik alkalmazásként egy PC-alapú mozgáskövető világítást mutatunk be

A Grid-EYE szenzor

Mint azt már az olvasó tudja, a Panasonic Grid-EYE eszköze egy 8×8-as MEMS-technológiára épülő hőelemmátrix, azaz 64 különálló szenzorral képes abszolút hőmérsékletet detektálni az objektum által kibocsátott infravörös sugárzás érzékelésével.

endrich 17 4 01A Grid-EYE képes a hőmérséklet és a hőmérsékleti gradiens észlelésére és egyszerű, kis felbontású (8×8=64 pixeles) hőkép felvételére is.

A végtermékfejlesztés megkönnyítésére készített, a szenzort és soros kommunikációs interfészt tartalmazó kártya kialakítása alkalmassá teszi az ARDUINO DUE miniszámítógéphez illeszkedő „shield”-ként való használatára.

endrich 17 4 02

Fontos felhívnunk a figyelmet arra, hogy a Grid-EYE kiértékelőkit 3,3 V-os kártya, így csak az Arduino DUE számítógépekkel működik. Az UNO-hoz már csak fizikai kialakítása miatt sem alkalmazható, a MEGA verziók, bár rendelkeznek a megfelelő csatlakozókkal, melyek látszólag illeszkednek is a kártya fizikai csatlakozásaihoz, azok 5 V-os feszültségszintje miatt nem kompatibilisek a 3,3 V-os Grid-EYE Evaluation kittel.

A feladat

A megvalósítandó szimulációs feladat során az Arduino számítógéppel az I2C buszon keresztül kiolvassuk a 64 pixel hőmérsékleti adatait.

endrich 17 4 03

endrich 17 4 04

A lapon található egy termisztor is, mely a NYÁK környezeti hőmérsékletét méri, természetesen ennek adatára is szükség van. A kéz érzékelését az egyszerűség kedvéért úgy végezzük, hogy azon pixelek hőmérsékletadatait, melyek a szenzor környezeti hőmérsékleténél nagyobb értékkel rendelkeznek, összeátlagoljuk, és amennyiben ez az érték 5 °C-kal meghaladja a szoba hőmérsékletétől függően beállított határértéket, úgy feltételezzük a hőforrás jelenlétét, és egy digitális kimenet logikai magas szintre állításával egy relét kapcsolunk.

Az Arduino DUE számítógép

Az Arduino Due az Atmel SAM3X8E ARM Cortex-M3 CPU-ra épülő mikrokontrollerlap. Ez az Arduino-család első, 32 bit ARM magra épülő tagja. 54 digitális I/O porttal rendelkezik, melyek közül 12 PWM-kimenetként is használható. Meghajthatunk vele például egy szervomotort, melynek segítségével követhetjük a hőforrás mozgását. Mint említettük, a korábbi verzióktól eltérően a DUE 3,3 V-os kártya, mely azt is eredményezi, hogy az I/O pinek maximális jelszintje is csak 3,3 V. Emiatt gondoskodni kell a TTL-szinthez való illesztésről, például SN74HC125N vonalmeghajtó alkalmazásával, mely kétirányú feszültségillesztést tesz lehetővé (3,3–5 V).

A Panasonic Grid-EYE könyvtár

A Panasonic támogatói oldaláról letölthető a Grid-EYE Evaluation Kit V1.0 számára szükséges Arduino Library, melyet az Arduino IDE számára úgy tehetünk elérhetővé, hogy bemásoljuk azt a /libraries helyre. Az IDE újraindításával hivatkozhatunk a GridEye.h, a GE_SoftUart.h és a GE_SoftUartParse.h állományra.

A Grid-EYE szenzor adatstruktúrája

A soros porton másodpercenként tíz alkalommal érkező nyers adatok első ránézésre ijesztőek, azonban a struktúra ismeretében könnyen feldolgozhatóak. A soros port terminálprogrammal (pl. PuTTY) való vizsgálata az alábbi eredményt mutatja:

endrich 17 4 05

endrich 17 4 06

135 bájt adat érkezik másodpercenként tízszer, melyből néhány vezérlőkarakter kiszűrése után a 64 pixel és a termisztor hőmérsékleti adata is kinyerhető, az alábbi adatstruktúra szerint:

  • 3 bájt fejléc ***
  • 2 bájt NTC hőmérséklet HL, HH (12 bites előjeles)
  • 64×2 bájt (HL, HH) 128 bájt (12 bites kettes komplementer kódú)
  • CR LF (\r \n)

A feladat így már nem is annyira bonyolult, az adatstruktúra nagyon logikus. Arra kell csak odafigyelnünk, hogy az alsó (HL) és a felső (HH) bájtok felcserélt sorrendben érkeznek (HL, HH).

A hőmérsékleti adatok meghatározásához szükséges konverzió az alábbiak alapján lehetséges:

Az NTC 12 bites előjeles ábrázolása:

  • XXXX S _ _ _ _ _ _ _ _ _ _ _
  • Ha S=1, akkor a hőmérséklet negatív, ha S=0, akkor pedig pozitív
  • A 12 biten tárolt bináris értéke decimálissá alakítás után a 0,0625 oC felbontással felszorozva alakítható valós hőmérsékleti adattá:

11 bit = 1024 (211), így a teljes tartományban (-1023 ... +1024) -63 ... +64 °C közti hőmérséklet ábrázolását teszi lehetővé.

  • Példa: HH = 0×01 HL = 2A → bináris konverzió → 0000 0001 0010 1010 → + hőmérséklet
    1*2+1*8+1*32+1*256= 298 (decimális). Hőmérséklet = 298*0,0625 = 18,6 °C
  • A pixeladatok kettes komplementer kódban érkeznek, kicsit más a feldolgozás menete:
    • XXXX S _ _ _ _ _ _ _ _ _ _ _
    • A 12. bit itt is az előjelre utal, azonban nemcsak előjelként funkcionál, hanem értéke is részt vesz a kalkulációban: amikor értéke = 1, akkor negatív a hőmérséklet, ilyenkor tehát a decimális érték 2048 helyett -2048 lesz: (-212).

endrich 17 4 07A megvalósításhoz szükséges ARDUINO mintakód az alábbi címen elérhető:
http://www.endrich.hu/mintaprogram/ENDRICH_ARDUINO_GRIDEYE_Elektronet.ino

endrich 17 4 08

A program másodpercenként egy vagy akár tíz alkalommal beolvassa a szenzorról érkező adatokat az I2C buszon keresztül, és ezeket hőmérsékleti adatokká alakítja. A könnyebb áttekinthetőség érdekében a virtuális soros (esetünkben COM14) porton keresztül íratjuk ezeket, és az Arduino IDE beépített terminálján meg is jelenítjük.

Amennyiben a szenzor 64 pixelének hőmérsékleti átlagértéke meghaladja az előre beállított küszöbértéket (a programban temperature_treshold = 25 °C), akkor a szenzor látóterében jelen van egy hősugárzó tárgy, jelen esetben a kezünk. (Nem szükséges a mozgás, elég a jelenlét, ez a nagy előnye a Grid-EYE szenzornak pl. a PIR vagy a radar-szenzortechnológiával szemben.) Tovább árnyalható az algoritmus azzal, hogy csak azok a pixelek vesznek részt az átlagolásban, melyek hőmérsékletértéke meghaladja a Grid-EYE beépített termisztorának mért értékét.

Amennyiben pozitív eseményt érzékelünk, az Arduino egyik szabadon használható digitális I/O portjára logikai „1” értéket írunk ki (GPIO 53 a mintaprogramban). Ezzel tesztelés közben egy, a GPIO63- és a GND-lábak közé illesztett LED-del ellenőrizhetjük a helyes működést.

endrich 17 4 09

Fentebb említettük, hogy az Arduino DUE 3GPIO-lábai 3,3 V-os kimeneti jelszintet adnak ki logikai „1 – HIGH” állapotban. Mivel ez általában nem elegendő a kereskedelmi forgalomban leginkább elérhető 5 V-os relék vezérlésére, egy vonali 3,3–5 V-os szintkonverter beépítése ajánlott.

Egyik lehetséges megoldás a SN74HC125N logikai szintillesztő IC-vel, mely egy 14 lábú tokban 4 csatornás megoldást ad, melyből a mintapéldában csak egyet használunk. Egy relé meghajtásához általában elegendő az Arduino DUE által szolgáltatott teljesítmény, azonban több relé egyidejű használatakor ezek külső táplálása szükséges: ekkor ne feledkezünk el a tápegység és az ARDUINO „GND”-lábak közösítéséről és esetleges túlfeszültségvédő dióda alkalmazásáról sem! A bemutatott megoldással tehát egy 64 pixeles felbontású minihőkamera jelenlét-érzékelésére és ennek alapján egy – akár hálózati feszültségű – külső áramkör relén keresztüli vezérlésére adtunk megoldást.

endrich 17 4 10

A Grid-EYE evaluation kit PC-vel való használata

A Grid-EYE Evaluation kit nemcsak Arduino Shieldként, hanem USB portján keresztül PC-vel összekötve is használható. Ilyenkor a megfelelő device driver alkalmazásával az USB-re csatlakoztatott eszköz virtuális COM (soros) porton keresztül érhető el. Az adatstruktúra fenti leírása itt is érvényes, valamilyen PC-s fejlesztőeszközzel megírható az adatok vizualizációját szolgáló szoftver. Egy ilyen megoldás készen letölthető a Panasonic honlapjáról is, de akár mi, magunk is készíthetünk egyet. Én a Lazarus Free Pascal-rendszert használtam, ingyenessége és a Delphi-környezet kényelmi funkcióinak elérhetősége okán. A teljes szoftvert nem célom bemutatni, azonban néhány szóban összefoglalnám.

Az alkalmazás, amit ilyen módon készíthetünk, egy mozgáskövető (lámpa)kapcsoló. A környezeti hőmérséklettől eltérő pixelek kiszűrésével a jelenlét és a mozgás érzékelhető, a helyzetét változtató „hot-spot”-ot követjük 8 digitális relé kapcsolgatásával. Ily módon elérhetjük, hogy a fény kövesse a mozgó céltárgyat, például egy emberi kezet (gesztusvezérlés).

Példák:

Nincs semmi a szenzor előtt:

endrich 17 4 11

Kéz a szenzor előtt (bal oldalon a szenzor egyszerűsített hőképe, jobbra a kiemelt céltárgy képe):

endrich 17 4 12

A teljes rendszer blokkdiagramja az ábrán látható. A nyolc függőleges LED-csík fénye követi a kézmozgást vagy a szenzor előtt elhaladó emberek mozgását.

endrich 17 4 13

Cikksorozatunk harmadik, egyben befejező részében a Grid-EYE szenzorral megvalósítunk egy önállóan futó Arduino Due-alkalmazást, mely a minihőkamera képét egy 8×8-as RGB LED-mátrixon jeleníti meg, miközben a céltárgy mozgását egy szervomotorral igyekszünk követni.

Az Endrich Bauelemente Vertriebs GmbH honlapja

Tudomány / Alapkutatás

tudomany

CAD/CAM

cad

Járműelektronika

jarmuelektronika

Rendezvények / Kiállítások

Mostanában nincsenek események
Nincs megjeleníthető esemény