自宅にワイヤレスセンサーネットワークを構築する
このチュートリアルでは、費用効果の高いワイヤレスセンサーモジュールのネットワークを作成する方法を説明します。既製のワイヤレスモジュールの多くは、複数のセンサーユニットで使用するには高すぎる可能性があります。 Wi-FiおよびZigbeeモジュールは人気があり、使いやすいですが、それらのコストにより、一連のセンサーでの使用は実用的ではなくなる可能性があります。ただし、これらの目的で問題なく機能する高価な機能をすべて備えていない低コストのRFモジュールがあります。 Arduinoプラットフォームは、ローエンドの無線モジュールを使用して、簡単かつ確実に通信できます。
ハードウェアが組み立てられたら、Raspberry Piプラットフォームを活用して、データをXivelyのモノのインターネットサービスに投稿します。このサービスでは、時間の経過とともに値を追跡し、しきい値条件でトリガーできます。
このプロジェクトには、3つの部分、2つの送信機ユニットと1つの受信機ユニットが含まれます。送信機は、Arduinoボード、センサー、RF送信機で構成されています。受信機ユニットは、Arduinoボード、RF受信機、ロジックレベルコンバーター、およびRaspberryPiで構成されています。
このプロジェクトに使用できるArduino互換ボードは幅広くあります。このプロジェクトのボードの最小要件は、2つのデジタルGPIOピンと1つのアナログピンです。このプロジェクトのコストとシンプルさのニーズに一致するArduino互換ボードを選択してください。
このチュートリアルでは、ブレッドボードにうまく収まり、プログラミングが簡単なArduino Nanoボードのセットを使用しましたが、Arduino pro miniまたはTrinketの5Vバージョンも、はるかに低価格でうまく機能します。ただし、これらをプログラムして使用するには、もう少し経験が必要です。賢明に選択してください。
- Raspberry Pi-電源、ケース、SDカードを備えたモデルB-選択したケースでGPIOピンにアクセスできることを確認します
- Pi互換Wi-Fiアダプター
- Arduino
- ブレッドボードのジャンパー線
- オスからメスへのジャンパー線
- ロジックレベルコンバータ
- 434 MHzRF受信機
- ハーフブレッドボード
- 2 x Arduino
- 2x温度/湿度センサー
- 2 x 434 MHzRF送信機
- 2xハーフブレッドボード
- 2xブレッドボード対応の2.1mmDCバレルジャック
- 2.1mm x5の2x9V電源アダプター
- ブレッドボードのジャンパー線
- ArduinoプログラミングIDEがインストールされたPC / Mac
- ArduinoボードをプログラミングするためのUSBケーブル
- USBキーボードとマウス。組み合わせて使用するか、ハブと組み合わせて、両方を1つのUSBポートで使用できるようにします。
- プログラミングワークステーション上のこのチュートリアルに関連するソースパッケージ
送信機自体は比較的単純な回路です。温度および湿度センサーから情報を取得するために1つのピンのみが使用され、そのデータをRFトランスミッターに送信するために1つのピンが使用されます。ブレッドボードの図を以下に示します。
9V電源がバレルコネクタに接続され、下部レールが9Vになります。 Arduinoのパワーレギュレーターは、図の一番上のパワーレールであるラジオとセンサーに安全に使用できる5Vを生成します。
センサーには10kオームの抵抗が付属しており、データピンをプルアップ抵抗として電源に接続し、別のワイヤーでGPIOD3に接続します。
以下の設定に注意し、センサーとRFモジュールのデータシートを再確認して、コンポーネントがブレッドボードに正しく配置され、電源、アース、および信号のピンが正しいピンに接続されていることを確認してください。詳細については、フリッツの図がソースパッケージに含まれています。
RFモジュールにはアンテナが組み込まれていないため、アンテナはボードの重要な部分です。私はブレッドボードに差し込まれた6インチのメスからオスへのジャンパー線を使用しました、そしてそれは私の家のすべての部分と少し外からの受信を可能にするのに十分うまくいきました。図に示されているように、追加の範囲が必要な場合は、6.5インチがこのアンテナに最適です。
RFの使用に関する注意。さまざまな国での周波数の使用については、さまざまな法律と規則があります。ブロードキャストする前に、これらのルールに準拠していることを確認してください。そうは言っても、これらのモジュールからの信号は、家の外を通過するのに十分なほど強力ではありません。ただし、完璧な状態では、これらのモジュールは最大500フィートまで放送できます。
送信機は、ArduinoIDEにバンドルされていない2つのライブラリを使用します。以下の説明に従ってライブラリをダウンロードし、Librariesという名前のサブディレクトリのsketchディレクトリに解凍します。
- このチュートリアルのVirtualWireソースパッケージをダウンロードし、wirelesstransmitterスケッチフォルダーをArduinoスケッチフォルダーに解凍します
- wirelesstransmitterフォルダーにLibrariesという名前のフォルダーを作成します
- プロジェクトページから、VirtualWireコードの最新バージョン(この記事の執筆時点で1.23)をダウンロードします
- VirtualWireフォルダーをwirelesstransmitter / Libraries /フォルダーに抽出して、VirtualWireという名前の別のサブフォルダーを作成します
- プロジェクトのgithubページからDHTセンサーライブラリをダウンロードします
- DHTフォルダーもLibrariesフォルダーに抽出します。これで、wirelesstransmitter / Librariesフォルダーに2つの必要なライブラリフォルダーDHTとVirtualWireが作成されます。
このチュートリアルは、Arduinoの経験と、ArduinoIDEを使用してそれらをプログラムする方法を前提としています。そうでない場合は、Arduinoの公式サイトに非常に優れた指示があります。
- Arduino IDEのソースアーカイブからワイヤレストランスミッターのスケッチを開き、コピーをローカルに保存します
- Arduinoがバレルコネクタを介して電源に接続されていないことを確認してください
- 適切なUSBケーブルを使用してボードをプログラミングワークステーションに接続します
- [ツール]> [ボード]メニューで、選択したArduinoボードにボードタイプを設定します
- シリアルポートを、[ツール]> [ポート]メニューでArduinoボードを接続したときに検出されたポートに設定します
- 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を押してコードを確認し、ライブラリが含まれていて正しくコンパイルされていることを確認します。
- ツールバーの[アップロード]ボタンをクリックして、コードをボードにプッシュします。
- Control-Shift-Mを押して、シリアルモニターウィンドウを開きます
シリアルモニターウィンドウはArduinoをリセットするため、画面に次のようなコード行が表示されます。
12 | 湿度:44.00%温度:60.80 * F メッセージの送信: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を押してシリアルモニターウィンドウを開き、送信されたメッセージがID:2で始まることを除いて、出力が最初の送信機ボードのように見えることを確認します
受信機ボードは、RF受信機コンポーネントでブロードキャストメッセージを受信し、そのメッセージをシリアルワイヤを介してRaspberryPiに送信する役割を果たします。 Arduinoボードは、いくつかの非常に重要な理由で信号を受信するために使用されます。 VirtualWireコードは、Arduinoのリアルタイム性を利用して、信号の変調と復調を管理します。
これは、受信ユニットが同じ周波数で動作している必要があることを意味します。さらに、プリエンプティブな非リアルタイムオペレーティングシステムのため、RaspberryPiが発生しやすい受信プロセッサにジッターの余地はほとんどありません。 Arduino Pro MiniとRFレシーバーモジュールのコストを、Raspberry Piと直接通信できるZigbeeモジュールのコストと比較すると、外部のArduinoを使用することは依然として非常に経済的であることがわかりました。
この時点では、Piからブレッドボードに5Vおよびアース線を接続しないでください。ジャンパー線を手元に置いておきますが、USBポートとRaspberryPiの両方からArduinoに電力を供給したくありません。
上記のマテリアルリストのロジックレベルコンバータは、Fritzingライブラリのロジックレベルコンバータとまったく同じではありませんが、ピン配置には、さまざまな場所で適切なラベルが付けられていることに注意してください。正しいワイヤが実際のロジックレベルコンバータの正しいピンに接続されていることを確認してください。
このコンポーネントは、5VArduinoシリアル信号を3.3VRaspberry Piシリアル信号に変換し、Piを損傷しないようにするために必要です。さらにヘルプが必要な場合は、下の画像を参照してください。
詳細:自宅でのワイヤレスセンサーネットワークの構築
製造プロセス