Medición distancia (y más) dispositivo con Arduino y GPS (5 / 5 paso)

Paso 5: Programación de Arduino

1. LCD Driver

En primer lugar, busqué una simple y pequeña biblioteca para el LCD, Nokia 5110. Había unas pocas bibliotecas diferentes para este LCD: Adafruit, Sparkfuny Karlsen Henning' s. Entre estas bibliotecas, elegí Henning Karlsen porque necesitaba sólo la visualización de texto simple con un par de tamaños de fuente diferente. Karlsen Henning tiene separado biblioteca de gráficos . Me gustaría agradecer a Henning por su compartir su buen trabajo en la biblioteca. Biblioteca de Henning con 3 tamaños de fuente diferente: SmallFont (texto y número, 6 × 8), MediumNumber (número, 12 × 16) y BigNumber (número solamente, 14 x 24). El único inconveniente de esta biblioteca es que las fuentes medianas y grandes no admiten textos pero solamente números. Sin embargo necesitaría sólo números para mostrar con fuentes más grandes, esta limitación fue no hay problema conmigo.

2. cálculo distancia entre dos puntos

Hay cantidad de sitios web que muestra cómo calcular la distancia entre dos lugares de latitudes y longitudes. Scripts de Movable Type muestra diferentes cálculos de distancia, rodamiento y otras conversiones útiles usando fórmula de Haversine y BlueMM publican la fórmula de Excel para calcular la distancia que es básicamente la misma forma que Haversine.

El cálculo es bastante sencillo pero he encontrado que había un problema: Arduino (Atmega328p) no puede manejar más de 6-7 dígitos decimales que es muy importante en el cálculo trigonométrico para corta distancia.

Página de referencia de Arduino dice "flotadores tienen sólo 6-7 dígitos decimales de precisión. Eso significa que el número total de dígitos, no el número a la derecha del punto decimal. A diferencia de otras plataformas, donde se obtiene mayor precisión utilizando un doble (por ejemplo hasta 15 dígitos), en el Arduino, doble es el mismo tamaño que flotan".

Déjeme darle un ejemplo. Supongamos que partimos de una posición (lat: 40.00, largo: 80) a la posición B (lat: 40.01, largo: 80.00). Es decir, nos trasladamos a 0,01 grados de latitud solamente. Si calculas la distancia utilizando la fórmula de Haversine en su PC, obtendrá unos 1.111,9 m. Sin embargo, el Arduino lo calcula como m 3.110,8. Gran error! Lo más interesante es que incluso si reduce la diferencia de latitud a 0.001 o 0,0001 grados, obtendrá los mismos resultados, m 3.110,8. Así que investigar más exactamente lo que causa este error. Por supuesto sé que el culpable es la limitación de la precisión del flotador como dicho anteriormente. Pero quería saber que parte del cálculo por Arduino provocar este error grande. En la fórmula del Haversine, hay COS, utilizar funciones de pecado y ACOS. Había probado unos diferentes cálculos usando estas funciones y el cálculo de COS y funciones pecado afectan mínimo pero el problema era el ACOS. Si se calcula la fórmula en su PC sólo dentro del soporte ACOS, obtendrá 0.9999999848. ¿Ven mi punto? Decimales por debajo de 6 º en función ACOS es realmente importante para el cálculo de la diferencia angular de pequeña distancia, pero desafortunadamente el Arduino no puede manejar esto. No sólo para distancia pequeña pero aún relativamente larga distancia (digamos más de 1 grado por ejemplo) hay error entre los resultados en el PC y Arduino.

Bien, así que comencé a pensar en cómo evitar el cálculo de la función trigonométrica cuando sobre 6 decimales son importantes. Y encontré una solución! En lugar de calcular la diferencia angular entre dos posiciones y luego calcular la distancia multiplicando el radio de la tierra media, cálculo de una relación de ángulo entre dos posiciones (latitud y longitud por separado) más de 360 grados y divide la circunferencia de la tierra por esta relación. En otras palabras, mantener los números grandes al cálculo. Tipo de flotador de Arduino tiene una limitación en los pequeños lugares decimales, pero puede manejar números relativamente grandes.

Aquí está mi fórmula:

La circunferencia media de la tierra es 2 x 6.371.000 m x π = m 40,030,170

ΔD (lat) = 40,030,170 x ΔΘ (lat) / 360 (suponiendo que ΔΘ es pequeño)

ΔD(Long) = 40,030,170 x ΔΘ(long) x cosΘm / 360 (Θm: significa latitud entre dos posiciones)

Ahora, la distancia es √ [Δd (lat) ^ 2 Δd (largo) ^ 2]

He probado este método por medición de distancia de la casa a mi trabajo y funcionó bien. En primer lugar, tengo las coordenadas de mi casa y mi trabajo y luego calcula la distancia por método de Haversine y mi fórmula que se muestra arriba. Hay alguna diferencia en los resultados pero descartable.

Sketch de Arduino está conectado. La biblioteca LCD puede ser descargada aquí.

Gracias por leer mi Instructable. Espero que este alguien útil.

Artículos Relacionados

Medición de la velocidad del sonido con Arduino microcontrolador y un sensor ultrasónico

