Első lépések a MEMS-alapú mozgás- és tájolásérzékelők tervezésében Arduino beépítőkártyák segítségével
Contributed By DigiKey's North American Editors
2020-11-25
Egyre nagyobb a tervezőkkel szembeni igény, hogy helyzet- és tájolásérzékelési képességekkel lássák el rendszereiket. Szerencsére elérhetővé váltak az ezt segítő félvezető alapú és mikro-elektromechanikus (MEMS) rendszerek. Kis méretüknek és alacsony költségüknek köszönhetően a mozgás- és tájolásérzékelés széleskörűen beépíthető különböző rendszerekbe, ideértve a drónokat, robotokat és természetesen a kézi készülékeket, például okostelefonokat és táblagépeket is. Ezeket az érzékelőket az Ipari Dolgok Internete (IIoT) prediktív karbantartási rendszereiben is használják, ahol mesterséges intelligencia (AI) és gépi tanulás (ML) segítségével végzett elemzéshez nyújtanak adatokat.
A mozgás és tájolás érzékelésére használt MEMS érzékelők fő típusai a gyorsulásmérők, giroszkópok, magnetométerek és ezek különféle kombinációi. Bár sok tervező érdekelt abban, hogy a mozgás- és tájolásérzékelőket beépítsék a termékeikbe, gyakran nem tudják, hogyan is fogjanak hozzá.
Az egyik lehetőség az, ha a MEMS-érzékelők gyártói által a saját termékeikhez készült kiértékelő- és fejlesztőkészleteket használják. Amennyiben kellő mértékű a terméktámogatás, ez tökéletesen kielégítő módszer. Ebben az esetben azonban a tervezőknek vagy csupán egy gyártótól származó érzékelők használatára kell szorítkozniuk, vagy pedig meg kell tanulniuk több érzékelőgyártó szoftvereszközeinek használatát.
Azok a tervezők számára viszont, akik nem szoktak mozgás- és tájolásérzékelőkkel foglalkozni, előnyös lehet az Arduino olcsó, nyílt forráskódú mikrovezérlős fejlesztőkártyáinak és egyetlen integrált fejlesztői környezetének (IDE) felhasználásával végzett kísérletezés és prototípus-készítés, párosítva a kedvező árú nyílt forráskódú, több gyártó eszközeit tartalmazó érzékelő beépítőkártyákkal (BOB-okkal).
A tervezők elindulásának segítése érdekében ez a cikk röviden tárgyalja az érzékelőkkel kapcsolatos terminológiát, valamint a mozgás- és tájolásérzékelők szerepét. Ezt követően bemutatja az Adafruit érzékelő beépítőkártyáit és azok használatát.
Érzékelőkkel kapcsolatos terminológia
A mozgás- és tájolásérzékelőkkel kapcsolatban gyakran használt két kifejezés a „tengelyek száma” és a „szabadságfokok száma” (DOF). Sajnos gyakran egymás szinonimájaként használják őket, ami tévedéseket okozhat.
Általánosságban mondva a „tengely” kifejezés a rendszer által használt adatok dimenzionalitásának, vagyis az alkalmazott dimenziók számának leírására használatos. A mozgás és a tájolás szempontjából három tengely, az X, az Y és a Z érdekes.
Ezeknek a tengelyeknek a megjelenítési módja a kérdéses rendszertől függ. Például álló helyzetű okostelefon esetében az X tengely a képernyőhöz képest vízszintes és jobbra mutat, az Y tengely a képernyőhöz képest függőleges és felfelé mutat, a Z tengely pedig merőleges a másik két tengelyre, úgy tekinthető, hogy a képernyőn kívülre előre mutat (1. ábra).
1. ábra: Egy fizikai rendszer mindig csak legfeljebb hat szabadságfokkal (DOF) rendelkezhet, mert legfeljebb hatféleképpen képes mozogni a 3D-s térben: három egyenes mentén haladva, és három tengely körül elfordulva. (Kép: Max Maxfield)
Egy okostelefon, vagy ahhoz hasonló eszköz esetében a fejlesztők számára kétféle mozgás érdekes: az egyenes vonalú mozgás és a szögelfordulás. Az egyenes vonalú mozgás tekintetében a rendszer az X tengelyen egyik oldalról a másikra, az Y tengelyen felfelé és lefelé, a Z tengelyen előre és hátra mozoghat. A szögelfordulást tekintve a rendszer a három tengely közül egy vagy több körül fordulhat el.
A mozgásra vonatkozóan a szabadságfokok száma azoknak az irányoknak az összessége, amely irányokban független mozgásra van lehetőség. Ezen az alapon egy fizikai rendszernek mindig csak legfeljebb hat szabadságfoka lehet (6DOF), mert csak hatféle módon mozoghat a 3D-s térben (három egyenes vonalú mozgás és három szögelfordulás).
A „tájolás” kifejezés valaminek valami máshoz viszonyított fizikai helyzetére vagy irányára utal. Az okostelefon esetében a tájolás azt határozza meg, hogy a telefon vízszintesen fekszik-e a hátán, áll-e az egyik szélén (álló vagy fekvő módban), vagy valahol a kettő között található.
Ez úgy is értelmezhető, hogy egy eszköz tájolása meghatározható az összes lehetséges szabadságfok adott tX időpontbeli értékével. Ezzel szemben, egy eszköz mozgását az összes lehetséges szabadságfok értékeinek t0 és t1 időpontok közötti különbsége írja le.
Az érzékelők, például gyorsulásmérők, giroszkópok és magnetométerek egy-, két- és háromtengelyes kivitelben kaphatók. Egy 1 tengelyes gyorsulásmérő csak a három tengely közül annak mentén érzékeli a változásokat, amelyhez igazodik; egy 2 tengelyes érzékelő a három tengely közül kettőn; egy 3 tengelyes érzékelő mindhárom tengelyen.
Ha egy érzékelő platformot úgy írnak le, hogy több mint hat tengelyt követ, az azt jelenti, hogy nagyobb pontosságot biztosít azáltal, hogy több adatpontot követ az X, Y és Z tengely mentén (vagy azok körül). Példa erre a 12 tengelyes gyorsulásmérő, amely négy 3 tengelyes gyorsulásmérő lineáris gyorsulásméréseit használja.
Sajnos a szabadságfokok számát gyakran összekeverik a tengelyek számával. Például előfordulhat, hogy egyes gyártók egy 3 tengelyes gyorsulásmérő, 3 tengelyes giroszkóp és 3 tengelyes magnetométer kombinációját 9 szabadságfokú (9DOF) érzékelőként írják le annak ellenére, hogy azt pontosabban 6 szabadságfokú (6DOF) 9 tengelyes érzékelőként kellene meghatározni.
Érzékelők egyesítése
Egy gyorsulásmérő a gyorsuláson kívül a gravitációt is méri. Például egy okostelefon esetében egy 3 tengelyes gyorsulásmérővel a lefelé irány még akkor is megállapítható, ha a felhasználó mozdulatlanul áll és a készülék sem mozog.
A 3 tengelyes gyorsulásmérő a készülék függőleges és vízszintes tájolásának meghatározására is alkalmazható, amely információ felhasználható annak eldöntésére, hogy a megjelenítés álló vagy fekvő módban történjen. Önmagában egy gyorsulásmérővel azonban nem lehet meghatározni az okostelefon tájolását a Föld mágneses mezőjéhez képest. Ez a képesség olyan feladatokhoz szükséges, mint például a planetáriumi alkalmazások, amelyek lehetővé teszik a felhasználó számára, hogy az éjszakai égbolton csillagokat, bolygókat és csillagképeket azonosítson és keressen úgy, hogy egyszerűen az eszközt a szóban forgó terület felé tartja. Ebben az esetben magnetométerre van szükség. Ha az okostelefon mindig vízszintesen feküdne az asztalon, akkor elegendő volna egy 1 tengelyes magnetométer. Mivel azonban az okostelefon bármilyen helyzetben lehet, 3 tengelyes magnetométerre van szükség.
A gyorsulásmérőket a környező mágneses mező nem befolyásolja, a mozgás és a rezgés azonban igen. A magnetométereket pedig a mozgás és a rezgés önmagában nem, a közelben lévő mágneses anyagok és elektromágneses mezők azonban befolyásolhatják.
Bár a 3 tengelyes gyorsulásmérő is használható forgási adatok származtatására, a 3 tengelyes giroszkóp pontosabb adatokat szolgáltat az impulzusnyomatékról (perdületről). A giroszkópok jól működnek, ha a forgási sebesség méréséről van szó, és a lineáris gyorsulás vagy a mágneses terek nem befolyásolják őket. Hajlamosak azonban kis „maradó” forgási sebességet generálni még mozdulatlan állapotba kerülés után is. Ez az úgynevezett „zero-drift-offset” (nullaponteltolódási eltérés). Ez akkor okoz problémát, ha a felhasználó a giroszkóp segítségével próbálja meghatározni az abszolút szöget, ebben az esetben a forgási sebességet kell integrálni a szögpozíció megállapításához. Ebben a forgatókönyvben az a probléma az integrálással, hogy a hibák halmozódhatnak. Egy mindössze 0,01 fokos kis hiba az első mérésben 100 mérés után például már egy teljes fokra nőhet. Ez az úgynevezett „gyro drift” (giroeltolódás).
Az „érzékelők egyesítése” kifejezés esetében arról van szó, hogy különféle forrásokból származó érzékelőadatok olyan módon vannak kombinálva, hogy az így kapott információnak kisebb a bizonytalansága, szemben azzal, ha az említett forrásokból származó adatokat külön-külön használnák volna fel.
Egy 3 tengelyes gyorsulásmérőt, 3 tengelyes giroszkópot és 3 tengelyes magnetométert tartalmazó érzékelőegység esetében például a gyorsulásmérő és a magnetométer adatai felhasználhatók a giroszkóp eltolódásának semlegesítésére. Ugyanakkor a giroszkóp adatai felhasználhatók a gyorsulásmérő vibráció által okozott és a magnetométer mágneses anyaga vagy mezője által indukált zajának kompenzálására.
Az érzékelők egyesítése alkalmazásának eredménye, hogy a kimenet pontossága nagyobb az egyes érzékelők pontosságánál.
Néhány tipikus érzékelő bemutatása
Az alkalmazástól függően a tervező dönthet úgy, hogy csak egyetlen típusú mozgás- vagy tájolásérzékelőt alkalmaz gyorsulásmérő, giroszkóp vagy magnetométer formájában.
Egy jó belépő szintű gyorsulásmérő az Adafruit 2019 jelű beépítőkártyája, amely 14 bites analóg-digitális átalakítóval (ADC) ellátott 3 tengelyes gyorsulásmérőt tartalmaz (2. ábra).
2. ábra: Az Adafruit 2019 jelű beépítőkártyája 3 tengelyes gyorsulásmérővel rendelkezik, amely mozgás, dőlés és alapvető tájolás érzékelésére használható. (Kép: Adafruit)
A nagy pontosságú 3 tengelyes érzékelő ±2 g és ±8 g közötti széles tartománnyal rendelkezik és mozgás, dőlés, illetve alapvető tájolás érzékelésére használható. Az érzékelő 3,3 V-os tápellátást igényel, de a beépítőkártya tartalmaz egy alacsony feszültségesésű 3,3 V-os szabályozó és szinteltoló áramkört is, ezáltal biztonságossá teszi a 3 vagy 5 V-os tápellátás és logika melletti használatot is. A beépítőkártya és az Arduino (vagy más mikrovezérlő) közötti kommunikáció I2C használatával történik.
Az olyan rendszerekhez, amelyeknél csupán egy giroszkópra van szükség az elforduló és forgó mozgások érzékeléséhez, alkalmas az Adafruit 1032 jelű belépő szintű beépítőkártyája, amely az L3GD20H típusú, 3 tengelyes giroszkópot tartalmazza az STMicroelectronics cégtől. Az L3GD20H mind az I2C, mind az SPI interfészeket támogatja az Arduinóhoz (vagy más mikrovezérlőhöz) való csatlakozásra, és ±250, ±500 vagy ±2000 fok/másodperc skálára állítható be széles érzékenységtartományban. Az érzékelő ebben az esetben is 3,3 V-os tápellátást igényel, de a beépítőkártya tartalmaz egy 3,3 V-os szabályozó és szinteltoló áramkört is, ezáltal 3 vagy 5 V-os tápellátás és logika mellett is használható.
Hasonlóképpen, a csak egy mágneses érzékelőt igénylő alkalmazásokhoz jó fejlesztési opció az Adafruit 4479 jelű beépítőkártyája, amely az STMicroelectronics LIS3MDL típusú 3 tengelyes magnetométerét tartalmazza. Az LIS3MDL érzékelési tartománya ±4 gauss (±400 µT) és ±16 gauss (±1600 µT vagy 1,6 mT) között van. A beépítőkártya és az Arduino (vagy más mikrovezérlő) közötti kommunikáció I2C használatával történik. A beépítőkártya ebben ez esetben is tartalmaz egy 3,3 V-os szabályozó és szinteltoló áramkört is, ezáltal 3 vagy 5 V-os tápellátás és logika mellett is biztonságosan használható.
Nagyon gyakran több érzékelőt használnak együtt egymással. Egy gyorsulásmérő például használható együtt egy giroszkóppal 3D mozgás rögzítésére, tehetetlenség mérésére vagy más feladatok végrehajtására; vagyis olyan célokra, amely lehetővé teszi a felhasználók számára, hogy meghatározzák, hogyan mozog egy tárgy egy 3D-s térben. Példa egy ilyen kombinációra az Adafruit 4480 jelű beépítőkártyája (3. ábra), amely az STMicroelectronics LSM6DS33 típusú érzékelőjét tartalmazza.
3. ábra: Az Adafruit 4480 jelű beépítőkártyája az LSM6DS33TR 3 tengelyes gyorsulásmérőt tartalmazza egy 3 tengelyes giroszkóp mellett, és olyan feladatok végrehajtására képes, mint 3D mozgás rögzítése és tehetetlenség mérése. (Kép: Adafruit)
A 3 tengelyes gyorsulásmérő a gravitáció mérésével adatokat szolgáltathat arról, hogy melyik irány mutat a Föld felé, illetve mekkora a kártya gyorsulása 3D-s térben. Közben a 3 tengelyes giroszkóp forgás és elfordulás mérésére használható. Mint a többi ismertetett érzékelő beépítőkártyáknál, a 4480 jelű beépítőkártya is tartalmaz egy 3,3 V-os szabályozó és szinteltoló áramkört is, ezáltal 3 vagy 5 V-os tápellátás és logika mellett is biztonságosan használható. Az érzékelő adatai I2C vagy SPI interfészen keresztül is hozzáférhetők, bonyolult hardver nélkül is lehetővé téve az Arduinóval (vagy más mikrovezérlővel) való használatot.
A kétérzékelős beépítőkártyára egy további példa az Adafruit 1120 jelű terméke, amely egy 3 tengelyes gyorsulásmérőt és egy 3 tengelyes magnetométert tartalmaz az STMicroelectronics LSM303 érzékelő chipjének formájában. A mikrovezérlő és a 1120-as közötti kommunikáció I2C interfészen keresztül történik, és a beépítőkártya tartalmaz egy 3,3 V-os szabályozó és szinteltoló áramkört is, ezáltal 3 vagy 5 V-os tápellátás és logika mellett is biztonságosan használható.
Egyes alkalmazásokhoz gyorsulásmérők, giroszkópok és magnetométerek használata szükséges. Ilyen esetekben hasznos belépő szintű beépítőkártya az Adafruit 3463 jelű terméke, amelyen két érzékelő chip található: egy 3 tengelyes giroszkóp, és egy 3 tengelyes magnetométerrel ellátott 3 tengelyes gyorsulásmérő. A beépítőkártya és a mikrovezérlő közötti kommunikáció SPI interfészen keresztül zajlik. Egy 3,3 V-os szabályozó és szinteltoló áramkör is rendelkezésre áll, ezáltal 3 vagy 5 V-os tápellátás és logika mellett is biztonságosan használható.
A 3463 jelű beépítőkártya további előnye, hogy a tervező hozzáfér a három érzékelő nyers adataihoz. Az ezzel járó hátrány azonban, hogy ennek az érzékelőnek a használata (adatainak kezelése és feldolgozása) körülbelül 15 kilobájtot igényel a mikrovezérlő flash memóriájából, illetve sok óraciklust emészt fel.
Alternatívaképpen az Adafruit 2472 jelű beépítőkártyája a BNO055 típusú érzékelő chipet tartalmazza a Bosch-tól. A BNO055-ben egy 3 tengelyes gyorsulásmérő, egy 3 tengelyes giroszkóp és egy 3 tengelyes magnetométer található egyetlen tokban (4. ábra).
4. ábra: A 3 tengelyes gyorsulásmérőn, 3 tengelyes giroszkópon és 3 tengelyes magnetométeren kívül az Adafruit 2472 jelű beépítőkártyáján levő BNO055 érzékelő egy Arm Cortex-M0 processzort is tartalmaz, amely az érzékelők egyesítését végzi. (Kép: Adafruit)
Ezenkívül a BNO055 tartalmaz egy 32 bites Arm Cortex-M0 processzort is, amely átveszi a három érzékelő nyers adatait, kifinomult érzékelőegyesítést végez, és a tervezőknek az általuk felhasználható módon, azaz kvaterniók, Euler-szögek és vektorok formájában adja át a feldolgozott információkat. Egész pontosan, a 2472 jelű beépítőkártya I2C interfészén keresztül a tervezők számára a következő adatok gyorsan és egyszerűen elérhetők:
- Abszolút tájolás (Euler-vektor, 100 Hz): 360°-os gömbön alapuló háromtengelyes tájolási adatok.
- Abszolút tájolás (kvaternió, 100 Hz): négypontos kvaternió kimenet a pontosabb adatmanipulációhoz.
- Szögsebességvektor (100 Hz): háromtengelyes „forgási sebesség” rad/s-ban.
- Gyorsulásvektor (100 Hz): háromtengelyes gyorsulás (gravitáció + egyenes vonalú mozgás) m/s2-ben.
- Mágneses térerősségvektor (20 Hz): a mágneses térerősség háromtengelyes érzékelése µT-ban.
- Lineáris gyorsulásvektor (100 Hz): háromtengelyes lineáris gyorsulási adatok (gyorsulás mínusz gravitáció) m/s2-ben.
- Gravitációvektor (100 Hz): háromtengelyes gravitációs gyorsulás (mínusz bármilyen mozgás) m/s2-ben.
- Hőmérséklet (1 Hz): környezeti hőmérséklet Celsius fokban.
Az érzékelők chipen való egyesítése kevesebb helyet igényel a fő mikrovezérlő memóriájában, és számítási ciklusokat szabadít fel, ami ideális az olcsó, valós idejű rendszerek tervezői számára. Ezen kívül, az érzékelőegyesítő algoritmusok elsajátítása nehéz és időigényes lehet. A chipbe épített érzékelőegyesítésnek köszönhetően az rendszerfejlesztők, még ha az algoritmusok létrehozásakor nulláról indulnak, akkor is percek alatt elkészülhessenek napok vagy hetek helyett.
Összegzés
Sok tervező szeretne mozgás- és tájolásérzékelőket építeni projektjeibe, de nem igazán tudja, hogyan fogjon hozzá. Azon tervezők számára, akik nem szoktak dolgozni ezekkel az eszközökkel kihívást jelenthet a különböző gyártók érzékelőinek megismerése. A kísérletezés és a prototípus-készítés olcsón elkezdhető nyílt forráskódú mikrovezérlős fejlesztőkártyák (pl. Arduino) és a több gyártó érzékelőit tartalmazó olcsó, nyílt forráskódú érzékelő beépítőkártyák használatával.
További irodalom:
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




