Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Подключение отдельного датчика
Цифровой модуль (3 вывода)
Модуль KY-026
Датчик огня (пламени, пожара) можно встретить в двух модификациях - отдельный датчик или модульное исполнение.
Отдельный датчик похож на светодиод с чёрной головкой. У него тоже одна ножка длиннее другой, что позволяет определить положительный и отрицательный вывод.
Модуль имеет три ножки или четыре ножки, дополнительный светодиод, подстроечный потенциометр.
Пламя можно обнаружить разными способами, например, с помощью термодатчика. Ведь при пожаре образуется высокая температура. Но термодатчик может пострадать, если его подносить очень близко к огню. Кроме того, термодатчик не сможет зафиксировать именно пламя. Иногда это является критичным.
Датчик огня является инфракрасным и улавливает излучение в диапазоне 760 — 1100 нм, свойственное пламени свечи. На практике, такой датчик реагирует не только на пламя, но и на солнце и на комнатные лампы. Чтобы избежать паразитной засветки, фотодиод необходимо закрывать с боковых сторон непрозрачным материалом. Для лучшей фильтрации посторонних источников света, при детектировании пламени таким датчиком, применяют алгоритм детектирования низкой частоты. Это возможно благодаря тому, что пламя свечи меняет свою интенсивность с частотой 15-20 Гц.
Важная особенность - угол обзора датчика 60 градусов, нужно помнить об этом.
Рассмотрим подключение отдельного датчика.
Короткую ножку датчика (минус) соединяем с выводом 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 единиц на меньшее значение. Запустите скетч и пробуйте поднести источник пламени - пищалка должна подать звуковой сигнал.
У цифрового датчика пламени есть три вывода: питание, земля и сигнал на цифровой вывод.
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 имеет четыре вывода и позволяет считывать цифровые и аналоговые сигналы. В остальном он похож на предыдущий цифровой модуль.
Модуль содержит инфракрасный светодиод 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);
}