Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Датчик огня

Подключение отдельного датчика
Цифровой модуль (3 вывода)
Модуль KY-026

Датчик огня (пламени, пожара) можно встретить в двух модификациях - отдельный датчик или модульное исполнение.

Отдельный датчик похож на светодиод с чёрной головкой. У него тоже одна ножка длиннее другой, что позволяет определить положительный и отрицательный вывод.

Flame

Модуль имеет три ножки или четыре ножки, дополнительный светодиод, подстроечный потенциометр.

Пламя можно обнаружить разными способами, например, с помощью термодатчика. Ведь при пожаре образуется высокая температура. Но термодатчик может пострадать, если его подносить очень близко к огню. Кроме того, термодатчик не сможет зафиксировать именно пламя. Иногда это является критичным.

Датчик огня является инфракрасным и улавливает излучение в диапазоне 760 — 1100 нм, свойственное пламени свечи. На практике, такой датчик реагирует не только на пламя, но и на солнце и на комнатные лампы. Чтобы избежать паразитной засветки, фотодиод необходимо закрывать с боковых сторон непрозрачным материалом. Для лучшей фильтрации посторонних источников света, при детектировании пламени таким датчиком, применяют алгоритм детектирования низкой частоты. Это возможно благодаря тому, что пламя свечи меняет свою интенсивность с частотой 15-20 Гц.

Важная особенность - угол обзора датчика 60 градусов, нужно помнить об этом.

Flame

Подключение отдельного датчика

Рассмотрим подключение отдельного датчика.

Короткую ножку датчика (минус) соединяем с выводом 5V, длинную ножку соединяем с резистором на 10К, а также с аналоговым выводом A0. Другую ножку резистора соединяем с GND. Чтобы было проще отслеживать возникновение пламени, добавим пищалку на контакт 9. Напишем скетч.


int flamePin = A0; // A0 for the flame sensor
int beepPin = 9; // digital pin 9 for the buzzer
int val = 0; // data

void setup()
{
  pinMode(beepPin, OUTPUT);
  pinMode(flamePin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  val = analogRead(flamePin); // read the analog value of the sensor
  Serial.println(val); // display the analog value
  if (val >= 600) // when the analog value is larger than 600, the buzzer will buzz
  {
    digitalWrite(beepPin, HIGH);
  } else
  {
    digitalWrite(beepPin, LOW);
  }
  delay(500);
}

Если под рукой нет зажигалки или другого источника огня, то используйте лампу или фонарь. Только измените в скетче пороговое значение 600 единиц на меньшее значение. Запустите скетч и пробуйте поднести источник пламени - пищалка должна подать звуковой сигнал.

Цифровой модуль (3 вывода)

Flame

У цифрового датчика пламени есть три вывода: питание, земля и сигнал на цифровой вывод.


Flame | Arduino 
-----------------
   GND | GND 
   VCC | 5V 
   Out | D

Напишем скетч.


int flamePin = 2;
int buzzPin = 9;

void setup() {
  pinMode( flamePin, INPUT );
  pinMode( buzzPin, OUTPUT );
}

void loop() {
  if( !digitalRead( flamePin ) )
    digitalWrite( buzzPin, HIGH );
  else
    digitalWrite( buzzPin, LOW );
}

Достаём зажигалку и начинаем настраивать чувствительность датчика. С помощью отвёртки нужно настроить порог чувствительности при помощи подстроечного потенциометра. Поднесите огонь в 10 сантиметрах от датчика и начинайте крутить потенциометр, пока зуммер не запищит.

Модуль KY-026

Модуль KY-026 имеет четыре вывода и позволяет считывать цифровые и аналоговые сигналы. В остальном он похож на предыдущий цифровой модуль.

KY-026

Модуль содержит инфракрасный светодиод 5 мм, компаратор на микросхеме LM393, подстроечный резистор 3296W, шесть резисторов и два светодиодных индикатора. Светодиод L1 показывает включение питания, светодиод L2 сообщает о срабатывании датчика и формировании на выходе D0 высокого уровня.

Рабочее напряжение: 3.3-5.5V

Подключение: A0 — аналоговый выход, G — общий провод, + — питание, D0 — цифровой выход сигнала, имеющего логические уровни.


KY-026 | Arduino 
----------------
    A0 | A
     G | GND 
     + | 5V 
    D0 | D

Скетч


int led = 13;
int digitalPin = 2; // KY-026 digital pin
int analogPin = A0; // KY-026 analog pin
int digitalVal; // digital readings
int analogVal; //analog readings

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(digitalPin, INPUT);
  //pinMode(analogPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  digitalVal = digitalRead(digitalPin); 
  if(digitalVal == HIGH) // if flame is detected
  {
    digitalWrite(led, HIGH); // turn on LED
  }
  else
  {
    digitalWrite(led, LOW); // turn off LED
  }

  // Read the analog
  analogVal = analogRead(analogPin); 
  Serial.println(analogVal);

  delay(100);
}
Реклама