Tartalomjegyzék:

Digitális iránytű és iránykereső: 6 lépés
Digitális iránytű és iránykereső: 6 lépés

Videó: Digitális iránytű és iránykereső: 6 lépés

Videó: Digitális iránytű és iránykereső: 6 lépés
Videó: Iránytű használata - 2. ep 2024, November
Anonim
Digitális iránytű és Iránykereső
Digitális iránytű és Iránykereső

Szerzői:

Cullan Whelan

Andrew Luft

Blake Johnson

Köszönetnyilvánítás:

Kaliforniai Tengerészeti Akadémia

Evan Chang-Siu

Bevezetés:

Ennek a projektnek az alapja egy digitális iránytű, amely nyomkövetéssel rendelkezik. Ez lehetővé teszi a felhasználó számára, hogy egy digitális készülék segítségével követje az irányt nagy távolságokon. Köznyelven a fejléc az óramutató járásával megegyező irányban északról mért szög, amelyet nulla foknak tekintünk, amint azt az iránytű jelzi. Az eszköznek két fő funkciója van: az első az eszköz aktuális címsorának megjelenítése a digitális kijelzőn, a második pedig a felhasználó által kért címsor megadására, amely a kijelző tetején lévő LED -ek gyűrűjén jelenik meg iránytű ház. A felhasználó ezután beállíthatja az eszköz tájolását a világító LED -hez viszonyítva. A készülék irányának megváltoztatásával a LED a középső LED felé halad, jelezve ezzel, hogy a helyes irányt sikerült beállítani.

Kellékek:

- DIYmall 6M GPS modul

- HiLetgo MPU9250/6500 9 tengelyes 9 DOF 16 Bit

- Adafruit NeoPixel gyűrű 16

- MakerFocus 4db 3,7V -os újratölthető lítium akkumulátor

- ELEGOO MEGA 2560 R3 tábla

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly töltő - v1

- 2,8 hüvelykes TFT LCD érintőképernyős törőpanellel és MicroSD foglalattal

1. lépés: A projekt funkcionalitásának megtervezése

A projekt funkcionalitásának tervezése
A projekt funkcionalitásának tervezése

Az első lépés a logika és a végső működési funkciók megértése. Ez a logikai diagram a három eszközállapotot és a két érzékelőállapotot ábrázolja.

1. állapot: Betöltési állapot

A betöltési állapot lehetővé teszi, hogy az Arduino Mega indításkor visszakapja az adatokat a két érzékelőből. A készülék megjeleníti a töltést a képernyőn, törli az összes számértéket a képernyőn, és a NeoPixel gyűrű LED -jei körben világítanak.

2. állapot: Iránytű mód

Ebben az állapotban a készülék digitális iránytűként fog működni. A NeoPixel gyűrű kigyullad, jelezve Észak irányát a készülék tájolásához képest. A készülék valódi fejléce is megjelenik az LCD -képernyőn, az eszköz szélességi és hosszúsági fokával együtt. Ebben az állapotban is a felhasználó megadhatja a 3. államban megjelenítendő felhasználói címsort.

3. állapot: Iránykövetési mód

Ebben az állapotban a készülék most segíteni fogja a felhasználót abban, hogy a kívánt címsorba kerüljön. A készülék mostantól megjeleníti az eszközök irányát és a felhasználók irányát az LCD -képernyőn, valamint a szélességi és hosszúsági adatokat. A NeoPixel gyűrű most kigyullad, jelezve a felhasználók irányát az eszközök tájolásához képest.

A 2. és a 3. állapoton belül is két érzékelőállapot van, ezek az érzékelési állapotok lehetővé teszik, hogy az eszköz adatokat vegyen ki az érzékelőből, amely a legpontosabb adatokat szolgáltatja az eszköz működési állapotától függően.

1. érzékelőállapot: MPU

Ha az eszköz nem mozog, akkor az irányadatok le lesznek húzva az MPU -ból, mivel ez a legpontosabb adat, amikor az eszköz nem mozog.

2. érzékelő állapota: GPS

Ha az eszköz mozog, az irányadatokat a rendszer a GPS -chipből veszi ki, mivel ez a legpontosabb adat ebben az állapotban.

A készülék bármikor átválthat ezek között érzékelőállapotokba, figyelembe véve az egység változó használati körülményeit. Ez fontos az eszköz működése szempontjából, mivel az eszközben használt két érzékelőnek vannak olyan feltételei, amelyek befolyásolják az általuk szolgáltatott adatok pontosságát. Az MPU esetében a chipet könnyen befolyásolhatják az autók és az épületek fémszerkezetei által okozott helyi mágneses mezők. Így olyan GPS chipet használnak, amely sokkal pontosabb irányt tud biztosítani, amelyet nem ugyanazok a hatások befolyásolnak. A GPS azonban csak mozgás közben tud haladási adatokat szolgáltatni, mivel a szélességi és hosszúsági adatok változása alapján számítja az irányt. Ezért a chipek kiegészítik egymást, és a két érzékelőállapot használatával a legpontosabb és legmegbízhatóbb eszközfunkciót nyújtják.

2. lépés: Beállítás és huzal diagram

Beállítás és huzal diagram
Beállítás és huzal diagram
Beállítás és huzal diagram
Beállítás és huzal diagram
Beállítás és huzal diagram
Beállítás és huzal diagram

