Кнопка СТАРТ\СТОП

Serega174
Offline
Зарегистрирован: 27.12.2013

Всем здравсте. Хочу сделать кнопку старт/стоп и мне посоветовали сделать на микроконтроллере. Помогите разобраться 

1. На каком микроконтроллере собирать. Мне говорили на Arduino UNO.

2. Как в дальнейшем прошить контроллер.

3. И нужна помощь с кодом программы.

Что именно необходимо 

1. Если стоит на сигнализации кнопка недолжна быть активна 

2. Долговременное нажатие (нажал и держишь в течение 1-2 сек) активирует ACC режим. (На кнопке загорается желтый светодиод-ЭТО К ПРИМЕРУ)

3. Короткое нажатие (нажал и отпустил) включает зажигание, включает режим АСС, но не запускает двигатель(Загорается зеленый светодиод- ЭТО ТАКЖЕ К ПРИМЕРУ).

4. Для того чтобы запустить двигатель ():

        А. Зажигание выключено или включен режим АСС - выжимаем педаль тормоза и нажимаем кнопку (Двигатель должен будет запустится только после того как накачает бензонасос (ЗАДЕРЖКА 3-3,5 сек)

        Б. Зажигание уже включено - Нажимаем педаль тормоза и нажимаем кнопку

5. Двигатель запустился подается сигнал с тахометра и стартер отключается

6. Для того чтобы заглушить двигатель сново нажимаем на кнопку.

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Вначале разберитесь какие напряжения вам нужно комутировать и какой там ток. Потом разберитесь в каком порядке они должны комутироваться - это все зависит от электрики автомобиля. Я вот могу для ИЖ-2126 сделать программу управления.

Looka
Offline
Зарегистрирован: 24.04.2012

Serega174 пишет:

Всем здравсте. Хочу сделать кнопку старт/стоп и мне посоветовали сделать на микроконтроллере. Помогите разобраться 

1. На каком микроконтроллере собирать. Мне говорили на Arduino UNO.

2. Как в дальнейшем прошить контроллер.

3. И нужна помощь с кодом программы.

 

1. На любом.  Уно тоже подойдет.
2. Установить среду IDE, написать программку, залить в контроллер.  На этом сайте не только форум, смотрите другие разделы, среда разработки, пронраммирование......   Сами найдете?
3. Вам помощь нужна? Тогда начните что то сами писать, начните с примеров готовых, форум почитайте. Упретесь - обращайтесь, всегда тут помогут.  За Вас код никто не напишет, во всяком случае не в этом разделе. 

и тд....

Удачи

 

DimaP.
Offline
Зарегистрирован: 21.04.2013

http://arduino.ru/forum/programmirovanie/knopka-zapuska-dvigatelya

вот здесь люди занимались данным вопросом!

DimaP.
Offline
Зарегистрирован: 21.04.2013

программа для 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);
     }
}

Может и поможет чем нибудь тебе!!

но как показали практические испытиния все не настолько гладко!! при сильном морозе проявляются Глюки, так что над схемотехникой надо работать!!

 

Alman
Offline
Зарегистрирован: 03.03.2014

Замечательный проект! 

Еще бы схемку включения всего этого к авто :) было бы ну вообще прекрасно 

 

С уважением, Александр

Nemesis_ISS
Offline
Зарегистрирован: 30.12.2017

Доброго Времени Суток!

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

например: нажимаем кнопку - выполняется программа.после выполнения - программа останавливается до следующего нажатия на кнопку ? 

поделитесь мыслями :))

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Както так

#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;
 }

}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Держишь кнопку программа работает.Отпустил стоп. Но вообще все зависит от структуры программы.

/**/
//-----------------------------------
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 байт.
*/