title.png


第5回 気温と湿度を測定するセンサ

 最初の「Arduinoを使った電子工作の部屋」で宣言した通り、最終目標は「部屋の気温と湿度のログを自動取得する」ことです。ここまで、Arduinoの導入、チュートリアル、練習、と、下積みしてきましたが、いよいよ、今回から気温と湿度の測定に向けて動き出します。

センサの選択

 まずは、個人が入手可能な気温・湿度センサを探します。商業的には沢山あるのでしょうが、取引単位がリール単位とか、法人としか取引しませんよとか、なってしまいがちです。個人で入手可能でなければ、DIYになりません。
 通販で気温・湿度センサを探したところ、目的にかないそうなものを3種類ほど見つけることができました。他にもあるのかもしれませんが、見つけられなかったのは、筆者の探し方の問題だと思われます。

 さらに、各々のデータシートを探して、特徴をまとめてみたのが以下の表です。

型名 BME280 AM2302 DHT11
メーカ Bosch AOSONG AOSONG
気温(℃) 範囲 0〜65 −40〜80 −20〜N/A
解像度 0.01 0.1 N/A
精度 N/A (typ=±0.5) ±1 (typ=±0.5) N/A (typ=±2)
湿度(%RH) 範囲 0〜100 0〜99.9 5〜95
解像度 0.008 0.1 N/A (1?)
精度 ±3 (typ) ±2 (typ) ±5 (typ)
気圧(hPA) 範囲 300〜1100 −(非搭載) −(非搭載)
解像度 0.0018
精度 ±1 (typ)
I/F SPI (/I2C) single bus single bus
電源電圧 1.8V (3.6V MAX) 5V 5V
価格 980円 730円 217円 (3個で650円)
備考 レベルシフタが必要 プルアップ抵抗が必要 プルアップ抵抗が必要

 AM2302とDHT11はAOSONGという中国のメーカみたいです。AM2302はDHT22と書いてあるショップもありました。価格は筆者が調べた当時の値段です。

BME280

 まず、最初に惹かれたのがBME280でした。ArduinoとBME280のデータシートを見比べてみて、どうも、SPI直結で通信できそう(信号線の仕様上)に見えたので、「ArduinoとBME280をジャンパ線で直結して、以上、終了」だと思ってしまいました。いや、なんか変ですね。電源電圧が、1.8V?最大3.6?うんうん、Arduinoにも3.3V電源あるからね、3.3V電源を供給すればOKでしょ?はっ!ArduinoのI/Oポートって、何V?そうでした、5Vでした。電源電圧は3.3Vを供給できますが、信号線は5Vのまま、なので、直結できません。
 BME280が5Vトレラントになっていないものか?とデータシートを読んでみましたが、やっぱりダメ。Arduinoの方も、3.3Vでもらった信号では、スペック上、5Vで受けても正しく通信できないようです。と、言うことは、Arduino(5V)⇔BME280(3.3V)の両方向にレベルシフタが必要になります。

 今回の最終目標には含まれていませんが、気圧は天気との相関が高いので、気圧データもログに残せると、それはそれで別な用途も考えられるメリットもあります。

AM2302

 気温・湿度のスペックは問題なし。I/Fが独自の1線式シリアルバスっぽくなっていて、Arduinoのシリアル系モジュール(UART/SPI/I2C)では通信できそうにありません。ソフトウェアでポートを直接たたいて通信するしかないでしょう。1線式で、そんなに難しいプロトコルではないので、簡単に接続できるハズ……。
 接続すべき端子数も3本(Vcc、GND、SDA(信号線))だけ、電源電圧も5V。今度こそ!ジャンパ線で直結できる?……できません(1x_x)。
 1線式のシリアルバスがプルアップを要求しています。つまり、プルアップ抵抗が必要。何故だ?シリアルバスって言っても、1本の信号線に、複数のセンサがぶら下がれるような仕様ではない(チップセレクトみたいな信号入力すら持ってないからね)ので、所詮は一対一でしか通信できないわけですよ。折角モジュールに組み上げているんだから、必要なプルアップ抵抗くらい、モジュール内に持っておいたら良いじゃない?なんで外付け?
 ちょっと残念な仕様です。

 なんでこんなに、外付けパーツを嫌っていたか?と言うと、電子工作のパーツを何一つ持っていないからです。直結なら、配線材だけ見つけたら、何とか接続できますが、一度外付けの部品が必要になってしまうと、パーツを買って、それを実装するユニバーサル基板を買って、ついでだからラッピングワイヤも買っておこう、半田ごてはあったかな?半田線もあったはずだけど、何年前のだ?腐って(酸化しまくって)ないか?……と、スタートする前にゲッソリです。

DHT11

 こちらは、AM2302と同じメーカのセンサ、AM2302とDHT22(昔の型番?仕向け先で型番変えてる?わかりませんが)を並べて表記しているショップもあったので、おそらく、AM2302の方がDHT11の上位、または後継品と思われます。I/FもAM2302と同じに見えます。価格は、DHT11の方がだいぶ安かったです。
 筆者が今回購入したキットには含まれていませんでしたが、Arduinoのスタータキットとして、色々なセンサの類がセットになって、3,000円前後で売られているキットに、DHT11が含まれていることが多いです。

 後はコストパフォーマンスですが、精度が良くない。AM2302がtyp=±0.5℃に対して、DHT11はtyp=±2℃です。この価格差でこの精度の差を埋められるか?が判断基準だと思います。

選んだのは…(ドラムロール)…

 AM2302を使ってみることにしました。

 BME280も惹かれたのですが、ソフトウェア的には簡単につながってしまいそうだったので。SPIで接続して、あとはAPIをたたくだけ、簡単すぎ。その分、回路の方は、レベルシフタを挟んだり、ちょっと大変そう。

 DHT11は、AM2302と兄弟みたいなモジュールだったので、単純に価格と性能の天秤でした。性能に軍配。

 AM2302は、回路的にはプルアップ抵抗をつけるだけで、ほぼ直結。でも、通信するためのソフトウェアはポートをたたいて作成する必要があり、ソフト的には課題がありそう。→せっかくArduinoで組み込みソフトを作るので、回路作りより、Arduinoでの作業が大変な方が面白いかな?と。

結局、電子工作か……色々そろえないと……

 結局、Arduinoとセンサを、ジャンパ線で直結、という訳にはいかないらしいので、電子工作が必要になりました。「Arduino本体とセンサを単体で購入して終わり」にしようとしていた目論見が外れ、色々と工作に必要なものをそろえなくては……。と、挫けそうになっていたところに光明が。
 ここから先は「Arduinoを使った電子工作の部屋」に戻ってお読みください(1^^)。

 復習が不要な方は、次回をご期待ください。


btn_arduino.png

btn_prev.png btn_next.png

home