Спидометры используются для измерения скорости движения транспортного средства. Для создания аналогового или цифрового спидометра можно использовать ИК-датчик или датчик Холла соответственно. Но сегодня мы будем использовать GPS для измерения скорости движущегося транспортного средства. Спидометры GPS более точны, чем стандартные спидометры, потому что они могут непрерывно определять местонахождение автомобиля и вычислять скорость. Технология GPS широко используется в смартфонах и транспортных средствах для навигации и оповещения о дорожном движении.

В этом проекте мы создадим GPS спидометр на основе Arduino с использованием модуля NEO6M GPS и OLED-дисплея.
Итак, здесь мы используем GPS-модуль NEO6M. NEO-6M – это популярный GPS-приемник со встроенной керамической антенной, обеспечивающий надежный поиск спутников. Этот приемник может определять местоположение и отслеживать до 22 спутников и определять местоположения в любой точке мира. С помощью встроенного индикатора сигнала мы можем контролировать состояние сети модуля. Он имеет резервный накопитель данных, так что модуль может сохранять данные при случайном отключении основного питания.

Основой модуля GPS-приемника является GPS-чип NEO-6M от u-blox. Он может отслеживать до 22 спутников на 50 каналах и имеет очень впечатляющий уровень чувствительности, который составляет -161 дБмВт. Этот 50-канальный механизм позиционирования u-blox 6 может похвастаться временем до первого исправления (TTFF) менее 1 секунды. Этот модуль поддерживает скорость передачи 4800-230400 бит/с и имеет скорость по умолчанию 9600 бод.

Данный модуль имеет четыре пользовательских вывода. VCC – контакт входного напряжения модуля, GND – контакт заземления, RX и TX – контакты приема и передачи интерфейса UART для связи с микроконтроллером.
В качестве средства отображения будем использовать OLED-дисплей. Термин OLED означает «органический светоизлучающий диод», он использует ту же технологию, что и большинство наших телевизоров, но имеет меньше пикселей по сравнению с ними. Здесь мы используем монохромный 4-контактный OLED-дисплей SH1106 с диагональю 1,28 дюйма. Этот дисплей может работать только в режиме I2C.

Его выводы следующие. VCC – для напряжения питания 3,3-5 В, GND – контакт заземления, SCL – тактовый вывод интерфейса I2C, SDA – вывод последовательных данных интерфейса I2C.
Сообщество Arduino уже предоставило нам множество библиотек, которые можно напрямую использовать для работы с дисплеем. Например, библиотека Adafruit_SH1106.h очень проста в использовании и имеет несколько графических параметров, поэтому мы будем использовать ее в этом примере.
Принципиальная схема GPS-спидометра на основе Arduino с использованием OLED-дисплея приведена далее.

Подключив все согласно данной схеме можно получить примерно такую установку.

Полный код программы GPS-спидометра на основе Arduino приведен далее.
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_SH1106.h>
#define OLED_ADDRESS 0x3C
#define OLED_RESET -1
Adafruit_SH1106 display(OLED_RESET);
int RX = 2, TX = 3;
TinyGPSPlus gps;
SoftwareSerial gpssoft(RX, TX);
void setup()
{
Serial.begin(9600);
gpssoft.begin(9600);
display.begin(SH1106_SWITCHCAPVCC, OLED_ADDRESS);
display.clearDisplay();
display.display();
}
void loop()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(35, 20);
display.print("SPEED(KMPH)");
display.display();
while (gpssoft.available() > 0)
if (gps.encode(gpssoft.read()))
displayspeed();
if (millis() > 5000 && gps.charsProcessed() < 10)
{
display.setTextSize(1);
display.setCursor(35, 40);
display.print("Error!!!");
display.display();
while (true);
}
}
void displayspeed()
{
if (gps.speed.isValid())
{
display.setTextSize(2);
display.setCursor(40, 40);
display.print(gps.speed.kmph());
display.display();
}
else
{
display.setTextSize(1);
display.setCursor(35, 40);
display.print("No Data!!!");
display.display();
}
delay(100);
}
Наконец, загрузите код в Arduino и поместите систему в движущийся автомобиль, и вы увидите скорость на OLED-дисплее, как показано на следующем изображении.

© digitrode.ru