Índice:
- Etapa 1: como funciona
- Etapa 2: Componentes
- Etapa 3: Conectando os Módulos
- Etapa 4: Código
- Etapa 5: banco de dados e página da web
- Etapa 6: testes de navegação
- Etapa 7: final
Vídeo: ☠WEEDINATOR☠ Parte 2: Navegação por satélite: 7 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Nasce o sistema de navegação Weedinator!
Um robô agrícola móvel que pode ser controlado por um smartphone.
… E em vez de apenas seguir o processo normal de como ele é montado, pensei em tentar explicar como ele realmente funciona - obviamente, não TUDO, mas as partes mais importantes e interessantes. Desculpe o trocadilho, mas é como os dados fluem entre os módulos individuais que eu acho interessante e divididos em seu denominador mais baixo terminamos com "bits" reais - zeros e uns. Se você já se confundiu com bits, bytes, caracteres e strings, então agora pode ser a hora de não se confundir? Também tentarei desfazer a confusão de um conceito ligeiramente abstrato chamado 'Cancelamento de erro'.
O próprio sistema apresenta:
- GPS / GNSS: Ublox C94 M8M (móvel e base)
- Bússola digital 9DOF Razor IMU MO
- Celular Fona 800H 2G GPRS
- Tela TFT de 2,2"
- Arduino Due 'Master'
- Vários 'escravos' do Arduino.
Estranhamente, muitos Navs por satélite não têm uma bússola digital, o que significa que se você estiver parado e perdido, terá que andar ou dirigir em qualquer direção aleatória antes que o dispositivo possa mostrar a direção correta dos satélites. Se você se perder em uma selva densa ou em um estacionamento subterrâneo, você está empanturrado!
Etapa 1: como funciona
No momento, um simples par de coordenadas é carregado de um smartphone ou computador, que é então baixado pelo Weedinator. Em seguida, eles são interpretados como um rumo em graus e uma distância a percorrer em mm.
O GPRS fona é usado para acessar um banco de dados online através da rede celular 2G e receber e transmitir as coordenadas para o Arduino Due por meio de um Arduino Nano. O Due é o Mestre e controla uma série de outros Arduinos como escravos por meio do I2C e dos barramentos seriais. O Due pode interagir com dados ao vivo do Ublox e Razor e exibir um título calculado por um de seus escravos Arduino.
O rastreador de satélite Ublox é particularmente inteligente, pois usa o cancelamento de erros para obter correções muito precisas - um desvio total nominal final de cerca de 40 mm. O módulo é composto por um par idêntico, um dos quais, o 'rover', se move com o Weedinator, e o outro, a 'base' é fixada em um mastro em algum lugar ao ar livre. O cancelamento do erro é obtido pela capacidade da base de obter uma correção realmente precisa usando uma grande quantidade de amostras ao longo do tempo. A média dessas amostras é então calculada para compensar as mudanças nas condições atmosféricas. Se o dispositivo estivesse em movimento, obviamente não seria capaz de obter nenhum tipo de média e estaria totalmente à mercê de um ambiente em mudança. No entanto, se um dispositivo estático e móvel funcionarem juntos, desde que possam se comunicar entre si, eles podem obter o benefício de ambos. A qualquer momento, a unidade base ainda tem um erro, mas também tem uma correção superprecisa calculada anteriormente para que possa calcular o erro real subtraindo um conjunto de coordenadas de outro. Em seguida, ele envia o erro calculado para o rover por meio de um link de rádio, que então adiciona o erro em suas próprias coordenadas e pronto, temos o cancelamento de erros! Em termos práticos, o cancelamento do erro faz a diferença entre o desvio total de 3 metros e 40 mm.
O sistema completo parece complicado, mas na verdade é bastante fácil de construir, seja solto em uma superfície não condutiva ou usando o PCB que eu projetei, que permite que todos os módulos sejam aparafusados com segurança. O desenvolvimento futuro é construído no PCB, permitindo que uma vasta gama de Arduinos seja incorporada para controlar os motores de direção, movimento para a frente e uma máquina CNC de bordo. A navegação também será auxiliada por pelo menos um sistema de reconhecimento de objetos usando câmeras para detectar objetos coloridos, por exemplo, bolas de golfe fluorescentes, que são cuidadosamente posicionadas em algum tipo de grade - Observe este espaço!
Etapa 2: Componentes
- Ublox C94 M8M (Móvel e Base) x 2 de
- Bússola digital 9DOF Razor IMU MO
- Fona 800H 2G GPRS celular 1946
- Arduino Due
- Arduino Nano x 2 de
- SparkFun Pro Micro
- Adafruit 2.2 "TFT IL1940C 1480
- PCB (ver arquivos Gerber em anexo) x 2 de
- 1206 resistores de zero ohm SMD x 12 de
- 1206 LEDs x 24 de
O arquivo PCB é aberto com o software 'Design Spark'.
Etapa 3: Conectando os Módulos
Esta é a parte fácil - especialmente fácil com o PCB que eu fiz - basta seguir o diagrama acima. É necessário cuidado para evitar a fiação de módulos 3v a 5v, mesmo nas linhas seriais e I2C.
Etapa 4: Código
A maior parte do código se preocupa em fazer com que os dados se movam pelo sistema de maneira ordenada e, muitas vezes, é necessário converter formatos de dados de inteiros para flutuantes para strings e caracteres, o que pode ser muito confuso! O protocolo 'Serial' irá lidar apenas com caracteres e enquanto o I2O protocolo C lidará com inteiros muito pequenos, achei melhor convertê-los em caracteres e depois converter de volta para inteiros na outra extremidade da linha de transmissão.
O controlador Weedinator é basicamente um sistema de 8 bits com muitos Arduinos individuais, ou 'MCUs. Quando 8 bits são descritos como zeros binários reais e uns, pode ter a seguinte aparência: B01100101 que seria igual a:
(1x2) + (0x2)2+ (1x2)3+ (0x2)4+ (0x2)5+ (1x2)6+ (1x2)7+ (0x2)8 =
Valor de dígito decimal | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
Valor de dígito binário | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
= 101
E o valor máximo possível é 255…. Portanto, o número inteiro máximo 'byte' que podemos transmitir em I2C é 255, o que é muito limitante!
Em um Arduino, podemos transmitir até 32 caracteres ASCII, ou bytes, por vez usando I2C, que é muito mais útil, e o conjunto de caracteres inclui números, letras e caracteres de controle no formato de 7 bits, conforme abaixo:
Felizmente, o compilador Arduino faz todo o trabalho de conversão de caractere para binário em segundo plano, mas ainda espera o tipo correto de caractere para transmissão de dados e não aceita 'Strings'.
Agora é quando as coisas podem ficar confusas. Os caracteres podem ser expressos como caracteres únicos usando a definição de char ou como uma matriz unidimensional de 20 caracteres usando char [20]. Uma Arduino String é muito semelhante a um array de caracteres e é literalmente uma string de caracteres frequentemente interpretada pelo cérebro humano como 'palavras'.
// Constrói o caractere 'distanceCharacter':
Iniciador de string = ""; distanceString = iniciador + distanceString; int n = distanceString.length (); para (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }
O código acima pode converter uma longa sequência de caracteres em uma matriz de caracteres que pode então ser transmitida através de I2C ou serial.
Na outra extremidade da linha de transmissão, os dados podem ser convertidos de volta em uma string usando o seguinte código:
distanceString = distanceString + c; // string = string + caractere
Uma matriz de caracteres não pode ser convertida diretamente em um inteiro e tem que ir para o formato de string primeiro, mas o código a seguir será convertido de uma string para um inteiro:
resultado interno = (distanceString).toInt ();
distânciaMetros int = resultado;
Agora temos um inteiro que podemos usar para fazer cálculos. Flutuantes (números com um ponto decimal) precisam ser convertidos em inteiros no estágio de transmissão e depois divididos por 100 para duas casas decimais, por exemplo:
float distanceMetres = distanceMm / 1000;
Por último, uma string pode ser criada a partir de uma mistura de caracteres e inteiros, por exemplo:
// É aqui que os dados são compilados em um caractere:
dataString = iniciador + "BEAR" + zbearing + "DIST" + zdistance; // Limitado a 32 caracteres // String = string + caracteres + intereger + characters + integer.
O resto do código é material padrão do Arduino que pode ser encontrado nos vários exemplos nas bibliotecas do Arduino. Verifique o exemplo de 'exemplos >>>> Strings' e os exemplos da biblioteca 'wire'.
Aqui está todo o processo para transmitir e receber um float:
Converter Flutuante ➜ Inteiro ➜ String ➜ Matriz de caracteres ….. e TRANSMITAR matriz de caracteres do Mestre ➜➜
➜➜ RECEBER caracteres individuais no Slave…. em seguida, converta Caractere ➜ String ➜ Inteiro ➜ Flutuante
Etapa 5: banco de dados e página da web
Acima é mostrada a estrutura do banco de dados e os arquivos de código php e html são anexados. Nomes de usuários, nomes de bancos de dados, nomes de tabelas e senhas são apagados por segurança.
Etapa 6: testes de navegação
Consegui conectar um datalogger à placa de controle do Weedinator via I2C e ter uma ideia do desempenho de posicionamento do satélite Ublox M8M:
No 'Cold Start', mostrado pelo gráfico verde, o módulo começou com muitos erros, bastante semelhante a um GPS 'normal', e gradualmente o erro foi diminuindo até que, após cerca de 2 horas, ele obteve uma correção RTK entre o rover e base (mostrada como a cruz vermelha). Durante esse período de 2 horas, o módulo básico está continuamente construindo e atualizando um valor médio para latitude e longitude e, após o intervalo de tempo pré-programado, decide que tem uma boa correção. Os próximos 2 gráficos mostram o comportamento após um 'Hot start 'onde o módulo base já calculou uma boa média. O gráfico superior tem mais de 200 minutos e, ocasionalmente, a correção é perdida e o rover envia uma mensagem NMEA ao Weedinator informando que a correção tornou-se temporariamente não confiável.
O gráfico azul inferior é um 'zoom in' na caixa vermelha no gráfico superior e mostra um bom instantâneo representativo do desempenho do Ublox, com desvio total de 40 mm, que é mais do que bom o suficiente para guiar o Weedinator para seu local, mas possivelmente não é bom o suficiente para cultivar o solo ao redor de plantas individuais?
O terceiro gráfico mostra os dados coletados com o Rover e a Base de 100 metros de distância - Nenhum erro adicional foi detectado - a distância de separação não fez diferença para a precisão.
Etapa 7: final
Recomendado:
Estação meteorológica assistida por satélite: 5 etapas
Estação meteorológica assistida por satélite: Este projeto destina-se a pessoas que desejam coletar seus próprios dados meteorológicos. Ele pode medir a velocidade e direção do vento, temperatura e umidade do ar. Também é capaz de ouvir satélites meteorológicos orbitando a Terra uma vez a cada 100 minutos. Eu irei
Protótipo de HUD de motocicleta inteligente (navegação passo a passo e muito mais): 9 etapas
Protótipo do Smart Motorcycle HUD (navegação passo a passo e muito mais): Olá! Este Instructables é a história de como eu projetei e construí uma plataforma HUD (Heads-Up Display) projetada para ser montada em capacetes de motocicleta. Ele foi escrito no contexto do concurso de " mapas ". Infelizmente, eu não fui capaz de terminar completamente t
Roomblock: uma plataforma para aprender navegação ROS com Roomba, Raspberry Pi e RPLIDAR: 9 etapas (com imagens)
Roomblock: uma plataforma para aprender navegação ROS com Roomba, Raspberry Pi e RPLIDAR: O que é isso? &Quot; Roomblock " é uma plataforma de robô composta por um Roomba, um Raspberry Pi 2, um sensor a laser (RPLIDAR) e uma bateria móvel. O quadro de montagem pode ser feito por impressoras 3D. O sistema de navegação ROS permite fazer um mapa dos quartos e usar i
☠WEEDINATOR☠ Parte 4: Código de geometria de direção diferencial: 3 etapas
☠WEEDINATOR☠ Parte 4: Código de geometria de direção diferencial: Se você tiver tempo para assistir ao vídeo acima, notará que existem alguns ruídos estranhos causados pelos motores na direção travando de vez em quando conforme o WEEDINATOR navega em um 3 ponto de volta. Os motores estão essencialmente bloqueando
☠WEEDINATOR☠ Parte 3: Construção do chassi: 8 etapas (com imagens)
☠WEEDINATOR☠ Parte 3: Construção do chassi: O inverno é a época perfeita para construir máquinas, especialmente quando a soldagem e o corte a plasma estão envolvidos, pois ambos fornecem uma boa quantidade de calor. Se você está se perguntando o que é um cortador de plasma, continue lendo para procedimentos detalhados