GPS спидометр на Arduino и OLED дисплее своими руками

Спидометры используются для измерения скорости движения транспортного средства. Ранее на нашем сайте мы уже рассматривали создание аналогового спидометра на основе платы Arduino и цифрового спидометра на Arduino и смартфоне на Android. В аналоговом спидометре для измерения скорости мы использовали инфракрасный датчик, а в цифровом – датчик Холла. В этой же статье для измерения скорости мы будем использовать технологию GPS. В большинстве случаев GPS спидометры более точно измеряют скорость чем обычные спидометры. Также технология GPS в настоящее время широко используется в смартфонах и транспортных средствах для навигации и предупреждения о различных дорожных ситуациях.

Внешний вид GPS спидометр на Arduino и OLED дисплее

В данной статье мы рассмотрим создание GPS спидометра на основе платы Arduino, GPS модуля NEO6M и OLED дисплея.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. GPS-модуль GY-NEO6M (купить на AliExpress).
  3. OLED дисплей с интерфейсом I2C и диагональю экрана 1.3 дюйма (1.3 inch I2C OLED display) (купить на AliExpress - для данного проекта выбирайте вариант дисплея с 4 контактами).
  4. Макетная плата.
  5. Соединительные провода.

GPS модуль NEO6M

NEO-6M является популярным GPS приемником со встроенной керамической антенной, которая обеспечивает хороший прием сигнала с GPS спутников. Данный приемник способен отслеживать до 22 спутников и обеспечивает определение местоположения в любой точке земного шара. Модуль имеет аккумулятор для автономной подпитки (backup battery), что позволяет ему сохранять данные когда основное питание схемы отключено.

Внешний вид GPS модуля NEO6M

Ядром модуля является GPS чип NEO-6M от компании u-blox. Он может отслеживать до 22 спутников по 50 каналам и обладает чрезвычайно хорошей чувствительностью (-161 dBm). Модуль поддерживает скорости передачи данных 4800-230400 бод. По умолчанию он настроен на скорость 9600 бод.

Технические характеристики модуля:

  • рабочее напряжение: 2.7-3.6V DC (постоянного тока);
  • рабочий ток: 67 mA;
  • бодовая скорость передачи: 4800-230400 (9600 по умолчанию);
  • протокол связи: NEMA;
  • интерфейс: UART;
  • внешняя антенна и встроенная энергонезависимая память (EEPROM).

Назначение контактов (распиновка) GPS модуля NEO6M:
VCC: входное питающее напряжение;
GND: общий контакт (земля);
RX, TX: контакты для UART (последовательной) связи с микроконтроллером.

Назначение контактов (распиновка) GPS модуля NEO6M

На нашем сайте мы уже достаточно часто рассматривали проекты с использованием GPS модулей, список данных проектов можно посмотреть по следующей ссылке.

OLED дисплей

Термин OLED расшифровывается как “Organic Light emitting diode” (органический светоизлучающий диод) и в используемом нами OLED дисплее используется та же самая технология, что и в привычных нам современных телевизорах, только разрешение экрана нашего дисплея существенно меньше чем у телевизоров. С подобными дисплеями проекты на Arduino сразу начинают "сверкать новыми красками" поскольку они обеспечивают значительно более презентабельную картинку чем обычные монохромные ЖК дисплеи. В нашем проекте мы будем использовать монохромный OLED дисплей SH1106 1.28” с 4-мя контактами, подключаемый по интерфейсу I2C.

Внешний вид OLED дисплея SH1106 1.28” с 4-мя контактами

Технические характеристики дисплея:

  • микросхема драйвера: SH1106;
  • входное напряжение: 3.3V-5V DC;
  • разрешение: 128x64;
  • интерфейс: I2C;
  • потребление тока: 8 mA;
  • цвет пикселов: синий (Blue);
  • угол обзора: >160 градусов.

Назначение контактов (распиновка) дисплея:
VCC: питающее напряжение 3.3-5V DC;
GND: общий провод (земля);
SCL: контакт синхронизации интерфейса I2C;
SDA: контакт передачи данных интерфейса I2C.

Сообществом Arduino разработано уже достаточно много библиотек для работы с OLED дисплеями, нам среди них понравилась библиотека Adafruit_SH1106.h – она проста в использовании и позволяет работать с графикой.

Подобный дисплей мы ранее уже использовали в следующих проектах:

Схема проекта

Схема GPS спидометра на Arduino и OLED дисплее представлена на следующем рисунке.

Схема GPS спидометра на Arduino и OLED дисплееВнешний вид собранной на макетной плате конструкции проекта выглядит следующим образом:

Внешний вид собранной на макетной плате конструкции проекта

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе необходимо подключить все используемые библиотеки. В нашем проекте мы будем использовать библиотеку TinyGPS++.h для считывания GPS координат с GPS модуля и библиотеку Adafruit_SH1106.h для работы с OLED дисплеем.

Далее в программе мы определим адрес I2C для OLED дисплея, который может быть OX3C или OX3D, в нашем случае OX3C. Далее определим контакт сброса (Reset pin) для дисплея. В нашем случае мы определили его как -1, поскольку дисплей использует контакт сброса (Reset pin) платы Arduino.

Далее определим (создадим) объекты классов TinyGPSPlus и Softwareserial. В нашем случае мы с помощью библиотеки Softwareserial для последовательной связи будем использовать контакты 2 и 3 платы Arduino.

Примечание: здесь идет расхождение с представленной схемой проекта – в схеме мы подключили выход последовательного порта GPS модуля к контакту RX0 платы Arduino. Поэтому либо внесите изменения в текст программы, либо внесите изменения в схему проекта если не хотите изменять программу.

Внутри функции setup() мы инициализируем последовательную связь и OLED дисплей. Установим скорость последовательной связи для приема данных от GPS модуля равную 9600 бод (на эту скорость GPS модуль настроен по умолчанию). В функции инициализации дисплея display.begin параметр SH1106_SWITCHCAPVCC используется для генерации напряжения 3.3V дисплеем изнутри.

Внутри функции loop в цикле while мы проверяем принятые из последовательного порта данные, если приняты корректные GPS сигналы, то вызывается функция displayspeed() для отображения значения скорости на экране OLED дисплея.

Внутри функции displayspeed() данные скорости, полученные от GPS модуля, проверяются с помощью функции gps.speed.isValid() и если она возвращает true, то значение скорости отображается на экране OLED дисплея. Размер текста на OLED дисплее мы устанавливаем с помощью функции display.setTextSize, а позицию курсора – с помощью функции display.setCursor. Данные скорости от GPS модуля декодируются с помощью функции gps.speed.kmph() и отображаются на экране дисплея с помощью функции display.display().

Когда аппаратная часть проекта у вас будет готова вы можете загрузить код программы в плату Arduino и протестировать работу GPS спидометра.

Тестирование работы GPS спидометра

Исходный код программы (скетча)

Видео, демонстрирующее работу GPS спидометра

(Проголосуй первым!)
Загрузка...
1 213 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *