Gas Sensor Getting Started

GAS Sensor Getting Started

บทความนี้ เป็นการอธิบายวิธีการใช้งาน Gas Sensor ซึ่งประกอบด้วย MG-811 Carbon Dioxide CO2 Sensor , MQ-2 Flammable Gas &Smoke Sensor , MQ-6 LPG Sensor , MQ-7 Cabon monoxide Sensor , MQ-135 Air Quality Sensor ซึ่งเป็น GAS Sensor ที่ ThaiEasyElec จำหน่ายและหลายท่านสับสนกับการต่อใช้งานอย่างมาก

เข้าใจเรื่อง PIN ใช้งานกันก่อน

ผู้ใช้งานหลายท่านมักสับสนว่า การต่อขา GAS Sensor เพื่อใช้งาน ต้องต่ออย่างไร เพราะ Datasheet จาก Hanwei ยังไม่ค่อยละเอียด ขอให้ผู้ใช้ดูตามภาพด้านล่าง 3 ภาพ , ขา H จะอยู่ตรงกลางของทั้ง 2 ผั่ง , ขา A กับ ขา B จะมองว่ามันอยู่ฝั่งไหนก็ได้ ขอให้ดูภาพ 3 ภาพด้านล่าง เพื่อความเข้่าใจ

MG-811 – Carbon Dioxide CO2 Sensor

MG-811 เป็น Sensor ตัวจับปริมาณก๊าซ CO2 ที่อยู่ในอากาศ ซึ่งจะให้ Output ออกมาเป็น แรงดันไฟฟ้า (EMF) โดยค่าแรงดัน EMF จะมีค่าแปรผกผันกับปริมาณ CO2 ที่ทำปฏิกิริยากับ Sensor 

ค่าแรงดัน EMF ที่วัดได้จากการทดลอง (ทดลองโดย ThaiEasyElec) จะมีแรงดันอยู่ในช่วง mV และค่าน้อยที่สุดที่เราสามารถทำการทดลองได้อยู่ในหลัก สิบ มิลลิโวลต์   ซึ่งเป็นแรงดันนี้มีค่าน้อยเกินไปที่จะนำเข้าไปประมวลผลกับ MCU ที่มี ADC 10 Bit ซึ่งมีความละเอียดเพียง 4.8 mV ที่แรงดันอ้างอิง 5V จึงต้องขยายแรงดันขึ้นมาเพื่อให้ MCU สามารถวัดค่าได้ เนื่องจากไม่สามารถทราบค่าที่แน่นอนของค่า Maximum ของตัว Sensor ได้จึงขอประมาณค่า Maximum Output อยู่ที่ประมาณ 300 mV และใช้วงจร none inverting amp ขยายสัญญาณ Output  ด้วยอัตตราขยาย 11 เท่า เพราะฉะนั้นที่ Output 300mV จะได้แรงดันที่ผ่านการขยายที่ ประมาณ 3.3V

เมื่อป้อนแรงดันไฟฟ้าให้กับขา H หรือ ขดลวด ควรรอสักครู่เพื่อให้ขดลวดร้อนเสียก่อนจึงจะทำการวัดค่า

ตัวอย่าง Code

int adcPin = 0;
int adcValue = 0;
float v;
float real_v;
void setup () 
{
  Serial.begin (9600);
  delay (2000);  
}
void loop ()
{
  adcValue = analogRead(adcPin);
  Serial.print("Out put = ");       
  Serial.println (adcValue);
  delay (1000);
}

ผลการทดลอง
จะพบว่าสามารถอ่านค่า Analog Out put จาก ตัว MG-811 ได้ซึ่งจะเป็นค่าที่ไม่นิ่ง เปลี่ยนแปลงขึ้นลงอยู่ในช่วงที่คงที่อยู่ตลอดเวลา และ เมื่อทดลองเป่าลมหายใจเข้าไปยัง MG-811 จะพบว่าสัญญาณ Analog Out put จะลดลงตามปริมาณของ CO2 ที่ตรวจจับได้ จึงทำให้เราสามารถตรวจจับแนวโน้ม ของปริมาณของก๊าซ CO2 ได้

วิธีการ Calibrate MG-811
เราสามารถหาความสัมพันธ์ ของ แรงดัน Output ที่ได้จาก MG-811 กับ ปริมาณก๊าซ CO2 ได้จาก Nernst’s Equation

EC = EMF + (RxT) / (2F) x ln[P(CO2)]
EC = คือค่าความต่างศักย์ที่วัดได้ระหว่าง indicator กับ reference electrodes (Eind – Eref) (mV)
EMF = ค่าคงที่ของความต่างศักดิ์ซึ่งแปรผันตาม Temp (Output ที่ได้จาก MQ811)
R = Gas Constant มีค่าเท่ากับ 8.3144 J/K
T = อุณหภูมิสัมบูรณ์ (K)
F = ค่าคงที่ของ ฟาราเดย์ (Faraday’s constant = 96485 คูลอมบ์)

เพราะฉะนั้น
EMF = Ec – (R x T) / (2F) ln (P(CO2))
EMF = EC-(((องศาC + 273.15) x 8.3144) / (2 x (9,649×10^4) )) x ln(ปริมาณCO2)

MQ-2 – Flammable Gas &Smoke Sensor

MQ-2 เป็น Sensor ตรวจสอบปริมาณ ก๊าซไวไฟ และ ควัน เช่น LPG, i-butane, propane, methane ,alcohol, Hydrogen, smokeในอากาศ ซึ่งเมื่อเราเริ่มจ่ายพลังงานให้ MQ-2 ที่ขา H ทำให้ เกิดความร้อนขึ้นที่ขดลวด เมื่อก๊าซไวไฟต่างๆ เข้ามาทำปฏิกิริยาจะทำให้ ค่าความต้านทานที่เกิดขึ้นระหว่าง ขา A และ B (RS)ลดลง

จากรูป เมื่อจ่ายพลังงานให้กับ ขา H จะทำให้เกิดพลังงานความร้อนเพื่อให้สารเคมีภายในตัว Sensor สามารถทำปฏิกิริยากับก๊าซไวไฟต่างๆได้ และเมื่อ MQ-2 ตรวจจับก๊าซไวไฟต่างๆ ได้จะทำให้ค่าความต้านทานระหว่าง ขา A และ ขา B เปลี่ยนแปลง (ขา A และ B เป็นขาที่ไม่ตายตัวเราสามารถกำหนดเองได้โดยเลือกขาใดเป็นขา A ขาที่อยู่ฝั่งตรงขามก็จะเป็นขา B) โดยเมื่อ MQ-2 ตรวจจับปริมาณก๊าซพิษต่างๆ ได้มากจะทำให้ค่าความต้านทาน RS ลดลง หรือ ค่าความต้านทานแปรผกผันกับปริมาณของ ก๊าซไวไฟต่างๆ

วิธีการหาค่าของ ความต้านทาน RS

การหาค่าความต้านทานของของ RS สามารถทำได้ 2 วิธีคือ

วิธีที่ 1 สามารถใช้ Ohm meter วัดหาค่าความต้านทานที่ขา A และ B ได้โดยตรงดังรูป

วิธีที่ 2 เป็นวิธีการวัดโดยอ้อม โดยใช้ กฎ แบ่งแรงดัน Voltage Divider

จากรูปตาม แถบสีเขียว จะเห็นว่าเราจ่ายกระแสไฟฟ้าเขามาทาง ขา A or B ทางด้านซ้าย ซึ่งเมื่อนำมาจัดเรียงใหม่ให้เป็นรูปที่เราคุ้นตากับ กฎแบ่งแรงดันจะเป็นรูปภาพดังนี้

การหาค่า RS โดยใช้กฎแบ่งแรงดันนี้สามารถนำไปใช้กับ Microcontroller ได้โดยนำค่า Out put ที่ได้ป้อนเข้าขา ADC ของ Microcontroller (การป้อนแรงดันเขาขา ADC ของ MCU ต้องแน่ใจว่าระดับแรงดันที่ป้อนเข้าไปไม่เกินกว่าที่ Port ADC ของ MCU จะรับได้) และจะเห็นว่า แรงดันไฟฟ้าที่วัดได้จะมีค่ามากขึ้นเมื่อ RS ลดลง

ตัวอย่างการใช้งาน MQ-2 กับ Arduino

ตัวอย่าง Code

int adcPin = 0;
int adcValue = 0;
float v;
float rs,ppm;
void setup () 
{
      Serial.begin (9600);
      delay (2000);  
}
void loop ()
{
      adcValue = analogRead(adcPin);
      v = adcValue*(5.00/1024);
      rs=(100-(20.00*v))/v;
      Serial.print("Volt out put");       
      Serial.println (v);
      Serial.print("RS=");       
      Serial.println (rs);
      delay (1000);
}

MQ-6 – LPG Sensor

MQ-6 เป็น Sensor ตรวจจับปริมาณ ก๊าซ LPG ในอากาศ ซึ่งเมื่อเราเริ่มจ่ายพลังงานให้ MQ-6 ที่ขา H ทำให้ เกิดความร้อนขึ้นที่ขดลวด เมื่อก๊าซ LPG เข้ามาทำปฏิกิริยาจะทำให้ ค่าความต้านทานที่เกิดขึ้นระหว่าง ขา A และ B (RS)ลดลง ซึ่งใน Data Sheet ของ MQ-6 ได้ระบุไว้ว่า ที่ความต้านทานRS 10-60 K จะมีค่าของก๊าซ LPG 10,0000 – 200 ppm

จากรูป เมื่อจ่ายพลังงานให้กับ ขา H จะทำให้เกิดพลังงานความร้อนเพื่อให้สารเคมีภายในตัว Sensor สามารถทำปฏิกิริยากับก๊าซ LPG ได้ และเมื่อ MQ-6 ตรวจจับ LPG ได้จะทำให้ค่าความต้านทานระหว่าง ขา A และ ขา B เปลี่ยนแปลง (ขา A และ B เป็นขาที่ไม่ตายตัวเราสามารถกำหนดเองได้โดยเลือกขาใดเป็นขา A ขาที่อยู่ฝั่งตรงขามก็จะเป็นขา B) โดยเมื่อ MQ-6 ตรวจจับปริมาณ LPG ได้มากจะทำให้ค่าความต้านทาน RS ลดลง หรือ ค่าความต้านทานแปรผกผันกับปริมาณของก๊าซ LPG

วิธีการหาค่าของ ความต้านทาน RS

การหาค่าความต้านทานของของ RS สามารถทำได้ 2 วิธีคือ

วิธีที่ 1 สามารถใช้ Ohm meter วัดหาค่าความต้านทานที่ขา A และ B ได้โดยตรงดังรูป

วิธีที่ 2 เป็นวิธีการวัดโดยอ้อม โดยใช้ กฎ แบ่งแรงดัน Voltage Divider


จากรูปตามแถบสีเขียว จะเห็นว่าเราจ่ายกระแสไฟฟ้าเขามาทาง ขา A or B ทางด้านซ้าย ซึ่งเมื่อนำมาจัดเลียงใหม่ให้เป็นรูปที่เราคุ้นตากับ กฎแบ่งแรงดันจะเป็นรูปภาพดังนี้

การหาค่า RS โดยใช้กฎแบ่งแรงดันนี้สามารถนำไปใช้กับ Microcontroller ได้โดยนำค่า Out put ที่ได้ป้อนเข้าขา ADC ของ Microcontroller (การป้อนแรงดันเขาขา ADC ของ MCU ต้องแน่ใจว่าระดับแรงดันที่ป้อนเข้าไปไม่เกินกว่าที่ Port ADC ของ MCU จะรับได้)     แล้วแก้สมการหาค่า ของ RS ออกมา และ นำไปเปรียบเทียบกับ ปริมาณ LPG

ตัวอย่างการใช้งาน MQ-6 กับ Arduino

ตัวอย่าง Code

#include "TimerOne.h"
int sec=0; 
int VH=13;
int ADC_pin=0;
int time=60;
int status=true ;
int co;
void setup()
{
  pinMode(10, OUTPUT);
  Timer1.initialize(1000000);         
  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
  pinMode(VH, OUTPUT); 
  Serial.begin (9600);
}
 
void callback()
{
  sec++;
  if(status)
  {
    if(sec < 60)
    {
      digitalWrite(VH, HIGH);
    }
    else
    {
      status=0;
      sec=0;
    }
  }
  else
  {
    if(sec < 90)
    {
      digitalWrite(VH, LOW);
    }
    else
    {
      status=1;
      sec=0;
    }
  }
  
}
 
void loop()
{
    if(status == 0)
    {     co = analogRead(ADC_pin);
          Serial.println(co);
    }
    else
    {                            
          Serial.println("sensor heating!");
    }
    delay(100);
}

MQ-7- Cabon monoxide Sensor

MQ-7 เป็น Sensor ตรวจจับปริมาณ ก๊าซ Cabon monoxide ในอากาศ ซึ่งเมื่อเราเริ่มจ่ายพลังงานให้ MQ-7 ที่ขา H ทำให้ เกิดความร้อนขึ้นที่ขดลวด เมื่อก๊าซ Cabon monoxide เข้ามาทำปฏิกิริยาจะทำให้ ค่าความต้านทานที่เกิดขึ้นระหว่าง ขา A และ B (RS)ลดลง

จากรูปจะ เห็นว่าการจ่ายแรงดันไฟฟ้าให้ Heater จะมีการควบคุมโดยผ่าน MCU เนื่องจาก การทำงานของMQ-7 จะใช้วิธีจ่ายแรงดันให้ Heater เพื่อสร้างความร้อนเป็นเวลา 60 วินาที และ จะหยุดจ่ายพลังงานให้ Heater เป็นเวลา 90 วินาทีสลับกันไป และในช่วง 90 วินาที นี้เองจะเป็นช่วงที่สามารถตรวจวัดการเปลี่ยนแปลงของก๊าซ Cabon monoxide โดยปริมาณ Cabon monoxide จะแปรผกผัน กับค่าความต้านทาน RS

วิธีการหาค่าของ ความต้านทาน RS

การหาค่าความต้านทานของของ RS สามารถทำได้ 2 วิธีคือ 

วิธีที่ 1 สามารถใช้ Ohm meter วัดหาค่าความต้านทานที่ขา A และ B ได้โดยตรงในเวลา 90 วินาทีหลังจาก หยุดจ่ายแรงดันให้ Heater ดังรูป

วิธีที่ 2 เป็นวิธีการวัดโดยอ้อม โดยใช้ กฎ แบ่งแรงดัน Voltage Divider

จากรูป หลังจากหยุดจ่ายแรงดันให้ Heater ภายใน 90 วินาที จะเห็นว่าเราจ่ายกระแสไฟฟ้าเขามาทาง ขา A or B ทางด้านซ้าย ซึ่งเมื่อนำมาจัดเลียงใหม่ให้เป็นรูปที่เราคุ้นตากับ กฎแบ่งแรงดันจะเป็นรูปภาพดังนี้

การหาค่า RS โดยใช้กฎแบ่งแรงดันนี้สามารถนำไปใช้กับ Microcontroller ได้โดยนำค่า Out put ที่ได้ป้อนเข้าขา ADC ของ Microcontroller (การป้อนแรงดันเขาขา ADC ของ MCU ต้องแน่ใจว่าระดับแรงดันที่ป้อนเข้าไปไม่เกินกว่าที่ Port ADC ของ MCU จะรับได้)     แล้วแก้สมการหาค่า ของ RS ออกมา และ นำไปเปรียบเทียบกับ ปริมาณ Cabon monoxide 

ตัวอย่างการใช้งาน MQ-7 กับ Arduino

Timer Library
http://www.arduino.cc/playground/Code/Timer1

ตัวอย่าง Code

#include "TimerOne.h"
int sec = 0;
int VH = 13;
int ADC_pin = 0;
int time = 60;
int status = true ;
int co;

void setup()
{
  pinMode(10, OUTPUT);
  Timer1.initialize(1000000);
  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
  pinMode(VH, OUTPUT);
  Serial.begin (9600);
}
void callback()
{
  sec++;
  if (status)
  {
    if (sec < 60)
    {
      digitalWrite(VH, HIGH);
    }
    else
    {
      status = 0;
      sec = 0;
    }
  }

  else
  {
    if (sec < 90)
    {
      digitalWrite(VH, LOW);
    }
    else
    {
      status = 1;
      sec = 0;
    }
  }

}
void loop()
{
  if (status == 0)
  {
    co = analogRead(ADC_pin);
    Serial.println(co);
  }
  else
  {
    Serial.println("sensor heating!");
  }
  delay(100);
}

MQ-135 – Air Quality Sensor

MQ-135 เป็น Sensor ตรวจสอบคุณภาพของอากาศโดยจะตรวจจับปริมาณ ก๊าซ NH3,NOx, alcohol, Benzene, smoke,CO2 ,etc ในอากาศ ซึ่งเมื่อเราเริ่มจ่ายพลังงานให้ MQ-135 ที่ขา H ทำให้ เกิดความร้อนขึ้นที่ขดลวด เมื่อก๊าซพิษต่างๆ เข้ามาทำปฏิกิริยาจะทำให้ ค่าความต้านทานที่เกิดขึ้นระหว่าง ขา A และ B (RS)ลดลง

จากรูป เมื่อจ่ายพลังงานให้กับ ขา H จะทำให้เกิดพลังงานความร้อนเพื่อให้สารเคมีภายในตัว Sensor สามารถทำปฏิกิริยากับก๊าซพิษต่างๆได้ และเมื่อ MQ-135 ตรวจจับก๊าซพิษต่างๆ ได้จะทำให้ค่าความต้านทานระหว่าง ขา A และ ขา B เปลี่ยนแปลง (ขา A และ B เป็นขาที่ไม่ตายตัวเราสามารถกำหนดเองได้โดยเลือกขาใดเป็นขา A ขาที่อยู่ฝั่งตรงขามก็จะเป็นขา B) โดยเมื่อ MQ-135 ตรวจจับปริมาณก๊าซพิษต่างๆ ได้มากจะทำให้ค่าความต้านทาน RS ลดลง หรือ ค่าความต้านทานแปรผกผันกับปริมาณของก๊าซพิษต่างๆ

วิธีการหาค่าของ ความต้านทาน RS

การหาค่าความต้านทานของของ RS สามารถทำได้ 2 วิธีคือ

วิธีที่ 1 สามารถใช้ Ohm meter วัดหาค่าความต้านทานที่ขา A และ B ได้โดยตรงดังรูป

วิธีที่ 2 เป็นวิธีการวัดโดยอ้อม โดยใช้ กฎ แบ่งแรงดัน Voltage Divider

จากรูปตาม แถบสีเขียว จะเห็นว่าเราจ่ายกระแสไฟฟ้าเขามาทาง ขา A or B ทางด้านซ้าย ซึ่งเมื่อนำมาจัดเรียงใหม่ให้เป็นรูปที่เราคุ้นตากับ กฎแบ่งแรงดันจะเป็นรูปภาพดังนี้

การหาค่า RS โดยใช้กฎแบ่งแรงดันนี้สามารถนำไปใช้กับ Microcontroller ได้โดยนำค่า Out put ที่ได้ป้อนเข้าขา ADC ของ Microcontroller (การป้อนแรงดันเขาขา ADC ของ MCU ต้องแน่ใจว่าระดับแรงดันที่ป้อนเข้าไปไม่เกินกว่าที่ Port ADC ของ MCU จะรับได้) และจะเห็นว่า แรงดันไฟฟ้าที่วัดได้จะมีค่ามากขึ้นเมื่อ RS ลดลง

ตัวอย่างการใช้งาน MQ-135 กับ Arduino

ตัวอย่าง Code

int adcPin = 0;
int adcValue = 0;
float v;
float rs, ppm;
void setup ()
{
  Serial.begin (9600);
  delay (2000);
}
void loop ()
{
  adcValue = analogRead(adcPin);
  v = adcValue * (5.00 / 1024);
  rs = (100 - (20.00 * v)) / v;
  Serial.print("Volt out put");
  Serial.println (v);
  Serial.print("RS=");
  Serial.println (rs);
  delay (1000);
}