Los velocímetros se utilizan para medir la velocidad de desplazamiento de un vehículo. Anteriormente usamos el sensor de infrarrojos y el sensor de pasillo para construir un velocímetro analógico y un velocímetro digital, respectivamente. Hoy usaremos GPS para medir la velocidad de un vehículo en movimiento. Los velocímetros GPS son más precisos que los velocímetros estándar porque pueden localizar continuamente el vehículo y calcular la velocidad. La tecnología GPS se usa ampliamente en teléfonos inteligentes y vehículos para alertas de navegación y tráfico.

En este proyecto, construiremos un velocímetro GPS Arduino utilizando un módulo GPS NEO6M con una pantalla OLED. 

Materiales usados

  • Arduino Nano
  • Módulo GPS NEO6M
  • Pantalla OLED I2C de 1,3 pulgadas
  • Tablero de circuitos
  • Conexión de puentes

Módulo GPS NEO6M

Aquí estamos usando el módulo GPS NEO6M. El módulo GPS NEO-6M es un receptor GPS popular con una antena de cerámica incorporada, que proporciona una sólida capacidad de búsqueda de satélites. Este receptor tiene la capacidad de detectar ubicaciones y rastrear hasta 22 satélites e identificar ubicaciones en cualquier parte del mundo. Con el indicador de señal a bordo, podemos monitorear el estado de la red del módulo. Tiene una batería de respaldo de datos para que el módulo pueda guardar los datos cuando la energía principal se apaga accidentalmente.

El corazón central dentro del módulo receptor GPS es el chip GPS NEO-6M de u-blox. Puede rastrear hasta 22 satélites en 50 canales y tiene un nivel de sensibilidad muy impresionante que es de -161 dBm. Este motor de posicionamiento u-blox 6 de 50 canales cuenta con un tiempo hasta la primera reparación (TTFF) de menos de 1 segundo. Este módulo admite la velocidad en baudios de 4800-230400 bps y tiene la velocidad en baudios predeterminada de 9600.

Características: 

  • Voltaje de funcionamiento: (2.7-3.6) V DC
  • Corriente de funcionamiento: 67 mA
  • Tasa de baudios: 4800-230400 bps (9600 predeterminado)
  • Protocolo de comunicación: NEMA
  • Interfaz: UART
  • Antena externa y EEPROM incorporada.

Pinout del módulo GPS:

  • VCC:  pin de voltaje de entrada del módulo
  • GND:  pin de tierra
  • RX, TX:  pines de comunicación UART con microcontrolador

Pantalla OLED I2C de 1.3 pulgadas

El término OLED significa “ diodo emisor de luz orgánica”,  utiliza la misma tecnología que se utiliza en la mayoría de nuestros televisores pero tiene menos píxeles en comparación con ellos. Es realmente divertido tener estos módulos de pantalla de aspecto atractivo para conectarse con Arduino, ya que hará que nuestros proyectos se vean geniales. Hemos cubierto un artículo completo sobre pantallas OLED y sus tipos aquí . Aquí, estamos usando una  pantalla OLED monocromática de 4 pines SH1106 OLED de 1.28 ” . Esta pantalla solo puede funcionar con el modo I2C.

Especificaciones técnicas: 

  • Controlador IC: SH1106
  • Voltaje de entrada: 3.3V-5V DC
  • Resolución: 128×64
  • Interfaz: I2C
  • Consumo de corriente: 8 mA
  • Color de píxel: azul
  • Ángulo de visión:> 160 grados

Descripción del Pin:

VCC: fuente de alimentación de entrada 3.3-5V DC

GND: pin de referencia de tierra

Programación de Arduino para el velocímetro OLED de Arduino

En primer lugar, incluya todas las bibliotecas. Aquí la biblioteca TinyGPS ++. H se usa para obtener las coordenadas GPS usando el módulo receptor GPS y Adafruit_SH1106.h se usa para OLED.

#include <TinyGPS ++. h> 
#include <SoftwareSerial.h> 
#include <Wire.h> 
#include <Adafruit_SH1106.h>

Luego, se define la dirección OLED I2C, que puede ser OX3C o OX3D, aquí es OX3C en mi caso. Además, se debe definir el pin de reinicio de la pantalla. En mi caso, se define como -1, ya que la pantalla comparte el pin Reset de Arduino.

#define OLED_ADDRESS 0x3C 
#define OLED_RESET -1 
pantalla Adafruit_SH1106 (OLED_RESET);

A continuación, los objetos para TinyGPSPlus y la clase Softwareserial se definen como se muestra a continuación. La clase de serie de software necesita el pin Arduino no. para la comunicación en serie, que se define aquí como 2 y 3.

int RX = 2, TX = 3; 
TinyGPSPlus gps; 
SoftwareSerial gpssoft (RX, TX);

Dentro de setup () , la inicialización se realiza para la comunicación serial y OLED. La velocidad en baudios predeterminada para la comunicación en serie del software se define como 9600. Aquí SH1106_SWITCHCAPVCC se usa para generar voltaje de pantalla a partir de 3.3 V internamente y la función display.begin se usa para inicializar la pantalla.

configuración vacía () 
{ 
  Serial.begin (9600); 
  gpssoft.begin (9600); 
  display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); 
  display.clearDisplay (); 
}

Dentro del bucle while true, los datos en serie recibidos se validan, si se reciben señales GPS válidas, se llama a displayspeed () para mostrar el valor de velocidad en OLED.

while (gpssoft.available ()> 0) 
    if (gps.encode (gpssoft.read ())) 
      displayspeed ();

Dentro de la función displayspeed () , los datos de velocidad del módulo GPS se verifican usando la función gps.speed.isValid () y si devuelve un valor verdadero, entonces el valor de velocidad se muestra en la pantalla OLED. Aquí el tamaño del texto en OLED se define usando la función display.setTextSize y la posición del cursor se define usando la función display.setCursor . Los datos de velocidad del módulo GPS se decodifican usando la función gps.speed.kmph () y finalmente se muestran usando display.display () .

if (gps.speed.isValid ()) 
  { 
    display.setTextSize (2); 
    display.setCursor (40, 40); 
    display.print (gps.speed.kmph ()); 
    display.display (); 
  }
https://circuitdigest.com/