- Використані матеріали
- Модуль GPS NEO6M
- 1,3-дюймовий I2C OLED-дисплей
- Кругова діаграма
- Програмування Arduino для OLED-спідометра Arduino
Спідометри використовуються для вимірювання швидкості руху транспортного засобу. Раніше ми використовували ІЧ-датчик і датчик Холла для створення аналогового спідометра та цифрового спідометра відповідно. Сьогодні ми будемо використовувати GPS для вимірювання швидкості транспортного засобу, що рухається. GPS-спідометри є більш точними, ніж стандартні спідометри, оскільки вони можуть постійно знаходити автомобіль і можуть обчислювати швидкість. Технологія GPS широко використовується в смартфонах та транспортних засобах для навігації та оповіщення про дорожній рух.
У цьому проекті ми створимо GPS- спідометр Arduino з використанням GPS-модуля NEO6M з OLED-дисплеєм.
Використані матеріали
- Arduino Nano
- Модуль 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 OLED 1,28 ”. Цей дисплей може працювати лише в режимі I2C.
Технічні характеристики:
- Схема драйвера: 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 та ІЧ-бластера
Кругова діаграма
Електрична схема цього спідометра Arduino GPS з використанням OLED наведена нижче.
Повне налаштування буде виглядати нижче:
Програмування Arduino для OLED-спідометра Arduino
Повний код проекту наведено внизу підручника. Тут ми пояснюємо повний код рядок за рядком.
Перш за все, включити всі бібліотеки. Тут бібліотека 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 display (OLED_RESET);
Далі визначаються об’єкти для класу TinyGPSPlus та Softwareserial , як показано нижче. Для серійного класу програмного забезпечення потрібен штифт Arduino No для послідовного зв'язку, який тут визначається як 2 і 3.
int RX = 2, TX = 3; GPS TinyGPSPlus; SoftwareSerial gpssoft (RX, TX);
Усередині налаштування () виконується ініціалізація для послідовного зв'язку та OLED. Швидкість передачі даних за замовчуванням для послідовного зв'язку Програмного забезпечення визначається як 9600. Тут SH1106_SWITCHCAPVCC використовується для внутрішньої генерації напруги на дисплеї від 3,3 В, а функція display.begin використовується для ініціалізації дисплея.
void setup () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
Усередині в той час як справжній цикл, послідовні дані, отримані перевіряються, якщо будуть отримані дійсні сигнали GPS, то displayspeed () викликається, щоб показати значення швидкості на OLED.
в той час як (gpssoft.available ()> 0) if (gps.encode (gpssoft.read ())) displaypeed ();
Усередині 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); display.print (gps.speed.kmph ()); display.display (); }
Нарешті, завантажте код в Arduino Uno і помістіть систему в рухомий автомобіль, і ви зможете побачити швидкість на OLED-дисплеї, як показано на малюнку нижче.
Повний код із демонстраційним відео наведено нижче.