Sisällysluettelo:

Digitaalinen kompassi ja suunnanetsintä: 6 vaihetta
Digitaalinen kompassi ja suunnanetsintä: 6 vaihetta

Video: Digitaalinen kompassi ja suunnanetsintä: 6 vaihetta

Video: Digitaalinen kompassi ja suunnanetsintä: 6 vaihetta
Video: 23.5.2022 Pirkanmaan digikompassi: Pirkanmaa Euroopan digiosaamisen kärkeen 2024, Heinäkuu
Anonim
Digitaalinen kompassi ja suunnanetsin
Digitaalinen kompassi ja suunnanetsin

Tekijät:

Cullan Whelan

Andrew Luft

Blake Johnson

Kiitokset:

Kalifornian merenkulkuakatemia

Evan Chang-Siu

Johdanto:

Tämän projektin perusta on digitaalinen kompassi, jossa on suunnan seuranta. Tämän avulla käyttäjä voi seurata suuntaa pitkiä matkoja käyttäen digitaalista laitetta. Puhekielessä suunta on kulma, joka mitataan myötäpäivään pohjoisesta ja jota pidetään kompassin osoittamana nolla astetta. Laitteella on kaksi päätoimintoa: ensimmäinen näyttää laitteen nykyisen otsikon digitaalinäyttöviitteessä, ja toinen on mahdollisuus syöttää käyttäjän pyytämä otsikko, joka näkyy näytön yläosassa olevassa LED -valossa kompassikotelo. Käyttäjä säätää sitten laitteen suuntaa valaistun LED -valon suhteen. Kun laitteen suuntaa muutetaan, LED siirtyy keskimmäiseen LED -valoon, mikä osoittaa, että oikea suunta on määritetty.

Tarvikkeet:

- DIYmall 6M GPS -moduuli

- HiLetgo MPU9250/6500 9-akselinen 9 DOF 16-bittinen

- Adafruit NeoPixel Ring 16

- MakerFocus 4kpl 3.7V ladattava litiumakku

- ELEGOO MEGA 2560 R3 -levy

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly laturi - v1

- 2,8 tuuman TFT -nestekidenäyttö, jossa kosketusnäytön murtokortti ja MicroSD -liitäntä

Vaihe 1: Hankkeen toimivuuden suunnittelu

Hankkeen toimivuuden suunnittelu
Hankkeen toimivuuden suunnittelu

Ensimmäinen askel on ymmärtää logiikka ja lopullinen toiminnallisuus. Tämä logiikkakaavio kuvaa kolmea laitetilaa ja kahta anturitilaa.

Tila 1: Lataustila

Lataustilaa käytetään, jotta Arduino Mega voi saada tietoja kahdesta anturista käynnistyksen yhteydessä. Laite näyttää latauksen näytöllä, tyhjentää kaikki näytön arvot ja NeoPixel -renkaan LED -valot syttyvät ympyrässä.

Tila 2: Kompassitila

Tässä tilassa laite toimii kuin digitaalinen kompassi. NeoPixel -rengas syttyy osoittamaan pohjoisen suunnan laitteen suunnan suhteen. Laitteen todellinen suunta näkyy myös nestekidenäytössä yhdessä laitteen leveys- ja pituusasteiden kanssa. Tässä tilassa käyttäjä voi myös syöttää käyttäjän otsikon näytettäväksi tilassa 3.

Tila 3: Suuntaseuranta

Tässä tilassa laite auttaa käyttäjää vakiintumaan haluamaansa suuntaan. Laite näyttää nyt laitteiden suunnan ja käyttäjien suunnan nestekidenäytöllä yhdessä leveys- ja pituusasteiden kanssa. NeoPixel -rengas syttyy nyt osoittamaan käyttäjien suunnan laitteen suunnan suhteen.

Sekä tilassa 2 että tilassa 3 on kaksi anturitilaa, joiden avulla laite voi noutaa tietoja anturista, joka tarjoaa tarkimmat tiedot laitteen toimintakunnosta riippuen.

Anturin tila 1: MPU

Jos laite ei liiku, suuntatiedot vedetään MPU: sta, koska ne ovat tarkimpia tietoja, kun laite ei liiku.

Anturin tila 2: GPS

Jos laite liikkuu, suuntatiedot poistetaan GPS -sirusta, koska ne ovat tarkimpia tietoja tässä tilassa.

Laite voi vaihtaa näiden välillä anturitiloihin milloin tahansa ottaakseen huomioon laitteen käyttöolosuhteet. Tämä on tärkeää laitteen toiminnan kannalta, koska molemmissa laitteessa käytetyissä antureissa on olosuhteet, jotka vaikuttavat antamiensa tietojen tarkkuuteen. MPU: n tapauksessa siruun voivat helposti vaikuttaa paikalliset magneettikentät, jotka aiheutuvat autoista ja rakennusten metallirakennusmateriaaleista. Näin ollen käytetään GPS -sirua, joka voi tarjota paljon tarkemman suunnan, joka ei vaikuta samoihin vaikutuksiin. GPS voi kuitenkin antaa vain suuntatietoja liikkuessaan, koska se laskee suunnan leveys- ja pituusasteiden muutosten perusteella. Siksi sirut täydentävät toisiaan, ja käyttämällä kahta anturitilaa tarjoavat tarkimmat ja luotettavimmat laitteen toiminnot.

Vaihe 2: Asennus ja lankakaavio

Asennus ja lankakaavio
Asennus ja lankakaavio
Asennus ja lankakaavio
Asennus ja lankakaavio
Asennus ja lankakaavio
Asennus ja lankakaavio

Projekti käyttää ja Arduino Mega -kloonilevyä, joka on samanlainen kuin yllä oleva levy. Kaikki projektin komponentit liitetään tähän korttiin. Yllä on yksityiskohtaisia kaavioita tämän projektin komponenttien kytkemisestä. Painikkeilla ei ole yksityiskohtaista piiriä, koska ne voidaan asettaa monella tavalla. Tässä projektissa he käyttävät 100K: n alasvetovastusta ja yksinkertaista painiketta lähettääkseen 3 voltin signaalin sille osoitetulle tapille.

Vaihe 3: Komponenttien ja peruskoodin testaus

Projekti hakee tietoja sekä MPU- että GPS -sirusta aiemmin kuvatulla tavalla. Liitteenä on kolme koodia, joiden avulla voidaan testata tietoja MPU: sta, GPS: stä ja MPU: sta näytöllä osien toimivuuden tarkistamiseksi. On tärkeää saada komponentit toimintaan tässä vaiheessa, koska koodi on erillinen kullekin sirulle ja kaikki ongelmat voidaan ratkaista pelkäämättä, että lopullisessa koodissa aiheutuu odottamattomia virheitä.

Vaaditut kirjastot:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Kaikki nämä löytyvät yllä olevista otsikoista. En aio lähettää linkkejä, koska näistä kirjastoista on monia kopioita useista lähteistä ja noudattaen yhteisön standardia vain linkittää alkuperäisiin, annan sinun löytää ne itse.

Vaihe 4: MPU -kalibrointi

MPU -kalibrointi
MPU -kalibrointi

Osavaltion 2 ja osavaltion 3 MPU: n kautta löydetty otsikko jaettiin neljään neljännekseen. Tämä oli välttämätöntä, koska kalibrointimenetelmämme vaati pienimmän ja suurimman suuruuden löytämistä magnetometristä sen x- ja y -akseleilla. Tämä tehtiin kiertämällä laitetta satunnaisesti sen kolmen akselin ympäri ilman muita merkittäviä sähkömagneettisia kenttiä kuin Maan. Sitten otimme minimi- ja maksimiarvot x- ja y -akselia pitkin ja liitämme ne skaalausyhtälöön rajoittaaksemme negatiivisten yhden ja yhden arvojen välisiä suuruuksia. Yllä olevassa kuvassa BigX ja BigY ovat magnetometritietojen maksimiarvot x- ja y-akselilla, LittleX ja LittleY ovat magnetometritietojen vähimmäisarvot x- ja y-akselilla, IMU.getMagX_uT () ja IMU.getMagY_uT () ovat arvot, jotka vedetään magnetometristä milloin tahansa x- ja y-akselia pitkin, ja Mx ja My ovat uudet skaalatut arvot, joita käytetään suunnan laskemiseen.

