- Используемые материалы
- Модуль GPS NEO6M
- 1,3-дюймовый I2C OLED-дисплей
- Принципиальная электрическая схема
- Программирование Arduino для спидометра Arduino OLED
Спидометры используются для измерения скорости движения транспортного средства. Ранее мы использовали ИК-датчик и датчик Холла для создания аналогового и цифрового спидометра соответственно. Сегодня мы будем использовать GPS для измерения скорости движущегося транспортного средства. Спидометры GPS более точны, чем стандартные спидометры, потому что они могут постоянно определять местонахождение автомобиля и вычислять скорость. Технология GPS широко используется в смартфонах и транспортных средствах для навигации и оповещения о дорожном движении.
В этом проекте мы построим спидометр Arduino GPS с использованием модуля NEO6M GPS с OLED-дисплеем.
Используемые материалы
- Ардуино Нано
- Модуль GPS NEO6M
- 1,3-дюймовый I2C OLED-дисплей
- Макетная плата
- Соединение перемычек
Модуль GPS NEO6M
Здесь мы используем GPS-модуль NEO6M. GPS-модуль NEO-6M - это популярный GPS-приемник со встроенной керамической антенной, обеспечивающий надежный поиск спутников. Этот приемник может определять местоположение и отслеживать до 22 спутников и определять местоположения в любой точке мира. С помощью встроенного индикатора сигнала мы можем отслеживать состояние сети модуля. Он имеет резервную батарею данных, поэтому модуль может сохранять данные при случайном отключении основного питания.
Сердцем модуля GPS-приемника является GPS-чип NEO-6M от u-blox. Он может отслеживать до 22 спутников на 50 каналах и имеет очень впечатляющий уровень чувствительности, который составляет -161 дБмВт. Этот 50-канальный механизм позиционирования u-blox 6 может похвастаться временем до первого исправления (TTFF) менее 1 секунды. Этот модуль поддерживает скорость передачи 4800-230400 бит / с и имеет скорость передачи по умолчанию 9600 бод.
Особенности:
- Рабочее напряжение: (2,7-3,6) В постоянного тока
- Рабочий ток: 67 мА
- Скорость передачи: 4800-230400 бит / с (9600 по умолчанию)
- Протокол связи: NEMA
- Интерфейс: UART
- Внешняя антенна и встроенный EEPROM.
Распиновка модуля GPS:
- VCC: контакт входного напряжения модуля
- GND: заземляющий контакт
- RX, TX: контакты UART с микроконтроллером
Ранее мы связывали GPS с Arduino и строили множество проектов с использованием модулей GPS, включая отслеживание транспортных средств.
1,3-дюймовый I2C OLED-дисплей
Термин OLED означает « Органический светоизлучающий диод», он использует ту же технологию, что и большинство наших телевизоров, но имеет меньше пикселей по сравнению с ними. Очень весело иметь эти классно выглядящие модули дисплея для взаимодействия с Arduino, так как это сделает наши проекты крутыми. Мы рассмотрели полную статью об OLED-дисплеях и их типах здесь. Здесь мы используем монохромный 4-контактный OLED-дисплей SH1106 с диагональю 1,28 дюйма. Этот дисплей может работать только в режиме I2C.
Технические характеристики:
- Драйвер IC: SH1106
- Входное напряжение: 3,3-5 В постоянного тока
- Разрешение: 128x64
- Интерфейс: I2C
- Потребление тока: 8 мА
- Цвет пикселя: синий
- Угол обзора:> 160 градусов
Описание контакта:
VCC: входной источник питания 3,3-5 В постоянного тока
GND: контакт заземления
SCL: тактовый вывод интерфейса I2C
SDA: вывод последовательных данных интерфейса I2C
Сообщество Arduino уже предоставило нам множество библиотек, которые можно напрямую использовать, чтобы сделать это намного проще. Я опробовал несколько библиотек и обнаружил, что библиотека Adafruit_SH1106.h очень проста в использовании и имеет несколько графических опций, поэтому мы будем использовать их в этом руководстве.
OLED выглядит очень круто и может быть легко соединен с другими микроконтроллерами для создания интересных проектов:
- Подключение OLED-дисплея SSD1306 к Raspberry Pi
- Подключение OLED-дисплея SSD1306 к Arduino
- Интернет-часы с использованием ESP32 и OLED-дисплея
- Автоматический регулятор температуры переменного тока с использованием Arduino, DHT11 и IR Blaster
Принципиальная электрическая схема
Принципиальная схема спидометра Arduino GPS с использованием OLED приведена ниже.
Полная установка будет выглядеть, как показано ниже:
Программирование Arduino для спидометра Arduino OLED
Полный код проекта приведен внизу учебника. Здесь мы объясняем весь код построчно.
Прежде всего, включите все библиотеки. Здесь библиотека TinyGPS ++. H используется для получения координат GPS с помощью модуля GPS-приемника, а Adafruit_SH1106.h используется для OLED.
#включают
Затем определяется адрес OLED I2C, который может быть либо OX3C, либо OX3D, в моем случае это OX3C. Также должен быть определен контакт сброса дисплея. В моем случае он определен как -1, так как дисплей использует вывод сброса Arduino.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Отображение Adafruit_SH1106 (OLED_RESET);
Затем определяются объекты для класса TinyGPSPlus и Softwareserial , как показано ниже. Для последовательного класса программного обеспечения требуется вывод Arduino № для последовательной связи, которая здесь определяется как 2 и 3.
int RX = 2, TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft (RX, TX);
Внутри setup () инициализация выполняется для последовательной связи и OLED. Скорость передачи данных по умолчанию для последовательной связи программного обеспечения определена как 9600. Здесь SH1106_SWITCHCAPVCC используется для внутреннего генерирования напряжения дисплея из 3,3 В, а функция display.begin используется для инициализации дисплея.
void setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Внутри цикла while true проверяются полученные последовательные данные, если получены действительные сигналы GPS, вызывается displaypeed () для отображения значения скорости на OLED- экране .
while (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) отображает скорость ();
Внутри displayspeed () функции, данные скорости от модуля GPS проверяется с помощью функции gps.speed.isValid () , и если она возвращает истинное значение, то значение скорости отображается на OLED - дисплее. Здесь размер текста на OLED определяется с помощью функции display.setTextSize, а позиция курсора определяется с помощью функции display.setCursor . Данные о скорости от модуля GPS декодируются с помощью функции gps.speed.kmph () и, наконец, отображаются с помощью display.display () .
если (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); дисплей.принт (gps.speed.kmph ()); display.display (); }
Наконец, загрузите код в Arduino Uno и поместите систему в движущийся автомобиль, и вы увидите скорость на OLED-дисплее, как показано на изображении ниже.
Полный код с демонстрационным видео приведен ниже.