家庭用の低コストワイヤレスセンサーネットワークを構築
このチュートリアルでは、コスト効率の良いワイヤレスセンサーモジュールのネットワークを作成する方法を教えます。既製のワイヤレスモジュールの多くは、複数のセンサーユニットでの使用には高価すぎます。Wi-FiとZigbeeモジュールは人気があり使いやすいですが、そのコストはセンサーアレイでの使用を非現実的にする可能性があります。しかし、高価な機能のない低コストRFモジュールなら、これらの目的には十分機能します。Arduinoプラットフォームは、ローエンド無線モジュールを使用して簡単かつ確実に通信できます。
ハードウェアを組み立てたら、Raspberry Piプラットフォームを活用してデータをXivelyのIoTサービスに投稿し、時間経過に伴う値の追跡や閾値条件でのトリガーが可能になります。
コンポーネントとツールを集める
このプロジェクトは、2つの送信ユニットと1つの受信ユニットの3つの部分で構成されます。送信機はArduinoボード、センサー、RF送信機で構成されます。受信ユニットはArduinoボード、RF受信機、ロジックレベルコンバーター、Raspberry Piで構成されます。
このプロジェクトで使用できるArduino互換ボードは幅広いです。このプロジェクトのボードへの最小要件は、2つのデジタルGPIOピンと1つのアナログピンです。このプロジェクトのコストとシンプルさのニーズに合ったArduino互換ボードを選択してください。
このチュートリアルでは、ブレッドボードにフィットしプログラミングが簡単なArduino Nanoボードのセットを使用しました。しかし、Arduino Pro Miniの5V版やTrinketも、より低価格でうまく動作します。ただし、これらはプログラミングと使用により多くの経験を必要とします。賢く選択してください。
受信機
- Raspberry Pi—Model B、電源、ケース、SDカード—GPIOピンが選んだケースでアクセス可能であることを確認
- Pi互換Wi-Fiアダプター
- Arduino
- ブレッドボードジャンパーワイヤー
- オス-メスジャンパーワイヤー
- ロジックレベルコンバーター
- 434MHz RF受信機
- ハーフブレッドボード
送信機(2ユニット)
- 2×Arduino
- 2×温度/湿度センサー
- 2×434MHz RF送信機
- 2×ハーフブレッドボード
- 2×ブレッドボード対応2.1mm DCバレルジャック
- 2×9V電源アダプター(2.1mm×5)
- ブレッドボードジャンパーワイヤー
ツール
- ArduinoプログラミングIDEがインストールされたPC/Mac
- Arduinoボードプログラミング用USBケーブル
- USBキーボードとマウス。単一USBポートで両方使用できるよう、一体型またはハブ付き。
- プログラミングワークステーション上のこのチュートリアルに関連するソースパッケージ
送信機を組み立てる
送信機自体は比較的シンプルな回路です。温度湿度センサーから情報を取得するために1ピン、そのデータをRF送信機に送信するために1ピンのみを使用します。ブレッドボード図は以下の通りです。
9V電源はバレルコネクタに接続され、下部レールが9Vになります。Arduinoの電源レギュレーターが5Vを生成し、これは無線機とセンサーに安全に使用できます(図の上部電源レール)。
センサーには10kΩ抵抗が付属し、データピンを電源にプルアップ抵抗として接続し、別のワイヤーでGPIO D3に接続します。
以下のセットアップを注意深く守り、センサーとRFモジュールのデータシートを再確認して、コンポーネントがブレッドボードで適切に配置され、電源、グラウンド、信号ピンが正しいピンに接続されていることを確認してください。Fritzing図はソースパッケージに含まれています。
アンテナは重要な部分です。RFモジュールには内蔵アンテナがないためです。私は6インチのメス-オスジャンパーワイヤーをブレッドボードに挿して使用し、家のあらゆる場所と少し外部からも受信できました。図に記載の通り、より長い範囲が必要な場合は6.5インチが最適です。
RF使用に関する注意。国によって周波数使用に関する法律や規則が異なります。放送前にこれらの規則への準拠を確認してください。とはいえ、これらのモジュールからの信号は家の外まで届くほど強力ではありません。理想的な条件下では、最大500フィートまで到達可能です。
コンポーネント用ライブラリをダウンロード
送信機はArduino IDEにバンドルされていない2つのライブラリを使用します。以下のようにダウンロードし、スケッチディレクトリのLibrariesサブディレクトリに解凍してください。
- このチュートリアルのVirtualWireソースパッケージをダウンロードし、wirelesstransmitterスケッチフォルダをArduinoスケッチフォルダに解凍
- wirelesstransmitterフォルダにLibrariesというフォルダを作成
- VirtualWireコードの最新版(執筆時点では1.23)をプロジェクトページからダウンロード
- VirtualWireフォルダをwirelesstransmitter/Libraries/フォルダに解凍し、VirtualWireというサブフォルダを作成
- DHTセンサーライブラリをそのプロジェクトGitHubページからダウンロード
- DHTフォルダもLibrariesフォルダに解凍。これでwirelesstransmitter/LibrariesフォルダにDHTとVirtualWireの2つの必須ライブラリフォルダが揃う
Arduinoボードをプログラミング
このチュートリアルでは、ArduinoとArduino IDEを使用したプログラミング経験があることを前提としています。経験がない場合は、公式Arduinoサイトに非常に良い手順があります。
- ソースアーカイブからwirelesstransmitterスケッチを開き、ローカルにコピーを保存
- Arduinoがバレルコネクタ経由で電源に接続されていないことを確認
- 適切なUSBケーブルでボードをプログラミングワークステーションに接続
- Tools > Boardメニューで選択したArduinoボードにボードタイプを設定
- Arduinoボード接続時に検出されたポートをTools > Portメニューでシリアルポートに設定
- MYID定義が1に設定され、TRANSPINとDHTPINがRF送信機モジュールとDHTセンサーに接続されたピンに適切に設定されていることを確認。図通りにボードを作成していればすでに設定済みのはず。コード例を参照。
- UNITが好み(華氏または摂氏)に適切に設定されていることを確認
| 12345 |
#define MYID 1 //このボードのID番号。フラッシュする各ボードで変更
//IDはデータとともに送信されるため、どのデバイスが送信しているか識別可能
#define TRANSPIN 3 //送信に使用するピン
#define DHTPIN 4 //DHTが接続されているピン
#define UNIT 0 // 0で華氏、1で摂氏
|
MYID定義は、送信機が自分を一意に識別するために使用する数値IDです。複数の送信機を異なる場所に配置するため、それぞれに一意のIDが重要です。この番号は受信スクリプトのセットアップ時に再度使用されます。
- Control-Rを押してコードを検証し、ライブラリが適切にインクルード・コンパイルされることを確認
- ツールバーのUploadボタンをクリックしてボードにコードを書き込み
- Control-Shift-Mを押してシリアルモニターウィンドウを開く
シリアルモニターウィンドウはArduinoをリセットするため、画面に以下のようなコード行が表示されるはずです:
| 12 |
Humidity: 44.00 % Temperature: 60.80 *F
Sending Message: ID:1:TS:23143:TF:60.79:RH:44.00
|
メッセージは受信側で処理されるName:Valueペアで構成されます。送信機は長いランダムな間隔で信号をブロードキャストします。センサー値はそれほど頻繁に変化しないため、1分に1回より頻繁にブロードキャストしても価値はありません。ランダムな待機時間は、複数のセンサーが共存するためのものです。
両方の送信機からの信号が重なって失われても、ランダム間隔により次のブロードキャストが重ならないよう確保されます。この間隔のランダムシードは、未使用のアナログポートでのanalogReadから設定され、ランダムな値を返して2つの送信機が同じパターンにならないようにします。
上記の出力を生成する例のコードは華氏を使用するように設定されています。メッセージ文字列のTF:60.79識別子から、私のラボがちょうど61度少し下であることがわかります。しかし相対湿度RH:44.00は快適な44%。この涼しく湿った環境から、私のラボが地下室にあると推測できます。推測は正しいかもしれません。
送信機はデフォルトで2〜5分間隔でブロードキャストします。デバッグ目的でこれを速めたい場合は、スケッチ末尾のdelay()値を5000(ms)程度に変更してください。本番運用の準備ができたら、この値を元に戻して再アップロードすることを強く推奨します。
- 2つ目の送信機ボードを構築
- 送信機スケッチを変更してMYID定義を2に設定
- 2つ目のボードにコードをアップロード
- Control-Shift-Mでシリアルモニターウィンドウを開き、出力が1つ目の送信機ボードと同様だが、送信メッセージがID:2で始まることを確認
受信ボードを構築
受信ボードは、RF受信機コンポーネントでブロードキャストメッセージを受信し、そのメッセージをシリアルワイヤーでRaspberry Piに送信する役割を担います。Arduinoボードを信号受信に使用するには、いくつかの重要な理由があります。VirtualWireコードは、Arduinoのリアルタイム性を利用して信号の変調と復調を管理します。
これは、受信ユニットが同じ周波数で動作する必要があることを意味します。さらに、受信プロセッサにはジッターの余地がほとんどなく、プリエンプティブで非リアルタイムOSを持つRaspberry Piはこの点で不利です。Arduino Pro MiniとRF受信モジュールのコストと、Raspberry Piと直接通信できるZigbeeモジュールのコストを比較すると、外部Arduinoを使用する方がまだかなり経済的です。
この時点で、Piからの5Vとグラウンドリードをブレッドボードに接触させないでください。ジャンパーワイヤーは手元に置いておきますが、ArduinoをUSBポートとRaspberry Piの両方から電源供給したくありません。
上記の材料リストのロジックレベルコンバーターは、Fritzingライブラリのものと正確には同じではありませんが、ピンアウトはよくラベル付けされています(場所が異なるだけ)。実際のロジックレベルコンバーターの正しいピンに正しいワイヤーが接続されていることを確実にしてください。
このコンポーネントは、5V Arduinoシリアル信号を3.3V Raspberry Piシリアル信号に変換し、Piを損傷から守るために必要です。追加のヘルプについては下記画像を参照してください。
詳細: 家庭用ワイヤレスセンサーネットワークの構築
製造プロセス
- 長い driveway 向けの信頼性の高いワイヤレスセンサー - Raspberry Piとの簡単統合
- 18世紀製粉所でのワイヤレスセンサーネットワーク導入
- ArduinoとInfineon 3D磁気センサーで作る無線磁気データ転送
- K30 CO2センサで室内空気質をリアルタイム監視する
- デジタル身長計の自作:Arduino Nanoとレーザー距離センサーで成長記録
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
- USB-MIDI機器をBluetooth LEでiOSに無線接続 ─ Arduinoベースの3つのアダプター設計
- 堅牢な長距離無線センサネットワークでリモートデータ監視を実現
- ワイヤレスセンサーネットワーク切り替え:技術移行のための6つの重要考慮事項
- 低電力ワイヤレスセンサーネットワークの理解:効率的IoTソリューションを推進
- 企業におけるワイヤレスセンサーネットワークの導入と管理