Arduino、Raspberry Pi、NodeMCU、ESP8266、MSP430などのマイクロコントローラー開発ボードを長い間使用してきました。小さなプロジェクトでは、ほとんどの場合、センサーとボードの間の距離は最大で数センチメートル以下です。これらの距離では、さまざまなセンサーモジュール、リレー、アクチュエーター、およびコントローラー間の通信は、媒体内の信号の歪みやそこに忍び寄る電気ノイズを心配することなく、単純なジャンパー線を介して簡単に行うことができます。ただし、これらの開発ボードを使用して10〜15メートルを超える距離で制御システムを構築する場合は 、ノイズと信号電力を考慮に入れる必要があります。システムを確実に動作させたい場合は、システムを失うわけにはいかないからです。転送中のデータ。
Arduinoで簡単に実装できるI2CやSPIなどのシリアル通信プロトコルにはさまざまな種類があります。今日は、高ノイズの産業環境でデータを転送するために非常に一般的に使用されているRS485と呼ばれる別の最も一般的に使用されるプロトコルを見ていきます。長距離。このチュートリアルでは、RS485通信プロトコルと、私たちが持っている2つのArduino Nanoでそれを実装する方法、およびMAX485RS485からUARTへの変換 モジュールを使用する方法について 学習します。以前は、ArduinoとのMAX485通信およびRaspberry piとのMAX485通信も実行しましたが、興味があればチェックすることもできます。
UARTとRS485通信の違い
Arduinoで一般的に使用されているGPS、Bluetooth、RFID、ESP8266などの低コストセンサーやその他のモジュールのほとんどは、市場のRaspberry PiがUART TTLベースの通信を使用しています。これは、 TX(送信機)とRXの2線しか必要としないためです。 (受信機)。これは標準の通信プロトコルではありませんが、他の周辺機器とシリアルデータを送受信できる物理回路です。データはシリアルでのみ送受信できるため、まずパラレルデータをシリアルデータに変換してから送信します。
UARTは 非同期伝送デバイスである ため、2つのデバイス間でデータを同期するためのクロック信号はありません。代わりに、各データパケットの開始ビットと終了ビットでそれぞれ開始ビットと停止ビットを使用して、転送されるデータの端をマークします。 UART送信データはパケットに編成されます。各パケットには、1つのスタートビット、5〜9のデータビット(UARTに応じて)、オプションのパリティビット、および1つまたは2つのストップビットが含まれます。これは非常によく文書化されて広く使用されており、エラーチェックを可能にするパリティビットも備えています。ただし、複数のスレーブと複数のマスターをサポートできないため、いくつかの制限があります。 最大データフレームは9ビットに制限されています。データを転送するには、マスターとスレーブの両方のボーレートが互いに10%の間である必要があります。以下に示すのは、キャラクターがUARTデータラインを介した送信機である方法の例です。信号のHighとLowはGNDレベルに対して測定されるため、GNDレベルをシフトするとデータ転送に壊滅的な影響を及ぼします。
一方、RS485はより業界ベースの通信であり、長距離および高速で も使用できる複数のデバイスのネットワーク用に開発されています 。 GNDピンによる電圧測定ではなく、 差動信号測定方式で動作します。RS485信号はフローティングであり、各信号はSig +ラインとSig-ラインを介して送信されます。
RS485レシーバーは、信号線の絶対電圧レベルではなく、両方の線間の電圧差を比較します。これはうまく機能し、通信の問題の一般的な原因であるグランドループの存在を防ぎます。 Sig +およびSig-ラインをねじると 、ケーブルに誘導される電磁ノイズの影響が無効になり、ノイズに対する耐性が大幅に向上するため、RS485が最大 1200mの範囲のデータを送信できるため、最良の結果が得 られます。。ツイストペアを使用すると、ストレートケーブルで可能な伝送速度よりもはるかに高速な伝送速度を実現できます。伝送距離が短い場合、RS485を使用すると最大35Mbpsの速度を実現できますが、伝送速度は距離とともに低下します。 1200mの伝送速度では、100kbpsの伝送速度しか使用できません。この通信プロトコルを実現するには、特別なイーサネットケーブルが必要です。 CAT-4、CAT-5、CAT-5E、CAT-6、CAT-6Aなど、使用できるイーサネットケーブルには多くのカテゴリがあります。チュートリアルでは、CAT-6Eケーブルを使用し ます。 24AWGワイヤのツイストペアが4つあり、最大600MHzをサポートできます。両端がRJ45コネクタで終端されています。ラインドライバからの一般的なライン電圧レベルは、最小±1.5Vから最大約±6Vです。受信機の入力感度は±200mVです。コモンモードノイズキャンセリングにより、±200mVの範囲のノイズは基本的にブロックされます。バイト(0x3E)がRS485通信の2つのラインを介して転送される方法の例。
必要なコンポーネント
- 2×MAX485コンバータモジュール
- 2×ArduinoNano
- 2×16 * 2英数字LCD
- 2×10kワイパーポテンショメータ
- Cat-6Eイーサネットケーブル
- ブレッドボード
- ジャンパー線
長距離有線通信の回路図
下の画像は、Arduinoの 長距離有線通信の送信機と受信機の回路図を示しています。送信機と受信機の回路はどちらも同じように見えることに注意してください。異なるのは、そこに書き込まれたコードだけです。また、デモンストレーションでは、1つのボードを送信機として、1つのボードを受信機として使用していますが、同じセットアップで送信機と受信機の両方として機能するようにボードを簡単にプログラムできます。
上記の回路の接続図も以下に示します。
上記のように、2つのほぼ同一の回路ペアがあり、それぞれにArduino nano、16 * 2英数字LCD、および MAX485UART-RS485コンバータICが RJ45コネクタを介してイーサネットCat-6Eケーブルの両端に接続されています。チュートリアルで使用したケーブルの長さは25mです。マスターモードで動作するMAXRS485モジュールを介してRS485信号に変換されるNanoからのケーブルを介して送信機側からいくつかのデータを送信します。
受信側では、MAX485コンバータモジュールはスレーブとして機能し、マスターからの送信をリッスンして、受信したRS485データを標準の5V TTL UART信号に変換し、受信Nanoによって読み取られ、16 *に表示されます。 2英数字LCDが接続されています。
MAX485UART-RS485コンバータモジュール
このUART-RS485コンバータモジュールには、RS-485通信に使用される低電力でスルーレートが制限されたトランシーバであるMAX485チップが搭載されています。 + 5Vの単一電源で動作し、定格電流は300μAです。半二重通信で動作し、TTLレベルをRS-485レベルに変換する機能を実装します。つまり、いつでも送信または受信でき、両方ではなく、最大2.5Mbpsの伝送速度を実現できます。 MAX485トランシーバーは、ドライバーが無効になっている場合、無負荷または全負荷状態で120μAから500μAの供給電流を消費します。ドライバは短絡電流に制限されており、ドライバ出力はサーマルシャットダウン回路を介して高インピーダンス状態にすることができます。レシーバ入力には、入力が開回路の場合にロジックハイ出力を保証するフェイルセーフ機能があります。また、強力な干渉防止性能を備えています。また、チップの現在の状態、つまりチップに電力が供給されているか、データを送信または受信しているかを表示するオンボードLEDがあり、デバッグと使用が容易になります。
上記の回路図は、オンボードMAX485 ICがさまざまなコンポーネントに接続される方法を説明し、必要に応じてブレッドボードで使用される0.1インチの標準間隔ヘッダーを提供します。
イーサネットCAT-6Eケーブル
長距離のデータ転送を考えるとき、私たちはすぐにイーサネットケーブルを介してインターネットに接続することを考えます。今日、私たちは主にインターネット接続にWi-Fiを使用していますが、以前は各パーソナルコンピューターに接続するイーサネットケーブルを使用してインターネットに接続していました。通常のワイヤでこれらのイーサネットケーブルを使用する主な理由は、長距離でのノイズの忍び寄りや信号の歪みに対してはるかに優れた保護を提供することです。それらは、電磁干渉から保護するために絶縁層の上にシールドジャケットを持っており、また、ワイヤの各ペアは、電流ループの形成を防ぎ、したがってノイズからの保護を大幅に向上させるために一緒にねじられています。多くの場合、両端が8ピンRJ45コネクタで終端されています。 CAT-4、CAT-5、など、使用できるイーサネットケーブルには多くのカテゴリがあります。CAT-5E、CAT-6、CAT-6Aなど。このチュートリアルでは、24AWGワイヤのツイストペアが4つあり、最大600MHzをサポートできるCAT-6Eケーブルを使用します。
CAT-6Eケーブルの絶縁層内で1対のワイヤがどのようにねじられているかを示す画像
CAT-6Eイーサネットケーブル用のRJ-45コネクタ
Arduinoコードの説明
このプロジェクトでは、2つのArduino Nanoを使用しています。1つは送信機として、もう1つは受信機として、それぞれ16 * 2の英数字LCDを駆動して結果を表示します。そのため、Arduinoコードでは、データの送信に焦点を当て、送信または受信したデータをLCD画面に表示します。
送信機側の場合:
LCDを駆動するための標準ライブラリを含めることから始め、Arduino NanoのD8ピンを出力ピンとして宣言します。これは、後でMAX485モジュールを送信機または受信機として宣言するために使用します。
int enablePin = 8; int potval = 0; #include
セットアップの部分に移ります。イネーブルピンをHighにプルして、MAX485モジュールをトランスミッタモードにします。半二重ICであるため、送信と受信の両方を同時に行うことはできません。また、ここでLCDを初期化し、ウェルカムメッセージを出力します。
Serial.begin(9600); //ボーレート9600でシリアルを初期化します:pinMode(enablePin、OUTPUT); lcd.begin(16,2); lcd.print( "CIRCUIT DIGEST"); lcd.setCursor(0,1); lcd.print( "送信機ナノ"); delay(3000); lcd.clear();
ループ内で、シリアルラインに連続的に増加する整数値を書き込み、それを他のナノに送信します。この値は、表示とデバッグのためにLCDにも印刷されます。
Serial.print( "送信値="); Serial.println(potval); // RS-485バスへのシリアル書き込みPOTval lcd.setCursor(0,0); lcd.print( "送信値"); lcd.setCursor(0,1); lcd.print(potval); delay(1000); lcd.clear(); potval + = 1;
受信側:
ここでも、LCDを駆動するための標準ライブラリを含めることから始め、Arduino NanoのD8ピンを出力ピンとして宣言します。これは、後でMAX485モジュールを送信機または受信機として宣言するために使用します。
int enablePin = 8; #include
セットアップの部分に移ります。イネーブルピンをHighにプルして、MAX485モジュールをレシーバモードにします。半二重ICであるため、送信と受信の両方を同時に行うことはできません。また、ここでLCDを初期化し、ウェルカムメッセージを出力します。
Serial.begin(9600); //ボーレート9600でシリアルを初期化します:pinMode(enablePin、OUTPUT); lcd.begin(16,2); lcd.print( "CIRCUIT DIGEST"); lcd.setCursor(0,1); lcd.print( "Receiver Nano"); delay(3000); digitalWrite(enablePin、LOW); //(マスターから値を受け取るためにピン8は常にLOW)
ループ内で、シリアルポートに使用可能なものがあるかどうかを確認してからデータを読み取ります。受信データは整数であるため、解析して接続されたLCDに表示します。
int pwmval = Serial.parseInt(); //マスターからINTEGER値をRS-485Serial.print( "I got value");を介して受信します。Serial.println(pwmval); lcd.setCursor(0,0); lcd.print( "受信値"); lcd.setCursor(0,1); lcd.print(pwmval); delay(1000); lcd.clear();
結論
このプロジェクトで使用したテストセットアップは、以下にあります。
このプロジェクトの完全な動作は、以下にリンクされているビデオで見つけることができます。この方法は、長距離でデータを転送するためのシンプルで実装が簡単な方法の1つです。このプロジェクトでは、MAX-485モジュールで達成できる最大転送速度をはるかに下回る9600のボーレートのみを使用しましたが、この速度は、そこにあるほとんどのセンサーモジュールに適しており、実際には必要ありません。ケーブルをイーサネット接続として使用していて、取得できるすべての帯域幅と転送速度が必要な場合を除いて、Arduinoやその他の開発ボードでの作業中のすべての最高速度。自分で転送速度を試してみて、他の種類のイーサネットケーブルも試してみてください。ご不明な点がございましたら、下のコメント欄にご記入いただくか、フォーラムをご利用ください。できる限りお答えいたします。それまでは、アディオス!