Кнопка старт стоп на ардуино своими руками
Автор: Евгений Живоглядов.
Дата публикации: 29 октября 2018 .
Категория: Автотехника.
Принцип работы такого вспомогательного устройства довольно прост:
Для информации! Если просто нажать на кнопку, не выжимая педаль тормоза, то двигатель не заведется, так как напряжение +12В поступает только на дополнительные потребители (например, аудио комплекс). Это аналогично повороту ключа зажигания в первое положение – ACC.
Стандартный комплект поставки
Комплект поставки универсального приспособления для обустройства транспортного средства кнопкой запуска/остановки двигателя состоит из:
Данный комплект предназначен для установки практически на все модели как отечественных, так и импортных автомобилей. Цена на сегодняшний день (в зависимости от производителя) составляет 1500÷4500 рублей.
Для информации! Для дезактивации иммобилайзера достаточно поднести брелок-метку к сканеру на расстояние 2÷5 см. После этого прозвучит звуковой сигнал, информирующий о том, что устройство готово к работе. Через 15÷20 секунд после остановки двигателя модуль управления автоматически переводит приспособление в режим охраны.
Как самостоятельно установить
На заметку! Схемы подключения готовых наборов практически у всех производителей одинаковы.
- демонтируем кожух рулевого управления;
- отсоединяем разъем замка зажигания;
Важно! Если вы заранее приобретете колодку замка зажигания и подсоедините к ней провода от блока управления в соответствии со схемой, то в случае необходимости сможете быстро вернуться к штатной системе запуска/остановке мотора с помощью ключа. Если вам не удалось купить ответную контактную группу для ЗЗ (конкретно для вашей модели транспортного средства), то можете с успехом использовать обжимные клемники подходящего размера.
Варианты разблокировки руля
Первый, и с нашей точки наиболее предпочтительный метод:
- оставляем отрезок ключа в замке до тех пор, пока не возникнет необходимость возврата к штатной схеме зажигания.
Как обойти штатный иммобилайзер
Вариант для самостоятельного изготовления
Для самостоятельного изготовления данного приспособления понадобятся:
Алгоритм работы схемы полностью аналогичен устройству запуска/остановки двигателя готовых универсальных комплектов. Естественно, в самодельном устройстве дополнительная противоугонная функция (иммобилайзер) отсутствует. В остальном схема вполне работоспособна и опробована многими автолюбителями.
Достоинства и недостатки
- Ключ придется все-равно носить с собой. Во-первых, он может понадобиться для того, чтобы попросту открыть автомобиль, если аккумулятор разрядился, и электромагнитные активаторы дверей не срабатывают (особенно это актуально при значительных минусовых температурах). Во-вторых, у многих современных автомобилей метка штатного иммобилайзера находится именно в ключе, поэтому завести двигатель можно только имея его в непосредственной близости от считывающего устройства.
- Усложняется установка предпусковых устройств подогрева и систем сигнализации (из-за изменения штатной электрической схемы автомобиля).
Кнопка является простейшим устройством, при помощи которого можно управлять ходом программы на микроконтроллере, но физически она выполняет очень простую функцию: замыкает и размыкает контакт. Кнопки бывают нескольких типов:
- С фиксацией – кнопка остаётся нажатой после отпускания, без фиксации – отключается обратно.
- Нормально разомкнутая (Normal Open, NO) – при нажатии замыкает контакты. Нормально замкнутая (Normal Closed, NC) – при нажатии размыкает контакты.
- Тактовые кнопки – замыкают или размыкают контакт. У обычных тактовых кнопок ноги соединены вдоль через корпус (см. картинку ниже). Переключатели – обычно имеют три контакта, общий COM, нормально открытый NO и нормально закрытый NC. При отпущенной кнопке замкнута цепь COM-NC, при нажатой замыкается COM-NO.
Подключение и подтяжка
Из урока про цифровые пины вы помните, что микроконтроллер может считывать напряжение со своей ноги. Соответственно кнопка может подать на пин тот уровень, к которому подключена её вторая нога. В том же уроке мы обсуждали, что не подключенный никуда цифровой пин принимает наводки из воздуха, и считанное с него значение будет практически случайным. То есть подключив к пину 5V (сигнал высокого уровня) через кнопку, мы ничего не добьёмся: при нажатой кнопке на пине будет считываться четкий сигнал высокого уровня, а при отпущенной – случайное значение. Для решения этой проблемы существует такое понятие, как подтяжка (pull) пина. Подтяжка выполняется к земле (pull down) или питанию (pull up) микроконтроллера при помощи резистора. Подтяжка выполняется противоположно принимаемому сигналу, т.е. если нужно ловить высокий сигнал, подтяжка выполняется к земле, если ловить нужно сигнал земли – подтяжка выполняется к питанию. Вот два варианта подключения кнопки, с подтяжкой к VCC и GND соответственно: Как выбирается сопротивление резистора? Тут всё очень просто: при нажатии на кнопку через резистор потечёт ток, так как в любом случае замыкается цепь питание-земля. Чем выше ток, больше потери энергии и нагрев резистора, а это никому не нужно, поэтому сопротивление резистора подтяжки обычно выбирается в диапазоне 5-50 кОм. Если ставить больше – подтяжка может не обеспечить стабильный уровень сигнала на пине, а если ставить меньше – будут больше потери энергии в нагрев резистора: при сопротивлении в 1 ком через него потечёт ток величиной 5 В/1000 Ом = 5 мА, для сравнения плата Ардуино с МК в активном режиме потребляет 20-22 мА. Чаще всего для подтяжки используется резистор на 10 кОм. Как вы помните из урока о цифровых пинах, у МК AVR есть встроенные резисторы для всех GPIO, эти резисторы подключены к питанию (к VCC), то есть буквально дублируют первую схему из этого урока и позволяют не использовать внешний резистор. У микроконтроллеров другой архитектуры бывает подтяжка к GND, или вообще может не быть внутренней подтяжки. При использовании подтяжки к питанию мы получим инвертированный сигнал – функция digitalRead() вернёт 1 при отпущенной кнопке, и 0 при нажатой (при использовании нормально-разомкнутой кнопки). Давайте подключим кнопку на пин D3 (и GND):
Алгоритмы
Отработка нажатия
В большинстве реальных применений работать с текущим состоянием кнопки очень неудобно, например когда действие должно быть выполнено однократно при нажатии на кнопку, т.е. по клику. Чуть усложним конструкцию, добавив один флаг, который будет помнить состояние кнопки. Такая конструкция позволяет отслеживать нажатие и отпускание кнопки и реагировать на них однократно:
Дребезг контактов
Кнопка не идеальна, и контакт замыкается не сразу, какое-то время он “дребезжит”. Прогоняя данный алгоритм, система опрашивает кнопку и условия приблизительно за 6 мкс, то есть кнопка опрашивается 166’666 раз в секунду! Этого достаточно, чтобы получить несколько тысяч ложных срабатываний. Избавиться от дребезга контактов можно как аппаратно, так и программно: аппаратно задача решается при помощи RC цепи, то есть резистора (~1-10k) и конденсатора (~100nF). Выглядит это следующим образом:
Программно можно ввести простейший таймер нажатия, основанный на millis() , время гашения дребезга примем 100 миллисекунд. Вот так будет выглядеть код:
Рекомендуется конечно же использовать аппаратный способ, так как он не нагружает ядро лишними расчетами. В 99.99% проектов будет достаточно программного антидребезга, так то смело используйте конструкцию с millis() .
“Импульсное” удержание
В устройствах с управлением кнопкой очень часто бывает нужна возможность изменения значения как однократно кликом по кнопке, так и “автоматически” с тем же шагом – при удержании. Такой вариант реализуется очень просто, добавлением ещё одного условия в наш предыдущий алгоритм, а именно: если кнопка была нажата, но ещё не отпущена, и прошло времени больше, чем задано – условие вернёт true . В примере ниже периодичность “нажатий” при удержании настроена на 500 миллисекунд (2 раза в секунду):
Пользоваться таким кодом напрямую будет неудобно, поэтому можно “обернуть” его в класс (читай урок про классы и урок про написание библиотек).
Простейший класс кнопки
Вот так предыдущий пример можно сделать классом (мы делали это вот в этом уроке), положить его в отдельный файл (button.h) и пользоваться:
Другие возможности кнопки
Кнопка только с виду кажется простым устройством, дающим 0 и 1, но, подключив фантазию и время, можно придумать гораздо больше применений обычной кнопке. В моей библиотеке GyverButton реализовано очень много всяких интересных возможностей по работе с кнопкой, вот список:
- Работа с нормально замкнутыми и нормально разомкнутыми кнопками
- Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным антидребезгом контактов (настраиваемое время)
- Отработка нажатия, удерживания, отпускания, клика по кнопке (+ настройка таймаутов)
- Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
- Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
- Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
- Возможность работы с “виртуальными” кнопками (все возможности библиотеки используются для матричных и резистивных клавиатур)
Подробное описание библиотеки можно почитать в заголовочном файле на странице библиотеки, также там есть много примеров.
Аналоговые клавиатуры
Аналоговые клавиатуры – достаточно глубокая тема, достойная отдельного урока (у меня его пока что нет). Максимально подробный урок-исследование можно посмотреть на сайте Codius.
Видео
Кнопка старт-стоп для автомобиля своими руками ⇐ Transit. Тюнинг
Доброго времени суток друзья. Тут недавно закапризничала контактная группа зажигания. Есть два варианта: купить новую группу или поставить новомодную систему старт-стоп. Можно купить готовый комплект например такой:
Но мы не ищем простых решений, можно собрать например так:
Были: FT 350 2000>г. 2,4DI D4FA 120л.с. спарка R16 Фургон (сарай 18м³), МВ 410D; 409D; 207D
Интернет велик. Займитесь самообразованием, не поможет - застрелитесь. Всем удачи во всех делах! Андрей.
Чевой то к алиэкспрессу доверия мало. Лампочки почти три месяца уже идут, не дождусь никак. А так бы тоже прикупил такой девайс.
Небось доставка на усмотрение продавца и без нормального Трек Номера? Вот пускай продавец и разбирается с той конторой которой отправлял. Или вы ещё по таким поводам с продавцами отношения не выясняли?
Были: FT 350 2000>г. 2,4DI D4FA 120л.с. спарка R16 Фургон (сарай 18м³), МВ 410D; 409D; 207D
Интернет велик. Займитесь самообразованием, не поможет - застрелитесь. Всем удачи во всех делах! Андрей.
Да хоть с жигулями классикой . Девайс свой иммобилайзер имеет. Правда я хочу без всяких безключевых доступов.
У меня простая кнопка есть, я её демонтировали, а вот с бесключевыд доступом интересно было - бы поставить.
Мы много заказываем с Китая, и обычно всё приходит за 2-4 недели. Но, однажды указатель напряжения в прикуриватель шёл пол года. Я уже забил а он пришёл. Кстати замечено чем меньше посылка тем больше вероятность её потери. У меня жена на почте работает и говорит что заваливаются вечно конвертики куда нибудь. А таких перевалочных баз по пути где может завалится множество. Заказывайте с чем нибудь объёмным. Ну и ускорите поиск своей посылки в отделении
Там простой обходчик иммобилайзера используется, так вот мне например такой обходчик причём ШерХановский так и не получилось заставить работать.
Были: FT 350 2000>г. 2,4DI D4FA 120л.с. спарка R16 Фургон (сарай 18м³), МВ 410D; 409D; 207D
Интернет велик. Займитесь самообразованием, не поможет - застрелитесь. Всем удачи во всех делах! Андрей.
Можно ключ обрезать и оставить в личинке. Там же оставить чип, и всё накрыть кнопкой. Безопасность никакая но всё работать будет. С ключа тоже не заведёшь так как колодка штатная будет отключена от замка. Плюс этого способа что всё можно вернуть назад без последствий. А если угнать задумают то ничего не поможет.
За что тогда платить почти 5т.р. если просто кнопка старт-стоп с блоком управления на том же али стоит в 3 раза дешевле?
Были: FT 350 2000>г. 2,4DI D4FA 120л.с. спарка R16 Фургон (сарай 18м³), МВ 410D; 409D; 207D
Интернет велик. Займитесь самообразованием, не поможет - застрелитесь. Всем удачи во всех делах! Андрей.
Да не за что, в том то и дело. Просто за понт кнопку. Бесключевой доступ элементарно считывается на растоянии и это сводит на нет всю безопасность. Я вообще тему завёл по другой причине. Нужна адекватная замена штатной контактной группы , а за 5тыс можно не одну контактную группу купить и не колхозить Просто реле будет надёжней трушимся подвижным контактам. И родной чип можно поместить в любой корпус брелок и перед нажатием кнопки просто поднести к штатной антенне не хуже чем в старых вазах десятого семейства.
Поэтому я лично не считаю разумным покупать системы с безключевым доступом, я даже не считаю нужным иммобилайзер в дешёвых китайских комплектах, хватит штатного и не нужно усложнять конструкцию. Мне вообще необходим только управляющий блок и кнопка, просто если собрать схему на одних реле то там есть свои недостатки. Да и личную безопасность нужно соблюсти, не дай бог ребёнок потыкает кнопки. В общем есть о чём подумать.
перерыл все.
void loop()
тело программы
>
вроде это, но программа доходит до конца и не стартует заново :(
Другой вопрос, когда на входе появляется HIGH, на выходе тоже HIGH и программа не идет дальше. как только вход переходит в LOW программа начинает выполнятся дальше. что не правильно делаю?
int Vhod=2; //вход
int Vihod=13 //выход
void setup()
pinMode(VhodPin, INPUT);
pinMode(VihodPin,OUTPUT);
if (digitalRead(VhodPin) == HIGH)
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
>
что не правильно делаю?
// Неудачное название переменных. Отличаются одной буквой, да она еще в середине и не особо видна.
// Код становится хреново читаемый, появляется большая вероятность ошибки
// Обычно вход именуют от слова input, выход от output. Типа inPin и outPin будет much better :)
int VhodPin=2; //вход
int VihodPin=13 //выход
void setup()
pinMode(VhodPin, INPUT);
pinMode(VihodPin,OUTPUT);
void loop() //эта функция нужна, она собственно и вызывается в цикле
up_dn();
>
// Этот код надо оформлять в функцию и вызывать из loop()
// правда я не уверен, что ее нужно вызывать в цикле :)
// к примеру:
void up_dn()
if (digitalRead(VhodPin) == HIGH) // насколько я понимаю интересует переход из LOW в HIGH, для этого есть функция PulseIn()
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
>
>
это скинул пример. void loop() забыл поставить.
вот собственно программа сама. за ссылки спасибо, но уже все давно распечатано и по 1000000 раз штудировано :)
отладку веду в Proteus. когда нажимаю 2 кнопки StartPin и TormPin программа отрабатывает на ура весь цикл до (выделенного красным) потом если нажать кнопку StartPin, то программа все правильно тушит, если нажать сначала TormPin а потом StartPin, то ничего больше не происходит! если корректно все выполнить то она через раз возвращается в начало программы.
int StartPin=0; //вход для кнопки start stop engine
int TormPin=1; //вход для лягушки педали тормоза
int CamPin=2; //вход для камеры заднего вида
int ACCPin=8; //выход на реле зажигания АСС
int StPin=9; //выход на реле стартера
int MBPin=10; //выход на Блок питания ноутбука
int RemPin=11; //выход на включение усилителя (remote)
int CmPin=12; //выход кнопки переключения камеры заднего вида
int RSPin=13; //Выход кнопки для старта ноутбука
void setup()
/*Объявляем входы и выходы*/
pinMode(StartPin, INPUT);
pinMode(TormPin, INPUT);
pinMode(CamPin, INPUT);
pinMode(ACCPin, OUTPUT);
pinMode(StPin, OUTPUT);
pinMode(MBPin, OUTPUT);
pinMode(RemPin, OUTPUT);
pinMode(CmPin, OUTPUT);
pinMode(RSPin, OUTPUT);
void loop()
if (digitalRead(StartPin) == HIGH && digitalRead(TormPin) == HIGH) //сравнение 2 входов
digitalWrite(ACCPin, HIGH); //включаем зажигание
delay(150);
digitalWrite(StPin, HIGH); //включаем стартер
delay(200);
digitalWrite(StPin, LOW); //выключаем стартер через 10 сек
delay(50);
digitalWrite(MBPin, HIGH); //Подаем напряжение на блок питания ноутбука
delay(40);
digitalWrite(RSPin, HIGH); //нажатие кнопки ноутбука
delay(20);
digitalWrite(RSPin, LOW); //отпускаем кнопку
delay(1200);
digitalWrite(RemPin, HIGH); //remote усилителя
if (digitalRead(StartPin) == HIGH) //сравниваем значение кнопки
digitalWrite(ACCPin, LOW); //выключаем АСС
delay(100);
digitalWrite(RemPin, LOW); //Усилители
digitalWrite(RSPin, HIGH); //кнопка ноутбука
delay(100);
digitalWrite(RSPin, LOW); //отпускаем
delay(1200);
digitalWrite(MBPin, LOW); //глушим блок питания бука
if (digitalRead(VhodPin) == HIGH) // насколько я понимаю интересует переход из LOW в HIGH, для этого есть функция PulseIn()
если честно интересует немного другое. а именно авто переключение на камеру заднего вида. но как заставить выполняться программу когда она стопорится пока на входе HIGH, как писал выше.
если честно интересует немного другое. а именно авто переключение на камеру заднего вида. но как заставить выполняться программу когда она стопорится пока на входе HIGH, как писал выше.
Попробуй вот так:
void loop()
if ((digitalRead(StartPin) == HIGH) && (digitalRead(TormPin) == HIGH)) //сравнение 2 входов
digitalWrite(ACCPin, HIGH); //включаем зажигание
delay(150);
digitalWrite(StPin, HIGH); //включаем стартер
delay(200);
digitalWrite(StPin, LOW); //выключаем стартер через 10 сек
delay(50);
digitalWrite(MBPin, HIGH); //Подаем напряжение на блок питания ноутбука
delay(40);
digitalWrite(RSPin, HIGH); //нажатие кнопки ноутбука
delay(20);
digitalWrite(RSPin, LOW); //отпускаем кнопку
delay(1200);
digitalWrite(RemPin, HIGH); //remote усилителя
if ((digitalRead(StartPin) == HIGH) && (digitalRead(TormPin) == LOW)) //сравниваем значение кнопки
digitalWrite(ACCPin, LOW); //выключаем АСС
delay(100);
digitalWrite(RemPin, LOW); //Усилители
digitalWrite(RSPin, HIGH); //кнопка ноутбука
delay(100);
digitalWrite(RSPin, LOW); //отпускаем
delay(1200);
digitalWrite(MBPin, LOW); //глушим блок питания бука
Код сознательно не оптимизирован ;)
спасибо громадное за наводку. а что с основной прогой?
но как заставить выполняться программу когда она стопорится
Программа не может взять и остановиться :)
Она может зациклится или тупо стоять и ждать определенного события (считай тот же цикл).
пробовал так))) схема перестает вообще работать! :( если void loop() зацикливает программу, то почему она после когда все потушили не запускается по новой?
Программа не может взять и остановиться :)
Она может зациклится или тупо стоять и ждать определенного события (считай тот же цикл).
но событие есть)))
void loop()
if (digitalRead(VhodPin) == HIGH)
digitalWrite(VihodPin, HIGH); // вот первое, на котором останавливается
delay(100); //вот дальше
digitalWrite(VihodPin, LOW);
delay(100);
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
>
>
Код ТС работать не будет. Условия некорректны ;)
а в чем именно. hang::secret:
У тебя оба условия будут выполняться. Пофиг, нажат тормоз или нет. Условия не исключающие. Поэтому, я тебе показал, что тормоз надо опрашивать в обоих случаях.
Так еще попробуй.
void loop()
<
if ((digitalRead(StartPin) == HIGH)
if (digitalRead(TormPin) == HIGH)) //сравнение 2 входов
<
digitalWrite(ACCPin, HIGH); //включаем зажигание
delay(150);
digitalWrite(StPin, HIGH); //включаем стартер
delay(200);
digitalWrite(StPin, LOW); //выключаем стартер через 10 сек
delay(50);
digitalWrite(MBPin, HIGH); //Подаем напряжение на блок питания ноутбука
delay(40);
digitalWrite(RSPin, HIGH); //нажатие кнопки ноутбука
delay(20);
digitalWrite(RSPin, LOW); //отпускаем кнопку
delay(1200);
digitalWrite(RemPin, HIGH); //remote усилителя
>
else
<
digitalWrite(ACCPin, LOW); //выключаем АСС
delay(100);
digitalWrite(RemPin, LOW); //Усилители
digitalWrite(RSPin, HIGH); //кнопка ноутбука
delay(100);
digitalWrite(RSPin, LOW); //отпускаем
delay(1200);
digitalWrite(MBPin, LOW); //глушим блок питания бука
Мог попутать количество скобок, не обессудь :)
У тебя оба условия будут выполняться. Пофиг, нажат тормоз или нет. Условия не исключающие. Поэтому, я тебе показал, что тормоз надо опрашивать в обоих случаях.
Так еще попробуй.
void loop()
<
if ((digitalRead(StartPin) == HIGH)
if (digitalRead(TormPin) == HIGH)) //сравнение 2 входов
<
digitalWrite(ACCPin, HIGH); //включаем зажигание
delay(150);
digitalWrite(StPin, HIGH); //включаем стартер
delay(200);
digitalWrite(StPin, LOW); //выключаем стартер через 10 сек
delay(50);
digitalWrite(MBPin, HIGH); //Подаем напряжение на блок питания ноутбука
delay(40);
digitalWrite(RSPin, HIGH); //нажатие кнопки ноутбука
delay(20);
digitalWrite(RSPin, LOW); //отпускаем кнопку
delay(1200);
digitalWrite(RemPin, HIGH); //remote усилителя
>
else
<
digitalWrite(ACCPin, LOW); //выключаем АСС
delay(100);
digitalWrite(RemPin, LOW); //Усилители
digitalWrite(RSPin, HIGH); //кнопка ноутбука
delay(100);
digitalWrite(RSPin, LOW); //отпускаем
delay(1200);
digitalWrite(MBPin, LOW); //глушим блок питания бука
Мог попутать количество скобок, не обессудь :)
получается тогда, что если оба канала HIGH то действие выполнится, правильно. а потом else если на 2 каналах не будет HIGH то сработает второе правило. а это значит при движении нажмешь кнопку, понятно, ладно, проехали. а если тормоз)))))) сразу выполняется все что после else.
Таблицу соответствия пинов ардуины и атмеги имеешь перед глазами? Ничего не перепутано?
может тогда надо else if.
Конструкция if..else предоставляет больший контроль над процессом выполнения кода, чем базовый оператор if, позволяя осуществлять несколько проверок, объединенных вместе. Например, аналоговый вход может быть проверен и выполнено одно действие, если на входе меньше 500, или другой действие, если на входе 500 или больше. Код при этом может выглядеть так:
if (pinFiveInput = 1000)
// выполнять действие B
>
else
// выполнять действие C
>
Мы твое видение задачи не представляем, поэтому и советуем, считай, на ощупь. Но смысл ты улавливаешь - эт хорошо. Не спеши, разбирайся, понимание не сразу приходит ;)
смысл простой.
1. Сделать запуск двигателя по кнопке.
2. Управление питанием усилителей, мониторов, компа. Включение и выключение компа по кнопке.
3. Переключение на камеру заднего вида и назад.
значит.
1 и 2. нажимаем кнопку. Включается АСС. включаем стартер на 10 секунд. через 1 сек подаем питание на блок питания ноутбука и монитора. нажатие кнопки ноутбука. через 30 сек включение усилителей.
нажимаем кнопку еще раз. выключение АСС, усилителей. нажатие на кнопку выключения компа. через 1 минуту выключение блока питания ноутбука.
3. при включении задней передачи, нажатие на кнопку один раз, при выключении нажатие на кнопку 2 раза.. вот весь алгоритм.
я не прошу написать за меня, мне самому не интересен проект будет. Просто ткнуть как говорится носом :) Пересмотрел по 10 раз весь справочник arduino, перечитал, не могу понять что не так. может протеус глючит. пишу даже простой бегущий огонь на 8 светодиодов с кнопкой. нажимаю кнопку пробегает все и стопорится. нажимаю опять тоже самое. читаю инфу.. loop зацикливает программу. т.е. должны по нажатию кнопки бегать постоянно пока ресет не нажмешь или питание не сдернешь.
все, для камеры переключение, написал. спасибо Hamster за толчок носом в нужную сторону)))) остальное остается актуальным..
На вскидку могу сказать отличаются адреса и количество регистров у процов и тд. Поставь мегу 48,88,168 по идее это её братья, только с меньшей памятью программ.
Тоже задумал сделать систему Start/Stop по кнопке с помощью ардуино уно, но, ёптель, я никак не помышлял о том, чтобы тупо стартером 200мс крутить :) Я думал, что нужно для запуска двигателя по кнопке следующее:
1. Контрольный вход кнопки Start/Stop
2. Контрольный вход "Состояние сигнализации" (т.е. проверить на охране или нет)
3. Контрольный вход "ключ зажигания" (т.е. наличие разрешающего сигнала с некоего контрольного устройства, активируемого дистанционно или посредством вставки ключа или совмещённое с ним).
4. Контрольный вход "тахометр".
5. Контрольный вход "спидометр".
6. Управляющий выход "Зажигание".
7. Управляющий выход "Стартер".
Логику работы этого дела представлял себе так:
1. Ардуино без ключа работать не должно. Включаться и запускать циклическую программу должно только при вставке ключа (грубо говоря это дублирует контрольный вход 3. Можно от него отказаться заменив просто подачей питания на ардуино).
2. Далее при вставке ключа циклическая программа запускается и начинает опрашивать контрольные входы. Главным условием для разрешения является состояние "снято в охраны" на входе "состояние сигнализации".
3. Затем каким-то образом требуется проконтролировать состояние скорости. Если на входе "спидометра" нет импульсов (машина стоит на месте), то кнопка старт/стоп сработает. Если авто в движении - кнопка старт/стоп блокирована и не реагирует на нажатия.
4. Также необходимо как-то проконтролировать обороты двигателя. Притом там несколько функций: с одной стороны отсутствие оборотов должно при нажатии кнопки старт/стоп режим запуска двигателя. Если обороты уже есть до нажатия на кнопку, то должна быть выполнена остановка двигателя и через секунду отключение зажигания. Но помимо этого в цикле запуска двигателя этот вход должен помимо всего прочего проконтролировать нарастание оборотов двигателя. Т.е., скажем, ардуина крутит стартером 2,5-3 секунды ИЛИ пока на входе "тахометр" не появятся обороты выше, скажем, 400-500 об/мин. Вот это я вообще пока не знаю как можно реализовать. какими циклами, чтобы и интервал измерений небольшой был, и при этом нормальная разрешающая способность (т.е. чтоб уж обороты не сотнями считать, а хотя бы десятки различать).
Притом, скажем, постоянно контролировать обороты двигателя и реализовать такую функцию, чтобы, скажем, если на ходу сигнал на входе "тахометр" пропал (двигатель заглох) не зависимо от скорости (может заглох при трогании), то ардуина автоматически должна вырубить зажигание, чтобы дать возможность повторно запустить движок.
Короче, может быть кто-нибудь уже сделал нормальный старт/стоп на ардуине? Или может вообще без неё!?
Решил поставить кнопку Engine Start Stop в машину после того как сломался замок, кнопка заказана проект начат.
обзор кнопки старт стоп с али, подключени на стенде и рассмотрение режимов работы, способ обхода метки, если антена .
Читайте также: