Índice:

Bússola digital e localizador de rumo: 6 etapas
Bússola digital e localizador de rumo: 6 etapas

Vídeo: Bússola digital e localizador de rumo: 6 etapas

Vídeo: Bússola digital e localizador de rumo: 6 etapas
Vídeo: ✓ CHEGA DE GASTAR COM TÉCNICO!!!✓COMO ACHAR QUALQUER SATÉLITE USANDO SEU CELULAR ✓ATUALIZADO 2023✓ 2024, Julho
Anonim
Bússola digital e localizador de rumo
Bússola digital e localizador de rumo

Autores:

Cullan Whelan

Andrew Luft

Blake Johnson

Agradecimentos:

Academia Marítima da Califórnia

Evan Chang-Siu

Introdução:

A base deste projeto é uma bússola digital com rastreamento de direção. Isso permite que o usuário siga um título por longas distâncias usando um aparelho digital. Coloquialmente, um rumo é um ângulo medido no sentido horário a partir do norte, considerado zero grau, conforme indicado pela bússola. O dispositivo tem duas funções principais: a primeira é exibir o rumo atual do dispositivo em uma referência de exibição digital e a segunda é a capacidade de inserir um rumo solicitado pelo usuário, que será exibido em um anel de LEDs na parte superior do bússola. O usuário, então, ajustaria a orientação do dispositivo em relação ao LED iluminado. Conforme a direção do dispositivo é alterada, o LED se desloca até o LED central, indicando que o rumo correto foi estabelecido.

Suprimentos:

- Módulo GPS DIYmall 6M

- HiLetgo MPU9250 / 6500 9 eixos 9 DOF 16 bits

- Adafruit NeoPixel Ring 16

- Bateria recarregável de lítio MakerFocus 4pcs 3,7V

- Placa ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo com entrada USB Mini-B - Carregador USB LiIon / LiPoly - v1

- LCD TFT de 2,8 com tela sensível ao toque Breakout Board com soquete MicroSD

Etapa 1: Desenhar a Funcionalidade do Projeto

Desenhando a Funcionalidade do Projeto
Desenhando a Funcionalidade do Projeto

A primeira etapa é entender a lógica e a funcionalidade operacional final. Este diagrama lógico descreve os três estados do dispositivo e os dois estados do sensor.

Estado 1: Carregando estado

O estado de carregamento é usado para permitir que o Arduino Mega obtenha dados de volta dos dois sensores na inicialização. O dispositivo exibirá o carregamento na tela, limpará todos os valores numéricos na tela e os LEDs no anel NeoPixel acenderão em um círculo.

Estado 2: Modo Bússola

Nesse estado, o dispositivo funcionará como uma bússola digital. O anel NeoPixel acenderá para indicar a direção do Norte em relação à orientação do dispositivo. O verdadeiro cabeçalho do dispositivo também será exibido na tela LCD junto com a latitude e a longitude do dispositivo. Também será neste estado que o usuário poderá inserir o cabeçalho do usuário a ser exibido no estado 3.

Estado 3: Modo de rastreamento de direção

Nesse estado, o dispositivo agora ajudará o usuário a se estabelecer no rumo desejado. O dispositivo agora exibirá o cabeçalho dos dispositivos e dos usuários na tela LCD junto com os dados de latitude e longitude. O anel NeoPixel agora acenderá para indicar a direção dos usuários em relação à orientação dos dispositivos.

Tanto no Estado 2 quanto no Estado 3, há dois estados de sensor, esses estados de sensor permitem que o dispositivo extraia dados do sensor que fornecem os dados mais precisos, dependendo da condição operacional do dispositivo.

Estado do sensor 1: MPU

Se o dispositivo não estiver se movendo, os dados de rumo serão retirados do MPU, pois são os dados mais precisos quando o dispositivo não está se movendo.

Estado do sensor 2: GPS

Se o dispositivo estiver se movendo, os dados de rumo serão extraídos do chip GPS, pois são os dados mais precisos nessa condição.

O dispositivo pode alternar entre esses estados de sensor a qualquer momento para levar em conta as condições de uso da mudança da unidade. Isso é importante para a operação do dispositivo, pois os dois sensores usados no dispositivo têm condições que afetam a precisão dos dados que fornecem. No caso do MPU, o chip pode ser facilmente influenciado por campos magnéticos locais causados por carros e materiais de construção de metal em edifícios. Assim, é usado um chip GPS que pode fornecer um rumo muito mais preciso que não seja afetado pelas mesmas influências. No entanto, o GPS só pode fornecer dados de rumo ao se mover, pois calcula o rumo usando a alteração nos dados de latitude e longitude. Portanto, os chips se complementam e, usando os dois estados do sensor, fornecem a funcionalidade de dispositivo mais precisa e confiável.

Etapa 2: Configuração e diagrama de fiação

Diagrama de configuração e fiação
Diagrama de configuração e fiação
Diagrama de configuração e fiação
Diagrama de configuração e fiação
Diagrama de configuração e fiação
Diagrama de configuração e fiação

O projeto utiliza uma placa clone Arduino Mega semelhante à placa acima. Todos os componentes do projeto serão conectados a esta placa. Acima estão diagramas detalhados de como conectar os componentes para este projeto. Os botões não têm um circuito detalhado, pois podem ser configurados de várias maneiras. Neste projeto, eles usam um resistor pull down de 100K e um botão simples para enviar um sinal de 3 volts ao pino atribuído.

Etapa 3: Teste de componentes e código básico

O projeto irá extrair dados do chip MPU e GPS conforme descrito anteriormente. Em anexo estão três códigos que permitem o teste de dados do MPU, GPS e MPU com tela para verificar a funcionalidade das peças. É importante deixar os componentes operacionais neste estágio, pois o código é separado para cada chip e quaisquer problemas podem ser resolvidos sem medo de causar erros imprevistos no código final.

Bibliotecas necessárias:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Todos eles podem ser encontrados pesquisando os títulos acima. Não postarei links, pois há muitas cópias dessas bibliotecas de várias fontes e, aderindo ao padrão da comunidade de apenas links para originais, deixarei que você as encontre por conta própria.

Etapa 4: Calibração MPU

Calibração MPU
Calibração MPU

O cabeçalho encontrado por meio do MPU no Estado 2 e Estado 3 foi dividido em quatro quadrantes. Isso foi necessário porque nosso método de calibração exigia encontrar as magnitudes mínima e máxima do magnetômetro ao longo de seus eixos xey. Isso foi feito girando o dispositivo aleatoriamente em torno de seus três eixos, livre de quaisquer campos eletromagnéticos significativos além do da Terra. Em seguida, pegamos os valores mínimo e máximo ao longo dos eixos xey e os inserimos em uma equação de escala para restringir as magnitudes entre os valores de um e um negativo. Na figura acima, BigX e BigY são os valores máximos dos dados do magnetômetro ao longo do eixo xey respectivamente, LittleX e LittleY são os valores mínimos dos dados do magnetômetro ao longo do eixo xey respectivamente, IMU.getMagX_uT () e IMU.getMagY_uT () são os valores retirados do magnetômetro a qualquer momento ao longo dos eixos xey, respectivamente, e Mx e My são os novos valores em escala usados para calcular o rumo.

Etapa 5: Código Final

Código Final
Código Final
Código Final
Código Final
Código Final
Código Final
Código Final
Código Final

A etapa final é criar o código final. Anexei uma cópia do código final do projeto. Dentro das notas foram feitas para ajudar a navegar no código. O maior desafio desta seção foi fazer com que os quadrantes funcionassem corretamente. A implementação de quadrantes provou ser mais tediosa e desafiadora da lógica do que poderíamos ter previsto. Implementamos inicialmente um arctan básico (My / Mx) e depois convertemos de radianos para graus, já que o Arduino produz em radianos por padrão. Porém, o único quadrante em que isso funcionou foi de 90 graus a 180 graus, o que nos deu uma saída negativa e acabou sendo o Quadrante III. A solução para isso foi pegar o valor absoluto, já que ele ainda incrementava corretamente. Este valor foi então subtraído de 360 para acender o LED NeoPixel correto no estado 2 e uma operação matemática semelhante foi usada no estado 3 com base em se o rumo era maior ou menor do que o rumo de entrada do usuário, ambos os quais podem ser vistos no código acima. Nas figuras acima, o Heading corresponde à luz NeoPixel que será acesa com base na diferença entre o rumo do dispositivo e o desvio do norte no caso do estado 2, e daquele do rumo do usuário. Nesse caso, 90 a 180 graus correspondem ao quadrante III. Em ambos os casos, o tft.print faz com que a tela leia a direção do dispositivo do norte.

Para os outros três quadrantes, a implementação de arctan (My / Mx) levou a uma inversão de incremento conforme o dispositivo era girado, ou seja, o ângulo de direção faria uma contagem regressiva quando deveria contar para cima e vice-versa. A solução para esse problema foi virar o arco tangente para a forma de arctan (Mx / My). Embora isso tenha resolvido a inversão de incrementação, não forneceu o cabeçalho de dispositivo correto, que é onde os quadrantes entraram em jogo. A solução simples para isso era adicionar um deslocamento com base no quadrante correspondente. Isso pode ser visto nas figuras a seguir, que são mais uma vez trechos de código dos estados 2 e 3 de cada quadrante.

A primeira instrução if é executada se o rumo calculado pela equação MPU for maior que o rumo do usuário. Sob esta condição, o cabeçalho de entrada do usuário é adicionado ao cabeçalho do dispositivo e o valor correspondente é subtraído de 360. Se a instrução else for realizada, a equação do cabeçalho MPU é subtraída do cabeçalho de entrada do usuário. Essas condições foram implementadas não apenas para obter um valor preciso para o NeoPixel, mas para evitar a obtenção de um valor fora da faixa aceitável, que é de 0 a 359 graus.

Recomendado: