Запуск двигателя автомобиля

Грядут холода и очень хочется сесть в теплый автомобиль и не теряя времени на прогрев двинуться в путь.

Безусловно можно купить комплект сигнализации типа "стар лейн" тысяч за тридцать с установкой, но к чему тогда приложить очумелые ручки?

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

Что понадобится:

Аппаратная часть

старый мобильный телефон (или дешевый китайский gps-gsm-треккер с наличием линии внешнего выхода)

мини-ардуино контроллер

плата обвязки ардуино (делаем самостоятельно)

Программы

- среда разработки ардуино

- програма для разводки печатных плат spring layout

- руководство по "языку ардуино" на русском языке arduino.ru

поскольку тут собрались фанаты ардуино то и программный код будем писать под этот процессор.

а я попутно попробую на этом примере по шагам рассказать как пишется ардуино - код

прежде всего нужно понимать

1. в языке ардуино регистр букв различается например Setup и setup это две разные вещи.

2. каждая операция присвоения или запуска процедуры должна завершаться точкой с запятой ;

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

первым делом обычно решают какие будут использованы входы и выходы у контроллера

и присваивают им понятные имена констант

затем добавляют две стандартные процедуры, которые обазятельно должны быть в каждом скетче ардуино

процедура setup выполняется один раз при включении контроллера или при нажатии на кнопку сброс,

в ней производят необходимые настройки входов и выходов

затем определим основную логику программы - программа будет циклически работать в двух режимах,

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

для этого определим набор функций и переменную которую будем использовать

поскольку нам нужна переменная к значениям которой нужно иметь доступ из любой процедуры то мы помещаем ее выше первой функции в коде

// variable for actual mode

int actual_mode = 0; // какое текущее состояние 0 - двигатель выключен, 2 - двигатель должен быть запущен

пишем основной костяк программы:

теперь можно наполнить процедуру проверки запуска

тут мы понимаем что в одних автомобилях сигнал что заряд пошел может иметь значение +12 а в других наоборот 0, и тоже самое с датчиком ручника, с тем чтобы обеспечить универсальность добавляем

в верхнюю часть кода пару констант

const int hand_brake_on = 1; // 0= поднятый датчик ручника замыкает на массу тормоз активен (жигули), 1= датчик ручника в поднятом состоянии выдает высокий уровень напряжения

const int sharging_on = 1; // 0 когда во время работы генератора или от датчика давления масла на этом входе низкое состояние, 1 когда на лампе генератора при работе генератора высокое состояние

и изменяем код процедуры запуска

пишем вторую чать кода, процедуру выключения двигателя

Проверяем что же у нас получилось:

видео ютуб

Дальше ставим задачу добавить три попытки запуска мотора, причем чтобы стартер выключался сразу после

появления сигнала на датчике заряда но время работы стартера не превышало 10 секунд, добавить индикатор

статуса работы контроллера (будет в режиме прогрева показывать с какой попытки произошел запуск а в

режиме ожидания запуска показывает что контроллер готов к запуску - включен, ручник и нейтралка стоят.)

слабое место этого кода в том что миллисекунды в ардуино обнуляются каждые 49 суток

для того чтобы в случае если запуск произошел в течении последних 20 минут до обнуления

мотор не молотил еще 49 суток нужно обнулить и время старта внутри функции контролирующей

выключение двигателя

if (millis() < last_start_time)

{

last_start_time = 0;

}

10.12.2014 я подправил скетчи на этом сайте.

я рекомендую учесть этот момент всем кто воспользовался этим примером для своих разработок

Тест доработанной прошивки с тремя попытками старта, отключение стартера по индикатору начала зарядки аккамулятора, индикатор статуса запуска

Актуальную версию скетча ардуино можно скачать по ссылке внизу страницы

печатая плата

схемка

в устройстве использована микросхема ULN2003

Прошло более двух лет. Автомобиль был продан.

Хозяин приезжал как холода наступили , говорит не заводится :)

оказалось что сим- карту что во" встроенном в автомобиль телефоне" отключили за неуплату...

работает наш проект как часы :)

только важно не забывать оплачивать телефонную связь