Алгоритм управления свечами накаливания дизеля 4D56

Ernesto
Offline
Зарегистрирован: 04.02.2015

Приветствую!

Восстанавливаю техническую готовность старенького Pajero с дизелем 4D56

Родной блоку управления свечами накаливания работает только с дорогими оригинальными свечами, с заменителями отказывается работать в связи с разностью сопротивлений ориг. свечи и заменителя. Многие делают принудительное включение с кнопки и не заморачиваются. Одна чего не скажешь о ардуинщиках которые не ищут простых путей и пытаются применить сей чудесный контроле во всех областях народного хозяйства :)

В итоге решил собрать подобие блока на базе Arduino Nano.

[URL=http://fastpic.ru/view/73/2016/0320/9b69a4fc298f8972d6b0f82f20e7926b.jpg.html][IMG]http://i73.fastpic.ru/thumb/2016/0320/6b/9b69a4fc298f8972d6b0f82f20e7926b.jpeg[/IMG][/URL]

[URL=http://fastpic.ru/view/76/2016/0320/e0afcf34741ce966e4376cb84a73fea8.jpg.html][IMG]http://i76.fastpic.ru/thumb/2016/0320/a8/e0afcf34741ce966e4376cb84a73fea8.jpeg[/IMG][/URL]

Судя по приведенным выше скринам блок в первом приближении работает так:

При подачи питания с ключа зажигания блок опрашивает датчик температуры охлаждающей жидкости и если Т ниже 20-30 градусов запускает алгоритм включения свечей.

Одновременно включаются 2 реле на 12 и 6 вольт соответственно потом 12 вольтовое отключается и далее интервалами работает 6 вольтовое реле.

Я набросал скетч пока тестирую дома в настройках показание датчика температуры ОЖ имитирует напряжение 5в. (есть 5в алгоритм сработал, нет 5в реле не включаются).

// управление реле через функцию LOW
int t12 = 5000; // время для реле 12v
int t6s = t12+25000; // время для реле 6v при старте
int t6r = 9000; // время для реле 6v при работе двигателя
int tp6 = 3000; // время для паузы реле 6v
int analogPin = 0;     // номер порта к которому подключен датчик температуры
int val = 0;           // переменная для хранения считываемого значения


void setup()
{
    
  pinMode(12, OUTPUT); // реле 12 v
  pinMode(6, OUTPUT); // реле 6 v
  
  Serial.begin(9600);// тест значений
}
// алгоритм работы реле
void loop()
{
 val = analogRead(analogPin);     // считываем значение
 Serial.println(val);  // выводим значение на экран 
 if (val > 1010 )
  {
 digitalWrite(12, LOW); // 12 v ON
 digitalWrite(6, LOW); // 6 v ON
 delay(t12); 
 digitalWrite(12, HIGH); // 12 v OFF
 delay(t6s);
 digitalWrite(6, HIGH); // 6 v OFF
 delay(tp6); // 6v пауза
 digitalWrite(6, LOW);
 delay(t6r); // 6v работа 
 digitalWrite(6, HIGH); 
 delay(tp6);
 digitalWrite(6, LOW);
 delay(t6r); 
 digitalWrite(6, HIGH); 
 delay(tp6);
 digitalWrite(6, LOW);
 delay(t6r); 
 digitalWrite(6, HIGH); 
 delay(tp6);
 digitalWrite(6, LOW);
 delay(t6r); 
 digitalWrite(6, HIGH); 
 delay(tp6);
 digitalWrite(6, LOW);
 delay(t6r); 
 digitalWrite(6, HIGH); 
 delay(tp6);
 digitalWrite(6, LOW);
 delay(t6r); 
 digitalWrite(6, HIGH); 
 delay(tp6);
 while (true) {};
     
  }
  else
  {
 
    digitalWrite(12, HIGH);
    digitalWrite(6, HIGH);
    delay (100);
   while (true) {};
  }
 
}

Понятно что алгоритм сделан криво и через функцию delay, но уже может быть функциональным.

Хотел бы получить подсказку.

Как реализовать изменение времени включения реле в зависимости от температуры ОЖ, так как в оригинальном блоке при -20 одни тайминги включения, а при температуре 0 или +10 работает как бы «укороченная» программа прогрева?

Ernesto
Offline
Зарегистрирован: 04.02.2015