Vaihe 5: Lopullinen koodi

Lopullinen koodi
Lopullinen koodi
Lopullinen koodi
Lopullinen koodi
Lopullinen koodi
Lopullinen koodi
Lopullinen koodi
Lopullinen koodi

Viimeinen vaihe on luoda lopullinen koodi. Olen liittänyt kopion hankkeen lopullisesta koodista. Huomautuksia on tehty koodin navigoinnin helpottamiseksi. Tämän osan suurin haaste oli saada kvadrantit toimimaan oikein. Kvadranttien toteuttaminen osoittautui tylsemmäksi ja loogisemmaksi kuin olisimme voineet odottaa. Toteutimme aluksi perusarktaanin (My/Mx) ja muunnimme sen jälkeen radiaaneista asteiksi, koska Arduino lähettää oletuksena radiaaneina. Kuitenkin ainoa neljännes, jossa tämä toimi, oli 90 asteesta 180 asteeseen, mikä antoi meille negatiivisen lähdön ja päätyi neljännekseksi III. Ratkaisu tähän oli absoluuttisen arvon ottaminen, koska se kasvoi edelleen oikein. Tämä arvo vähennettiin sitten 360: stä oikean NeoPixel -LEDin sytyttämiseksi tilassa 2, ja vastaavaa matemaattista operaatiota käytettiin tilassa 3 sen perusteella, oliko otsikko suurempi tai pienempi kuin käyttäjän syöttämä otsikko, jotka molemmat näkyvät yllä oleva koodi. Yllä olevissa kuvissa Otsikko vastaa NeoPixel -valoa, joka syttyy laitteen suunnan ja pohjoisesta poikkeamisen välisen eron perusteella tilassa 2 ja käyttäjän otsikossa. Tässä tapauksessa 90-180 astetta vastaa neljännestä III. Molemmissa tapauksissa tft.print saa näytön lukemaan laitteen suunnan pohjoisesta.

Kolmen muun neljänneksen osalta arktanin (My/Mx) toteuttaminen johti lisäyksen kääntämiseen laitetta käännettäessä, ts. Suuntakulma laskisi alas, kun sen piti laskea ylöspäin ja päinvastoin. Ratkaisu tähän ongelmaan oli kääntää arktangentti arkaanin muotoon (Mx/My). Vaikka tämä ratkaisi lisäysinversion, se ei antanut oikeaa laitteen suuntausta, jossa kvadrantit tulivat peliin. Yksinkertainen korjaus tähän oli lisätä siirto vastaavan neljänneksen perusteella. Tämä näkyy seuraavissa kuvissa, jotka ovat jälleen koodinpalasia kunkin neljänneksen tiloista 2 ja 3.

Ensimmäinen lauseke suoritetaan, jos MPU -yhtälön avulla laskettu otsikko on suurempi kuin käyttäjän otsikko. Tässä tilanteessa käyttäjän syöttämä otsikko lisätään laitteen otsikkoon ja vastaava arvo vähennetään 360: stä. Jos else -lause suoritetaan, MPU -otsikkoyhtälö vähennetään käyttäjän syöteotsikosta. Nämä ehdot toteutettiin, jotta saatiin paitsi tarkka arvo NeoPixelille, myös vältettiin arvon saaminen hyväksyttävän alueen, joka on 0-359 astetta, ulkopuolelle.

Suositeltava: