最初の「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でした。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)の両方向にレベルシフタが必要になります。
今回の最終目標には含まれていませんが、気圧は天気との相関が高いので、気圧データもログに残せると、それはそれで別な用途も考えられる利点もあります。
気温・湿度のスペックは問題なし。I/Fが独自の1線式シリアルバスっぽくなっていて、Arduinoのシリアル系モジュール(UART/SPI/I2C)では通信できそうにありません。ソフトウェアでポートを直接たたいて通信するしかないでしょう。1線式で、そんなに難しいプロトコルではないので、簡単に接続できるハズ……。
接続すべき端子数も3本(Vcc、GND、SDA(信号線))だけ、電源電圧も5V。今度こそ!ジャンパ線で直結できる?……できません(1x_x)。
1線式のシリアルバスがプルアップを要求しています。つまり、プルアップ抵抗が必要。何故だ?シリアルバスって言っても、1本の信号線に、複数のセンサがぶら下がれるような仕様ではない(チップセレクトみたいな信号入力すら持ってないからね)ので、所詮は一対一でしか通信できないわけですよ。折角モジュールに組み上げているんだから、必要なプルアップ抵抗くらい、モジュール内に持っておいたら良いじゃない?なんで外付け?
ちょっと残念な仕様です。
なんでこんなに、外付け部品を嫌っていたか?と言うと、電子工作の部品を何一つ持っていないからです。直結なら、配線材だけ見つけたら、何とか接続できますが、一度外付けの部品が必要になってしまうと、部品を買って、それを実装するユニバーサル基板を買って、ついでだからラッピングワイヤも買っておこう、はんだごてはあったかな?はんだ線もあったはずだけど、何年前のだ?腐って(酸化しまくって)ないか?……と、スタートする前にゲッソリです。
こちらは、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^^)。
復習が不要な方は、次回をご期待ください。