-
Вложений: 1
Кнопка Старт/Стоп на МК Arduino
Как подключить микроконтроллер(МК) на питание я знаю, через преобразователь из 12v в 5v. Из МК выходит 3 режима
1. Режим АСС
2. Режим зажигания
3. Режим стартер
как подключить выходы с платы на провода этих режимов автомобиля. Это примерная схема, поправте что не нужно кудадобавить и изменить
Вложение 17454
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
Через реле, для стартера реле понадобится соответствующее его току
Вложение 17455
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
Я правильно понял??
Вложение 17461
-
Re: Кнопка Старт/Стоп на МК Arduino
30 и 85 это обмотка реле?
У Вас в автомобиле сигналы ACC, Стартер и Зажигание, в активном состоянии что на выходе выдают?
-
Re: Кнопка Старт/Стоп на МК Arduino
Обмотка реле 85 и 86.
Я не знаю что они выдают, Кнопку парень на сайте Drive2 делал как подцеплял говорит, что не помнит, и посмотреть сейчас не может, так как машина далеко на ремонте. Мне он скинул скетчь программы, могу отправить
-
Re: Кнопка Старт/Стоп на МК Arduino
Привет Сергей174 скинь скетчь ,тоже хотелось бы реализовать такое дело ,только я хочу добавить в схему еще и "AD2000-M",это типа того что в "перевозчике" получится.Вложение 17465
-
Re: Кнопка Старт/Стоп на МК Arduino
Хорошо скину ближе к вечеру.
maestro777 Твое вложение не открывается, залей еще раз
-
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);
****}
-
Re: Кнопка Старт/Стоп на МК Arduino
Привет Сергей ,ну и код громадный да еще и звездочек сколько ,новогодние снежинки прям ;) ,ща разберемся шо куда!
-
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(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,!digitalRead(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);
}
сейчас прошью и буду пробовать проверять на работоспособность ,а выхода там все описаны в прошивке ,что-то не поймешь спрашивай.
-
Re: Кнопка Старт/Стоп на МК Arduino
maestro, извини пожалуйста, я пока новичек в программировании, учусь так сказать, а у вас комментариев к выполняемым командам нет совсем! мне трудно понять что к чему, а очень бы хотелось!
-
Re: Кнопка Старт/Стоп на МК Arduino
Цитата:
Сообщение от maestro777
выхода там все описаны в прошивке ,что-то не поймешь спрашивай.
Меня интересует вся схема подключения. с подтягивающими и стягивающими резисторами я понял, но там еще нужны транзисторы как их подключать я не понял. Как подключишь расскажешь как подключил
-
Re: Кнопка Старт/Стоп на МК Arduino
Короче код работает вот только почему то не читает обороты где то тут косяк:
Цитата:
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;
}
-
Re: Кнопка Старт/Стоп на МК Arduino
короче если не хочешь сам паять или нет того кто может или еще что купи типа этого http://www.ebay.com/itm/5V-4-Channel...item565b4f4766
самый лучший вариант ,а если умеешь паять давай схему нарисую.Код нужно лечить вот беда.
-
Re: Кнопка Старт/Стоп на МК Arduino
Уважаемый gnom537 я сам еще зелень тоже пока только копирую у кого что и пробую въехать ,вот кое что уже понимаю ,правда описать это очень тяжело ну что знаю обязательно поделюсь спрашивай всегда пожалуйста.
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
Так схему ты почти правильно нарисовал только вот так надо:Вложение 17467
Что с кодом будем делать?
-
Re: Кнопка Старт/Стоп на МК Arduino
Цитата:
Сообщение от
maestro777
не читает обороты где то тут косяк:
В смысле не читает обороты???
-
Re: Кнопка Старт/Стоп на МК Arduino
как? я откуда знаю ,вот смотри:
Цитата:
Arduino is started
305
Engine is ON
1
Starter START!
2
Starter if OFF!
4
201
Starter START!
2
rpm: 0
rpm: 0
Starter if OFF!
4
162
Starter START!
2
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
rpm: 0
Starter if OFF!
4
All OFF
0
Да и еще я в схеме забыл диоды защитные нарисовать :) поставь между 85 и 86 контактами ,чтоб не дай бог не пробило транзисторы особенно стартерный ,еще вопрос а чего именно транзисторы не проще uln2003a поставить ?
-
Re: Кнопка Старт/Стоп на МК Arduino
Цитата:
Сообщение от
maestro777
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;
}:
Ты Авто замену звездочек делал у тебя ошибка В это строчке
unsigned int rpm = (rotate*60000*10000/2)/(micros()-splitTime);
В место первых двух делений должны быть умножения
-
Re: Кнопка Старт/Стоп на МК Arduino
Зачем на 86 контакт 12в, на 30 контакте уже есть 12в, а массы на реле нет совсем оно не будет работать
-
Re: Кнопка Старт/Стоп на МК Arduino
Не боись будет 100% у тебя ардуина управляет минусом реле ,а авто-замену я не делал я сам все переписывал в ручную :),а что есть прога авто-замены ща верну отпишусь
-
Re: Кнопка Старт/Стоп на МК Arduino
-
Re: Кнопка Старт/Стоп на МК Arduino
Ура пошел код точно там умножение.Это блок реле чтоб сопли не лепить.Один минус нужно будет 1 реле усиленное ставить которое на acc идет.
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
Получается это и есть модуль
Вложение 17469
-
Re: Кнопка Старт/Стоп на МК Arduino
в коде еще глюк или не точность ну в принципе как есть только вод под эти изменения схемы
Вложение 17470
да точно это и есть силовой модуль только смотри реле acc там ток большой бывает свет, печь ,подогрев, все через него в основном
-
Re: Кнопка Старт/Стоп на МК Arduino
Вложение не открывается залей еще раз
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
-
Re: Кнопка Старт/Стоп на МК Arduino
все равно не могу открыть:(
-
Re: Кнопка Старт/Стоп на МК Arduino
На стартер и на зажигание вывести с модуля а на АСС с отдельной реле или как??
-
Re: Кнопка Старт/Стоп на МК Arduino
вот модуль защиты
Вложение 17473
-
Re: Кнопка Старт/Стоп на МК Arduino
опять тоже самое открыть не могу
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
ну типа да от того реле 20 амперного запитать более мощьное реле около 40 ампер где то я думаю,сам прикинь посчитай всю зимнюю нагрузку не мало будет точно ,а если зимнюю ночную вообще жесть :) .
Вложение 17474
-
Вложений: 1
Re: Кнопка Старт/Стоп на МК Arduino
-
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(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,!digitalRead(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())
{
delay(10000);// отсрочка запуска :)
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>1000) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
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);
}
Так точно .А что за авто?
-
Re: Кнопка Старт/Стоп на МК Arduino
-
Re: Кнопка Старт/Стоп на МК Arduino
-
Re: Кнопка Старт/Стоп на МК Arduino
клевое видео молодец парень на 2112 в схеме есть реле асс почти на все приборы так что 30 амперного реле вполне хватит так что не парься с доп реле.
-
Re: Кнопка Старт/Стоп на МК Arduino
на ВАЗ в природе не существует режима АСС. Т.е. можно сразу подключить к модулю??
-
Re: Кнопка Старт/Стоп на МК Arduino
-
Re: Кнопка Старт/Стоп на МК Arduino
Там только два положения ключа
1. Выключено
2. Зажигание
там есть контакт определения вставлен ли ключ в замок