Кнопка СТАРТ\СТОП
- Войдите на сайт для отправки комментариев
Всем здравсте. Хочу сделать кнопку старт/стоп и мне посоветовали сделать на микроконтроллере. Помогите разобраться
1. На каком микроконтроллере собирать. Мне говорили на Arduino UNO.
2. Как в дальнейшем прошить контроллер.
3. И нужна помощь с кодом программы.
Что именно необходимо
1. Если стоит на сигнализации кнопка недолжна быть активна
2. Долговременное нажатие (нажал и держишь в течение 1-2 сек) активирует ACC режим. (На кнопке загорается желтый светодиод-ЭТО К ПРИМЕРУ)
3. Короткое нажатие (нажал и отпустил) включает зажигание, включает режим АСС, но не запускает двигатель(Загорается зеленый светодиод- ЭТО ТАКЖЕ К ПРИМЕРУ).
4. Для того чтобы запустить двигатель ():
А. Зажигание выключено или включен режим АСС - выжимаем педаль тормоза и нажимаем кнопку (Двигатель должен будет запустится только после того как накачает бензонасос (ЗАДЕРЖКА 3-3,5 сек)
Б. Зажигание уже включено - Нажимаем педаль тормоза и нажимаем кнопку
5. Двигатель запустился подается сигнал с тахометра и стартер отключается
6. Для того чтобы заглушить двигатель сново нажимаем на кнопку.
Вначале разберитесь какие напряжения вам нужно комутировать и какой там ток. Потом разберитесь в каком порядке они должны комутироваться - это все зависит от электрики автомобиля. Я вот могу для ИЖ-2126 сделать программу управления.
Всем здравсте. Хочу сделать кнопку старт/стоп и мне посоветовали сделать на микроконтроллере. Помогите разобраться
1. На каком микроконтроллере собирать. Мне говорили на Arduino UNO.
2. Как в дальнейшем прошить контроллер.
3. И нужна помощь с кодом программы.
1. На любом. Уно тоже подойдет.
2. Установить среду IDE, написать программку, залить в контроллер. На этом сайте не только форум, смотрите другие разделы, среда разработки, пронраммирование...... Сами найдете?
3. Вам помощь нужна? Тогда начните что то сами писать, начните с примеров готовых, форум почитайте. Упретесь - обращайтесь, всегда тут помогут. За Вас код никто не напишет, во всяком случае не в этом разделе.
и тд....
Удачи
http://arduino.ru/forum/programmirovanie/knopka-zapuska-dvigatelya
вот здесь люди занимались данным вопросом!
программа для Arduino uno
//константы const int ACCPin = 9; //контакт подключения реле АСС const int IG2Pin = 12; // контакт подключения доп оборудования const int IG1Pin = 10; // контакт подключения "зажигание" const int STARTPin = 11; // контакт подключения реле стартера const int passengerPin = 6; // контакт контроля нахождения людей в салоне const int doorPin = 5; // контакт контроля состояния тригеров дверей const int clutch_pedalPin = 3; //контакт контроля состояния педали сцепления const int indicatorPin = 7; //контакт контроля состояния индикатора заряда батареи аккумуляторов const int brakePin = 2; //контакт контроля состояния ручного тормоза const int start_stopButton = 1 ; // кнопка старт стоп const int safeSist = 8; //имобилайзер boolean lastButton = 0; int Button = LOW; int ledPin = 13; int interval = 100; int interval2 = 1000; int interval3 = 300; int interval4 = 270; unsigned long previousMillis = 0; int ledMig = LOW; int regim = 0; int flag = 0; unsigned long pvMillis = 0; int val=0; unsigned long Time = 0; unsigned long TimeOFF = 0; long ButtMillis = 0; int value = 0; //переменные int passenger = 0; //переменная для хранения данных с контакта контроля нахождения людей в салоне int door = 0;//переменная для хранения данных с контакта контроля состояния тригеров дверей int indicator = 0; //переменная для хранения данных с индикатора заряда АКБ int brake = 0; //переменная для хранения данных с контакта индикатора ручного тормоза int startButton = 0; //переменная для хранения данных с кнопки старт стоп int clutch_pedal = 0; //переменная для хранения данных с контакта контроля педали сцепления int safe = 0; void setup() { // задаем режим выхода для порта, подключенного к реле pinMode(ACCPin, OUTPUT); pinMode(IG2Pin, OUTPUT); pinMode(IG1Pin, OUTPUT); pinMode(STARTPin, OUTPUT); pinMode(ledPin, OUTPUT); // задаем режим входа для портов подключенных к кнопкам и датчикам pinMode (passengerPin, INPUT); pinMode (doorPin, INPUT); pinMode (clutch_pedalPin, INPUT); pinMode (indicatorPin, INPUT); pinMode (brakePin, INPUT); pinMode (start_stopButton, INPUT); pinMode (safeSist, INPUT); } void loop() { // код АСС passenger = digitalRead (passengerPin); //сохраняем состояние с контакта контроля пассажиров в переменную door = digitalRead (doorPin); //сохраняем состояние с контакта контроля тригеров дверей в переменную if (door == HIGH && flag == 0) //если дверь открыта , ТО { regim ++; flag = 1; if(regim>2) { regim = 1; } } if(door == LOW && flag == 1) { flag = 0; } if(regim == 1) { if(passenger==HIGH) { digitalWrite(ACCPin, HIGH); } if(passenger == LOW && IG2Pin == LOW ) { unsigned long curMillis = millis(); if(curMillis - pvMillis > interval2) { pvMillis = curMillis; val ++ ; } } else { val = 0; } if(val >=180 ) { digitalWrite(ACCPin, LOW); } } if(regim == 2) { if(passenger == LOW && IG2Pin == LOW ) { unsigned long curMillis = millis(); if(curMillis - pvMillis > interval2) { pvMillis = curMillis; val ++ ; } } else { val = 0; } if(val >=300) { digitalWrite(ACCPin, LOW); } } // код запуска startButton = digitalRead(start_stopButton);//сохраняем состояние с контакта кнопки в переменную clutch_pedal = digitalRead(clutch_pedalPin);//сохраняем состояние с контакта педали сцепления в переменную indicator = digitalRead(indicatorPin);//сохраняем состояние с индикатора заряда АКБ в переменную brake = digitalRead(brakePin); // состояние ручного тормоза safe = digitalRead (safeSist); if (startButton == HIGH&& brake== HIGH) { if (millis() - ButtMillis > 300) { ButtMillis = millis(); value ++; } } else { value = 0; } if(value >=5) { Button = !Button; value = 0; } if(Button==HIGH) { digitalWrite(IG2Pin, HIGH); digitalWrite(IG1Pin, HIGH); if (indicator == LOW) { led(); } } if(indicator == LOW && clutch_pedal == HIGH && safe == HIGH) { unsigned long curMillis = millis(); if(curMillis - Time > interval3) { Time = curMillis; digitalWrite(STARTPin, HIGH); } } if (clutch_pedal == LOW || safe == LOW) digitalWrite(STARTPin, LOW); if (indicator == HIGH) { unsigned long curMillis = millis(); if(curMillis - TimeOFF > interval4) { TimeOFF = curMillis; digitalWrite(STARTPin, LOW); digitalWrite(ledPin, HIGH); } } if(Button==0) { digitalWrite(IG2Pin, LOW); digitalWrite(IG1Pin, LOW); digitalWrite(ledPin, LOW); digitalWrite(STARTPin, LOW); } } void led() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; ledMig = !ledMig; digitalWrite(ledPin, ledMig); } }Может и поможет чем нибудь тебе!!
но как показали практические испытиния все не настолько гладко!! при сильном морозе проявляются Глюки, так что над схемотехникой надо работать!!
Замечательный проект!
Еще бы схемку включения всего этого к авто :) было бы ну вообще прекрасно
С уважением, Александр
Доброго Времени Суток!
Господа,не подскажите ли,как сделать кнопку , после нажатия которой осуществляется запуск программы ?
например: нажимаем кнопку - выполняется программа.после выполнения - программа останавливается до следующего нажатия на кнопку ?
поделитесь мыслями :))
Както так
#define knopka 2 bool run_program; void setup(){ pinMode(knopka, INPUT); } void loop(){ if(digitalRead(knopka))run_program = 1; if (run_program) { //Выполняется заданная программа run_program = 0; } }Держишь кнопку программа работает.Отпустил стоп. Но вообще все зависит от структуры программы.
/**/ //----------------------------------- const byte btnPin =/*нога кнопки*/2; const byte ledPin =/*нога светодиода*/13; //----------------------------------- void setup() { pinMode(btnPin, INPUT_PULLUP); /*setup() программы*/ pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(btnPin)) return; /*loop() программы*/ digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); } /*Скетч использует 1100 байт (3%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт. */