Medición de la velocidad del sonido con Arduino microcontrolador y un sensor ultrasónico

Mi hija de 6 años, Samatha, muestra cómo medir la velocidad del sonido en el aire con el microcontrolador de Arduino Uno y sensor ultrasónico.Creo que esto es un buen proyecto para que los niños quedan expuestos a la ciencia, ingeniería y matemáticas
Medida de la distancia del LCD con Arduino

Medida de la distancia del LCD con Arduino

Y después de la publicación de algunos tutoriales robóticas, decidió moverse en más detalle acerca de los sensores. Para empezar de con elegir un sensor de ultrasonidos y un Arduino como el microcontrolador.Este Instructable es puramente thosewho son
IPhone Learing mando a distancia Universal con Arduino

IPhone Learing mando a distancia Universal con Arduino

Hola y Bienvenidos a mi primer Instructable.No sé ustedes, pero nunca puedo encontrar el control remoto para mi TV. Siempre parece desaparecer cuando lo necesito y luego sólo aparece días más tarde como cuña dentro del sofá por uno de los niños. Una
Mando a distancia Robot con Arduino

Mando a distancia Robot con Arduino

L293D es un doble motor driver puente H circuito integrado (IC). Controladores de motor actúan como amplificadores de corriente ya que llevan un control de poca intensidad de señal y proporcionan una señal de corriente más alta. Esta señal de corrien
BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

En los pasos siguientes, usted hacer un DIY "TV" con el código para un smart remote y realmente vídeos y posiblemente incluso conectar el mando a distancia inteligente a la placa de base real.Materiales:Espejo de papelEstabilizador sólido y no f
ESP8266 y Visuino: mando a distancia WiFi Smart coche Robot con Wii Nunchuck

ESP8266 y Visuino: mando a distancia WiFi Smart coche Robot con Wii Nunchuck

Que coche elegante se establece cuando se combinan con Los módulos de controladores Motor L298N, ofrecen una de las maneras más fáciles de fabricar coches robot. Ya hice un Instructable sobre cómo puede controlar coche Smart con Arduino y Joystick. S
Agregar un adaptador de CA a un dispositivo con pilas

Agregar un adaptador de CA a un dispositivo con pilas

con un nuevo bebé, estamos adquiriendo un asombroso número de dispositivos con pilas, asientos inflables, columpios, puentes de la actividad, móviles,...--y quema a través de un número aún más asombroso de las baterías. Ahora sé por qué Costco vende
Cómo hacer un mando a distancia controlado por una mano robótica con Arduino

Cómo hacer un mando a distancia controlado por una mano robótica con Arduino

Este es mi proyecto escolar para 5 º año de secundaria (yo soy italiana, tenemos 5 años de secundaria).Consiste en una mano artificial controlada por un guante con sensores de flexión. La mano artificial reproduce los movimientos de la mano con el gu
BRICOLAJE artesanal hexápodo con arduino (Hexdrake)

BRICOLAJE artesanal hexápodo con arduino (Hexdrake)

Hola, soy David y en este instructable te voy a mostrar cómo hice este hexápodo cuyo nombre es Hexdrake.Desde los 16 me interesé en electrónica y más tarde en robótica. Después de conseguir algún nivel y programación con arduino que decidí construir
Radio manía de AtoZ de RC + DIY con ARDUINO

Radio manía de AtoZ de RC + DIY con ARDUINO

Wikipedia define vehículo RC comoUn vehículo de control remoto es cualquier vehículo que es controlado remotamente por un medio que no restringe su movimiento con un origen externo al dispositivo. A menudo se trata de un dispositivo de control de rad
Cómo medida actual de AC usando el Sensor de efecto Hall con Arduino u otros microcontroladores comunes

Cómo medida actual de AC usando el Sensor de efecto Hall con Arduino u otros microcontroladores comunes

Un nuevo enfoque más simple consulte aquíObjetivo: Este Instructable muestra cómo hacer una caja de interfaz que, al empalmar un cable de extensión, permite a los microcontroladores comunes como Arduino a medida AC actual como una señal de voltaje DC
Uber domótica con Arduino y Pi

Uber domótica con Arduino y Pi

[EDITAR] He creado un foro para colaborar en el código de puerta de enlace.http://homeautomation.proboards.com/Board/2/openha...Hace unos años me convertí en propietario de un perro por primera vez. Me gustaba salir de Cody en la perrera solo todo el
Controles de lectura/emular con Arduino y frambuesa Pi

Controles de lectura/emular con Arduino y frambuesa Pi

Mandos a distancia están en todas partes. Son la interfaz a su televisores, sistemas de música y qué no. Probablemente tienes unos cuantos de repuesto ahí, devastada en la desaparición de su mejor. Animarlos y les ponga en uso! (Skynet aprueba...)Aqu
Sistema domótico con Arduino y GSM SIM900 módulo

Sistema domótico con Arduino y GSM SIM900 módulo

¡Hola! Ya casi he terminado mis estudios en la Facultad de ingeniería, tuve que hacer un proyecto de graduación y mi idea era hacer algo asombroso (sé que es muy gracioso: D) para mostrar a todos que soy una máquina prototipo buena y yo puedo convert