У меня часто происходят такие ситуации:
1. Иду я с рыночка или с магазина, в обеих руках сумки. Машина себе стоит на охране… И тут неприятная ситуация. Или нужно ставить сумку на пол (который всегда грязный), или все перекладывать в одну руку, что тоже неудобно и нажимать кнопку открытия багажника…
2. Я с теми же сумками еду домой. И мне нужно делать или несколько ходок, чтобы их занести на 4й этаж или опять же ставить на пол, чтобы закрыть багажник…
Ситуации для меня очень частые, потому неудобно…
Машина умеет сама открывать и закрывать багажник, и это самое главное! Мало того, она при открытии багажника сама снимает с сигнализации даже, если держать кнопку 0.8 секунды и больше.
Есть много китайских датчиков ноги для открытия багажника. Они подтягивают провод к массе на 1 секунду (+-) при взмахе ноги. То что нужно, для начала!
Что можно сделать с ним:
1. Провод с этого датчика можно подключить к кнопке открытия багажника и он будет открываться с ноги. Больше ничего.
2. Этот провод можно подключить к кнопке закрытия багажника, тогда, как можно догадаться будет закрывать, но не открывать.
3. Можно подключить к кнопке в салоне, будет открывать/закрывать багажник, но если машина под охраной (иду с супермаркета) — то ничего не произойдет…
Следующая идея такая, ставим реле, подключаем его к свету в багажнике оно будет переключать провод к кнопке открытия или закрытия в зависимости от того, открыт сейчас багажник или закрыт. Выключатели света уже в самом плафоне — потому на проводах там всегда есть 12в и масса когда отрыт багажник. 12в пропадает через 20 минут бездействия, но это уже не страшно…
В итоге имею уже такую ситуацию: Машина на охране. Иду с магазина, ключ в кармане, махнул ногой, машина снялась с охраны и открыла багажник. Приехал домой, взял сумки, махнул ногой — машина закрыла багажник. Все хорошо, но нужно не забыть поставить на охрану как только добежал домой)
Чтобы не бегать и не забывать нужно при взмахе ноги после закрытия багажника как-то поставить на охрану машину… Ничего лучше не придумал, чем поставить для этого контроллер. ATtiny13 для этой цели хватает с избытком. Нужно подключить несколько ног как входы, которые будут слушать был ли взмах ноги и есть ли свет в багажнике. Алгоритм работы такой: Если одновременно был взмах ноги (появилась земля на входе PB4) и свет в багажнике горит (земля на входе PB3) начинаем ждать, пока закроется багажник (пропадет земля на PB3). Когда это произойдет, на всякий случай подождем еще секунду, пусть сработают все замки, и сформируем сигнал на PB0, который и "нажмет" в итоге кнопку постановки на охрану.
Так же я не очень часто езжу и не помногу, потому для меня очень важный аспект — это энергопотребление. Датчик ноги должен работать даже когда машина на охране. Потому потребление по идее должно быть постоянное. Это около 6 мА. Не много по идее. За неделю это высосет 1Ач с аккумулятора. Так же есть контроллер с понижающим преобразователем. В зависимости от собственного потребления преобразователя — это тоже 2-5 мА. Вот уже и 1.5-2 Ач в неделю. Если посчитать еще какие приблуды навешиваю — то понятно, почему заморачиваюсь над каждой. Каждая фишка по 1-2Ач в неделю + сигналка и вот уже за неделю высаженный на половину аккум. Потому буду бороться.
В моей сигнализации есть так называемые таймерные каналы. По простому — управляемые выходы по условиям. Я назначил один из каналов, чтобы он включался, когда появляется метка сигнализации в зоне видимости и выключался, когда она пропадает. Подключил к нему датчик ноги. Так как он жрет всего 5-6 мА — то подключил напрямую. У выхода ток коммутации до 2А. Теперь датчик ноги работает и кушает энергию только если я рядом с машиной. Уже хорошо. А с контроллером сделал хитрее. Можно было бы тоже подключить к этому же проводу, но почему-то хотелось попробовать другую идею. Он у меня питается от лампочки багажника, т.е. работает только тогда, когда багажник открыт. Но так, как он должен нажать на кнопку охраны после того, как багажник закроется — то я поставил конденсатор и диод на входе, который питает контроллер еще секунды 3-4 после того, как закроется багажник. Подбирал номинал методом, попробовал — работает, так и оставим)
В итоге, вся эта система потребляет 5-6 мА если я около машины и 10-12 мА если багажник при этом открыт. Если я далеко от машины — не потребляет вообще ничего. То, что нужно, лично для меня)
Теперь, где брал точки подключения. К кнопкам открытия, закрытия и постановки на охрану подключился в районе разъемов около привода багажника в потолке. Прокинул провод от сигнализации в багажник для питания. Так же нужно АСС — для того, чтобы датчик не срабатывал если машина на светофоре или в движении. Его тоже нашел в разъемах. Массу — просто прикрутил к шпильке на дне багажника. Ну и 2 провода от лампочки багажника для реле. Реле тоже взял самое маломощное, т.к. его смысл коммутировать ток в несколько мА. К сожалению ничего не фотографировал, т.к. делал это не сейчас и не для драйва. Больше чтобы отвлечься. Запись больше для следующего владельца машины, чтобы он понимал что и как устроено.
P.S. У меня американец, потому у него на нажатие кнопки багажника машина сама снимается с охраны и открывает его. Как для европейцев делать — нужно смотреть. По идее на контроллере еще куча свободных ног и можно вообще избавится от реле и сделать все только на нем. Можно смотреть любые статусы и "нажимать" любые кнопки в любой последовательности. Нужны только базовые знания по программированию. Но по запросу "ардуино" — есть миллион уроков.
P.P.S. Кто захочет повторить это дело и кто не силен в контроллерах — можно взять любую ардуино вместо самого контроллера. Приведу прошивку. Я и тиньку прошивал в ардуино студии. Задача на столько простая, что не заморачивался. На всякий случай сделал простое простенький фильтр против дребезга контактов (если 3 измерения подряд одинаковы — то наверно это не дребезг).
const int inputTrunkLightPin = 3;
const int inputFootSensorPin = 4;
const int outputPinSecurityPin = 0;
//const int outputPinDebugPin = 1;
bool inputFootSensorState;
bool inputTrunkLightState;
long lastTime = 0;
bool wasLow = true;
bool waitingTrunkClose = false;
int inputTrigger = 0;
void setup() {
pinMode(outputPinSecurityPin, OUTPUT);
// pinMode(outputPinDebugPin, OUTPUT);
pinMode(inputTrunkLightPin, INPUT_PULLUP);
pinMode(inputFootSensorPin, INPUT_PULLUP);
digitalWrite(outputPinSecurityPin, LOW);
waitingTrunkClose = false;
inputTrigger = 0;
// digitalWrite(outputPinDebugPin, LOW);
}
void loop() {
inputFootSensorState = digitalRead(inputFootSensorPin) == LOW;
inputTrunkLightState = digitalRead(inputTrunkLightPin) == LOW;
if (!waitingTrunkClose){
if (inputTrunkLightState && inputFootSensorState){
inputTrigger ++;
if (inputTrigger>3){
waitingTrunkClose = true;
// digitalWrite(outputPinDebugPin, HIGH);
inputTrigger = 0;
}
}else{
inputTrigger = 0;
}
}
if (waitingTrunkClose){
if (!inputTrunkLightState){
inputTrigger++;
if (inputTrigger>3){
delay(1000);
waitingTrunkClose = false;
inputTrigger = false;
digitalWrite(outputPinSecurityPin, HIGH);
delay(1000);
digitalWrite(outputPinSecurityPin, LOW);
}
}else{
inputTrigger = 0;
}
}
delay(50);
}