سنسور شعله

ماژول سنسور شعله KY-026 برای آردوینو، نور مادون قرمز ساطع شده از آتش را تشخیص می دهد. این ماژول دارای دو خروجی دیجیتال و آنالوگ و یک پتانسیل سنج برای تنظیم حساسیت است. معمولاً در سیستم های آتش نشانی استفاده می شود.

دیود متصل شده، به بازه طیف نور حساس است.

خروجی دیجیتال: پس از شناسایی شعله، سیگنال به خروجی می رسد.

تحلیلگر Ausgang : واحد سنسور را مستقیما اندازه گیری می کند.

LED1: نشان می دهد که ولتاژ تأمین شده است.

LED2: نشان می دهد كه سنسور؛ شعله را تشخیص می دهد.

مشخصات فنی ماژول

KY-026 از یک LED گیرنده مادون قرمز 5 میلی متر، یک مقایسه گر دیفرانسیل LM393 دوتایی، پتانسیلومتر 3296W، شش مقاومت و دو LED  تشکیل شده است. این برد دارای یک خروجی آنالوگ و یک خروجی دیجیتال است.

عملکرد ماژول سنسور شعله

این سنسور در صفحه مدار خود دارای 3 مؤلفه اصلی است. ابتدا واحد سنسور در قسمت جلویی یک سیگنال آنالوگ را به واحد دوم، یعنی تقویت کننده می فرستد. آمپلی فایر با توجه به مقدار مقاومت پتانسیومتر، سیگنال را تقویت می کند و سیگنال را به خروجی آنالوگ ماژول می فرستد. مؤلفه سوم مقایسه گری است که اگر سیگنال تحت یک مقدار خاص قرار گیرد، خروجی دیجیتال و LED را خاموش می کند. (با تنظیم پتانسیومتر می توانید حساسیت را کنترل کنید).

مشخصات در جدول زیر امده است :

پایه های ماژول سنسور شعله

اتصال پایه های ماژول در برد Arduino و Raspberry Pi در جدول های زیر آورده شده است:

دیاگرام اتصالات

پایه های مختلف ماژول را مطابق جدول بالا و به صورت آنچه در تصویر زیر مشاهده می‌شود به برد آردوینو متصل کنید.

کدهای آردوینو

در کد زیر مقادیر دیجیتال و آنالوگ را از طریق رابط ها در KY-026 می خوانیم. ( برای تعامل با ماژول به یک فندک یا شمع احتیاج دارید).

رابط دیجیتال هنگامی که آتش توسط سنسور شناسایی شود، یک سیگنال HIGH ارسال می کند و LED را روی آردوینو (پین 13) روشن می کند.

برای افزایش آستانه تشخیص، پتانسیومتر را در جهت ساعتگرد و برای کاهش آستانه تشخیص، پتانسیومتر را در جهت پاد ساعتگرد بچرخانید.

رابط آنالوگ هنگامی که هیچ آتشی وجود نداشته باشد مقدار عددی HIGH را برمی گرداند و هنگامی که یک آتش نزدیک است به صفر می رسد.

int led = 13; // define the LED pin
int digitalPin = 3; // KY-026 digital interface
int analogPin = A0; // KY-026 analog interface
int digitalVal; // digital readings
int analogVal; //analog readings

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

void loop()
{
  // Read the digital interface
  digitalVal = digitalRead(digitalPin); 
  if(digitalVal == HIGH) // if flame is detected
  {
    digitalWrite(led, HIGH); // turn ON Arduino's LED
  }
  else
  {
    digitalWrite(led, LOW); // turn OFF Arduino's LED
  }

  // Read the analog interface
  analogVal = analogRead(analogPin); 
  Serial.println(analogVal); // print analog value to serial

  delay(100);
}

کدهای رزبری پای

Raspberry PI برخلاف آردوینو، مبدل آنالوگ به دیجیتال (ADC) را در تراشه خود ارائه نمی دهد. بنابراین اگر از سنسور غیر دیجیتال استفاده کنید، Raspbery Pi محدود می شود. برای اجتناب از این موضوع  از ماژول هایی که یک ADC  16 بیتی را ایجاد می کنند مانند ماژول KY-53 استفاده می کنیم تا آن را با 4 پین ورودی آنالوگ اضافی ارتقا دهیم. ماژول  KY-035 از طریق I2C به Raspberry Pi متصل می شود. داده های آنالوگ را اندازه گیری کرده و آن را به یک سیگنال دیجیتال مناسب برای Raspberry Pi تبدیل می کند. بنابراین اگر می خواهید از سنسورهای آنالوگ به همراه Raspberry Pi استفاده کنید، از KY-053 ADC استفاده کنید.

اتصال پایه های ماژول در برد Raspberry Pi در جدول های زیر آورده شده است:

# This code is using the ADS1115 and the I2C Python Library for Raspberry
# import needed modules 
import math, signal, sys, os 
import RPi.GPIO as GPIO 
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False) 
# initialise variables 
delayTime = 0.5 # in Sekunden 
# assigning the ADS1x15 ADC 
ADS1015 = 0x00  # 12-bit ADC 
ADS1115 = 0x01  # 16-bit 
# choosing the amplifing gain 
gain = 4096  # +/- 4.096V 
# gain = 2048  # +/- 2.048V 
# gain = 1024  # +/- 1.024V 
# gain = 512   # +/- 0.512V 
# gain = 256   # +/- 0.256V 
# choosing the sampling rate 
# sps = 8    # 8 Samples per second
# sps = 8 # 8 Samples per second 
# sps = 16 # 16 Samples per second 
# sps = 32 # 32 Samples per second 
sps = 64 # 64 Samples per second 
# sps = 128 # 128 Samples per second 
# sps = 250 # 250 Samples per second 
# sps = 475 # 475 Samples per second 
# sps = 860 # 860 Samples per second 
# assigning the ADC-Channel (1-4) 
adc_channel_0 = 0 # Channel 0 
adc_channel_1 = 1 # Channel 1 
adc_channel_2 = 2 # Channel 2 
adc_channel_3 = 3 # Channel 3 
# initialise ADC (ADS1115) 
adc = ADS1x15(ic=ADS1115) 
# Input pin for the digital signal will be picked here Digital_PIN = 24 
GPIO.setup(Digital_PIN, GPIO.IN, pull_up_down = GPIO.PUD_OFF)  
# main program loop 
# The program reads the current value of the input pin 
# and shows it at the terminal 
try: 
while True: 
#Current values will be recorded 
analog = adc.readADCSingleEnded(adc_channel_0, gain, sps) # Output at the terminal 
if GPIO.input(Digital_PIN) == False: 
print "Analog voltage value:", analog,"mV, ","extreme value: not reached" 
else: 
print "Analog voltage value:", analog, "mV, ", "extreme value: reached" 
print "---------------------------------------" sleep(delayTime)
except KeyboardInterrupt:        
GPIO.cleanup()