A projekt a fenti táblához hasonló Arduino Mega klónlapot használ. A projekt összes összetevője ehhez a kártyához lesz csatlakoztatva. A fentiekben részletesen bemutatjuk a projekt alkatrészeinek bekötését. A gombok nem rendelkeznek részletes áramkörrel, mivel ezeket sokféleképpen lehet beállítani. Ebben a projektben 100K lehúzható ellenállást és egy egyszerű gombot használnak, hogy 3 voltos jelet küldjenek a hozzárendelt tűre.

3. lépés: Az összetevők és az alapvető kód tesztelése

A projekt a korábban leírtak szerint adatokat fog lekérni az MPU -ból és a GPS -chipből is. Három kód van mellékelve, amelyek lehetővé teszik az MPU, a GPS és az MPU adatainak képernyőn történő tesztelését az alkatrészek működésének ellenőrzésére. Fontos, hogy az alkatrészek működőképesek legyenek ebben a szakaszban, mivel a kód minden egyes chiphez külön van, és minden probléma megoldható anélkül, hogy félnének attól, hogy előre nem látható hibákat okoznak a végső kódban.

Kötelező könyvtárak:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Mindezek megtalálhatók a fenti címek keresésével. Nem teszek közzé linkeket, mivel ezekből a könyvtárakból sok másolat található több forrásból, és betartva azt a közösségi szabványt, hogy csak eredeti dokumentumokra hivatkoznak, megengedem, hogy ezeket megtalálja.

4. lépés: MPU kalibrálás

MPU kalibrálás
MPU kalibrálás

A 2. és a 3. állam MPU -ján talált címsort négy negyedre osztották. Erre azért volt szükség, mert a kalibrálási módszerünk megkövetelte a minimális és maximális nagyságok megtalálását a magnetométerből az x és y tengelye mentén. Ez úgy történt, hogy a készüléket véletlenszerűen elforgatta három tengelye körül, a Földön kívül minden jelentős elektromágneses mezőtől mentesen. Ezután felvettük a minimális és maximális értékeket az x és y tengely mentén, és beillesztettük őket egy skálázási egyenletbe annak érdekében, hogy korlátozzuk a negatív egy és egy közötti értékek közötti nagyságot. A fenti ábrán a BigX és a BigY a magnetométer adatainak maximális értékei az x és az y tengely mentén, a LittleX és a LittleY a magnetométer adatainak minimális értékei az x és y tengely mentén, IMU.getMagX_uT () és IMU A.getMagY_uT () azok az értékek, amelyeket bármikor lehúznak a magnetométerből az x és az y tengely mentén, az Mx és a My pedig az új skálázott értékek, amelyeket a fejléc kiszámításához használnak.

5. lépés: Végső kód

Végső kód
Végső kód
Végső kód
Végső kód
Végső kód
Végső kód
Végső kód
Végső kód

Az utolsó lépés a végső kód létrehozása. Csatoltam a projektek végleges kódjának másolatát. Jegyzetek készültek a kódban való navigáláshoz. Ennek a szakasznak a legnagyobb kihívása az volt, hogy a kvadránsokat megfelelően működtessük. A kvadránsok végrehajtása unalmasabbnak és logikailag meghazudtolónak bizonyult, mint amire valaha is számítottunk. Kezdetben egy alapvető arktánt (My/Mx) valósítottunk meg, majd radiánból fokra konvertáltuk, mivel az Arduino alapértelmezésben radiánban adja ki. Azonban az egyetlen kvadráns, amelyben ez működött, 90 fok és 180 fok között volt, ami negatív kimenetet eredményezett, és végül a III. A megoldás az abszolút érték felvétele volt, mivel még mindig helyesen nőtt. Ezt az értéket levonták a 360 -ból, hogy a 2. állapotban a megfelelő NeoPixel LED világítson, és hasonló matematikai műveletet alkalmaztak a 3. állapotban, attól függően, hogy a fejléc nagyobb vagy kisebb volt, mint a felhasználó beviteli címe, mindkettő látható a fenti kódot. A fenti ábrákon a Heading a NeoPixel fénynek felel meg, amely az eszköz iránya és az északi eltérés közötti különbség alapján világít a 2. állapot esetén, és a felhasználó fejlécétől. Ebben az esetben 90-180 fok felel meg a III. Mindkét esetben a tft.print hatására a képernyő észak felől olvassa az eszköz irányát.

A másik három negyedben az arctan (My/Mx) megvalósítása az eszköz elforgatásakor a növekmény inverziójához vezetett, azaz az irányszög visszaszámol, amikor fel kellett számolnia, és fordítva. Ennek a problémának a megoldása az volt, hogy az arctangent arctan (Mx/My) alakúra fordítottuk. Bár ez megoldotta a növekményes inverziót, nem adta meg a helyes eszközfejlécet, ahol a kvadránsok léptek játékba. Ennek egyszerű megoldása az volt, hogy eltolást adtunk a megfelelő kvadráns alapján. Ez látható a következő ábrákon, amelyek ismét az egyes kvadránsok 2. és 3. állapotából származó kódrészletek.

Az első if utasítás akkor kerül végrehajtásra, ha az MPU -egyenlet által számított fejléc nagyobb, mint a felhasználó fejléce. Ebben az esetben a felhasználó beviteli címe hozzáadódik az eszköz fejlécéhez, és a megfelelő érték kivonásra kerül a 360 -ból. Ezeket a feltételeket azért valósítottuk meg, hogy ne csak pontos értéket kapjunk a NeoPixelre, hanem elkerüljük azt is, hogy az elfogadható tartományon kívüli értéket kapjunk, ami 0 és 359 fok között van.

Ajánlott: