суббота, 17 декабря 2016 г.

Arduino + NGK OZA624-E1

Вечером делать было нечего, голова была забито своими мыслями. И вдруг ко мне обратился мой товарищ: "Адель, ты же шаришь в ардуино, помоги"


Сказать что я шарю в Ардуино это прям преувеличение всего и вся, я просто сталкивался с этим и могу погуглить и собрать скетч в кучку. Товарищ обратился, а значит надо помочь.

Лямбда NGK OZA624-E1 простая сама по себе простая, идет 1 провод с нее и без подогрева. показания тоже идут простые от 0 до 1 В идет на ЭБУ.
Выход три светодиода по значениям 0.4, 0.5, 0.6 В
Предположил что все просто.

Объявляем пин под которым будет вход:
int sensorPin = A0 ; // вход лямбды
Объявляем пины под светодиоды:
int inPin2 = 2; //подключение к пину 2
int inPin3 = 3; //подключение к пину 3
int inPin4 = 4; //подключение к пину 4
Объявляем переменную для хранения значения:
int sensorValue = 0.0;
Теперь надо вызывать функцию определения setup и расписать кому что делать:
void setup() {

pinMode(inPin2, OUTPUT); // Устанавливает цифровой вывод 2 в качестве светодиода менее 0,4 pinMode(inPin3, OUTPUT); // Устанавливает цифровой вывод 3 в качестве светодиода 0,4 < X < 0.6 pinMode(inPin4, OUTPUT); // Устанавливает цифровой вывод 4 в качестве светодиода более 0,6

}
а теперь запускаем функцию loop - петля, она так и несет смысл в себе, выполнять код программы по кругу:
void loop()
{
sensorValue = analogRead(sensorPin); ; //читаем лямбду
if (sensorValue >= 122)
  {
     digitalWrite(2, HIGH); // зажигаем светодиод более менее 0,4
     digitalWrite(3, HIGH); // зажигаем светодиод 0,4 < X < 0.6
     digitalWrite(4, HIGH); // зажигаем светодиод более 0,6
  }
    else if (sensorValue > 102)
       {
           digitalWrite(2, HIGH); // зажигаем светодиод более менее 0,4
           digitalWrite(3, HIGH); // зажигаем светодиод 0,4 < X < 0.6
       }

             else if (sensorValue > 82)
                 {
                     digitalWrite(2, HIGH); // зажигаем светодиод более менее 0,4
                  }
delay (100) ;
}

Значение 122, 102 и 82
analogRead - это оператор чтения данных из указанного аналогового входа. Оператор преобразовывает входящее напряжение от 0 до 5 вольт в целые значения  от 0 до 1023. 5В = 1024 (ну или 1 единица значения равна 0,0049В) пересчитываем наши значения и получаем
0.4 ~ 82
0.5 ~ 102
0.6 ~ 122

ну и весь скетч выглядит вот так вот
_________________________________________________________________________________

int sensorPin = A0 ; // вход лямбды
int inPin2 = 2; //подключение к пину 2 
int inPin3 = 3; //подключение к пину 3 
int inPin4 = 4; //подключение к пину 4
 int sensorValue = 0.0;
void setup() 
pinMode(inPin2, OUTPUT); // Устанавливает цифровой вывод 2 в качестве светодиода менее 0,4 
pinMode(inPin3, OUTPUT); // Устанавливает цифровой вывод 3 в качестве светодиода 0,4 < X < 0.6 
pinMode(inPin4, OUTPUT); // Устанавливает цифровой вывод 4 в качестве светодиода более 0,6

void loop() 
  sensorValue = analogRead(sensorPin); ; //читаем лямбду
  if (sensorValue >= 122) 
    { 
       digitalWrite(2, HIGH); // зажигаем светодиод более менее 0,4 
       digitalWrite(3, HIGH); // зажигаем светодиод 0,4 < X < 0.6 
       digitalWrite(4, HIGH); // зажигаем светодиод более 0,6 
    } 
    else if (sensorValue > 102) 
     { 
       digitalWrite(2, HIGH); // зажигаем светодиод более менее 0,4 
       digitalWrite(3, HIGH); // зажигаем светодиод 0,4 < X < 0.6 
     }
     else if (sensorValue > 82) 
      { 
        digitalWrite(2, HIGH); // зажигаем светодиод более менее 0,4 
      } 
delay (100);
}


_________________________________________________________________________________
Вроде бы все удобно расписал и в случае необходимости можно спокойно заменить значения на свои
Железная часть будет выглядеть примерно так: