Оглавление:

Автомобильный дисплей Arduino: 7 шагов (с изображениями)
Автомобильный дисплей Arduino: 7 шагов (с изображениями)

Видео: Автомобильный дисплей Arduino: 7 шагов (с изображениями)

Видео: Автомобильный дисплей Arduino: 7 шагов (с изображениями)
Видео: Текстовые LCD дисплей на контроллере HD44780, Уроки Arduino 2024, Ноябрь
Anonim
Image
Image
Автомобильный дисплей Arduino
Автомобильный дисплей Arduino
Автомобильный дисплей Arduino
Автомобильный дисплей Arduino

Я построил дисплей на базе бортовой диагностики (OBD-II), используя 7-дюймовый TFT-дисплей от Adafruit, Teensy 3.6, адаптер Freematics OBD-II I2C и несколько дешевых резервных датчиков, которые я нашел на Amazon. Дисплей имеет две страницы: один, когда моя Honda Accord находится в движении, и один, когда он движется задним ходом.

Когда моя машина находится в движении, отображаются обороты, миль / ч, процент нагрузки двигателя, напряжение аккумулятора, температура в салоне и температура охлаждающей жидкости двигателя (есть несколько других статистических данных транспортного средства, которые можно отобразить, если они не нужны).

Когда моя машина движется задним ходом, Teensy 3.6, совместимая с Arduino IDE, считывает анимированное растровое изображение моей машины, которое я нашел в Интернете, отображает его, а затем считывает данные с датчиков резервного копирования. У каждого из четырех датчиков есть расстояние в футах плюс анимация позади автомобиля, которая меняет цвет в зависимости от того, насколько близко объект находится к машине (только зеленый цвет означает <5 футов, зеленый и желтый означает <2,6 футов, а зеленый, желтый, красный означает <1 фут).

Наконец, я добавил возможность затемнять дисплей ночью.

Конечный результат выглядит великолепно и отлично работает в моей машине. Я даже закончил тем, что установил его на центральной консоли, что было совершенно другим процессом, который я не буду вдаваться в эту инструкцию. Список деталей, которые я использовал для создания этого ЖК-дисплея, приведен ниже.

1) Адаптер Freematics OBD-II - 35 долларов

2) Резервные датчики - 15 $

3) 7-дюймовый ЖК-дисплей TFT - 38 долларов США.

4) Драйвер ЖК-дисплея на основе SPI - 35 долларов

5) Teensy 3,6 - 30 долларов

6) Level Shifter - 4 доллара

7) 74HC125 Tri State Buffer IC - 6 долларов за 2 шт.

8) Карта MicroSD> = 1 ГБ - 4 доллара

9) Провода, конденсаторы и резисторы.

10) LP3470-2.93 ИС сброса при включении питания - 2 доллара США.

11) (опционально): Датчик температуры DS18B20 - 8 долларов США

12) (опционально): разветвитель OBD-II - 10 долларов

13) (необязательно): добавьте шнур предохранителя цепи - 8 долларов за упаковку из 5 штук.

Шаг 1: считывание резервных датчиков

Чтение резервных датчиков
Чтение резервных датчиков
Чтение резервных датчиков
Чтение резервных датчиков
Чтение резервных датчиков
Чтение резервных датчиков
Чтение резервных датчиков
Чтение резервных датчиков

Этот шаг сложен, потому что эти резервные датчики связываются с трансивером, а затем с небольшим ЖК-дисплеем, как показано на рисунке выше. Мне нужен был способ избавиться от их дисплея и использовать свой собственный. С помощью веб-сайта, который я нашел после некоторого поиска в Google (Взлом реверсивных датчиков парковки), я смог прочитать проприетарный протокол связи, который трансивер отправляет на ЖК-экран. По какой-то причине протокол связи не является типичным, например, I2C, UART, CAN, USB и т. Д., И протокол отличается в зависимости от поставщика. Я настоятельно рекомендую вам приобрести набор, который я привел выше, если вы собираетесь использовать мой код, потому что он был специально написан для этих датчиков.

Прежде чем отсоединить предоставленный ими ЖК-дисплей, я проверил три провода, соединяющие трансивер и ЖК-дисплей. Был красный провод + 5В, черный провод заземления и синий провод. После подключения осциллографа к синему проводу и заземлению я увидел след, похожий на изображение, показанное выше, но не совсем точно (я использовал изображение с веб-сайта, ссылка на который приведена выше). У моей трассировки был стартовый бит БОЛЬШОЙ продолжительности, за которым следовали 17 битов меньшей продолжительности. Биты 0-5 после стартового бита не содержали полезной информации. Биты 6-8 соответствуют датчику A, B, C или D. Биты 9-16 соответствуют длине в метрах. Я включил скетч Arduino IDE, который считывает датчики и выводит данные через последовательную консоль.

Шаг 2: Создание растрового изображения и размещение его на карте MicroSD

Создание растрового изображения и размещение его на карте MicroSD
Создание растрового изображения и размещение его на карте MicroSD
Создание растрового изображения и размещение его на карте MicroSD
Создание растрового изображения и размещение его на карте MicroSD

Я использовал бесплатное программное обеспечение для редактирования фотографий под названием GIMP, чтобы обрезать и изменять размер изображения моей машины сверху. Затем я экспортировал изображение как 24-битное растровое изображение с именем «car.bmp» размером 110 пикселей на 250 пикселей. Я загрузил это на карту microSD и вставил карту microSD в свой микроконтроллер Teensy 3.6.

Основными причинами, по которым я выбрал Teensy 3.6 вместо UNO, была скорость, с которой Teensy мог читать SD-карту и отображать изображение с помощью драйвера дисплея RA8875. При использовании UNO процесс занял около 8 секунд, в то время как Teensy 3.6 занял 1,8 секунды.

Шаг 3: Подключение оборудования

Подключение оборудования
Подключение оборудования

У Adafruit есть действительно красивый 7-дюймовый TFT-дисплей, управляемый микросхемой под названием RA8875. Я выбрал этот дисплей и драйвер дисплея по двум причинам. Во-первых, для дисплея заранее написаны обширные библиотеки. Во-вторых, драйвер дисплея может взаимодействовать с любой микроконтроллер через SPI, то есть не так много проводов, соединяющих микроконтроллер с RA8875.

У этой установки есть два недостатка. Во-первых, это факт, что есть аппаратная ошибка с платой RA8875 от Adafruit, требующая использования трехступенчатой буферной ИС 74HC125, если вы хотите использовать любое устройство на основе SPI, такое как SD-карта. Чтобы более полно разобраться в аппаратной ошибке, прочтите следующий форум. Во-вторых, это относительно долгое время, необходимое для отправки изображения на ЖК-дисплей. Кроме того, длительное время, необходимое для отправки изображения на ЖК-дисплей, связано с подключением SPI, которое ограничено тактовой частотой микроконтроллеров и большим объемом данных, которые необходимо отправить драйверу дисплея через очень мало проводов.

Я создал схему Fritzing, чтобы любой, кто хотел бы создать этот дисплей, мог легко прочитать, к каким контактам подключены Teensy 3.6. Ниже я добавил файл.frz. Единственные два компонента, которые не помечены, - это конденсаторы: электролитический конденсатор емкостью 1 Ф 16 В и керамический конденсатор емкостью 100 мкФ. Я включил их, чтобы убедиться, что питание микроконтроллера Teensy было постоянным +5 В постоянного тока и не было скачков напряжения (возможно, в этом нет необходимости, но я включил их, потому что напряжение питания автомобиля может быстро колебаться в зависимости от нагрузки на аккумулятор).

Несколько слов о компонентах. Во-первых, переключатель уровня принимает любой сигнал 5 В и преобразует его в безопасное напряжение 3,3 В Teensy 3.6. Это необходимо для адаптера OBD I2C, а также для приемопередатчика резервного датчика. Во-вторых, для линий I2C в миниатюрном корпусе требуются подтягивающие резисторы 4,7 кОм. В-третьих, четыре резистора, соединяющие «ночной провод» (провод регулировки яркости) и «провод включения резервного питания», необходимы для того, чтобы служить в качестве делителя напряжения для понижения сигналов 12–13 В до сигналов примерно 2,5–3 В.

ОБНОВЛЕНИЕ 22.07.18: Я обнаружил, что внутренний датчик температуры модуля OBD-I2C выдает очень странные числа. Иногда это срабатывало, но большую часть времени модуль выдавал температуру выше 400 градусов по Фаренгейту. Из-за этого я решил добавить свой собственный датчик температуры ds18b20. Вы можете использовать здесь любой тип датчика температуры, но вам придется отредактировать код Arduino.

ОБНОВЛЕНИЕ 3/1/19: Teensy 3.6 не запускается, когда очень холодно. Я добавил схему сброса при включении, чтобы убедиться, что она загружается правильно.

Шаг 4. Драйвер дисплея RA8875 и графический дизайн

Драйвер дисплея RA8875 и графический дизайн
Драйвер дисплея RA8875 и графический дизайн

Драйвер дисплея RA8875 имеет библиотеку под названием Adafruit_RA8875, которую я использовал при создании фигур, которые видны на первой и второй страницах. Библиотека для RA8875 может создавать только линии, прямоугольники, прямоугольники с закругленными углами, треугольники, эллипсы и круги, поэтому для создания более сложных форм необходимо продумать графику. Например, серое кольцо на первой странице на самом деле представляет собой полный серый круг большего диаметра, за которым следует полный черный круг меньшего диаметра. Кроме того, один небольшой раздел страницы резервного датчика содержит 2 треугольника, расположенных таким образом, что они образуют форму многоугольника. Я сделал это для того, чтобы можно было изменить цвет отдельного раздела страницы резервного датчика. Файл Arduino для дисплея содержит массив точек, которые я использовал, чтобы отслеживать, где были треугольники и другие формы.

Я использовал этот отличный веб-сайт, чтобы выбрать цвета RGB565 и определить их в эскизе, чтобы я мог использовать нестандартные цвета, уже предварительно определенные в библиотеке Adafruit_RA8875.

Что касается шрифтов, библиотека Adafruit_RA8875 поддерживает только один, если вы не закомментируете раздел библиотеки, что позволяет вам использовать шрифты библиотеки Adafruit_GFX. Ниже я включил модифицированную библиотеку Adafruit_RA8875. Я просто закомментировал несколько строк кода и затем смог использовать шрифты из библиотеки Adafruit_GFX. Кроме того, чтобы использовать 7-сегментный шрифт, который я использовал в этом проекте, убедитесь, что файл «FreeSevenSegNumFont.h» находится в папке шрифтов в библиотеке Adafruit_GFX.

Шаг 5: загрузка эскиза

Загрузка эскиза
Загрузка эскиза
Загрузка эскиза
Загрузка эскиза

Чтобы загрузить скетч в Teensy 3.6, вам необходимо установить Teensyduino. Затем вам нужно будет заменить библиотеки Adafruit_RA8875 и Adafruit_GFX в небольшом месте библиотеки (а не в обычном месте в документах). На Mac мне пришлось щелкнуть правой кнопкой мыши значок приложения Arduino в приложениях, а затем перейти в / Contents / Java / hardware / teensy / avr / libraries. В Windows я почти уверен, что он находится под вашим диском C в Program files x86, Arduino, а затем в папке оборудования. Как только вы это сделаете, вам нужно будет изменить расположение блокнота в приложении Arduino, отредактировав его в настройках, где бы ни находились ваши маленькие библиотеки (например, /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

ОБНОВЛЕНИЕ 22.07.16: Из-за проблемы с внутренним датчиком температуры, о которой я говорил ранее, мне пришлось установить датчик температуры модуля DS18B20. В zip-файле вы увидите 4 эскиза Arduino. Загрузите скетч display_code, если вы хотите использовать внутренний датчик температуры модуля OBD-II I2C. Пожалуйста, загрузите скетч display_code_with_new_temperature_sensor, если вы хотите использовать модуль DS18B20, который я указал выше.

ОБНОВЛЕНИЕ 17.11.17: Я исправил несколько ошибок в программном обеспечении, в том числе DS18B20, выдающий температуру 185 по Фаренгейту, дисплей вообще не включается в холодную погоду, а пиксели застревают в неправильном цвете при затемнении дисплея.

Затем используйте изображение выше, чтобы убедиться, что ваши юношеские настройки соответствуют изображению. Я обнаружил, что разгон крошечного до 240 МГц не позволяет адаптеру I2C OBD-II взаимодействовать с крошечным. Наконец, просто нажмите "Загрузить".

Я написал довольно обширные комментарии в файлах скетчей Arduino. Поищите там объяснение того, как работает программное обеспечение. Пожалуйста, не стесняйтесь обращаться ко мне с любыми вопросами. Я постараюсь ответить на них в меру своих возможностей. Удачи!

Шаг 6: 3D-печать корпуса с ЖК-дисплеем

3D-печать на корпусе с ЖК-дисплеем
3D-печать на корпусе с ЖК-дисплеем
3D-печать на корпусе с ЖК-дисплеем
3D-печать на корпусе с ЖК-дисплеем
3D-печать на корпусе с ЖК-дисплеем
3D-печать на корпусе с ЖК-дисплеем

Я создал верхнюю и нижнюю крышки ЖК-дисплея, напечатанные на 3D-принтере, чтобы защитить 7-дюймовый дисплей. Я прикрепил файлы деталей изобретателя. IPT, а также файлы. STL.

Я также включил часть под названием backup_sensor_ring.ipt, которая представляет собой кольцо, которое подходит для тех резервных датчиков, которые я связал выше. В моей машине уже были просверлены отверстия для резервных датчиков, которые были слишком большими для резервных датчиков, которые я купил на Amazon, поэтому мне пришлось создать кольцо, которое подходило бы к резервным датчикам. Если вы собираетесь просверлить бампер с помощью входящего в комплект круглого сверла, эта деталь вам не понадобится.

Шаг 7: Разделение порта OBD-II, чтобы Arduino имел питание только во время работы автомобиля

Разделение порта OBD-II так, чтобы Arduino питалась только во время работы автомобиля
Разделение порта OBD-II так, чтобы Arduino питалась только во время работы автомобиля
Разделение порта OBD-II, чтобы Arduino питалась только во время работы автомобиля
Разделение порта OBD-II, чтобы Arduino питалась только во время работы автомобиля
Разделение порта OBD-II так, чтобы Arduino питалась только во время работы автомобиля
Разделение порта OBD-II так, чтобы Arduino питалась только во время работы автомобиля

Вскоре после установки дисплея я понял, что дисплей всегда включен, даже когда машина выключена. Заглянув в распиновку OBD-II, я обнаружил, что линия питания 12 В к разъему OBD-II всегда подключена напрямую к аккумулятору.

Чтобы обойти это, я купил разветвитель OBD-II, перерезал провод, идущий к контакту 16 на одном из двух разъемов разветвителя, а затем подключил этот отрезанный провод к проводу добавления цепи.

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

Наконец, я подключил провод цепи к предохранителю, который я обнаружил, так что теперь дисплей включается только тогда, когда моя машина работает. Пожалуйста, исследуйте, как правильно добавить цепь к вашему автомобилю. Я нашел этот урок на YouTube, как хороший.

Рекомендуемые: