WICの中から

機構設計者が株式投資や育児に奮闘するblog

Arduino Nano互換機でCO2モニターを作りました

f:id:temcee:20200524233425j:plain

以前ラズパイで空気品質センサーを使っておうちの空気をセンシングしました。

temcee.hatenablog.com

リモートワークを始めてからも、自身の労働環境を可視化するためにちょくちょく使っていました。ただラズパイだと起動させるのが面倒なんですよね。デカイし、terminal起動させてプログラム実行させないとダメですし。

もっと手軽にしたいなと思い、安くて小さいArduino Nano互換機とOLEDモジュールを使って、気軽に見れるCO2モニターを作りました。

用意するもの

・Aruduino Nano(互換機)


注意点として、mini BタイプのUSBケーブルが必要です。

・OLED

I2C通信で動きます。

・CCS811(空気品質センサー)
www.switch-science.com

・ジャンパー線&ブレッドボード


ブレッドボードは適当な大きさのものを。NanoとかOLEDモジュールはピンヘッダつけるので、ジャンパー線はオス-メスのもの。

配線

f:id:temcee:20200524225646j:plain

I2C、よく分かってなかったんですが、異なるモジュールはアドレスが違うから並列で使えるみたいです。

コード

下記2つの公式サイトの悪魔合体コードです。

CCS811 Air Quality Breakout Hookup Guide - learn.sparkfun.com

DSD TECH Official Website: DSD TECH 0.91 0.96 1.3 INCH IIC OLED LCD Screen Support U8glib for Arduino AVR

#include <Wire.h>
#include <U8glib.h>
#include <SparkFunCCS811.h> //Click here to get the library: http://librarymanager/All#SparkFun_CCS811

#define CCS811_ADDR 0x5B //Default I2C Address

CCS811 mySensor(CCS811_ADDR);

int co, tvoc;

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // Just for 0.91”(128*32)

void draw(int co, int tvoc) {
  u8g.setFont(u8g_font_unifont);
  u8g.setPrintPos(0, 10); 
  u8g.print("CO2 : " + String(co));

  u8g.setFont(u8g_font_unifont);
  u8g.setPrintPos(0, 32); 
  u8g.print("TVOC : " + String(tvoc));
}

void setup()
{
  Serial.begin(115200);
  Serial.println("CCS811 Basic Example");

  Wire.begin(); //Inialize I2C Hardware

  if (mySensor.begin() == false)
  {
    Serial.print("CCS811 error. Please check wiring. Freezing...");
    while (1)
      ;
  }

  // assign default color value
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop()
{
  //Check to see if data is ready with .dataAvailable()
  if (mySensor.dataAvailable())
  {
    //If so, have the sensor read and calculate the results.
    //Get them 
    mySensor.readAlgorithmResults();

    co = mySensor.getCO2();
    tvoc = mySensor.getTVOC();
    
    u8g.firstPage();
    do {
      draw(co, tvoc);
    }while (u8g.nextPage());
  } 
  delay(10); //Don't spam the I2C bus
}

結果

f:id:temcee:20200524233411j:plain

f:id:temcee:20200524233443j:plain

CO2は二酸化炭素、TVOCは揮発性有機化合物です。シックハウス原因になるやつですね。センサーに息吹きかけると値が変動するので、正常に動作している模様。

まとめ...安くて簡単なArduino

Arduino Nano互換機でCO2モニターを作りました。

今までArduinoは難しい印象を持ってて避けていたのですが、実際はゼンゼン真逆で、めちゃ簡単でした。 ライブラリが充実していてコードが簡単。さらにネットに実例がゴロゴロ転がっていてお手本に事欠かなかったです。

それでいて、安いんですよね。互換機だからというのもあるんですが。本体500円で、OLEDも500円くらいと、ミスってもいいやって感じで使えるのが素晴らしい。今まで避けていたのがバカみたいです。

今回の工作は、ブレッドボードもminiを使ってすっきりまとまっているので、箱を作ってきちんとしたモニターにしようと考えています。ジャンパー線が邪魔なのだけが残念ですが。。

また別途記事にする予定ですが、今回の写真はRX0IIにセルカレンズをつけて撮ってみました。

f:id:temcee:20200524234814j:plain

いつものTG-3は会社に置いたまま、コロナ感染防止の立ち入り禁止で回収出来ないんですよね。寄れるカメラ・レンズが無く困っていましたが、無事解決できて良かったです。

こんな記事も書いています。

temcee.hatenablog.com

もともとはLEDマトリクスに表示させたかったですが、16 x 32だと解像度が辛すぎて断念しました。pillow使って数字の画像作ってみたんですが、とても読めたものではなく。。

temcee.hatenablog.com

M5stackとかも、余裕があれば手を出してみたいな。