Tabla de contenido:

☠WEEDINATOR☠ Parte 2: Navegación por satélite: 7 pasos (con imágenes)
☠WEEDINATOR☠ Parte 2: Navegación por satélite: 7 pasos (con imágenes)

Video: ☠WEEDINATOR☠ Parte 2: Navegación por satélite: 7 pasos (con imágenes)

Video: ☠WEEDINATOR☠ Parte 2: Navegación por satélite: 7 pasos (con imágenes)
Video: Голубая стрела (1958) фильм 2024, Noviembre
Anonim
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite
☠WEEDINATOR☠ Parte 2: Navegación por satélite

¡Nace el sistema de navegación Weedinator!

Un robot agrícola itinerante que se puede controlar con un teléfono inteligente.

… Y en lugar de simplemente pasar por el proceso regular de cómo se arma, pensé en tratar de explicar cómo funciona realmente, obviamente no TODO, sino las partes más importantes e interesantes. Por favor, disculpe el juego de palabras, pero es la forma en que fluyen los datos entre los módulos individuales lo que encuentro interesante y desglosado en su denominador más bajo, terminamos con "bits" reales: ceros y unos. Si alguna vez ha estado confundido acerca de bits, bytes, caracteres y cadenas, entonces, ¿puede que ahora sea el momento de dejar de confundirse? También intentaré desconfundir un concepto ligeramente abstracto llamado "Cancelación de errores".

El sistema en sí cuenta con:

  • GPS / GNSS: Ublox C94 M8M (móvil y base)
  • Brújula digital 9DOF Razor IMU MO
  • Fona 800H 2G GPRS celular
  • Pantalla TFT de 2,2"
  • Arduino Due 'Maestro'
  • Varios 'esclavos' de Arduino.

Curiosamente, muchos de los navegadores por satélite no tienen una brújula digital, lo que significa que si está parado y perdido, debe caminar o conducir en cualquier dirección aleatoria antes de que el dispositivo pueda mostrarle la dirección correcta desde los satélites. Si te pierdes en una jungla espesa o en un aparcamiento subterráneo, ¡estás lleno!

Paso 1: cómo funciona

Cómo funciona
Cómo funciona

En la actualidad, un simple par de coordenadas se carga desde un teléfono inteligente o computadora, que luego son descargadas por Weedinator. A continuación, se interpretan en un rumbo en grados y una distancia a recorrer en mm.

El fona GPRS se utiliza para acceder a una base de datos en línea a través de la red celular 2G y recibir y transmitir las coordenadas al Arduino Due a través de un Arduino Nano. El Due es el maestro y controla una serie de otros Arduinos como esclavos a través del I2C y los buses seriales. El Due puede interactuar con datos en vivo de Ublox y Razor y mostrar un encabezado calculado por uno de sus esclavos Arduino.

El rastreador satelital Ublox es particularmente inteligente ya que utiliza la cancelación de errores para obtener soluciones muy precisas: una desviación total nominal final de aproximadamente 40 mm. El módulo está compuesto por un par idéntico, uno de los cuales, el 'rover', se mueve con el Weedinator, y el otro, la 'base', se fija a un poste en algún lugar al aire libre. La cancelación de errores se logra porque la base puede lograr una solución realmente precisa mediante el uso de una gran cantidad de muestras a lo largo del tiempo. Luego, estas muestras se promedian para compensar los cambios en las condiciones atmosféricas. Si el dispositivo se estuviera moviendo, obviamente no podría obtener ningún tipo de promedio y estaría a merced total de un entorno cambiante. Sin embargo, si un dispositivo estático y en movimiento funcionan juntos, siempre que puedan comunicarse entre sí, pueden beneficiarse de ambos. En un momento dado, la unidad base todavía tiene un error, pero también tiene una corrección súper precisa calculada previamente para que pueda calcular el error real restando un conjunto de coordenadas de otro. Luego envía el error calculado al móvil a través de un enlace de radio, que luego agrega el error a sus propias coordenadas y listo, ¡tenemos la cancelación de errores! En términos prácticos, la cancelación de errores marca la diferencia entre una desviación total de 3 metros y 40 mm.

El sistema completo parece complicado, pero en realidad es bastante fácil de construir, ya sea suelto en una superficie no conductora o usando la PCB que diseñé, que permite que todos los módulos se atornillen de forma segura. El desarrollo futuro está integrado en la PCB, lo que permite incorporar una amplia gama de Arduinos para controlar los motores de dirección, movimiento de avance y una máquina CNC incorporada. La navegación también será asistida por al menos un sistema de reconocimiento de objetos que utiliza cámaras para detectar objetos de colores, por ejemplo, pelotas de golf fluorescentes, que se colocan cuidadosamente en una especie de cuadrícula. ¡Cuidado con este espacio!

Paso 2: componentes

Componentes
Componentes
Componentes
Componentes
Componentes
Componentes
  • Ublox C94 M8M (Rover y Base) x 2 de
  • Brújula 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 archivos Gerber adjuntos) x 2 de
  • 1206 resistencias SMD de cero ohmios x 12 de
  • 1206 LED x 24 de

El archivo PCB se abre con el software 'Design Spark'.

Paso 3: cableado de los módulos

Cableado de los módulos
Cableado de los módulos

Esta es la parte fácil, especialmente fácil con la PCB que hice, simplemente siga el diagrama de arriba. Es necesario tener cuidado para evitar cablear módulos de 3v a 5v, incluso en las líneas serie e I2C.

Paso 4: Código

Código
Código

La mayor parte del código se ocupa de hacer que los datos se muevan por el sistema de manera ordenada y, con bastante frecuencia, existe la necesidad de convertir formatos de datos de enteros a flotantes a cadenas y caracteres, lo que puede ser muy confuso. El protocolo 'Serial' solo manejará caracteres y mientras que el I2El protocolo C maneja enteros muy pequeños, me pareció mejor convertirlos a caracteres y luego convertirlos de nuevo a enteros en el otro extremo de la línea de transmisión.

El controlador Weedinator es básicamente un sistema de 8 bits con muchos Arduinos individuales, o 'MCU's. Cuando 8 bits se describen como ceros y unos binarios reales, puede verse así: B01100101, que sería 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 binario 0 1 1 0 0 1 0 1

= 101

Y el valor máximo posible es 255…. Entonces, el 'byte' entero máximo que podemos transmitir a través de I2C es 255, lo cual es muy limitante.

En un Arduino podemos transmitir hasta 32 caracteres ASCII, o bytes, a la vez usando I2C, que es mucho más útil, y el conjunto de caracteres incluye números, letras y caracteres de control en formato de 7 bits como se muestra a continuación:

Imagen
Imagen

Afortunadamente, el compilador de Arduino hace todo el trabajo de conversión de carácter a binario en segundo plano, pero aún espera el tipo correcto de carácter para la transmisión de datos y no acepta 'Cadenas'.

Ahora es cuando las cosas se pueden volver confusas. Los caracteres se pueden expresar como caracteres individuales usando la definición de char o como una matriz unidimensional de 20 caracteres usando char [20]. Una cadena Arduino es muy similar a una matriz de caracteres y es literalmente una cadena de caracteres que el cerebro humano suele interpretar como "palabras".

// Construye el personaje 'distanceCharacter':

Iniciador de cadena = ""; distanciaString = iniciador + distanciaString; int n = distanciaString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

El código anterior puede convertir una larga cadena de caracteres en una matriz de caracteres que luego se puede transmitir a través de I2C o serial.

En el otro extremo de la línea de transmisión, los datos se pueden volver a convertir en una cadena usando el siguiente código:

distanciaString = distanciaString + c; // cadena = cadena + carácter

Una matriz de caracteres no se puede convertir directamente a un número entero y primero tiene que ir al formato de cadena, pero el siguiente código se convertirá de una cadena a un entero:

resultado int = (cadenaDeDistancia).toInt ();

int distanceMetres = resultado;

Ahora tenemos un número entero que podemos usar para hacer cálculos. Los flotantes (números con un punto decimal) deben convertirse a números enteros en la etapa de transmisión y luego dividirse por 100 para dos lugares decimales, por ejemplo:

distancia flotanteMetres = distanciaMm / 1000;

Por último, se puede crear una cadena a partir de una mezcla de caracteres y números enteros, por ejemplo:

// Aquí es donde los datos se compilan en un carácter:

dataString = iniciador + "BEAR" + zbearing + "DIST" + zdistance; // Limitado a 32 caracteres // Cadena = cadena + caracteres + entero + caracteres + entero.

El resto del código es material estándar de Arduino que se puede encontrar en los diversos ejemplos de las bibliotecas de Arduino. Consulte el ejemplo de 'examples >>>> Strings' y los ejemplos de la biblioteca 'wire'.

Aquí está todo el proceso para transmitir y recibir un flotador:

Convertir Float ➜ Integer ➜ String ➜ Character array….. luego TRANSMIT array de caracteres desde Master ➜➜

➜➜ RECIBE caracteres individuales en esclavo…. luego convierta Carácter ➜ Cadena ➜ Entero ➜ Flotante

Paso 5: base de datos y página web

Base de datos y página web
Base de datos y página web
Base de datos y página web
Base de datos y página web

Arriba se muestra la estructura de la base de datos y se adjuntan los archivos de código php y html. Los nombres de usuario, los nombres de las bases de datos, los nombres de las tablas y las contraseñas se eliminan por motivos de seguridad.

Paso 6: pruebas de navegación

Pruebas de navegación
Pruebas de navegación
Pruebas de navegación
Pruebas de navegación
Pruebas de navegación
Pruebas de navegación

Me las arreglé para conectar un registrador de datos a la placa de control de Weedinator a través de I2C y tener una idea del rendimiento de posicionamiento del satélite Ublox M8M:

En el 'Arranque en frío', que se muestra en el gráfico verde, el módulo comenzó con muchos errores, bastante similares a un GPS 'normal', y gradualmente el error se redujo hasta que, después de aproximadamente 2 horas, obtuvo una corrección RTK entre el rover y base (que se muestra como la cruz roja). Durante ese período de 2 horas, el módulo base está construyendo y actualizando continuamente un valor promedio de latitud y longitud y después del intervalo de tiempo preprogramado decide que tiene una buena solución. Los siguientes 2 gráficos muestran el comportamiento después de un 'Hot start 'donde el módulo base ya ha calculado un buen promedio. El gráfico superior tiene más de un período de 200 minutos y, en ocasiones, la corrección se pierde y el móvil envía un mensaje NMEA al Weedinator de que la corrección se ha vuelto temporalmente poco confiable.

El gráfico azul inferior es un 'acercamiento' en el cuadro rojo en el gráfico superior y muestra una buena instantánea representativa del rendimiento de Ublox, con una desviación total de 40 mm, que es más que suficiente para guiar al Weedinator a su ubicación., pero posiblemente no lo suficientemente bueno para cultivar el suelo alrededor de plantas individuales?

El tercer gráfico muestra los datos recopilados con el Rover y la Base a 100 metros de distancia. No se detectó ningún error adicional; la distancia de separación no influyó en la precisión.

Paso 7: final

Recomendado: