Содержание
Пробовал развить идею приборной доски типа применяемых в авиации, на основе ЖК дисплеев, с отображением в привычной форме индикаторов автомобиля(температура ОЖ, уровень топлива, давление масла, одометр, спидометр, тахометр, вольтметр, сигналки) встраиваемый в штатное гнездо торпедо. На сообществе стайлинга приборок тема удалена, админу виднее!Попробую тут.Для примера, вот такие фото Мне подсказали, что АЦП для этого делают на ардуино, по крайней мере, работающий экземпляр Есть еще ссылки в форуме, это все, что осталось от темы.Может и здесь окажусь с темой не ко двору, но аудитория рукастодумающая, глядишь, через месяцок кто-то и готовое выложит!
Recommendations
Comments 42
тут тебе не ардуино нужно, а малинка (raspberry PI или orang). И строить такое нужно или на полноценном экране от планшета или вообще экране.
Я думаю, если делать полномасштабный проект, то, сколько бы ног у Ардуино не было, она не справится с поставленной задачей. Скорее всего это все нужно реализовать на более мощном микроконтроллере. За вывод на экран, скорее всего будет отвечать не микроконтроллер, а что-то типа микро ПК, либо планшет. А вообще, я ЗА такую идею. Тем более, что сам планирую в скором времени начать делать БК, который можно было бы установить на любой автомобиль, вне зависимости, если на нем разъем OBD или нет.
Мне кажется Ардуино больше подходит как центр сбора и обработки данных с датчиков, а вот работу с пользователем (экран, уведомления) лучше оставить одноплатнику типа малинки и иже с ней…
Да, ардуинка не вытянет отображение, а джойстик вместо руля — кул!
я так понимаю, можно выводить на андройд данные, и оболочку там запилить.
всеми лапами за идею!
в чем суть венатора или ему подобных? для дешевых авто это дороговато, а на дорогих вполне себе панель приборов, скорость, бензин показывает — че еще надо? ))
Ну мы получаем большую информативность в маленьком объеме. Целевая аудитория тоже имеется…
развиваем идею.
так как многообразие всевозможных лампочек и датчиков в разных моделях авто велико. Понадобяться конфигурационные файлы под каждую модель автомобиля. в них нужно будет прописать,
какой вход отвечает за какую лампочку(контрольных иконок придется отрисовать много чтобы у пользователя не возникло проблемы с настройкой под себя). и полярность сигнала, то есть зажигать лампу при подаче плюса или при подаче массы. в нем же прописать такие параметры как, объем бака, Максимальная скорость на шкале спидометра, а то у кого-то 180, а у кого-то и 240 бывает разметка.
подробно описать формат такого файла, либо создать простенький редактор, чтобы пользователи могли сами под себя составлять нужные наборы значков и параметров.
так готовое устройство сделал или просто идея?
Venator 540-710$ в зависимости от комплектации
да нахер он за такую сумму сдался. Я на телефоне декомпеляцию сделал венатора и нашел в исходнике очень интересную строку.
которая проверяет патч после покупки.
Для начала нужен ардуин с максимальным количеством ног, потому как датчиков и всяких лампочек которые нужно отображать очень много.
Дальше опрос ног. Импульсы тахометра и спидометра через прерывания, в сети есть примеры кода,
Лампочки контрольки совсем без проблем те которые включаются плюсом подаем через транзистор, те которые массой напрямую по аналогии кнопки с подтяжкой.
Все аналоговые датчики температуры ОЖ и уровня бензина итп. Заводим на ацп порты ардуино через резисторные делители.
Придумываем формат посылки этих всех данных в комп по uart это несколько байтов данных.
Комп получая эту посылку отрисовывает состояние на дисплей.
Из того что нужно както решать. Набор контролек на всех машинах различный, если девайс задумывается как универсальный, то должна быть возможность первоначального задания набора лампочек так сказать. Тоже самое и с тахометром 4 цилиндровые двигатели дают два импульса на приборку за один оборот КВ, а шести цилиндровые три импульса, без поправок будет неправильно показывать.
С датчиками скорости вобще разброд и шатания, лепять и шесть импульсов на метр и десять и как у нас на хондах вобще 2.5 импульса на метр (2548 импульсов киломметр) вобщем этот момент тоже нужно учитывать.
Температура двигателя и бак. Тут незнаю даже, термодатчики у всех разные. Датчики уровня бака и подавно да и сами баки разные по обьему. Нужна опятьже железобетонно работающая процедура калибровки. В целом задача вполне решаемая Венатор же сделал. )))
Спецы советуют мегу 2560,по лампочкам и указателям-вчерновую можно комплектовать тройниками, устанавливаемыми между разъемами приборки штатной и подключаемой, задавать адреса лампочек, по факту включения назначать, уровень топлива вчерновую по штатному, вчистолвую-тарировать хотьполитру доливать-отбирать, по ОЖ-вчерновую по штатному, вчистовую по цифровому термометру, давление масла-по механическому манометру, тоже и по топливу и наддуву.Тахометр-понятно, спидометр-по жлс или по приборке!
у использовании ардуины есть как плюс так и минус. плюс готовая по сути плата, с первичной обвязкой, и усб портом для быстрого заливки прошивок. из минусов, слишком уж медленно исполняются ее команды типа analogRead и digitalRead, ну и нельзя допустим прочитать порт целиком. а ведь читая порт сразу весь, получаем за одну команду состояние всех прицепленных на него датчиков, в ардуине для этогу нужно восемь раз выполнить digitalRead(номер пина).
Да в Ардуине тоже можно написать PIND и считать весь порт сразу, но тогда смысл именно в ардуине как в таковой теряется. тогда уж сразу в чистом Си под мегу писать код.
Для начала нужен ардуин с максимальным количеством ног, потому как датчиков и всяких лампочек которые нужно отображать очень много.
Дальше опрос ног. Импульсы тахометра и спидометра через прерывания, в сети есть примеры кода,
Лампочки контрольки совсем без проблем те которые включаются плюсом подаем через транзистор, те которые массой напрямую по аналогии кнопки с подтяжкой.
Все аналоговые датчики температуры ОЖ и уровня бензина итп. Заводим на ацп порты ардуино через резисторные делители.
Придумываем формат посылки этих всех данных в комп по uart это несколько байтов данных.
Комп получая эту посылку отрисовывает состояние на дисплей.
Из того что нужно както решать. Набор контролек на всех машинах различный, если девайс задумывается как универсальный, то должна быть возможность первоначального задания набора лампочек так сказать. Тоже самое и с тахометром 4 цилиндровые двигатели дают два импульса на приборку за один оборот КВ, а шести цилиндровые три импульса, без поправок будет неправильно показывать.
С датчиками скорости вобще разброд и шатания, лепять и шесть импульсов на метр и десять и как у нас на хондах вобще 2.5 импульса на метр (2548 импульсов киломметр) вобщем этот момент тоже нужно учитывать.
Температура двигателя и бак. Тут незнаю даже, термодатчики у всех разные. Датчики уровня бака и подавно да и сами баки разные по обьему. Нужна опятьже железобетонно работающая процедура калибровки. В целом задача вполне решаемая Венатор же сделал. )))
пару ардуинок+планшет с отг функцией. Либо планшет вбютуз + ардуинка блютуз = такая же идея только вай фай
Такую приборную панель можно собрать на любой автомобиль, это универсальное устройство. Мы собирали приборную панель на базе уже существующей под названием Venator.
Для ее создания потребуются следующие комплектующие:
- Контроллер Arduino MEGA
- Планшет с операционной систем Androir
- Модуль Wi-Fi esp8266
- Преобразователь питания с 12 до 5 вольт (можно использовать любое автомобильное зарядное устройство для мобильных телефонов).
К контроллеру Arduino подключаются все датчики автомобиля. В нашем случае потребовалось еще установить датчик скорости в коробку передач вместо тросика привода спидометра. А так же завести провод в салон автомобиля от коммутатора зажигания, чтобы контроллер смог отображать обороты двигателя (это нужно было сделать, так как в ОКЕ не был установлен тахометр).
Схема
Датчики к контроллеру подключить необходимо по следующей схеме:
Скетч (прошивка) для контроллера Arduino Mega
Скачать готовый скетч в файле можете по этой ссылке.
unsigned long micros_sp = 0, micros_th = 0;
volatile int tz;
volatile int sz;
volatile int sp; //импульсы спидометра
volatile int th; //импульсы тахометра
int analogInput [15]; //массив аналоговых значений
int digitalInput[29]; //массив цифровых значений
String resultString = «»; //строка
int i; //счетчик циклов
//********************************************************************
void setup() <
for(i=0; i
digitalInput[i]=0;
>
for(i=0; i
analogInput[i]=0;
>
Serial.begin(115200);
Serial2.begin(115200); //инициализация ком порта
attachInterrupt(0, speedometr, RISING); //прерывание спидометра по фронтам импульса
attachInterrupt(1, tahometr, RISING); //прерывание тахометра по фронтам импульса
>
//********************************************************************
void loop() <
analogInput[0] = analogRead(0); // B13 напряжение
analogInput[1] = analogRead(1); // B24 топливо
analogInput[2] = analogRead(2); // B21 температура охлаждения
analogInput[3] = analogRead(8); //
analogInput[4] = analogRead(7); //
analogInput[5] = analogRead(3); //
analogInput[6] = analogRead(4); //
analogInput[7] = analogRead(9); //
analogInput[8] = analogRead(10); //
analogInput[9] = analogRead(11); //
analogInput[10] = analogRead(12); //
analogInput[11] = analogRead(13); //
analogInput[12] = analogRead(14); //
analogInput[13] = analogRead(15); //
analogInput[14] = analogRead(6); //
digitalInput[0] = digitalRead(4); // зажигание
// digitalInput[1] = digitalRead(5); //
//********************************************************************
digitalInput[2] = digitalRead(53) + //
digitalRead(51) * 2; //
//********************************************************************
digitalInput[3] = digitalRead(5) + // A14 левый поворот
digitalRead(6) * 2; // A13 правый поворот
//********************************************************************
digitalInput[4] = digitalRead(8) + // A18 ближний
digitalRead(9) * 2; // A17 дальний
//********************************************************************
digitalInput[5] = digitalRead(10) + // А16 птф передние
digitalRead(11) * 2; // A15 птф задний
//********************************************************************
digitalInput[6] = digitalRead(23); // A23 чек
digitalInput[7] = !digitalRead(21); // B 9 — уровень тж
digitalInput[8] = !digitalRead(31); // A19 — ручник
digitalInput[9] = digitalRead(25); // B 3 износ колодок
digitalInput[10] = !digitalRead(45); // B10 — лампа топлива
digitalInput[11] = !digitalRead(51); // B12 — уровень ож
digitalInput[12] = !digitalRead(47); // А24 — давление масла
digitalInput[13] = digitalRead(27); // A20 лампа вентилятора
digitalInput[14] = !digitalRead(29); // A23 зарядка
digitalInput[15] = digitalRead(33); // A 5 абс
digitalInput[16] = digitalRead(35); // A20 srs
digitalInput[17] = digitalRead(37); // A 3 ремень
digitalInput[18] = digitalRead(39); // B 1 двери
digitalInput[19] = 0;//digitalRead(22); // B 2 p
digitalInput[20] = 0;//digitalRead(24); // А22 r
digitalInput[21] = 0;//digitalRead(26); // A 7 n
digitalInput[22] = 0;//digitalRead(28); // B 6 d
digitalInput[23] = 0;//digitalRead(30); // B 5 s
digitalInput[24] = digitalRead(41); // A 8 резерв
digitalInput[25] = 0;//digitalRead(32); // A 9 резерв
digitalInput[26] = digitalRead(43); // A10 резерв
digitalInput[27] = 0;//digitalRead(34); // A11 резерв
digitalInput[28] = digitalRead(49); // B 4 резерв
resultString = String(resultString + sp);
resultString = String(resultString + «,»);
resultString = String(resultString + th*10);
resultString = String(resultString + «,»);
for(i=0; i
resultString = String(resultString + analogInput[i]);
resultString = String(resultString + «,»);
>
for(i=0; i
resultString = String(resultString + digitalInput[i]);
>
resultString = String(resultString + «:
»);
// Serial2.print (resultString);
Serial.print (resultString);
resultString = String(«»);
tz = tz — 1;
sz = sz — 1;
if (tz == 0)
delay(50);
>
//********************************************************************
void speedometr() < //измеряем частоту на входе спидометра по прерыванию
sp=(900000.0/( micros() — micros_sp));
micros_sp = micros();
sz = 10;
>
//********************************************************************
void tahometr() < //измеряем частоту на входе тахометра по прерыванию
th=(2900000.0/( micros() — micros_th));
micros_th = micros();
tz = 10;
>
Настройка ESP-8266
Перед тем как подключать Модуль ESP8266 к схеме его нужно прошить и настроить в режиме прозрачного моста Tcp2uart (tcp to uart), чтобы полученные данные с ком-порта он передавал планшету по Wi-Fi.
Прошивать лучше через USB-UART преобразователь, который должен иметь выход источника 3.3V для питания ESP8266. Так же этот источник должен обеспечить необходимый ток не менее 200мА.
Готово! Теперь при подключении модуля ESP-8266 к ардуино он работает в режиме прозрачного моста и по Wi-Fi передает необходимые данные.
Приложение «Приборная панель для планшета»
Приложение можете скачать по ссылке.
Благодарим пользователя Frud портала Drive2 за опубликованную версию приложения и описание метода установки приложения:
После установки приложение уже будет работать. Для того чтобы включить его автозагрузку необходимо сделать следующее:
После установки необходимо зайти в настройки Андроид, в раздел «Домашний экран», выбрать приложение приборной панели VenatorLite2. Очень важный момент! Выйти в настройки Андроида из приложения приборной панели для возврата стандартного Launcher-a нельзя. Перед тем как установить приложение вместо Launcher-a необходимо убедиться что в настройки можно зайти из статусбара. Иначе вернуть стандартный лаунчер будет проблематично.
ПРИМЕЧАНИЕ! Перед установкой автозагрузки желательно настроить и отладить работу приложения.
После запуска приложения нужно зайти в настройки (нажать на значок шестеренки справа вверху). Тут надо указать ip-адрес и порт (В нашем примере этими значениями являются: адрес 192.168.4.1 и порт 3333).
Осталось все подключить и протестировать. Если все сделали правильно, то при вкючении устройства и подаче на 4-ый пин ардуино «плюса» приборная панель включится.
А вот как выглядит приборная панель, установленная в ОКУ:
Желаем успеха в реализации данного проекта
Говорящее устройство рассчитано на тех, кто не замечает лампочки на панели приборов, и периодически ловит себя на том, что едет с ручником или дальним светом. Или что стрелка спидометра незаметно уползла сильно вперёд… Ага, для себя делал.
Проверялось на (заточено на) Daewoo Nexia N150, но должно работать на любой машине с электронным спидометром (датчик скорости — 6 импульсов на метр, вроде как стандарт). Фотографии немного мутные (любительские):
1. Говорит голосом (5 уровней громкости) о различных событиях (события описаны далее)
а) мужским
б) женским
Голоса синтезированы на компьютере, записаны в виде набора mp3-файлов на микроСД карту. Это значит, что вы можете их поменять или записать.
2. Настройки выполняются с ПДУ от телевизора (или любого другого с достаточным количеством кнопок, настоятельно рекомендую ПДУ с кнопками 0-9). Настройки запоминаются в момент изменения.
3. В случае отказа/потери ПДУ, извещатель может быть оперативно переключен на режимы «нет звуков» или «нет звуков, кроме ручника». Для этого используется тройное включение габаритов (идея использовать мигание габаритами в качестве управляющего сигнала для настройки спёрта с какого-то устройства регулировки яркости ДХО).
— Ручник (если горит лампочка ручника во время движения)
— Включен дальний свет (мигание дальним игнорируется, предупреждает один раз после включения, далее не напоминает, пока дальний не переключат)
— Включите ходовые огни (если начато движение без включенных габаритов, у меня ДХО и ближний не работают, если не включены габариты).
— Напряжение бортовой сети (точность до десятой доли вольта)
— Превышение порога скорости 40, 50,… 120, 130 км/ч.
— Понижение порога скорости 40, 50,… 120, 130 км/ч.
— Изменение громкости, переключение голоса, отключение/включение каждого из озвучиваемых событий (включение вольтметра вызывает одновременно озвучивание напряжения).
Видео с демонтрацией:
1. К спидометру — сразу три провода: земля, +12 (отсюда берём питание на устройство и данные для вольтметра), сигнал от датчика скорости.
2. К лампочкам — ручника, дальнего света, подсветки приборов (габариты).
Согласование уровней сделано довольно просто — выводы ардуины подтянуты внутренним резистором в «1», а сигналы 12В уровня из приборной панели идут через диоды. Когда с панели идет +12, диод закрыт — на ардуине «лог.1». Когда сигнал с панели идет землёй — диод открыт, внутренний подтягивающий резистор игнорируется, на выводе ардуино «лог.0».
Вольтметр — просто резистивный делитель на аналоговый вход. Отношение примерно 1:13, из того расчета, что при максимальном напряжении бортовой сети 16В (аварийный режим) АЦП достигнет своего предела при опорном сигнале 1,2В.
1. Arduino nano v3
2. Модуль mp3 — DFplayer mini
Данный модуль в интернет-схемах подключается по tx/rx сигналам, я добавил анализ сигнала busy, для поимки момента окончания воспроизведения звука, чтоб новое оповещение не перебивало текущее, а вставало в очередь.
3. Усилитель PAM8403 (необязательный элемент)
Из текста прошивки можно легко увидеть, куда заведены все анализируемые сигналы, куда прописать коды вашего ИК-пульта (взять их можно с помощью демо-скетча IRRecvDump). Также константами явно прописаны моменты срабатывания озвучки скоростей (обратите внимание на то, что скорости озвучиваются несколько раньше, чем будут реально достигнуты — чтоб успеть сбавить, не превысив).
Для отладки, доводки и демонстрации использовалась другая ардуина — arduino uno и модулем LCD-дисплея и кнопками.
Она умеет выдавать сигналы — габариты, дальний свет, ручник, и менять скорость с 0 до 150 примерно. Из недостатков — нет подавления дребезга контактов, но мне не особо мешает этот момент.