Velocímetro GPS Arduino con Ks0108 - 128x64 GLCD (pantalla): 10 pasos (con fotos)

Velocímetro GPS Arduino con Ks0108 - 128x64 GLCD (pantalla): 10 pasos (con fotos)

Tabla de contenido:

Anonim

Quería construir un velocímetro digital para mi coche. No había nada malo con el que ya estaba instalado en mi auto, solo quería tener una gran pantalla LCD que se colocará en una posición más conveniente, justo delante de mí. Y como no quería meterme con las partes electrónicas de mi auto para tocar y leer la señal de "velocidad" directamente desde la computadora del auto, opté por la versión GPS.

Componentes necesarios:

1. Arduino Uno (Nano u otras tablas Arduino también podrían estar bien)

2. Módulo GPS, obtuve este http://www.dfrobot.com/wiki/index.php?title=GPS_Module_With_Enclosure_(SKU:TEL0094) (si el enlace no funciona al hacer clic, simplemente cópielo y péguelo en su barra de direcciones del navegador)

3. LCD gráfico (http: //www.aliexpress.com/item/20PIN-LCD12864-Grap …)

4. trimpot 10k para ajustar el contraste de la pantalla LCD

5. Potenciómetro de 4.7k para ajustar el brillo de la pantalla LCD.

6. Resistencia de 100 ohmios para limitar la corriente para el brillo del LCD

7. Cables, ventosas, velcro autoadhesivo, papel de aluminio de cocina (o similar), soldador, alicates, pistola de pegamento caliente, etc.

Opcionalmente:

8. Cable USB para alimentar la placa Arduino (y LCD) y por separado el módulo GPS

9. 2 x USB (5V) adaptadores de corriente para automóvil (al menos 1A cada uno)

10. Caja de plástico (o podrías construir una)

11. Y, por supuesto, un coche con batería para alimentar todo.

Suministros:

Paso 1:

TENGA EN CUENTA:

Le aconsejaría que primero construya una versión de prototipo, y solo cuando esté probado y en funcionamiento comience la construcción real del gabinete.

Para poder cargar bocetos en la placa Arduino, el módulo GPS deberá ser desconectado, ya que utiliza los mismos pines RX y TX para comunicarse con la placa Arduino como el IDE de Arduino. Mientras el módulo GPS se dejó conectado, los intentos de cargar bocetos fallaron en mi caso.

PD. Como sugirió YukselV, puede usar SoftwareSerial en lugar del "simple" Serial, en caso de que quiera probar otras funciones, lo que significa cargar el boceto varias veces, en este caso no tendrá que desconectar el módulo GPS. Gracias YukselV! (http://www.arduino.cc/en/Reference/SoftwareSerial)

Del mismo modo, la alimentación de la pantalla LCD deberá desconectarse al cargar bocetos en la placa Arduino. Esto se debe a que el pin RESET está conectado a la pantalla LCD, lo que interfiere con el IDE de Arduino. Leí que uno podría simplemente conectar el pin RESET de la pantalla LCD a + 5V en el Arduino (permanentemente), o simplemente desconectar temporalmente el cable RESET mientras se carga el boceto en la placa Arduino. Simplemente desconecté la fuente de alimentación cuando era necesario.

***********************************************************************************

Primero, debido a que mi pedido de LCD tardaría un poco en llegar, comencé probando el módulo GPS usando una pantalla LED.

*********** ACTUALIZACIÓN 31.10.2016 ********************

He adjuntado el boceto.INO para usar con una pantalla LED de 4 dígitos y 7 segmentos

*********** Fin de la ACTUALIZACIÓN 31.10.2016 ********************

Cuando finalmente llegó el LCD, me tomó un tiempo descubrir el cableado correcto para el LCD. Encontré un tutorial en italiano (http: //www.mauroalfieri.it/elettronica/lcd-grafico …) que muestra el cableado (http://www.mauroalfieri.it/wp-content/uploads/2013…). Sin embargo, eso no funcionaba correctamente para mí, así que tuve que cambiar algunas cosas:

- Tuve que cambiar algunos cables alrededor del trimpot de 10k (controlando el contraste del LCD)

- Agregué otro potenciómetro de 4.7 k en serie con una resistencia de 100 ohmios, que me permitirá controlar también el brillo de la pantalla LCD.

EDITAR: Gracias a ibenkos por señalar que el motor de + 5v en mi imagen de cableado original estaba conectado al riel de tierra en la placa de pruebas. Por supuesto, debe estar conectado al riel positivo: se ha subido una imagen actualizada.

Luego quise que la velocidad se mostrara instantáneamente después de arrancar el motor de mi auto y partir. Sin embargo, no quería dejar todo encendido todo el tiempo y el riesgo de que la batería del automóvil se agotara. Por lo tanto, alimentaría la placa Arduino y la pantalla LCD solo cuando arranco el motor, mientras que el módulo GPS se alimenta todo el tiempo, incluso cuando el motor está apagado (de modo que no se necesita "No me importa cuántos segundos para bloquear los satélites de posicionamiento para que los datos requeridos se envíen a Arduino para su procesamiento ").

Sin embargo, depende de usted ubicar los puntos apropiados donde obtener energía de la placa de fusibles.

Usando un adaptador de corriente para automóvil USB obtendría 5V continuos para alimentar el módulo GPS, mientras que el segundo adaptador de alimentación para automóvil USB me daría 5V para alimentar el Arduino y la pantalla LCD solo cuando arranco el motor del automóvil.

Una cosa más a tener en cuenta: utilicé cables con fusibles para conectar los dos adaptadores de alimentación del automóvil, de modo que exploten en caso de cortocircuito, y no otros dispositivos electrónicos del automóvil.

Paso 2:

Aquí estaba probando el cableado de la pantalla LCD; tenga en cuenta los resistores que estaba usando en lugar del trimpot, que no tenía en ese momento.

Paso 3:

Corté un conjunto en el gabinete de plástico (que compré en una tienda local) que permitirá que la pantalla LCD encaje, y luego pegué la LCD en su lugar. Corté un pedazo de lámina de plástico y lo coloqué en la parte posterior de la pantalla LCD, luego agregué un poco de papel de aluminio en la parte superior. También agregué papel de aluminio alrededor de la carcasa de plástico, incluida la cubierta posterior, y conecté todo a tierra. La idea es: tratar de encerrar la placa Arduino dentro de una jaula de Faraday improvisada (http://en.wikipedia.org/wiki/Faraday_cage) para evitar cualquier interferencia de otros dispositivos electrónicos que pueda afectar la funcionalidad de la placa Arduino. Esa es la idea, de todos modos:-) ¿Es esto realmente necesario? No lo sé.

Sin embargo, asegúrese de no estar cortocircuitando ningún contacto ni en la pantalla LCD ni en Arduino.

Etapa 4:

Porque necesitaba dos fuentes de alimentación de 5 V diferentes (una para Arduino y LCD, otra para el módulo GPS) y otro cable que se conectará al potenciómetro que controla el brillo de la pantalla LCD: cuatro cables en total, si consideramos la tierra también - Decidí usar un cable USB, que está convenientemente protegido.

Saqué el conector USB de la placa Arduino (no tenía otro en ese momento, y después de haberlo cargado y probado todo antes), corté otro agujero en la caja de plástico y allí tenía la conexión de alimentación necesaria. Podría usar un conector USB adicional, si cree que necesita cargar bocetos actualizados en la placa Arduino.

O, por supuesto, puede usar otro tipo de conector eléctrico si lo desea. La idea es conectar esos cuatro cables dentro de la caja a la fuente de alimentación adecuada: 5V continuos, motor a 5V, señal de brillo de LCD proveniente del potenciómetro y masa.

Paso 5:

Sucedió que tenía una ventosa de un viejo navegador por satélite, que ya no estaba usando. Esto mantendrá toda la caja en el parabrisas del coche. El módulo GPS se conecta con un velcro autoadhesivo, con un pequeño orificio que permite que los cuatro cables (5v, tierra, TX, RX) se conecten dentro de la caja.

Paso 6:

Y ahí está, el producto final ubicado en el tablero de instrumentos, conectado mediante el cable USB a la fuente de alimentación y el potenciómetro convenientemente ubicado al lado del volante (tenga en cuenta que tengo un coche que conduce a la izquierda, el volante está ubicado, por lo tanto, en el lado derecho del coche)

Y puedes verlo trabajando aquí:

Perdón por el video que entra y sale de foco: estaba usando una cámara compacta, sin opción para un enfoque fijo.

Paso 7:

Ahora para el código …

Primero, necesita descargar dos bibliotecas (en caso de que todavía no las tenga en la carpeta de la biblioteca de su Arduino):

1. OpenGLCD - http: //code.google.com/p/glcd-arduino/downloads/l …

(Puede encontrar más información aquí: http://playground.arduino.cc/Code/GLCDks0108 y aquí

2. TinyGPS -

Descomprima y cópielos en la carpeta de la biblioteca de su Arduino (normalmente C: Archivos de programa (x86) Arduino aries). Si el IDE de Arduino está abierto, debe cerrarlo y volver a abrirlo para permitir que se carguen las nuevas bibliotecas.

Paso 8:

Entonces me pareció muy incómodo generar nuevas fuentes (tan altas como la altura de la pantalla) que se mostrarán en mi LCD. Por lo tanto, lo que hice fue crear mapas de bits (números del 0 al 9 más un espacio en blanco) que se mostrarán en mi LCD.

Después de "instalar" la biblioteca openGLCD, busque el nombre de archivo llamado "glcdMakeBitmap.pde", que normalmente se encuentra aquí

C: Archivos de programa (x86) Arduino aries openGLCD bitmaps utils glcdMakeBitmap

EDITAR - 12 de abril de 2016 !!!!

Se agregó la biblioteca OpenGLCD, que ya tiene los archivos.h (encabezado). Debe copiar y descomprimir donde se encuentra su IDE de Arduino, normalmente C: Archivos de programa (x86) Arduino aries

EDITAR - 12 de abril de 2016 !!!! termina

Para ejecutar este archivo, deberá descargar e instalar una pieza adicional de software libre, llamada Processing, que es muy similar a Arduino IDE.

EDITAR - 14 de marzo de 2016 !!!!

Gracias ab710 por señalar que el uso de algunas versiones más recientes de Procesamiento dará un error al intentar ejecutar el código. Utilice el siguiente enlace para descargar Processing 2.2.1, que en mi caso permite ejecutar correctamente el código.

http: //github.com/processing/processing/releases? …

(http://github.com/processing/processing/releases?after=processing-0230-3.0a3)

Enlace de descarga alternativo:

EDITAR - 14 de marzo de 2016 !!!! termina

Abra "glcdMakeBitmap.pde" en Procesamiento y haga clic en Ejecutar, en la esquina superior izquierda.

El propósito de la aplicación "glcdMakeBitmap.pde" es permitirle "alimentarlo" con archivos de imagen (gif, jpg, bmp, tga, png), y luego se crearán automáticamente algunos archivos.h (encabezados) dentro de los "mapas de bits". "carpeta de la librería openGLCD. Eventualmente, se utilizarán para mostrar sus números (como imágenes) en la pantalla LCD.

He adjuntado un archivo de archivo llamado "numbers.zip" que puede descargar, descomprimir y luego arrastrar cada uno de esos archivos.BMP a la ejecución de "glcdMakeBitmap.pde" para crear los 11 archivos de encabezado (0 a 9, más en blanco). Pero si lo desea, puede diseñar sus propios números, usar diferentes fuentes, guardarlos como BMP u otra extensión de archivo de imagen compatible, y usarlos para crear los archivos de encabezado que se mostrarán en la pantalla LCD.

PD. En caso de que se esté preguntando por qué no cargué los archivos de encabezado (.h) en lugar de los archivos.BMP, y le ahorré la molestia de descargar e instalar el Procesamiento y ejecutar "glcdMakeBitmap.pde": no es suficiente simplemente copiar Los archivos.h en la carpeta "mapas de bits", ya que los archivos con el nombre "allBitmaps.h" también se actualizarán automáticamente (por la aplicación de procesamiento) para referirse a los nuevos archivos. Además, en caso de que no te gusten mis números, ahora sabes cómo crear los tuyos:-)

Paso 9:

Y finalmente el boceto, que no es muy complicado, y debe ser autoexplicativo.

También he adjuntado el boceto.ino para su conveniencia.

********************************************************************

#include // biblioteca matemática para usar para la función redonda

#include "TinyGPS.h" // biblioteca de módulos GPS

#include // biblioteca LCD

TinyGPS gps; // crear un objeto gps

float fLat, fLong; // flota para longitud y latitud; se utilizará para determinar si los datos del GPS están actualizados o no

fix_age largo sin firmar; // devuelve + - latitud / longitud en grados

int digit1, digit2, digit3; // enteros para mantener los tres dígitos que componen la velocidad

int iSpeed; // entero para mantener el valor de velocidad del módulo GPS

configuración del vacío ()

{

Serial.begin (9600); // iniciar la comunicación serial

// inicializa la biblioteca, escribe los píxeles no invertidos en una pantalla clara

GLCD.Init (NON_INVERTED);

}

bucle de vacío ()

{

while (Serial.available ())

{

// datos seriales entrantes de GPS

int c = Serial.read ();

if (gps.encode (c))

{

// procesa la nueva información de gps aquí, en caso de que quieras mostrar más detalles

}

}

gps.f_get_position (& fLat, & fLong, & fix_age); // obtener longitud y latitud, que se usa para encontrar si los datos están actualizados

if (fix_age == TinyGPS:: GPS_INVALID_AGE || fix_age> 2000)

{

// los datos no se actualizaron por algún tiempo, suponga que la conexión GPS se ha perdido

iSpeed ​​= 0;

}

más

{

// La conexión GPS está actualizada, obtenga la información de velocidad y redondéela al valor entero más cercano

iSpeed ​​= round (gps.f_speed_kmph ()); // velocidad en km / h

}

// cuando no se está moviendo, el módulo GPS aún leerá algún valor de "velocidad", no necesariamente cero

// en ese caso asume que el carro no se está moviendo; solo se muestran valores superiores a 2

if (iSpeed ​​== 1) iSpeed ​​= 0;

displaySpeed ​​(iSpeed); // llamar a la función para mostrar la velocidad, dígito a dígito

}

void displaySpeed ​​(int iSpeed)

{

// Matemáticas "simples" para extraer cada valor de dígito

digit1 = iSpeed ​​/ 100;

iSpeed ​​= iSpeed ​​- (digit1 * 100);

digit2 = iSpeed ​​/ 10;

digit3 = iSpeed ​​- (digit2 * 10);

// mostrar el mapa de bits "en blanco" cuando sea necesario, en lugar del número cero

if (digit2 == 0 && digit1 == 0) digit2 = -1; // el dígito 2 está en blanco

if (digit1 == 0) digit1 = -1; // el dígito 1 está en blanco

// llamar a la función para mostrar cada dígito, en su posición requerida

drawDigit (digit1, 0);

drawDigit (digit2, 45);

drawDigit (digit3, 90);

}

void drawDigit (int digit, int pos)

{

interruptor (dígito)

{

caso 0:

GLCD.DrawBitmap (Number0, pos, 0);

descanso;

caso 1:

GLCD.DrawBitmap (Number1, pos, 0);

descanso;

caso 2:

GLCD.DrawBitmap (Number2, pos, 0);

descanso;

caso 3:

GLCD.DrawBitmap (Number3, pos, 0);

descanso;

caso 4:

GLCD.DrawBitmap (Number4, pos, 0);

descanso;

caso 5:

GLCD.DrawBitmap (Number5, pos, 0);

descanso;

caso 6:

GLCD.DrawBitmap (Number6, pos, 0);

descanso;

caso 7:

GLCD.DrawBitmap (Number7, pos, 0);

descanso;

caso 8:

GLCD.DrawBitmap (Number8, pos, 0);

descanso;

caso 9:

GLCD.DrawBitmap (Number9, pos, 0);

descanso;

defecto:

GLCD.DrawBitmap (NumberBlank, pos, 0);

descanso;

}

}

Paso 10:

Si tiene algún comentario, pregunta o idea, por favor hágamelo saber. Y espero que disfrute (tanto como yo) construyendo su propio velocímetro GPS basado en Arduino.

3 personas hicieron este proyecto!

  • Tony9343 lo hizo!

  • DoctorLar lo hizo!

  • DoctorLar lo hizo!

¿Hiciste este proyecto? ¡Compártelo con nosotros!

Recomendaciones

  • Mash Up Arduino Code Samples

  • Prototipo de ornitóptero de código abierto. Arduino accionado y control remoto.

  • Clase de internet de las cosas

  • Concurso de fandom

  • Concurso Arduino 2019

  • Concurso de carpintería

78 discusiones

0

Brown ali

Tip hace 3 meses

Hola a todos, encontré una solución al problema que estaba teniendo, implica el uso de Software Serial y la biblioteca actualizada TinyGPS ++. Pregunta y te lo enviaré por correo electrónico (el código).

0

Brown ali

Pregunta hace 3 meses

Todo mi cableado funciona bien, la pantalla LCD se enciende y muestra cero ect …

Sin embargo, incluso cuando me mudo, solo obtengo 0. He intentado encontrar diferentes ubicaciones debido a una "señal deficiente", pero nada cambió. ¿Hay algo que ver con la potencia para LCD y GPS que vienen del pin 5V de la placa Arduino o no? ¿O tiene que ver con definir el RX / TX en el código?

3 respuestas 0

Studvio Brown ali

Respuesta hace 3 meses

Hola, normalmente no debería ser un problema alimentar tanto la pantalla LCD como el módulo GPS desde el pin de 5 V en el Arduino. Sin embargo, ¿comprobó si está obteniendo 5 V en ese pin y si no hay una caída en el voltaje, dependiendo de cómo alimente su placa Arduino? ¿Por qué no intentar encender el GPS directamente desde el adaptador de 5V y ver si hay suerte? Eso, por supuesto, suponiendo que el cableado sea correcto, que el módulo GPS esté funcionando y que está utilizando las versiones anteriores del software como se explica en mi publicación original anterior.

En mi caso, el GPS se alimenta todo el tiempo, directamente desde el adaptador de alimentación de 5V, mientras que el Arduino y la LCD solo se encienden cuando arranco mi motor desde un adaptador de alimentación de 5V adicional.

0

Brown ali Studvio

Responder hace 3 meses.

Corrección La luz PPS no está parpadeando, ¿podría tratarse de un problema de señal?

0

Brown ali Studvio

Responder hace 3 meses.

He ejecutado el GPS con serial y TinyGPS ++ y estoy obteniendo datos precisos y correctos. Estoy bastante seguro de que el cableado es correcto, ya que la pantalla LCD funciona y el GPS es bastante simple. Cuando utilicé el software serial definí el RX y el TX, ¿necesito hacer esto? Y si el problema de la energía me afectara, no obtendré un valor distinto de 0 en la pantalla LCD (las luces GPS para encender y PPS están parpadeando).

0

SébastienD7

Hace 10 meses en el paso 1

Hola, ¿Dónde puedo descargar su croquis para usar con una pantalla LED de 4 dígitos de 7 segmentos?

Gracias.

7 respuestas 0

Studvio SébastienD7

Responder hace 10 meses.

Hola, lo puede encontrar al final del Paso 1, el archivo speedometerLEDdisplay.ino

0

SébastienD10 Studvio

Responder hace 10 meses.

Hola, no tuve éxito, solo veo "0" en mi dígito …

¿Qué está mal en mi diagrama?

RX -> TX TX -> RX

Gps 3.3V (en Arduino)

El led RX está parpadeando, pero no TX.

Incluso probé con resistencias de 10 kohms y 4,7 kohms en RX / Ground (vi en la web) pero no tuve éxito …

Yo uso un nano

Alguna idea ? Gracias.

0

Studvio SébastienD10

Responder hace 10 meses.

No intenté ejecutar esto en un Nano, así que no estoy seguro de que sea una conexión física incorrecta o de la placa real que puede no ser compatible con ella. Además, cuando escribí esto, utilicé la versión IDE disponible en ese entonces. No me sorprendería si el código antiguo no funcionara con las versiones de software más recientes. ¿El código se compila correctamente?

0

SébastienD10 Studvio

Responder hace 7 meses.

Hola, Finalmente tuve éxito con él … El módulo GPS estaba muerto y ahora lo conecto a 5V (probablemente me equivoqué con la conexión de 3V). Funciona muy bien ahora. Tengo preguntas:

¿Para qué es el "tiempo de retardo"?

-¿Qué pasa si cambio el valor? (+ o -)

Utilizo la pantalla de 3 dígitos y quiero mostrar la velocidad con el punto decimal con 2 números (por ejemplo, 74,5 km / h), no necesito un dígito para "100".

Creo que tengo que cambiar "Velocidad" pero, ¿cómo mostrar el punto decimal entre el segundo y el tercer dígito?

Gracias.

0

Studvio SébastienD10

Responder hace 7 meses.

Hola, no veo ninguna referencia al "tiempo de retardo" en mi código. Algún otro usuario (mak2orcullo_electronics) propuso algunos cambios para agregar más funcionalidades (SmartDelay). ¿Eso es de lo que estas hablando?

Si desea mostrar puntos decimales, debe declarar "iSpeed" como Flotante en lugar de Int, y eliminar la línea donde el valor que obtiene del módulo GPS se redondea (iSpeed ​​= round (gps.f_speed_kmph ());). Luego, para mostrar ese número con el punto decimal, debe diseñar imágenes de mapa de bits adicionales para que se muestren cuando sea necesario. El código también debe cambiarse para mostrar esas nuevas imágenes. Pero me temo que tendrá que escribir ese código usted mismo, ya que no es parte de mi proyecto. Gracias.

0

SébastienD7 Studvio

Responder hace 4 meses.

Hola, ¿Alguna posibilidad de cambiar el GPS de 1Hz a 10Hz?

Saludos.

0

SébastienD10 SébastienD7

Responder hace 10 meses.

Si lo hace

Encontré errores con el código, "//" antes de una instrucción, los borré, pero aún muestra 0.

Lo comprobaré más tarde.

Saludos.

0

alibrown987

Pregunta hace 7 meses

Hola, estoy planeando crear este proyecto exacto. ¿Hay algún tipo de contacto con usted para más preguntas, por ejemplo, la pantalla LCD ya no está disponible, funcionará?

2 respuestas 0

Studvio alibrown987

Respuesta hace 7 meses

Hola, la pantalla de su enlace probablemente también funcione, aunque estoy seguro de que necesitará usar una biblioteca diferente para que funcione, y posiblemente se necesitarán algunos cambios leves en el código. La pantalla que utilicé aún se puede encontrar en Aliexpress, si prefiere comprar desde allí, por ejemplo, http://www.aliexpress.com/item/2004A-2004A-LCD-LCD-screen-LCM-5V-blue-white /32515234264.html?spm=2114.search0104.3.9.4de373a2k1DpaI&ws_ab_test=searchweb0_0,searchweb201602_2_10065_10068_318_319_10696_450_10084_10083_10618_452_535_534_10304_533_10307_10820_532_10821_10302_204_10059_10884_10887_100031_320_10103_448_449,searchweb201603_60,ppcSwitch_0&algo_expid=3f12c03f-ea2c-40b9-83a4-d5cc94a1f89a-1&algo_pvid=3f12c03f-ea2c-40b9-83a4-d5cc94a1f89a

0

alibrown987 Studvio

Responder hace 7 meses.

Muchas gracias por su respuesta, ¡ordenaré esa pantalla! He creado los mapas de bits en proceso, y ellos han creado los archivos en la carpeta OpenGLCD. ¿Qué más debo hacer antes de que lleguen las piezas?

0

Vini_e

Pregunta hace 10 meses

Hola, Quiero recopilar la velocidad cada segundo y guardarla para poder acceder a ella más tarde en la computadora portátil y verificar los datos. No hay necesidad de una pantalla.

Se necesitan algunos consejos / ayuda.

Buen trabajo por cierto.

1 respuesta 0

Studvio Vini_e

Responder hace 10 meses.

Hola, en ese caso, tendría que agregar la opción de guardar los datos, una opción es una tarjeta SD. A continuación, deberá eliminar el código para mostrar los datos y agregar el código para guardarlo en su lugar. La primera parte es bastante simple, la segunda tarea no es parte de este proyecto y algo que no me interesa (en este momento), por lo que tendrá que escribirlo usted mismo. Sin embargo, hay muchos tutoriales sobre esto (escribir datos en tarjetas SD).

0

Optimat

Hace 12 meses

Bien explicado Studvio. Esto seguramente me ayudará en mi proyecto LED actual.

0

ESSEF

Pregunta hace 12 meses en el paso 1

Hola

¿Tiene diagrama de circuito para la versión LED por favor?

Gracias

Essef