Страница 1 из 16 123456711 ... ПоследняяПоследняя
Показано с 1 по 10 из 152
  1. #1
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    25
    Вес репутации
    132

    По умолчанию Кнопка Старт/Стоп на МК Arduino

    Как подключить микроконтроллер(МК) на питание я знаю, через преобразователь из 12v в 5v. Из МК выходит 3 режима
    1. Режим АСС
    2. Режим зажигания
    3. Режим стартер

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

Название:	схема Arduina.jpg 
Просмотров:	4567 
Размер:	56.3 Кб 
ID:	17454

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Через реле, для стартера реле понадобится соответствующее его току
    Название: BP.GIF
Просмотров: 13981

Размер: 1.7 Кб
    Последний раз редактировалось Chip; 05.01.2014 в 14:25.

  3. #3
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    25
    Вес репутации
    132

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Я правильно понял??

    Нажмите на изображение для увеличения. 

Название:	схема Arduina.jpg 
Просмотров:	3329 
Размер:	64.9 Кб 
ID:	17461
    Последний раз редактировалось Сергей174; 07.01.2014 в 10:48.

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    30 и 85 это обмотка реле?
    У Вас в автомобиле сигналы ACC, Стартер и Зажигание, в активном состоянии что на выходе выдают?

  5. #5
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    25
    Вес репутации
    132

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Обмотка реле 85 и 86.
    Я не знаю что они выдают, Кнопку парень на сайте Drive2 делал как подцеплял говорит, что не помнит, и посмотреть сейчас не может, так как машина далеко на ремонте. Мне он скинул скетчь программы, могу отправить

  6. #6
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    34
    Вес репутации
    133

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Привет Сергей174 скинь скетчь ,тоже хотелось бы реализовать такое дело ,только я хочу добавить в схему еще и "AD2000-M",это типа того что в "перевозчике" получится.Вложение 17465

  7. #7
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    25
    Вес репутации
    132

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Хорошо скину ближе к вечеру.
    maestro777 Твое вложение не открывается, залей еще раз

  8. #8
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    25
    Вес репутации
    132

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Вот скетчь, Ты знаешь как подключить выходы??
    **byte ACCPin = 11; //Выход на транзистор переферии ACC
    **byte EnginePin = 10; //Выход на транзистор зажигания
    **byte StarterPin = 9; //Выход на транзистор стартера
    **
    **byte ButtonPin = 8; //Вход + с кнопки <----------------------------- Стягивающий резистор на "-"
    **byte StopPin = 12; //Вход с тормоза <----------------------------- Стягивающий резистор на "-"
    **
    **byte ImmoPin = 7; //Вход с иммо <----------------------------- Подтягивающий резистор на "+"
    **byte TahoPin = 6; //Вход с тахометра <----------------------------- Стягивающий резистор на "-"
    **
    **byte WordsPin = 5; //Выход на глазок 1
    **byte YellowGlazokPin = 4; //Выход на глазок 2
    **byte GreenGlazokPin = 3; //Выход на глазок 3
    **
    **byte statusEngine = 0;
    **//byte rotate = 0;
    **unsigned int rotate=0;
    **boolean stateACC = false;
    **
    **unsigned long lastPress = 0;
    **unsigned long lastImmo = 0;
    **unsigned long splitTime = 0;
    **unsigned long time =0;
    **
    **byte stat = 0;
    **
    **void setup(){
    ****pinMode(EnginePin, OUTPUT);
    ****pinMode(StarterPin, OUTPUT);
    ****pinMode(ACCPin, OUTPUT);
    ****pinMode(WordsPin, OUTPUT);
    ****pinMode(YellowGlazokPin, OUTPUT);
    ****pinMode(GreenGlazokPin, OUTPUT);
    ****//time = 0;
    ****lastImmo*=*millis();
    ****lastPress*=*millis();
    ****Serial.begin(9600);
    ****Serial.println("Arduino is started");
    **}
    **
    **// 0 - Все выключенно
    **// 1 - Включено только зажигание
    **// 2 - Крутиться стартер, ждем оборотов
    **// 3 - Двигатель работает, все включено
    **// 4 - Неудачная попытка запуска, включено только зажигание
    **// 5 - Двигатель заглушен, АСС пока еще работает
    **
    **void loop(){
    ********
    ****if (stat != statusEngine) {stat = statusEngine; Serial.println(stat);}
    ****unsigned long newTime = millis() - lastPress;
    ****unsigned int button = pressButton();
    ****//if (button != 0) Serial.println(button);
    **
    ******lastImmoTest();
    ****switch (statusEngine) {
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    ****case 0:
    ****
    ****
    ********digitalWrite(GreenGlazokPin, LOW);
    ********if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
    ********if (millis() - lastImmo > 10000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
    ********
    ********
    ******if (button == 1500 && stateACC) {
    ********StopAll();
    ******}
    ******
    ******else if (button == 1500 && !stateACC) StartACC();
    ******
    ******else if (button != 0 && millis() - lastImmo > 2000 && newTime > 500) {
    ********StartEngine();
    ********statusEngine*=*1;
    ******}
    ******
    ******
    ******break;
    **
    **
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    ****case 1:
    ****if (digitalRead(ImmoPin) == LOW) StopAll();
    **********digitalWrite(WordsPin, HIGH);
    ********
    ********if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
    ********
    ********if (millis() - lastImmo > 2000 && StopIsPress() && newTime < 900)
    ********{
    **********digitalWrite(GreenGlazokPin, HIGH);
    **********digitalWrite(WordsPin, HIGH);
    ********}
    *******/* else
    ********{
    **********digitalWrite(GreenGlazokPin,*!digitalRea d(GreenGlazokPin));
    **********delay(100);
    ********}*/
    ********
    ********
    ******if (button == 1500) {
    ********StopAll();
    ******}
    ******else if (button != 0 && newTime > 500) {
    ********if (!stateACC)
    **********StopAll();
    ********else
    ********{********
    **********StopEngine();
    **********statusEngine*=*5;
    ********}
    ******}
    ******else if (newTime > 800 && newTime < 900 && StopIsPress()) {
    ********StartStarter();
    ********statusEngine*=*2;
    ******}
    ******break;
    **
    **
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    **
    ****case 2:
    ****
    ****
    **********digitalWrite(WordsPin, HIGH);
    **********digitalWrite(GreenGlazokPin, HIGH);
    **********if (stateACC) digitalWrite(YellowGlazokPin, HIGH);
    ********
    **
    ******if (digitalRead(TahoPin) == HIGH) {
    ********rotate++;
    ********while (digitalRead(TahoPin) == HIGH) if (digitalRead(ImmoPin) == LOW) {StopAll(); break;}
    ********
    ******}
    **
    ******if (rotate>=2) {
    ********unsigned int rpm = (rotate*60000*10000/2)/(micros()-splitTime);
    ********Serial.print("rpm: ");Serial.println(rpm);
    ********rotate=0;
    ********splitTime*=*micros();
    **
    ********if (rpm>1500) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
    **********StopStarter();
    **********StartACC();
    **********statusEngine*=*3;
    **********Serial.println("Engine is WORK!!");
    **********break;
    ********}
    ******}
    ******
    ******if (button != 0 && newTime > 500) {
    ********StopAll();
    ******}
    ******else if (newTime > 5000 || !StopIsPress()){
    ********StopStarter();
    ********statusEngine*=*4;
    ******}
    ******break;
    **
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    **
    ****case 3:
    ********digitalWrite(GreenGlazokPin, HIGH);
    ********digitalWrite(YellowGlazokPin, LOW);
    ********if (newTime > 5000) digitalWrite(WordsPin, LOW); else digitalWrite(WordsPin, HIGH);
    ********
    ******if (button == 1500) {
    ********StopAll();*****
    ******}
    ******else if (button != 0 && newTime > 500) {
    ********StopEngine();
    ********statusEngine*=*5;
    ******}
    ******break;
    **
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    **
    ****case 4:
    ****
    ********digitalWrite(WordsPin, HIGH);
    ********digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
    ********digitalWrite(YellowGlazokPin, LOW);
    ****
    ******if (button == 1500 || newTime > 10000) {
    ********StopAll();***
    ******}
    ******else if (button != 0 && newTime > 500 && StopIsPress()) {
    ********StartStarter();
    ********statusEngine*=*2;
    ******}
    ******else if (button != 0 && newTime > 500 && !StopIsPress()) {
    ********StopAll();
    ******}
    **
    ******break;
    **
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    **
    ****case 5:
    ****
    *********digitalWrite(GreenGlazokPin, LOW);
    ********if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
    ********
    ********if (newTime > 5000)
    ********{
    **********if (millis() - lastImmo > 5000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
    ********}
    ********else
    **********digitalWrite(WordsPin, HIGH);
    ********
    ****
    ******if (button == 1500) {
    ********StopAll();
    ******}
    ******else if (millis() - lastImmo < 2000) StopAll();
    ******else if (button != 0 && newTime > 500) {
    ********StartEngine();
    ********statusEngine*=*1;
    ******}
    ******lastImmoTest();
    ******break;
    ******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
    **
    **
    ****}**
    **}
    **
    ****void StartEngine(){
    ****digitalWrite(EnginePin, HIGH);
    ******Serial.println("Engine is ON");
    ******lastPress*=*millis();
    ****}
    ****
    ****void StopEngine(){
    ****digitalWrite(EnginePin, LOW);
    ******Serial.println("Engine is OFF");
    ******lastPress*=*millis();
    ****}
    ****
    ****void StopAll(){
    ****digitalWrite(EnginePin, LOW);
    ****digitalWrite(StarterPin, LOW);
    ****digitalWrite(ACCPin, LOW);
    ******Serial.println("All OFF");
    *****while (!digitalRead(ButtonPin)){}
    ******stateACC*=*false;
    ******lastPress*=*millis();
    ******statusEngine*=*0;
    ******lastPress*=*millis();
    ****}
    ****
    ****void StartStarter(){
    ****digitalWrite(StarterPin, HIGH);
    ******Serial.println("Starter START!");
    ******splitTime*=*micros();
    ******lastPress*=*millis();
    ****}
    ****
    ****void StopStarter(){
    ****digitalWrite(StarterPin, LOW);
    ******Serial.println("Starter if OFF!");
    ******lastPress*=*millis();
    ****}
    ****
    ****void StartACC(){
    ****digitalWrite(ACCPin, HIGH);
    ******Serial.println("Starter ACC!");
    ******stateACC*=*true;
    ******lastPress*=*millis();
    ****}
    ****
    ****void lastImmoTest(){
    ******if (digitalRead(ImmoPin) == LOW) { //<----------------------------- Поменял на LOW
    ********lastImmo*=*millis();
    ********Serial.println("Immo+");
    ******}
    ****}
    ****
    ****unsigned int pressButton(){
    ******unsigned long newTime = millis();
    ******boolean currentPosition = digitalRead(ButtonPin);
    ****
    ******if (currentPosition == HIGH){
    ********delay(50);
    ********currentPosition*=*digitalRead(ButtonPin);
    ******}
    ******while (!currentPosition) {
    ********currentPosition*=*digitalRead(ButtonPin);
    ********if (millis() - newTime > 1000) return 1500;
    ******}
    ******newTime*=*millis() - newTime;
    ******if (newTime < 60) newTime = 0;
    ******return newTime;
    ****}
    ****
    ****boolean StopIsPress(){
    ******return digitalRead(StopPin);
    ****}

  9. #9
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    34
    Вес репутации
    133

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Привет Сергей ,ну и код громадный да еще и звездочек сколько ,новогодние снежинки прям ,ща разберемся шо куда!

  10. #10
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    34
    Вес репутации
    133

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Задолбался удалять звезды ну вроде код пошел:
    PHP код:
    byte ACCPin 11//Выход на транзистор переферии ACC
    byte EnginePin 10//Выход на транзистор зажигания
    byte StarterPin 9//Выход на транзистор стартера
    byte ButtonPin 8//Вход + с кнопки <----------------------------- Стягивающий резистор на "-"
    byte StopPin 12//Вход с тормоза <----------------------------- Стягивающий резистор на "-"
    byte ImmoPin 7//Вход с иммо <----------------------------- Подтягивающий резистор на "+"
    byte TahoPin 6//Вход с тахометра <----------------------------- Стягивающий резистор на "-"
    byte WordsPin 5//Выход на глазок 1 
    byte YellowGlazokPin 4//Выход на глазок 2 
    byte GreenGlazokPin 3//Выход на глазок 3
    byte statusEngine 0;
    //byte rotate = 0;
    unsigned int rotate=0;
    boolean stateACC false;
    unsigned long lastPress 0;
    unsigned long lastImmo 0;
    unsigned long splitTime 0;
    unsigned long time =0;
    byte stat 0;
    void setup(){
    pinMode(EnginePinOUTPUT);
    pinMode(StarterPinOUTPUT);
    pinMode(ACCPinOUTPUT);
    pinMode(WordsPinOUTPUT);
    pinMode(YellowGlazokPinOUTPUT);
    pinMode(GreenGlazokPinOUTPUT);
    //time = 0;
    lastImmo=millis();
    lastPress=millis();
    Serial.begin(9600);
    Serial.println("Arduino is started");
    }

    // 0 - Все выключенно
    // 1 - Включено только зажигание
    // 2 - Крутиться стартер, ждем оборотов
    // 3 - Двигатель работает, все включено
    // 4 - Неудачная попытка запуска, включено только зажигание
    // 5 - Двигатель заглушен, АСС пока еще работает
    void loop(){
    if (
    stat != statusEngine) {stat statusEngineSerial.println(stat);}
    unsigned long newTime millis() - lastPress;
    unsigned int button pressButton();
    //if (button != 0) Serial.println(button);
    lastImmoTest();
    switch (
    statusEngine) {
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
    case 0:
    digitalWrite(GreenGlazokPinLOW);
    if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
    if (
    millis() - lastImmo 10000digitalWrite(WordsPinHIGH); else digitalWrite(WordsPinLOW);
    if (
    button == 1500 && stateACC) {
    StopAll();
    }
    else if (
    button == 1500 && !stateACCStartACC();
    else if (
    button != && millis() - lastImmo 2000 && newTime 500) {
    StartEngine();
    statusEngine=1;
    }
    break;
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
    case 1:
    if (
    digitalRead(ImmoPin) == LOWStopAll();
    digitalWrite(WordsPinHIGH); 
    if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
    if (
    millis() - lastImmo 2000 && StopIsPress() && newTime 900
    {
    digitalWrite(GreenGlazokPinHIGH); 
    digitalWrite(WordsPinHIGH);
    }
     else
    {
    digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
    delay(100);
    }
     
    if (
    button == 1500) {
    StopAll();
    }
    else if (
    button != && newTime 500) {
    if (!
    stateACC
    StopAll();
    else
    {
    StopEngine();
     
    statusEngine=5;
     }
     }
     else if (
    newTime 800 && newTime 900 && StopIsPress()) {
     
    StartStarter();
     
    statusEngine=2;
     }
     break;
     
     
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 2:
     
    digitalWrite(WordsPinHIGH); 
     
    digitalWrite(GreenGlazokPinHIGH); 
     if (
    stateACCdigitalWrite(YellowGlazokPinHIGH);
     if (
    digitalRead(TahoPin) == HIGH) {
     
    rotate++;
     while (
    digitalRead(TahoPin) == HIGH) if (digitalRead(ImmoPin) == LOW) {StopAll(); break;}
     }
     if (
    rotate>=2) {
     
    unsigned int rpm = (rotate/60000/10000/2)/(micros()-splitTime);
     
    Serial.print("rpm: ");Serial.println(rpm);
     
    rotate=0;
     
    splitTime=micros();
     if (
    rpm>1500) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
     
    StopStarter();
     
    StartACC();
     
    statusEngine=3;
     
    Serial.println("Engine is WORK!!");
     break;
     }
     }
     if (
    button != && newTime 500) { 
     
    StopAll();
     }
     else if (
    newTime 5000 || !StopIsPress()){
     
    StopStarter();
     
    statusEngine=4;
     }
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 3:
     
    digitalWrite(GreenGlazokPinHIGH);
     
    digitalWrite(YellowGlazokPinLOW);
     if (
    newTime 5000digitalWrite(WordsPinLOW); else digitalWrite(WordsPinHIGH);
     if (
    button == 1500) {
     
    StopAll();
     }
     else if (
    button != && newTime 500) { 
     
    StopEngine();
     
    statusEngine=5;
     }
     break;
     
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
     
    case 4:
     
     
    digitalWrite(WordsPinHIGH);
     
    digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
     
    digitalWrite(YellowGlazokPinLOW);
     if (
    button == 1500 || newTime 10000) {
     
    StopAll();
     }
     else if (
    button != && newTime 500 && StopIsPress()) {
     
    StartStarter();
     
    statusEngine=2;
     }
     else if (
    button != && newTime 500 && !StopIsPress()) {
     
    StopAll();
     }
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 5:
     
    digitalWrite(GreenGlazokPinLOW);
     if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
     if (
    newTime 5000
     {
     if (
    millis() - lastImmo 5000digitalWrite(WordsPinHIGH); else digitalWrite(WordsPinLOW);
     }
     else 
     
    digitalWrite(WordsPinHIGH);
     if (
    button == 1500) {
     
    StopAll();
     }
     else if (
    millis() - lastImmo 2000StopAll();
     else if (
    button != && newTime 500) {
     
    StartEngine();
     
    statusEngine=1;
     }
     
    lastImmoTest();
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    }
     }

    void StartEngine(){
    digitalWrite(EnginePinHIGH);
    Serial.println("Engine is ON");
    lastPress=millis();
     }
     
    void StopEngine(){
     
    digitalWrite(EnginePinLOW);
     
    Serial.println("Engine is OFF");
     
    lastPress=millis();
     }
     
    void StopAll(){
     
    digitalWrite(EnginePinLOW);
     
    digitalWrite(StarterPinLOW);
     
    digitalWrite(ACCPinLOW);
     
    Serial.println("All OFF"); 
     while (!
    digitalRead(ButtonPin)){}
     
    stateACC=false;
     
    lastPress=millis();
     
    statusEngine=0;
     
    lastPress=millis(); 
     }
     
     
    void StartStarter(){
     
    digitalWrite(StarterPinHIGH);
     
    Serial.println("Starter START!");
     
    splitTime=micros();
     
    lastPress=millis();
     }
     
    void StopStarter(){
     
    digitalWrite(StarterPinLOW);
     
    Serial.println("Starter if OFF!");
     
    lastPress=millis();
     }
     
     
    void StartACC(){
     
    digitalWrite(ACCPinHIGH);
     
    Serial.println("Starter ACC!");
     
    stateACC=true;
     
    lastPress=millis();
     }
     
    void lastImmoTest(){
     if (
    digitalRead(ImmoPin) == LOW) { //<----------------------------- Поменял на LOW
     
    lastImmo=millis();
     
    Serial.println("Immo+");
     }
     }
     
     
    unsigned int pressButton(){
     
    unsigned long newTime millis();
     
    boolean currentPosition digitalRead(ButtonPin);
     if (
    currentPosition == HIGH){ 
     
    delay(50);
     
    currentPosition=digitalRead(ButtonPin); 
     }
     while (!
    currentPosition) {
     
    currentPosition=digitalRead(ButtonPin);
     if (
    millis() - newTime 1000) return 1500;
     }
     
    newTime=millis() - newTime;
     if (
    newTime 60newTime 0;
     return 
    newTime
     }
     
    boolean StopIsPress(){
     return 
    digitalRead(StopPin); 
     } 
    сейчас прошью и буду пробовать проверять на работоспособность ,а выхода там все описаны в прошивке ,что-то не поймешь спрашивай.

Страница 1 из 16 123456711 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 4 (пользователей: 0 , гостей: 4)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •