MQシリーズガスセンサーは、特定のタイプのガスを検出または測定するためにガス検知器で使用される非常に一般的なタイプのセンサーです。これらのセンサーは、単純な煙探知器から産業用空気品質モニターまで、すべてのガス関連デバイスで広く使用されています。これらのMQガスセンサーをArduinoで使用して、アンモニアなどの有害ガスを測定しました。この記事では、PICマイクロコントローラーでこれらのガスセンサーを使用して、ガスのPPM値を測定し、16x2LCDに表示する方法を学習します。
前述のように、市場にはさまざまな種類のMQシリーズセンサーがあり、各センサーは次の表に示すようにさまざまな種類のガスを測定できます。この記事では、LPGガスの存在と濃度を検出するために使用できるPIC付きのMQ6ガスセンサーを使用します。ただし、同じハードウェアとファームウェアを使用することで、コードとハードウェアの部分を大幅に変更することなく、他のMQシリーズセンサーを使用することもできます。
センサー | 検出 |
MQ-2 | メタン、ブタン、LPG、煙 |
MQ-3 | アルコール、エタノール、煙 |
MQ-4 | メタン、CNGガス |
MQ-5 | 天然ガス、LPG |
MQ-6 | LPG、ブタンガス |
MQ-7 | 一酸化炭素 |
MQ-8 | 水素ガス |
MQ-9 | 一酸化炭素、可燃性ガス。 |
MQ131 | オゾン |
MQ135 | 大気質(ベンゼン、アルコール、煙) |
MQ136 | 硫化水素ガス |
MQ137 | アンモニア |
MQ138 | ベンゼン、トルエン、アルコール、アセトン、プロパン、ホルムアルデヒドガス、水素 |
MQ214 | メタン、天然ガス |
MQ216 | 天然ガス、石炭ガス |
MQ303A | アルコール、エタノール、煙 |
MQ306A | LPG、ブタンガス |
MQ307A | 一酸化炭素 |
MQ309A | 一酸化炭素、可燃性ガス |
MG811 | 二酸化炭素(CO2) |
AQ-104 | 大気質 |
MQ6ガスセンサー
以下の画像は、MQ6センサーのピン配列を示しています。ただし、左の画像はマイクロコントローラーユニットとインターフェースするためのモジュールベースのMQ6センサーであり、モジュールのピン配列もその画像に示されています。
ピン1はVCC、ピン2はGND、ピン3はデジタル出力(ガスが検出されるとロジックロー)、ピン4はアナログ出力です。ポットは感度を調整するために使用されます。RLではありません。RL抵抗は、DOUTLEDの右側の抵抗です。
各MQシリーズセンサーには、発熱体と検出抵抗があります。ガス濃度に応じて検出抵抗が変化し、変化抵抗を検出することでガス濃度を測定できます。PPMのガス濃度を測定するために、すべてのMQセンサーは非常に重要な対数グラフを提供します。グラフは、RSとROの比率でガス濃度の概要を示しています。
MQガスセンサーを使用してPPMを測定する方法は?
RSは特定のガスが存在するときの検出抵抗であり、ROは特定のガスがない清浄な空気での検出抵抗です。データシートから抜粋した以下の対数グラフは、MQ6センサーの検出抵抗によるガス濃度の概要を示しています。 MQ6センサーは、LPGガス濃度を検出するために使用されます。したがって、MQ6センサーは、LPGガスが利用できないクリーンエア状態で特定の抵抗を提供します。また、LPGガスがMQ6センサーによって検出されるたびに抵抗が変化します。
したがって、Arduinoガス検知器プロジェクトで行ったのと同様に、このグラフをファームウェアにプロットする必要があります。式は、3つの異なるデータポイントを持つことです。最初の2つのデータポイントは、X座標とY座標でのLPG曲線の始点です。3番目のデータは勾配です。
したがって、LPG曲線である濃い青色の曲線を選択すると、X座標とY座標での曲線の開始は200と2になります。したがって、対数目盛からの最初のデータポイントは(log200、log2)であり、( 2.3、0.30)。
X1とY1 =(2.3、0.30)のようにしましょう。曲線の終点は2番目のデータポイントです。上記と同じプロセスにより、X2とY2は(log 10000、log0.4)になります。したがって、X2およびY2 =(4、-0.40)。曲線の傾きを取得するには、次の式を使用します。
=(Y2-Y1)/(X2-X1)=(-0.40-0.30)/(4-2.3)=(-0.70)/(1.7)= -0.41
必要なグラフは次のように与えられます
LPG_Curve = {Xを開始してYを開始、勾配} LPG_Curve = {2.3、0.30、-0.41}
他のMQセンサーの場合は、データシートと対数グラフプロットから上記のデータを取得します。値は、測定されたセンサーとガスによって異なります。この特定のモジュールでは、ガスの有無に関する情報のみを提供するデジタルピンがあります。このプロジェクトでは、これも使用されます。
必要なコンポーネント
MQセンサーとPICマイクロコントローラーのインターフェースに必要なコンポーネントを以下に示します-
- 5V電源
- ブレッドボード
- 4.7k抵抗
- LCD 16x2
- 1k抵抗
- 20Mhzクリスタル
- 33pFコンデンサ-2個
- PIC16F877Aマイクロコントローラー
- MQシリーズセンサー
- バーグと他のフックアップワイヤー。
回路図
PICプロジェクトを使用したこのガスセンサーの回路図は非常に単純です。アナログピンはRA0に接続され、デジタルピンはRD5に接続され、ガスセンサーモジュールによって提供されるアナログ電圧を測定します。PICを初めて使用する場合は、PICADCチュートリアルとPICLCDチュートリアルを調べて、このプロジェクトをよりよく理解することをお勧めします。
回路はブレッドボードで構成されています。接続が完了すると、セットアップは次のようになります。
PICプログラミングを備えたMQセンサー
このコードの主要部分は、main関数およびその他の関連する周辺関数です。完全なプログラムはこのページの下部にあります。重要なコードスニペットは次のように説明されています。
以下の関数は、自由空気中のセンサー抵抗値を取得するために使用されます。アナログチャネル0が使用されているため、アナログチャネル0からデータを取得しています。これはMQガスセンサーを校正するためのものです。
float SensorCalibration(){ int count; //この関数は、フリーエア フロートval = 0で センサーを校正し ます。 for(count = 0; count <50; count ++){//複数のサンプルを取得し、平均値を計算します val + = calculate_resistance(ADC_Read(0)); __delay_ms(500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // RO_CLEAN_AIR_FACTORで除算すると、Ro returnvalが生成され ます。 }
以下の関数は、MQセンサーのアナログ値を読み取り、それを平均してRs値を計算するために使用されます。
float read_MQ() { int count; float rs = 0; for(count = 0; count <5; count ++){//複数の読み取り値を取得して平均します。 rs + = calculate_resistance(ADC_Read(0)); // rsはガス濃度に応じて変化します。 __delay_ms(50); } rs = rs / 5; rsを返す; }
以下の関数は、分圧抵抗と負荷抵抗から抵抗を計算するために使用されます。
floatcalculate_resistance(int adc_channel) {//センサーと負荷抵抗は分圧器を形成します。したがって、アナログ値と負荷値を使用して 戻ります(((float)RL_VALUE *(1023-adc_channel)/ adc_channel)); //センサー抵抗が見つかります。 }
RL_VALUEは、以下に示すようにコードの先頭で定義されます。
#define RL_VALUE(10)//ボードの負荷抵抗をキロオームで定義します
車載負荷抵抗を確認してからこの値を変更してください。他のMQセンサーボードでは異なる場合があります。利用可能なデータを対数スケールにプロットするには、以下の関数を使用します。
int gas_plot_log_scale(float rs_ro_ratio、float * curve) { return pow(10、(((log(rs_ro_ratio)-曲線)/曲線)+曲線)); }
曲線は、上記の記事で以前に計算されたコードの上記で定義されたLPG曲線です。
float MQ6_curve = {2.3,0.30、-0.41}; //グラフプロット、特定のセンサーに対してこれを変更します
最後に、アナログ値を測定し、PPMを計算し、それをLCDに表示する主な機能を以下に示します。
void main(){ system_init(); clear_screen(); lcd_com(FIRST_LINE); lcd_puts( "Calibrating…."); Ro = SensorCalibration(); // clear_screen(); lcd_com(FIRST_LINE); lcd_puts( "完了!"); // clear_screen(); lcd_com(FIRST_LINE); lcd_print_number(Ro); lcd_puts( "Kオーム"); __delay_ms(1500); gas_detect = 0; while(1){ if(gas_detect == 0){ lcd_com(FIRST_LINE); lcd_puts( "ガスが存在します"); lcd_com(SECOND_LINE); lcd_puts( "Gas ppm ="); float rs = read_MQ(); フロート比= rs / Ro; lcd_print_number(gas_plot_log_scale(ratio、MQ6_curve)); __delay_ms(1500); clear_screen(); } else { lcd_com(FIRST_LINE); lcd_puts( "ガスが存在しません"); } } }
まず、センサーのROが清浄な空気中で測定されます。次に、デジタルピンが読み取られ、ガスが存在するかどうかが確認されます。ガスが存在する場合、ガスは提供されたLPG曲線によって測定されます。
ライターを使用して、ガスが検出されたときにPPM値が変化しているかどうかを確認しました。これらのシガーライターにはLPGガスが含まれており、空気中に放出されるとセンサーによって読み取られ、LCDのPPM値が次のように変化します。
完全な作業は、このページの下部にあるビデオで見つけることができます。ご不明な点がございましたら、コメントセクションに残すか、フォーラムを使用してその他の技術的な質問をお寄せください。