Arduinoワイヤレス気象観測ステーション: DIYポータブル気象モニタリングキット
部品と材料
| Arduino Due (またはArduino Mega) | ×1 |
| 3.2インチ TFT HX8357C | ×1 |
| DS3231 リアルタイムクロックモジュール | ×1 |
| DHT22 温湿度センサー | ×1 |
| SparkFun nRF24L01+ トランシーバーブレークアウト | ×1 |
| ブレッドボード(汎用) | ×1 |
| ピンヘッダー 36ピン 1列 ロング (0.1インチ) 7ピン使用 | ×1 |
| ジャンパーワイヤー(汎用) 多数 | ×1 |
| Arduino Nano R3 | ×1 |
| Xiaomi モバイルバッテリー | ×1 |
このプロジェクトについて
ワイヤレス気象観測ステーションの構築は素晴らしい学習体験です。このプロジェクトを完成させれば、無線通信の仕組み、センサーの動作、Arduinoプラットフォームのパワーをより深く理解できるでしょう。このプロジェクトをベースに得た経験で、将来より複雑なプロジェクトも容易に構築できるようになります。
気象観測ステーションは、様々なセンサーを使って気象と環境に関するデータを収集するデバイスです。測定可能な項目には以下があります:
- 温度
- 湿度
- 風速
- 気圧
- UV指数
- 降雨量
今回構築する気象ステーションでは、2か所の温度と湿度を測定し、現在の日時を表示します。気象ステーションの構築自体は非常に簡単ですが、カラーTFTディスプレイを搭載し、市販品に匹敵する機能を持たせることはできるでしょうか?答えはイエスです!オープンソースのソフトウェアとハードウェアの力で、この印象的な気象ステーションを簡単に構築できます!
プロジェクトは送信機と受信機の2部構成です。
- 送信機: 温度と湿度を測定し、データを無線で受信機に送信
- 受信機: 温度と湿度を測定し、リモートセンサーからデータを受信、すべてを大型カラーTFTディスプレイに表示
さあ、作っていきましょう!
ステップ1: 全パーツを揃える
必要なパーツ:
- Arduino Due ▶ https://educ8s.tv/part/ArduinoDue
- Arduino Mega ▶ https://educ8s.tv/part/ArduinoMega
- Arduino Nano ▶ https://educ8s.tv/part/ArduinoNano
- 3.2インチ TFTディスプレイ ▶ https://educ8s.tv/part/32TFT
- DHT22 ▶ https://educ8s.tv/part/DHT22
- NRF24L01 ▶ https://educ8s.tv/part/NRF24L01
- DS3231 RTC ▶ https://educ8s.tv/part/DS3231
- ブレッドボード ▶ https://educ8s.tv/part/SmallBreadboard
- ワイヤー ▶ https://educ8s.tv/part/Wires
- ヘッダーピン ▶ https://educ8s.tv/part/HeaderPins
- Xiaomi モバイルバッテリー ▶ https://educ8s.tv/part/Powerbank
プロジェクト費用は約40ドル。 Arduino Megaを使えば5ドル節約可能です。受信機にArduino Dueを選んだのは、高速でメモリが多く、今後の機能拡張に有利だからです。
ステップ2: 温湿度センサー - DHT22
DHT22は人気の温湿度センサーです。安価で使いやすく、仕様上は良好な精度と確度を謳っています。
DHTセンサーは容量式湿度センサーとサーミスタの2部構成で、内部チップがアナログ-デジタル変換を行い、温湿度を含むデジタル信号を出力します。このデジタル信号はあらゆるマイコンで比較的容易に読み取れます。
DHT22の特徴
- 低コスト
- 3〜5V 電源とI/O
- 変換時最大2.5mA消費
- 0〜100%湿度測定、精度2〜5%
- -40〜125℃温度測定、精度±0.5℃
- 応答は遅め
Arduinoとの接続は非常に簡単です。センサーの+ピンをArduinoの5Vまたは3.3V出力に、-ピンをGNDに、OUTピンを任意のデジタルピンに接続するだけです。
ArduinoでDHT22を使うにはDHTライブラリが必要です:https://github.com/adafruit/DHT-sensor-library
ステップ3: DS3231 リアルタイムクロックモジュール
DS3231は名前の通りリアルタイムクロックです。内蔵電池で最小消費電力で数年間時刻を保持できます。モジュール費用は電池込みで約2ドルと極めて安価です。気象ステーションの時刻保持に使用します。
ステップ4: NRF24L01+ - ワイヤレスモジュール
NRF24L01モジュールは低コストな双方向トランシーバーモジュールです。3ドル未満で、2.4GHz帯で動作し、最大2Mbpsのデータレートを達成します。SPIインターフェースでArduinoと通信するため非常に扱いやすいです。モジュールの8ピン中7ピンを接続して使用します。
ブレッドボードに直接挿せないため、オス-メスジャンパーワイヤーで接続します。ピン配置は以下の通り:
- ピン1 (GND) → Arduino GND
- ピン2 (VCC) → Arduino 3.3V出力 ※5Vに接続すると破損します!
- ピン3 (CE) → 任意のデジタルピン(例: デジタル7)
- ピン4 (CSN) → 任意のデジタルピン(例: デジタル8)
- ピン5 (SCK) → Arduino デジタル13
- ピン6 (MOSI) → Arduino デジタル11
- ピン7 (MISO) → Arduino デジタル12
Arduinoで簡単に使うには以下のライブラリを使用:https://github.com/TMRh20/RF24
NRF24L01+を使ったことがない場合は、添付動画で簡単なプロジェクトを通じて使い方を確認してください。
ステップ5: 送信機の構築
送信機は非常にシンプルです。使用部品:
- Arduino Nano
- DHT22センサー
- NRF24L01+ ワイヤレスモジュール
- ブレッドボード
- ワイヤー数本
センサーの出力ピンをArduino Nanoのデジタルピン4に接続。GNDとVCCも接続すればセンサー側は完了。NRF24L01モジュールを接続すれば送信機完成です(詳細は前ステップの動画参照)。
ステップ6: 受信機の構築
受信機に必要な部品:
- Arduino DueまたはMega
- DS3231 RTCモジュール
- DHT22温湿度センサー
- NRF24L01+ ワイヤレスモジュール
- 3.2インチ カラーTFTディスプレイ
- ブレッドボード
- 7本のヘッダーピン
- ワイヤー多数
まず7本のヘッダーピンを曲げてArduino Dueのピンに配置。GND用1本、3.3V用1本、I2Cピン用2本、デジタルピン6〜8用3本。また、Arduino DueのハードウェアSPIピン(MOSI、MISO、SCK)に3本のワイヤーをハンダ付け。配線図をよく確認してヘッダーピンに接続したらディスプレイを取り付けられます。
DS3231の接続
- VCC → Arduino 3.3V出力
- GND → Arduino GND
- SDA → Arduino SDAピン
- SCL → Arduino SCLピン
DHT22センサーの接続
- VCC → Arduino 3.3V出力
- GND → Arduino GND
- 出力ピン → Arduino デジタルピン8
NRF24L01モジュールの接続
- GND → Arduino GND
- VCC → Arduino 3.3V
- 3番ピン → Arduino デジタルピン6
- 4番ピン → Arduino デジタルピン7
- 5番ピン → ハンダ付けしたSCKピン
- 6番ピン → ハンダ付けしたMOSIピン
- 7番ピン → ハンダ付けしたMISOピン
ステップ7: 送信機のコード
まずRF24ライブラリ(NRF24L01用)とDHTライブラリ(DHT22用)をダウンロード:
- DHT22ライブラリ: https://github.com/adafruit/DHT-sensor-library
送信機コードは、温度と湿度の2つのfloat値を含むシンプルなデータ構造を送信します。通信リンクを確立するには、2つのモジュール間で同じアドレスを持つ「パイプ」を作成します。パイプアドレスを「0」、通信チャネルを115(126チャネル中)、最大送信出力、データレート250kbps(最低速度で最大到達距離)に設定し、書き込み用パイプを開きます。
loop関数では、センサーから温湿度を読み取り、データ構造に保存してパイプに書き込むだけです。コードはこのチュートリアルに添付されています。
FU361QHIQFCEYSE.inoステップ8: 受信機のコード
受信機には4つのライブラリが必要。まずディスプレイ用ライブラリ:
ディスプレイライブラリ: https://github.com/Bodmer/TFT_HX8357_Due
ダウンロード後、User_Setup.hファイルを開き、13行目をコメントアウト、14行目のコメントを外してください(HX8357Cドライバを使用するため)。その他3つのライブラリ:
- NRF24L01: https://github.com/TMRh20/RF24
- DHT22: https://github.com/adafruit/DHT-sensor-library
- DS3231: https://github.com/SodaqMoja/Sodaq_DS3231
コードの動作:setupで全センサー/モジュールを初期化しUIを表示。loopで継続的に無線データをチェックし、新データがあれば変数に保存してディスプレイに表示。温湿度は1分ごとに読み取り、値が変わった時のみ表示更新することでチラツキを軽減。華氏表示版コードも用意しています(両方ともこのチュートリアルに添付)。
F053BTXIQFCEZ09.inoFNV3X4LIQFCEZ0C.ino
ステップ9: プロジェクトのテスト
すべて電源を入れて動作確認。正常ならディスプレイ上部に現在日時、下部にローカル/リモート両方の温湿度が表示されます。
リモートセンサーのデータが表示されない場合、送信機を近づけてください(電波が届いていない可能性)。改善しない場合は全接続を再確認してください。
このプロジェクトは、オープンソースハードウェア/ソフトウェアの実力を示す好例です。数時間でこれほど印象的なものが作れます!もちろんこれは始まりに過ぎません。ボタン追加でグラフ表示/モード切替、さらなるセンサー追加、データロギング、インターネット接続など、Arduino Dueならメモリに余裕があるので多くの機能を実装可能です。ご意見・アイデアをコメント欄でお聞かせください!
詳細は冒頭のYouTube動画または私のウェブサイトをご覧ください。ご覧いただきありがとうございました!
コード
GitHubリポジトリ
製造プロセス
- Raspberry Pi 2とADS-WS1で屋外気象観測ステーションを構築
- Raspberry Piで気象観測ステーションを構築し、日次天気データをメール送信
- 高度気象ステーション v2.0:温度・気圧・湿度・高度のリアルタイム監視
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- 10ドルで作る携帯型Arduino気象観測ステーション – Nano、DHT22、BMP180、LCDで簡単DIY
- eDOT:高精度Arduino時計・気象ステーション(IRリモコン・自動輝度調整内蔵)
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム