空気よどみセンサーをつくろう

400ppm

空気よどみセンサーを作っています

空気よどみセンサーってなに?ってところからですが、空気がよどんでいる状態を検知して換気の目安をお知らせする装置です。二酸化炭素(正確には二酸化炭素相当物の価としてのeCO2の数値)が多くなると表示色が青から赤に変わって換気のタイミングをお知らせします…。そんな装置を考え、つくるストーリーをまとめます。なぜ、取り組んでいるのかは、最後に紹介します。

取扱説明書のページはこちら

換気の目安となる基準

新型コロナウイルス感染症の予防として3つの密を避けることが重要と2年くらい言われ続けていますが、そのうちの一つの「密閉空間を防ぐ」ための手段として、二酸化炭素濃度測定器により空気が滞留していないことを可視化することが有効とされています。

換気の目安としてはセンサーの数字でいう1000ppmという値を基準に考えると良いと厚労省の資料に書かれています。

冬場における「換気の悪い密閉空間」を改善するための換気の方法|厚生労働省

この「1000ppm」と書かれている数値を測定するには二酸化炭素濃度測定器が必要になります。

市販の二酸化炭素濃度測定器は数千円程度のものから1万円を超えるものまであります。

これは使用されているセンサーの違いが価格差に表れているようです。

センサーの測定方式は、NDIR方式とTVOC測定方式の2種類が主に売られている二酸化炭素濃度測定機に使用されているようで、NDIR方式のセンサーを搭載しているものがガスセンサーとしての精度が高く、価格も高いです。

「暑い」、「寒い」ときの換気

夏場は冷房、冬場は暖房と、基本的に空調のもとで生活していることが多いかと思いますが、建物設備として空気循環や自動換気がされていない、もしくはできていない個所については、意識的に換気をしなくてはいけません。

しかし、空調で快適な温度を保っていると、エネルギー効率や快適さの面から換気をスルーしたくなることはしばしばですね。

換気をする時間も最小限で効率的に行いたいものです。

そのためには、換気の目安が直感的にわかれば良いのではないでしょうか。

自分たちでつくる

我々Code for SUSONOは比較的安価なMOXセンサーを利用して、二酸化炭素濃度(二酸化炭素相当物(eCO2)や金属酸化物(MOX)レベルを含む、総揮発性有機化合物(TVOC:Total Volatile Organic Compounds))を測定し、その状態を色で表示して換気の目安がわかる装置を作ることにしました。

実はこのプロジェクト、というか素案は1年以上前からあって、どうやって作っていこうかというところをみんなで探っていました。

方針としては、正しい二酸化炭素濃度を測定することよりも、換気されずにウイルスなどが空気中に滞留している(空気がよどんでいる)可能性を知った時に換気ができることが重要と考え、簡易的な測定が可能なセンサーで安価に実現することに重きを置いています。また、直感的に分かることが必要で、子供でも窓を開けるということが分かるような色での表示と、数値を確認しなくてもよいようなに横目で見ただけでも分かるような視認性の高さを目指しました。

こういった観点から二酸化炭素濃度測定器と呼ばず「空気よどみセンサー」と呼んでいます。

使う素材はすべて汎用品で、コンピューターボードとしてArduino nano(互換製品)を、ガスセンサーはCCS811、状態を表すためのLEDとしてテープLEDのWS2812の3点を使います。配線は以下の通りです。

Arduino nano

Arduino nanoに準拠した互換製品を購入しました。
USBケーブルでPCに接続してArduino IDEでプログラムを転送します。
Windowsの場合はデバイスマネージャーでシリアルポートUSBとしてCOMポートの番号を確認しておく必要があります。
MACでも設定が合っていれば問題なく動作します。

AliExpressとAmazonで購入

CCS811(空気品質センサモジュール)

測定できるのは以下の値です

  • 二酸化炭素相当物(eCO2)
  • 金属酸化物レベル(MOX)を含む、総揮発性有機化合物(TVOC)

https://cdn.sparkfun.com/assets/learn_tutorials/1/4/3/CCS811_Datasheet-DS000459.pdf

データシートの意訳ですが、8ページに、初期の使用については48時間動作モードで駆動させてエージング(Burn-In・・・連続稼働による動作確認)をするように書かれています。また通常使用の際も、48時間の初期動作を確認した前提で、20分測定モードにしておくと正確な値が測定できるという表記があります。
きわめて正確な値の測定が目的ではないのですが、センサーの仕様としては知っておいた方が良いという事項です。

プログラムと連動しますが、Arduinoへの結線は以下の通りです。

  • VCC:電源(5V)
  • GND:GND
  • SDA:データ信号(A4ピン)
  • SCL:クロック信号(A5ピン)
  • WAK:GND

AliExpressで購入

WS2812B(マイコン内蔵高輝度RGBLED)

データ信号でコントロール可能なRGBでの色表現が可能なLEDライトです。複数のLEDが繋がっている場合でも、同時に(個別に)コントロール可能です。近年では間接照明やクリスマスでの電飾によく使われているようです。このLEDの素晴らしいところは、必要な個数をはさみで切って使えるという所です。今回購入したものは50cmの長さの中に72個のLEDが付いている物です。組み込む際にLED同士の間隔が広いとサイズを大きくしなくてはならないので、最も間隔の狭い物を選びました。今回はこの長い巻きテープの状態から4個ずつ切り取って使用します。ハサミで簡単に切れます。切って大丈夫なんです。

プログラムと連動しますが、Arduinoへの結線は以下の通りです。写真で見る上段の端子がGND、中段がDATA,下段がVCCです。

  • VCC:電源(5V)
  • GND:GND
  • DATA:データ信号(D13ピン)

Amazonで購入

プログラム(コード)

Arduino nanoの互換製品へ書き込むプログラムは標準的なArduino IDEを使ってコーディングしていきました。

プログラムに使うセンサーのライブラリなどはMITライセンスやCCBYライセンスによって明確になっている物を利用します。

まずはOLED(SSD1306)という画面にセンサーの数値を表示させる所からチャレンジ。ここからじっくり何度も試作を重ねて行きます。

それぞれのライブラリのサンプルコードを組み合わせたり、WEBで情報を収集して作成しましたが、私はこれまでLEDを点灯(いわゆるエルちか)させる程度のプログラムしか書いたことがありませんでした。やりたいことが明確になっていれば、WEB上の情報とサンプルコードでなんとかなるものなのかもしれないですね。

試作段階のコード
※完成したコードと使用方法はGitHubに公開中です。

ケースは3Dプリンタで自作

ぴったり合うケースも作りたい。そう思い、Autodesk Fusion360で見よう見まねでケースの3Dモデルを作成し、3Dプリンタで出力しました。

もしデータをプリントする場合は、使用している3Dプリンタのスライスソフトで加工してから出力してください。ダウンロードしてWindowsの3DビュアーやmacのX-codeでもプレビューできます。

私たちが使用している3DプリンタはNOVA3D Elfin2 MONO SEです。若干おかしな日本語表記もあります(シャットダウン時に「閉じてる中」など)が、初心者でも使いやすいです。最初のゼロ合わせが不要だったり、水洗いレジンが使用できたり、かなり精巧な出力が可能です。そして何よりお安いです。

光を見やすくする半透明のブロックは3Dプリンタやエポキシレジンで試作して、現時点ではラメ入りのエポキシレジンが一番見やすいものが作れそうな気がしています。

完成したエポキシレジンのブロック。ラメを入れたりするとキラキラ感が増しますが、固まる途中でできた気泡でいい感じに光が拡散します。

センサーの値と色表示

青はきれいな空気、赤は換気をお勧めする…というように色でわかるような設計になっています。

みんなに使ってもらい、みんなでつくる。

電子工作も自分たちで

ある程度プログラムが固定してきたらメンバーで半田ごてを持って集合!作成もみんなで行いました。

自分で作ったデバイスには愛着も沸きます。作成手順の動画もあります。

プロトタイプの実証

作った装置は、本当にみんなが使いやすい要件を満たしているのでしょうか。

検証のために利用シーンを考えながらいろいろな方に実証実験に協力して貰っています。

お店や施設においてもらうときには色の目安もわかるようにPOPを置いてもらっています。

センサーの誤差の範囲も考えて、まずは上限値として1500ppmを超えたら赤くなるようなプログラムにして提供していましたが、協力者の医療機関の院長から、厚労省の基準に合わせて1000ppmで赤くなるようにしたらどうか、という提案を貰いプログラムを改修したり、窓を全開に開けて換気をするタイミングでリセットするなどの使い方でもアイデアを貰ったりして、設置場所の方も、そこに訪れる方も安心できる作りに、ヒアリングをしながら少しずつ変更を重ねています。

実証実験の受け入れ先からの声とその対応

  • 医療機関に関しては赤くなるのは1500ppmではなくて1000ppmにしたほうが国の基準に合う→早速変更したものを提供しましょう。
  • 色での表現は子どもたちにもわかりやすくて良い。子供たちがオレンジになったら窓を開ける準備をし始めたりする。→狙い通り!嬉しい!
  • センサーの周辺をアルコール除菌すると一気に赤くなる。アルコールとか消毒液にも反応してるよね。置く場所によっては使いにくいシーンもあるかも。→たしかに。注意書きにして置く場所の工夫をお願いしよう。
  • 温度や湿度も測れる?→センサーを足せば可能ですね。Ambientなどでネットから確認も可能にすることも!
  • 数字も見られるパターンもあってもいいかも。→USBでPCにつなげばシリアル通信で見られる仕様にしよう。もしくは試作で作ったOLEDもつけちゃう?

完成した製品の取扱説明書

装置の使用方法は「空気よどみセンサー(取扱説明書)」にまとめてあります。

プログラミング学習への展開

冒頭に書いた、この取り組みを始めたきっかけについてお話したいと思います。

昨年のUDC2020でコロナ禍の飲食店のチャレンジとして行われたドライブスルー弁当市場の課題解決や夢実現のためにICTを活用したほうが良い部分があり、その方法を具現化するという取り組みをしました。

ICTを活用するというと、急にハードルが高く感じられがちなのですが、我々も自らのことをあえて「非エンジニア集団」と呼んでいる通り、高度で圧倒的な技術力があるわけではなく、巷にあるドキュメントを見て、楽しみながら手探りで少しずつ技術習得し、やりたいことにチャレンジしています。

つまり、やりたければ、だれでもできるのです。我々の活動がそんなみなさんの取り組みのきっかけになれば良いと思っています。

やる前は具体的な方法が分かっていなくても、「こうしたら、こうなるだろう」という仮説をもとに、情報を探して作っていく、デザイン思考とアジャイル開発(そこまで立派ではないですが)の心意気で取り組んでいます。

こういった考え方は論理的な考え方のもとに成り立っているのだと思うのですが、論理的な考え方というのは、プログラミング的思考が基礎になってくるのではないでしょうか。

プログラミング的思考が学校のカリキュラムとして取り組まれるというニュースから数年が経っていますが、実際にプログラミング的思考が正しいのかどうかを確かめるには、結局のところコンピューターを使ったプログラミングで実体験するのが早いのかもしれません。たとえば、自分の頭の中では論理的に考えて、プログラミング的思考になっていると思っていても、そのロジックをプログラミングとして動かしてみたらエラーが出て動かないかもしれません。

なので、実際にプログラミングをしてみると、論理的な思考ができているのか、答え合わせをすることができます。では、プログラミングはどうやって学んだら良いのかということになります。

Nintendo Switchでゲームを作りながら学ぶようなソフトも昨年(2021年)発売されていて、触れるチャンスは増えてきています。

我々もプログラミング学習について何か出来ないか考えた時に、題材さえあれば地域でのプログラミング学習に取り組めると思っていました。そして、今回作って使った「空気よどみセンサー」というデバイスがどんなプログラムになっているかを体験ができれば、「こうしたら、こうなるだろう」という考え方がスッと理解できないだろうか?と考えました。

この「空気よどみセンサーは」プログラム的には非常にシンプルに作られています。多分レベル2~3くらい。この電子工作とプログラミングをプログラミング学習のテーマとして使うことで、実用的に使えるものを自分で作りながら学べるよ!というストーリーです。

子どもたちに「こうすれば、こうなる」というプログラミング的思考が身につけば、自分で作りたいものを開発できるようにもなる突破力を身に着けられるようになるのではないかという期待もあります。

今後は、プログラミングや電子工作、3Dプリントなど、今回の取り組みからノウハウ化できたことを元に、地域の未来に投資できるような取り組みにもチャレンジしていきます。