現在、大気中の二酸化炭素濃度の上昇が深刻な問題となっています。 NOAAの報告によると、オゾンCO2濃度は0.0385パーセント(385 ppm)に達し、210万年で最高の量です。これは、100万個の空気の粒子の中に385個の二酸化炭素の粒子があることを意味します。このCO2の増加は環境に悪影響を及ぼし、気候変動や地球温暖化などの状況に直面することになりました。道路にはCO2レベルを知るための大気質測定器がたくさん設置されていますが、DIY CO2測定器を作って、自分たちの地域に設置することもできます。
このチュートリアルでは、重力赤外線CO2センサーをArduinoと接続して、PPMのCO2濃度を測定します。重力赤外線CO2センサーは、高精度のアナログCO2センサーです。0〜5000ppmの範囲のCO2含有量を測定します。MQ135ガスセンサー、Sharp GP2Y1014AU0Fセンサー、およびNovaPMセンサーSDS011を使用して大気質モニターを構築した以前のプロジェクトも確認できます。
必要なコンポーネント
- Arduino Nano
- 重力赤外線CO2センサーV1.1
- ジャンパー線
- 0.96'SPIOLEDディスプレイモジュール
- ブレッドボード
重力赤外線CO2センサー
重力赤外線CO2センサーV1.1は、DFRobotがリリースした最新の高精度アナログ赤外線CO2センサーです。このセンサーは、非分散型赤外線(NDIR)テクノロジーに基づいており、優れた選択性と無酸素依存性を備えています。温度補償を統合し、DAC出力をサポートします。このセンサーの有効な測定範囲は0〜5000ppmで、精度は±50ppm + 3%です。この赤外線CO2センサーは、HVAC、室内空気質の監視、工業プロセス、セキュリティ保護の監視、農業、畜産の生産プロセスの監視に使用できます。
赤外線CO2センサーの ピン配列:
前述のように、赤外線CO2センサーには3ピンコネクタが付属しています。次の図と表は、赤外線CO2センサーのピン割り当てを示しています。
ピン番号 |
ピン名 |
説明 |
---|---|---|
1 |
信号 |
アナログ出力(0.4〜2V) |
2 |
VCC |
VCC(4.5〜5.5V) |
3 |
GND |
GND |
赤外線CO2センサーの 仕様と機能:
- ガス検知:二酸化炭素(CO2)
- 動作電圧:4.5〜5.5V DC
- 予熱時間:3分
- 応答時間:120秒
- 動作温度:0〜50℃
- 動作湿度:0〜95%RH(結露なし)
- 防水性と防食性
- 高いサイクル寿命
- 抗水蒸気干渉
0.96フィートOLEDディスプレイモジュール
OLED(有機発光ダイオード)は、2つの導体の間に一連の有機薄膜を配置することによって構築された自己発光技術です。これらのフィルムに電流を流すと、明るい光が生成されます。OLEDはテレビと同じ技術を使用していますが、ほとんどのテレビよりもピクセル数が少なくなっています。
このプロジェクトでは、モノクロ7ピンSSD13060.96インチOLEDディスプレイを使用しています。SPI 3ワイヤーモード、SPI 4ワイヤーモード、I2Cモードの3つの異なる通信プロトコルで動作します。ピンとその機能は、以下の表で説明されています。
OLEDとそのタイプについては、前回の記事で詳しく説明しました。
ピン名 |
他の名前 |
説明 |
Gnd |
接地 |
モジュールのアースピン |
Vdd |
Vcc、5V |
電源ピン(3-5V許容) |
SCK |
D0、SCL、CLK |
クロックピンとして機能します。I2CとSPIの両方に使用 |
SDA |
D1、MOSI |
モジュールのデータピン。IICとSPIの両方に使用 |
RES |
RST、リセット |
モジュールをリセットします(SPI中に役立ちます) |
DC |
A0 |
データコマンドピン。SPIプロトコルに使用 |
CS |
チップセレクト |
SPIプロトコルで複数のモジュールを使用する場合に便利です |
OLED仕様:
- OLEDドライバーIC:SSD1306
- 解像度:128 x 64
- 視角:> 160°
- 入力電圧:3.3V〜6V
- ピクセルカラー:ブルー
- 使用温度:-30°C〜70°C
リンクをたどって、OLEDとさまざまなマイクロコントローラーとのインターフェースの詳細をご覧ください。
回路図
Arduino用の重力アナログ赤外線CO2センサーのインターフェースの回路図を以下に示します。
重力赤外線CO2センサーとOLEDディスプレイモジュールのみをArduinoNanoに接続しているため、回路は非常に単純です。赤外線CO2センサーとOLEDディスプレイモジュールは両方とも+ 5VとGNDで給電されます。CO2センサーの信号(アナログ出力)ピンは、ArduinoNanoのA0ピンに接続されています。OLEDディスプレイモジュールはSPI通信を使用するため、OLEDモジュールとArduinoNanoの間にSPI通信を確立しました。以下の表に接続を示します。
S.No |
OLEDモジュールピン |
Arduinoピン |
1 |
GND |
接地 |
2 |
VCC |
5V |
3 |
D0 |
10 |
4 |
D1 |
9 |
5 |
RES |
13 |
6 |
DC |
11 |
7 |
CS |
12 |
回路図に従ってハードウェアを接続すると、次のようになります。
CO2濃度を測定するArduinoコード
Arduinoプロジェクト用のこの重力アナログ赤外線CO2センサーの完全なコードは、ドキュメントの最後に記載されています。ここでは、コードのいくつかの重要な部分について説明します。
コードは使用しています Adafruit_GFX 、および Adafruit_SSD1306の ライブラリを。これらのライブラリは、ArduinoIDEのライブラリマネージャーからダウンロードしてそこからインストールできます。そのためには、Arduino IDEを開き、 [スケッチ]> [ライブラリを含める]> [ライブラリの管理]に 移動し ます 。次に、Adafruit GFXを検索し、AdafruitによるAdafruitGFXライブラリをインストールします。
同様に、AdafruitによってAdafruitSSD1306ライブラリをインストールします。Arduinoのアナログピンから直接電圧値を読み取るため、赤外線CO2センサーはライブラリを必要としません。
ライブラリをArduinoIDEにインストールした後、必要なライブラリファイルを含めてコードを開始します。読み取りはArduinoのアナログピンから直接行われるため、ダストセンサーはライブラリを必要としません。
#include
次に、OLEDの幅と高さを定義します。このプロジェクトでは、128×64のSPIOLEDディスプレイを使用しています。あなたは変更することができ SCREEN_WIDTH 、および SCREEN_HEIGHTの ディスプレイに応じて変数を。
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
次に、OLEDディスプレイが接続されているSPI通信ピンを定義します。
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
次に、SPI通信プロトコルで以前に定義した幅と高さのAdafruitディスプレイインスタンスを作成します。
Adafruit_SSD1306ディスプレイ(SCREEN_WIDTH、SCREEN_HEIGHT、OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);
その後、CO2センサーが接続されているArduinoピンを定義します。
int sensorIn = A0;
ここで、 setup() 関数内で、デバッグ目的でシリアルモニターを9600のボーレートで初期化します。また、 begin() 関数を使用してOLEDディスプレイを初期化します。
Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); AnalogReference(DEFAULT);
loop() 関数内で、 analogRead() 関数を呼び出して、 最初 にArduinoのAnalogピンで信号値を読み取ります。その後、これらのアナログ信号値を電圧値に変換します。
void loop(){int sensorValue = analogRead(sensorIn); フロート電圧= sensorValue *(5000 / 1024.0);
その後、電圧値を比較します。電圧が0Vの場合は、センサーに問題が発生していることを意味します。電圧が0Vより大きく400Vより小さい場合は、センサーがまだ予熱プロセスにあることを意味します。
if(電圧== 0){Serial.println( "Fault"); } else if(電圧<400){Serial.println( "予熱"); }
電圧が400V以上の場合は、CO2濃度値に変換します。
else {int電圧差=電圧-400; フロート濃度=電圧差* 50.0 / 16.0;
その後、 setTextSize() と setTextColor() を使用してテキストサイズとテキストの色を設定します。
display.setTextSize(1); display.setTextColor(WHITE);
次に、次の行で、 setCursor(x、y) メソッドを使用してテキストが開始する位置を定義します。そして、 display.println() 関数を使用してOLEDディスプレイにCO2値を印刷し ます。
display.println( "CO2"); display.setCursor(63,43); display.println( "(PPM)"); display.setTextSize(2); display.setCursor(28,5); display.println(concentration);
そして最後に、 display() メソッドを呼び出して、OLEDディスプレイにテキストを表示します。
display.display(); display.clearDisplay();
重力赤外線CO2センサーのインターフェースのテスト
ハードウェアとコードの準備ができたら、センサーをテストします。そのためには、Arduinoをラップトップに接続し、ボードとポートを選択して、アップロードボタンを押します。次に、シリアルモニターを開き、しばらく待ちます(予熱プロセス)。その後、最終データが表示されます。
値は、以下に示すようにOLEDディスプレイに表示されます。
注:センサーを使用する前に、センサーを約24時間加熱して、正しいPPM値を取得してください。初めてセンサーに電力を供給したとき、出力CO2濃度は1500 PPMから1700PPMでしたが、24時間の加熱プロセスの後、出力CO2濃度は正しいPPM値である450PPMから500PPMに減少しました。そのため、CO2濃度を測定するために使用する前に、センサーを校正する必要があります。
これは、赤外線CO2センサーを使用して空気中の正確なCO2濃度を測定する方法です。完全なコードと作業ビデオを以下に示します。疑問がある場合は、コメントセクションに残すか、フォーラムを使用して技術的なヘルプを参照してください。