Tabla de contenido:
- Paso 1: cómo funciona
- Paso 2: componentes
- Paso 3: cableado de los módulos
- Paso 4: Código
- Paso 5: base de datos y página web
- Paso 6: pruebas de navegación
- Paso 7: final
Video: ☠WEEDINATOR☠ Parte 2: Navegación por satélite: 7 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:44
¡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
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
- 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
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
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:
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
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
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:
Navegación por voz Raspberry Pi para ayudar a personas ciegas: 7 pasos (con imágenes)
Navegación por voz Raspberry Pi para ayudar a personas ciegas: Hola En este instructivo, veremos cómo una frambuesa pi puede ayudar a las personas ciegas usando la instrucción de voz definida por el usuario. Aquí, con la ayuda de la entrada del sensor ultrasónico para medir la distancia que podemos guiar por voz a las personas ciegas a seguir
Dispositivo ultrasónico para mejorar la navegación de personas con discapacidad visual: 4 pasos (con imágenes)
Dispositivo ultrasónico para mejorar la navegación de las personas con discapacidad visual: Nuestro corazón está con los desfavorecidos mientras usamos nuestro talento para mejorar la tecnología y las soluciones de investigación para mejorar las vidas de los que sufren. Este proyecto fue creado exclusivamente para ese propósito. Este guante electrónico utiliza detección ultrasónica para mejorar
Sputnik 1 también conocido como el primer satélite puesto en órbita por la Unión Soviética, en 1957: 5 pasos (con imágenes)
Sputnik 1 también conocido como el primer satélite puesto en órbita por la Unión Soviética, en 1957: siempre me ha fascinado la historia del Sputnik 1, porque ha desencadenado la carrera espacial. El 4 de octubre de 2017, celebramos el 60 aniversario del lanzamiento de este satélite ruso, que hizo historia, porque fue el primero
Roomblock: una plataforma para aprender la navegación ROS con Roomba, Raspberry Pi y RPLIDAR: 9 pasos (con imágenes)
Roomblock: una plataforma para aprender la navegación ROS con Roomba, Raspberry Pi y RPLIDAR: ¿Qué es esto? &Quot; Roomblock " es una plataforma de robot compuesta por un Roomba, una Raspberry Pi 2, un sensor láser (RPLIDAR) y una batería móvil. El marco de montaje puede fabricarse con impresoras 3D. El sistema de navegación ROS permite hacer un mapa de habitaciones y utilizar i
Cómo reemplazar la batería en un TomTom Go! 510 Dispositivo de navegación por satélite: 15 pasos
Cómo reemplazar la batería en un TomTom Go! 510 Dispositivo de navegación por satélite: hace 2 años, ¡gastaste cientos en un nuevo y brillante TomTom GO! y tú y has compartido muchos viajes felices por todo el país. La voz suave del operador nunca grita, ni regaña cuando te pierdes los giros o no escuchas lo que tenían que hacer