Taula de continguts:

Cercador de brúixola i capçalera digital: 6 passos
Cercador de brúixola i capçalera digital: 6 passos

Vídeo: Cercador de brúixola i capçalera digital: 6 passos

Vídeo: Cercador de brúixola i capçalera digital: 6 passos
Vídeo: CS50 2015 - Week 3, continued 2024, Juliol
Anonim
Cercador de brúixola i capçalera digital
Cercador de brúixola i capçalera digital

Autors:

Cullan Whelan

Andrew Luft

Blake Johnson

Agraïments:

Acadèmia Marítima de Califòrnia

Evan Chang-Siu

Introducció:

La base d’aquest projecte és una brúixola digital amb seguiment d’encapçalaments. Això permet a l'usuari seguir un encapçalament a distàncies llargues mitjançant un aparell digital. Col·loquialment un encapçalament és un angle mesurat en sentit horari des del nord, que es considera zero graus, tal com indica la brúixola. El dispositiu té dues funcions principals: la primera és mostrar l’encapçalament actual del dispositiu en una referència de pantalla digital i la segona és la possibilitat d’introduir un encapçalament sol·licitat per l’usuari, que es mostrarà en un anell de LED a la part superior del carcassa brúixola. A continuació, l'usuari ajustaria l'orientació del dispositiu relacionada amb el LED il·luminat. A mesura que es canvia la direcció del dispositiu, el LED viatjarà cap al LED central, indicant així que s’ha establert l’encapçalament correcte.

Subministraments:

Mòdul GPS DIYmall 6M

- HiLetgo MPU9250 / 6500 9 eixos 9 DOF de 16 bits

- Anell NeoPixel Adafruit 16

- MakerFocus 4pcs bateria recarregable de liti de 3,7 V

- Tauler ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo amb presa USB Mini-B - Carregador USB LiIon / LiPoly - v1

- LCD TFT de 2,8 polzades amb tauler de pantalla tàctil amb sòcol MicroSD

Pas 1: dissenyar la funcionalitat del projecte

Disseny de la funcionalitat del projecte
Disseny de la funcionalitat del projecte

El primer pas és comprendre la lògica i la funcionalitat operativa final. Aquest diagrama lògic representa els tres estats del dispositiu i els dos estats del sensor.

Estat 1: Estat de càrrega

L'estat de càrrega s'utilitza per permetre a l'Arduino Mega recuperar dades dels dos sensors en iniciar-se. El dispositiu mostrarà la càrrega a la pantalla, esborrarà tots els valors numèrics a la pantalla i els LED de l’anell NeoPixel s’encendran en cercle.

Estat 2: mode brúixola

En aquest estat, el dispositiu actuarà com una brúixola digital. L'anell NeoPixel s'encendrà per indicar la direcció nord cap a l'orientació del dispositiu. L'encapçalament del dispositiu real també es mostrarà a la pantalla LCD juntament amb la latitud i la longitud del dispositiu. També serà dins d’aquest estat que l’usuari podrà introduir l’encapçalament d’usuari que es mostrarà a l’Estat 3.

Estat 3: mode de seguiment de capçalera

En aquest estat, el dispositiu ara ajudarà l'usuari a establir-se en el títol desitjat. Ara el dispositiu mostrarà els títols dels dispositius i els usuaris que es dirigeixen a la pantalla LCD juntament amb les dades de latitud i longitud. Ara l'anell NeoPixel s'encendrà per indicar els usuaris que es dirigeixen respecte a l'orientació dels dispositius.

Tant dins de l'estat 2 com de l'estat 3 hi ha dos estats del sensor que permeten al dispositiu extreure dades del sensor que proporciona les dades més precises en funció de l'estat de funcionament del dispositiu.

Estat del sensor 1: MPU

Si el dispositiu no es mou, les dades de capçalera s'extreuran de la MPU, ja que són les dades més precises quan el dispositiu no es mou.

Estat del sensor 2: GPS

Si el dispositiu es mou, les dades de capçalera s’extreuran del xip GPS, ja que són les dades més precises en aquesta condició.

El dispositiu pot canviar entre aquests a estats del sensor en qualsevol moment per tenir en compte les condicions d’ús del canvi de la unitat. Això és important per al funcionament del dispositiu, ja que els dos sensors utilitzats en el dispositiu tenen condicions que afecten la precisió de les dades que proporcionen. En el cas de la MPU, el xip es pot veure fàcilment influït pels camps magnètics locals causats pels vehicles i els materials de construcció metàl·lics dels edificis. Així, s’utilitza un xip GPS que pot proporcionar un encapçalament molt més precís que no es veu afectat per les mateixes influències. Tot i això, el GPS només pot proporcionar dades de capçalera quan es mou, ja que calcula capçalera mitjançant el canvi de dades de latitud i longitud. Per tant, els xips es complementen i, mitjançant l’ús dels dos estats del sensor, proporcionen la funcionalitat del dispositiu més precisa i fiable.

Pas 2: Configuració i diagrama de cables

Configuració i diagrama de cables
Configuració i diagrama de cables
Configuració i diagrama de cables
Configuració i diagrama de cables
Configuració i diagrama de cables
Configuració i diagrama de cables

El projecte utilitza una placa de clonació Arduino Mega similar a la placa anterior. Tots els components del projecte es connectaran a aquest tauler. A la part superior es mostren diagrames detallats de com connectar els components d’aquest projecte. Els botons no tenen un circuit detallat, ja que es poden configurar de moltes maneres. En aquest projecte utilitzen una resistència de 100K i un simple botó per enviar un senyal de 3 volts al seu pin assignat.

Pas 3: comprovació dels components i del codi bàsic

El projecte obtindrà dades tant de la MPU com del xip GPS, tal com es va descriure anteriorment. S'adjunten tres codis que permeten provar dades de la MPU, GPS i MPU amb pantalla per verificar la funcionalitat de les peces. És important que els components estiguin operatius en aquesta etapa, ja que el codi és separat per a cada xip i es pot solucionar qualsevol problema sense por de provocar errors imprevistos al codi final.

Biblioteques obligatòries:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Tot això es pot trobar cercant els títols anteriors. No publicaré enllaços, ja que hi ha moltes còpies d’aquestes biblioteques de diverses fonts i s’adhereixen a l’estàndard comunitari d’enllaçar només a originals. Us deixaré trobar-les per vosaltres mateixos.

Pas 4: calibració de la MPU

Calibració MPU
Calibració MPU

L'encapçalament trobat a través de la MPU a l'Estat 2 i l'Estat 3 es va dividir en quatre quadrants. Això era necessari perquè el nostre mètode de calibratge requeria trobar les magnituds mínima i màxima del magnetòmetre al llarg dels seus eixos x i. Això es va fer mitjançant la rotació aleatòria del dispositiu al voltant dels seus tres eixos, lliure de qualsevol camp electromagnètic significatiu que no sigui el de la Terra. A continuació, vam agafar els valors mínim i màxim al llarg de l’eix x i i els vam connectar a una equació d’escala per tal de restringir les magnituds entre els valors d’un i un negatius. A la figura anterior, BigX i BigY són els valors màxims de les dades del magnetòmetre al llarg de l’eix x i y, respectivament, LittleX i LittleY són els valors mínims de les dades del magnetòmetre al llarg dels eixos x i y, respectivament, IMU.getMagX_uT () i IMU.getMagY_uT () són els valors que s’extreuen del magnetòmetre en qualsevol moment al llarg dels eixos x i y, respectivament, i Mx i My són els nous valors a escala que s’utilitzen per calcular l’encapçalament.

Pas 5: Codi final

Codi final
Codi final
Codi final
Codi final
Codi final
Codi final
Codi final
Codi final

El pas final és crear el codi final. He adjuntat una còpia del codi final del projecte. Dins de les notes s’han pres notes per ajudar a navegar pel codi. El repte més gran d’aquesta secció era aconseguir que els quadrants funcionessin correctament. La implementació dels quadrants va resultar ser més tediós i desafiant la lògica del que podríem haver previst mai. Inicialment, vam implementar un arctan bàsic (My / Mx) i després vam convertir de radians a graus, ja que Arduino genera per defecte radians. Tot i això, l’únic quadrant en què va funcionar va ser de 90 a 180 graus, cosa que ens va donar una sortida negativa i va acabar sent el Quadrant III. La solució a això era prendre el valor absolut, ja que encara augmentava correctament. Aquest valor es va restar de 360 per il·luminar el LED NeoPixel correcte a l'estat 2 i es va utilitzar una operació matemàtica similar a l'estat 3 basant-se en si el títol era més gran o més petit que el títol d'entrada de l'usuari, tots dos es poden veure a la codi anterior. A les figures anteriors, Encapçalament correspon a la llum NeoPixel que s’encendrà en funció de la diferència entre l’encapçalament del dispositiu i la desviació del nord en el cas de l’estat 2 i de la de l’encapçalament de l’usuari. En aquest cas, de 90 a 180 graus correspon al Quadrant III. En ambdós casos, tft.print fa que la pantalla llegeixi el dispositiu cap al nord.

Per als altres tres quadrants, la implementació d’arctan (My / Mx) va provocar una inversió d’increment a mesura que es girava el dispositiu, és a dir, l’angle d’encapçalament comptava quan es suposava que comptava i viceversa. La solució a aquest problema va ser capgirar l’arctangent a la forma d’arctan (Mx / My). Tot i que això va solucionar la inversió d’increment, no va donar l’encapçalament correcte del dispositiu, que és on van entrar en joc els quadrants. La solució a això era afegir un desplaçament basat en el quadrant corresponent. Això es pot veure a les figures següents, que tornen a ser trossos de codi dels estats 2 i 3 de cada quadrant.

La primera sentència if es duu a terme si l’encapçalament calculat per l’equació de la MPU és superior a l’encapçalament de l’usuari. En aquesta condició, l’encapçalament d’entrada de l’usuari s’afegeix a l’encapçalament del dispositiu i es resta el valor corresponent de 360. Si es duu a terme la instrucció else, l’equació de l’encapçalament de la MPU es resta de l’encapçalament d’entrada de l’usuari. Aquestes condicions es van implementar per tal d'obtenir no només un valor precís per al NeoPixel, sinó per evitar obtenir un valor fora del rang acceptable, que oscil·la entre 0 i 359 graus.

Recomanat: