Радар-детектор Stinger S650: доработка под скрытую установку
Идея интегрировать в систему радар-детектор бродила давно: не то, чтобы манера вождения сильно располагала к необходимости в этом девайсе - просто сама по себе задача представлялась достаточно интересной, да и возможность узнать заранее о наличии потенциальных проблем все же штука не лишняя. Из возможного многообразия подобного рода устройств был выбран РД Stinger S650 - не самый дорогой, но и не самый дешевый аппарат, набравший массу весьма неплохих отзывов от юзавших его.
Но поскольку идея заключалась именно во встраивании его в авто, использовать его в товарном виде не предполагалось: инсталляция планировалась скрытая. Это предполагало изменение схемы управления девайсом, а так как лишние кнопки в салоне действительно лишние - вполне логично было подцепить его к компу и осуществлять управление через фронт-энд. Помимо этого, обнаружился еще один существенный момент, подтолкнувший к глобальной пределке - дело в том, что при начальном включении девайс попадает в режим самотестирования и начинает в течении минуты примерно назойливо бубнить об обнаруженных якобы радарах во всех возможных диапазонах. Отрубить эту мантру можно только нажатием пары кнопок, но согласитесь, что необходимость каких-то телодвижений каждый раз при включении зажигания (а как и все системы автомобиля, он тоже запитан от бортсети и включается по сигналу АСС) - это, мягко скажем, не изящно... По сему, в дело пошел микроконтроллер Arduino - чудный аппарат, позволяющий творить массу всего. Экскурсия в богатый мир его возможностей вполне может начаться для интересующихся с этой ссылки , в данной же статье ограничимся лишь описанием конкретного проекта.
Итак, в задачах стояло: - эмуляция длинных и коротких нажатий двух кнопок управления РД - возможность включения/выключения девайса - регулировка громкости динамика - отключение режима самотестирования при подаче питания Описание реализации программной части этого проекта будет приведено в конце этого материала (вообще по сути, это наверное следовало бы изложить в отдельной статье...), пока же - про железную часть. Подопытный был безжалостно раскурочен:
На снимке ниже - точки, к которым приходят линии с выходов оптронов (входы их сидят на земле, управляющий сигнал на коммутацию поступает с выходов микроконтроллера). Это позволяет дублировать штатные кнопки управления РД, которые в рабочем режиме недоступны.
Далее - обратная сторона платы в месте установки штатного разъема питания РД:
Здесь земля идет на землю, плюсовой провод - на выход оптрона, коммутирующего питание (вход его - на +12 V, управление - с выхода МК). Сама Ардуина была смонтирована на отдельной плате с минимальной обвязкой:
Некоторая избыточность элементов объясняется тем, что в дальнейшем есть планы озадачить девайс некоторыми другими функциями. Схему в привычном ее виде приводить не буду - в листинге скетча вся необходимая информация по электрическим связям есть. Предполагавшиеся первоначально проблемы с размещением РД были благополучно обойдены (в который уже раз в процессе построения этой системы восхищаюсь конструкцией этого автомобиля!) - не пришлось не только ничего лепить, но и даже резать - как будто хитрые самураи просчитали все мои шаги на десять лет вперед:
Места за монитором вполне хватило для бескорпусного варианта исполнения девайса. Индикатор по понятным причинам был вынесен наружу (он, кстати, к плате крепится через разъем, так что откусывать его в случае чего не обязательно). Законченный вид после монтажа:
Фотоприемник лазерного диапазона пока не при делах, но это временно: просверлить дырку в колпаке и вставить туда световод (возможно, с линзой) - задача ерундовая. Со стороны салона все это выглядит так:
Задняя часть корпуса РД была отпилена и интегрирована в напольную консоль.
Некоторые проблемы возникли со встраиванием программы управления РД в скин фронт-энда: дело в том, что это java-приложение, а оно ведет себя несколько своеобразно... В конце-концов получилось следующее:
Скин управления РД. Сама программа находится в автозагрузке (на случай холодного старта системы), в остальное время - развернута под оболочкой (на рабочем столе). На кнопке вызова соответствующего скина висит конструкция: ..."LOAD;STINGER.skin||ACTIVATE;STINGER_S650","" Ей окно программы поднимается поверх фронт-энда, делая доступным управление радар-детектором.
Надо сказать, что за то время, что уже удалось поездить с этой системой, впечатления - самые положительные. Ни один из встретившихся фенов не остался необнаруженным заранее, всего лишь одно ложное срабатывание на автоматические двери супермаркета, стабильная работа и софта, и железа - словом, на этом этапе жизнь удалась...
Ну а теперь - о программной части. Для облегчения пути последователей, коротенько приведу алгоритм действий. 1. Заказываете и приобретаете собственно Carduino nano v.4 2. Качаете компилятор из раздела "Файлы" (вес у него не детский, но разве это остановит истинных ценителей извращений ) 3. Устанавливаете его на диск С:\ 4. Подключаете контроллер к компьютеру USB-шнуром. 5. Для обнаруженного нового устройства указываете путь к драйверам: C:\arduino-0018\drivers\FTDI USB Drivers. Если все прошло удачно - в диспетчере устройств появиться новая позиция USB Serial Port. 6. Запускаем компилятор, в меню Tools\Serial Port выставляем номер СОМ-порта (в п.5 он будет указан в соответствующей позиции), в меню Tools\Board - Arduino Diecimila ( и не умничайте, выбрав в последнем случае Arduino ATmega328 - хоть контроллер и построен на нем, залить прошивку при таких настройках не получится). Добавление от 22.07.2011 Вот тут, как выяснилось, не все так просто: экземпляр, который прошивался для этого конкретного проекта (хоть и построен был на ATMega328), шился почему-то именно как Arduino Diecimila. Второй контроллер, с которым экспериментирую сейчас, напротив, с такими установками не работает, и требует выбрать в настройках именно ATMega328. И это при том, что на вид они совершенно идентичны.Так что экспериментируйте - вариантов всего два, и в любом случае ничего фатального не произойдет: если не прошьется с одной настройкой, значит, прошьется с другой...
Ну, собственно, теперь вы можете делать с девайсом все, что можете. То есть либо писать для него прошивки самостоятельно, заливая их посредством компилятора и отлаживая их с его помощью, либо заливать чужие, желательно заведомо рабочие Внешний вид программы (версия 0017 от 0018 в этом не отличается) каких либо комментариев не требует:
Закачиваем из раздела "Файлы" архив Stinger_full.rar, распаковываем его, через меню File/Open открываем файл Stinger_full.pde и если все приведенные выше инструкции были выполнены исправно - результат не заставит себя ждать. Первая слева кнопка - проверка кода, предпоследняя - заливка прошивки в контроллер. Изучение кода оставляю для фанатов программирования, тем же, кого больше интересует результат - достаточно просто залить прошивку в контроллер.
На данном этапе мы уже сопрягли РД с Ардуиной, но пока в таком виде эта связка способна выполнять лишь одну из поставленных перед ней задач - гасить режим самотестирования при подаче питания. Для полноценного же управления нам необходима еще программа, которая работала бы на компьютере под Windows, посылая при нажатии на виртуальные кнопки вполне реальные команды в СОМ-порт, на котором у нас живет Ардуина. Займемся ее изготовлением. Поможет нам в этом другой компилятор - Processing (там же, в "Файлах", и тоже достаточно увесист):
Так же для работы понадобится установить Java (причем не только на том компьютере, на котором будете компилить прогу, но и на том, на котором будете ее юзать) Вот здесь надо иметь в виду вот что - если в первом случае необходимо было указать правильный номер CОМ-порта в настройках самого компилятора, то здесь уже надо указывать его в тексте скетча, из которого будет скомпилирована требуемая программа. Т.е. для прошивки контроллера не имеет значения, на каком СОМ-порту он будет в дальнейшем работать (на какой посадят, на том и будет - ему без разницы). Там важно лишь указать компилятору куда ему лить эту прошивку. В случае же с Processing`ом все иначе - здесь формируется программа, которая будет обращаться к одному конкретному порту, и если на нем не окажется требуемого устройства (пусть даже оно и висит на соседнем) - прога просто повиснет, увы... Конечно, сие не есть хорошо. Конечно, наверное можно было бы написать на Си что-нибудь более универсальное и изящное, но учитывая то, что крайний раз перед этим я программировал лет двадцать пять назад в Универе... Да и программа-то это крайне прикладная, так что бороться за ее универсальность было бы нелепо. Итак - отметили для себя самое важное: по завершению экспериментов/отладок/доводок перед компиляцией финальной версии программы, выясняем, на каком именно порту будет висеть Ардуина в условиях боевого применения и номер именно этого порта забиваем в строку port = new Serial(this, "COM4", 115200); Еще один существенный момент - программе необходим графический интерфейс. Вдаваться в тонкости его создания здесь - смысла не имеет: особо пытливые по представленной здесь информации могут разобраться в этом сами, для тех же, кому важен лишь результат - в "Файлах" выложены исходники (STINGER_S650.rar). (Небольшую наводку все же дам: эти файлы, RRSkinEditor и листинг скетча - и понять, как все это работает не составит труда ) При создании прошивки Арду достаточно было просто скопировать текст скетча в окно компилятора - причем это мог был быть именно текст, хоть из "Блокнота". В случае с компиляцией программы для компа советую все же воспользоваться файлами из архива (откройте Processing`ом файл STINGER_S650.pde - в этом случае графические файлы не будут утеряны программой). Ну и наконец - при работе на этом этапе Ардуина должна быть подключена к компу - иначе проверить работоспособность будущей программы не получится. Крайняя левая кнопка запускает программу без компиляции exe`шника, для получения последнего необходимо воспользоваться опцией File/Export Application. В появившемся после этого окне выбирайте ту ОС, под которой будет трудится программа, жмите Ок и после завершения компиляции откроется директория со сформированным исполняемым файлом.
P.S. Функцию регулировки громкости динамика РД (на аппаратном уровне) до конца не доделал: с первоначальным замыслом возникли некоторые проблемы, а впоследстви выяснилось, что и не сильно-то она и нужна: посему, вероятнее всего, и заброшу ее реализацию.
Так же необходимо отметить несколько побочных эффектов, возникших в результате работы над этим проектом: при наличии в системе других устройств с мостом FTDI возможны некоторые проблемы... Подозреваю, что в моей подобными оказались адаптер TPMS, OBD-II, и возможно - что-то еще. Во всяком случае, на двух тестовых компах, на которых система писалась и отлаживалась, процесс инитсалляции драйверов Арду прошел без задева. На CarPC же, после аналогичной процедуры, МК не только не подцепился, но еще и перекосил работу БТ-донгла, TPMS и диагностики. Первый и последнюю удалось восстановить, к системе же измерения давления/температуры есть очень серьезные вопросы и по сию пору - с этим предстоит разбираться. Так же (не знаю уж, с какого перепугу) что-то нагнулось в работе CityGuide. Связано ли это с понаделанным в рамках этого проекта или нет - будем посмотреть... Посмотрел - не связано.
P.P.S. Мои благодарности Chip`у и AlexNS с compcar`а - без их помощи и деятельного участия мне едва бы удалось разрулить программные вопросы этого проекта.
P.P.P.S. Для тех, кому лень качать все необходимое, но интересно посмотреть на код - приведу пару картинок (к сожалению, осилить корректное встраивание в эту страницу кода с подсветкой синтаксиса и форматированием мне не удалось...): Скетч для Arduino:
Скетч для Processing`а
|