ArduinoでCO2センサーの値をLCDに表示する

ArduinoでCO2センサーの値をLCDディスプレイに表示した結果 Arduino
スポンサーリンク

Arduinoを使って、CO2センサーから取った数値をLCDに表示するプログラムを作りたいと思います。

CO2センサーとLCD(液晶ディスプレイ)はI2C通信で接続をします。
I2C通信はマイコンに対して複数の機器を同時に接続できる利点があり、組み込み機器を開発する時にとてもよく使われています。

Arduinoを使うと簡単に実現することができます。
部屋の空気のきれいさを見えるようにでき、I2Cも勉強できるのがうれしいですね。

メカつば
メカつば

I2Cは組み込み開発をする上で、必要な知識ですね

こんな人にオススメ
  • Arduinoで簡単な工作をしてみたい
  • 部屋の換気をこまめにしたい
  • I2C通信について勉強したい

準備するもの

この記事では、以下の物を使います。

●Arduino Uno

amazonのスイッチサイエンスから購入する純正のArduinoは、永久保証を受けることができます。
ブレッドボードや電子部品が付いてくるので、すぐに工作を始めることができます。

●LCDディスプレイ

16文字×2行を表示することができるLCDディスプレイです。
本来LCDディスプレイはパラレル信号を入力しないといけませんが、この商品はパラレル通信⇔I2C通信を変換してくれる回路が元から付いているので、I2C通信によるやりとりが可能です。

●CO2センサー

I2C通信で接続することができるCO2センサーです。
精度はそれほど信用できるものではありませんが、手軽にArduinoでCO2を計測することができます。

詳細な使い方は以下の公式HPで紹介されています。
https://wiki.keyestudio.com/KS0457_keyestudio_CCS811_Carbon_Dioxide_Air_Quality_Sensor

●ジャンパーワイヤー

LCDディスプレイやセンサーは端子がオスになっているので、各種ワイヤーを揃えておくと便利です。

Arduinoと部品の接続

Arduinoと部品は以下のように接続します。

Arduino、CO2センサー、LCDディスプレイの接続方法

Arduinoは「SDA」ピンと「A4」ピン、「SCL」ピンと「A5」ピンが繋がっているので、今回は「A4」ピンと「A5」ピンを使用しています。
I2Cの通信線である「SDA」「SCL」をLCDとCO2センサーが共有しているのがわかります。

I2C部品のアドレス

I2C通信は、複数の部品が同じ通信線を共有しています。
Arduinoが誰と通信しているかわかるように、部品1つ1つにアドレスが設定されています。

今回使用するLCDディスプレイとCO2センサーのアドレスは以下の通りです。

部品アドレス
LCDディスプレイ0x27
CO2センサー0x5A

部品のアドレスはデータシートや公式HPを見れば調べることができますが、
「I2C_Scanner」というスケッチを使うと、ArduinoにつながっているI2Cデバイスのアドレスをシリアルモニターに表示してくれるので、簡単に調べることができます。

How to Scan and Detect I2C Addresses
I2C is a common circuit interconnection format. This guide assists in helping a microcontroller/Raspberry Pi to find a connected I2C device.

ライブラリの準備

LCDディスプレイ ライブラリ

I2CのLCDディスプレイをArduinoで使うときは、公開されているライブラリを活用すると簡単に動作させることができます。

Arduno IDEで「ライブラリマネージャー」を開き、「LiquidCrystal_I2C」で検索をするとヒットします。
私は以下の画像にあるライブラリをインストールしました。

ArduinoでLCDディスプレイ用のライブラリをインストールする。
CO2センサー ライブラリ

上でご紹介した公式HPから専用のライブラリをダウンロードして、Arduinoのライブラリフォルダへ保存することで、簡単にCO2センサーから計測値を取得することができます。

まず、HPにアクセスして「Resource」の下にあるリンクに飛びます。

CO2センサーのライブラリをインストールする方法1

次に、CCS881のパスまで移動してダウンロードを押下します。

CO2センサーのライブラリをインストールする方法2

ダウンロードしたファイルをArduinoのライブラリフォルダへ保存します。
私の環境ではライブラリフォルダは以下のパスにありました。

C:\Users\ユーザー名\AppData\Local\Arduino15\libraries

CO2センサーのライブラリをインストールする方法3
ライブラリのインクルード

上記の方法でインストールしたライブラリは、ArduinoIDEでインクルードすることで使えるようになります。

「スケッチ」タブの「ライブラリのインクルード」の中に、「LiquidCrystal I2C」と「CCS811」が表示されていたら正常にライブラリをインストールできています。

それぞれを選択すると、自動でソースコード内にライブラリファイルがインクルードされます。

ソースコード全文

Arduinoのスケッチ全文は以下の通りです。

#include <LiquidCrystal_I2C.h>
#include <CCS811.h>

// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2);

// CCS811 sensor(&Wire, /*IIC_ADDRESS=*/0x5A);
CCS811 sensor;

void setup() {

  Serial.begin(115200);

  // initialize the lcd 
  lcd.init();
  lcd.backlight();
  
  // Wait for the chip to be initialized completely, and then exit
  while(sensor.begin() != 0){
    Serial.println("failed to init chip, please check if the chip connection is fine");
    delay(1000);
  }
  // @brief Set measurement cycle
  sensor.setMeasCycle(sensor.eCycle_250ms);

}

void loop() {
  delay(1000);

  if(sensor.checkDataReady() == true){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("CO2: ");
    lcd.print(sensor.getCO2PPM());
    lcd.print("ppm");
    lcd.setCursor(0,1);
    lcd.print("TVOC: ");
    lcd.print(sensor.getTVOCPPB());
    lcd.print("ppb");
  }
  else{
    Serial.println("Data is not ready!");
  }

  /*!
   * @brief Set baseline
   * @param get from getBaseline.ino
   */
  sensor.writeBaseLine(0x847B);
  //delay cannot be less than measurement cycle
  //delay(1000);
}

以下で内容を簡単にご紹介します。

I2Cアドレスの設定
// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2);

// CCS811 sensor(&Wire, /*IIC_ADDRESS=*/0x5A);
CCS811 sensor;

まずLCDディスプレイのコンストラクタでI2Cアドレス(0x27)と文字数、行数を設定しています。

次にCO2センサーのCCS811クラスのインスタンス(sensor)を宣言していますが、こちらもコンストラクターでI2Cアドレスをデフォルトの「0x5A」に設定しています。

初期設定
void setup() {

  Serial.begin(115200);

  // initialize the lcd 
  lcd.init();
  lcd.backlight();
  
  // Wait for the chip to be initialized completely, and then exit
  while(sensor.begin() != 0){
    Serial.println("failed to init chip, please check if the chip connection is fine");
    delay(1000);
  }
  // @brief Set measurement cycle
  sensor.setMeasCycle(sensor.eCycle_250ms);

}

シリアル通信、LCDディスプレイ、CO2センサーの初期設定をしています。

CO2センサーは初期設定に失敗すると、パソコンのシリアルモニタにエラーメッセージを表示します。

メイン処理
void loop() {
  delay(1000);

  if(sensor.checkDataReady() == true){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("CO2: ");
    lcd.print(sensor.getCO2PPM());
    lcd.print("ppm");
    lcd.setCursor(0,1);
    lcd.print("TVOC: ");
    lcd.print(sensor.getTVOCPPB());
    lcd.print("ppb");
  }
  else{
    Serial.println("Data is not ready!");
  }

メインループの中で、センサーから計測値の取得に成功すれば、LCDに取得した値を表示します。
delayを入れないと、LCDが高速で点滅して人間の目では読むことができなくなります。

実行結果

上記のスケッチを実行した結果です。
無事にCO2センサーから取得したデータをLCDディスプレイに表示することができました。

CO2センサーに向かって息を吹きかけるとCO2の数値が上昇するので、正しくCO2を計測できていることがわかります。

ArduinoでCO2センサーの値をLCDディスプレイに表示した結果

まとめ

Arduinoを使ってCO2の数値をLCDディスプレイに表示しました。

I2C通信は、組み込み開発をする上で知っておいて損のない知識です。
実際に手を動かしてイメージを膨らませてみることをオススメします!

Arduino
スポンサーリンク
tsubablog

メーカーで組み込みプログラマーとして勤務しているサラリーマンです。
プログラミングの楽しさについて発信しています。

業務で扱っている言語はC、C++です。

tsubablogをフォローする
つばブログ

コメント

タイトルとURLをコピーしました