検索
連載

Arduinoからの出力を元祖シリアル通信であるRS-232Cに変換する注目デバイスで組み込み開発をアップグレード(36)(2/2 ページ)

「センサーの値を遠くまで届ける」をテーマにした新シリーズの第4回。今回は、元祖シリアル通信とも呼ばれるRS-232Cを適用するために、Arduinoからの出力をRS-232Cに変換する実験を行う。

Share
Tweet
LINE
Hatena
前のページへ |       

UARTとRS-232C

 図3に、Arduinoのマイコンに搭載されている汎用シリアル通信インタフェースであるUARTとRS-232Cの波形の違いを示します。

図3
図3 UARTとRS-232Cの波形の違い[クリックで拡大]

 UARTとRS-232Cでは波形が反転しています。UARTは谷で1、山で0となります。一方RS-232Cは逆に谷で0、山で1となります。

 電圧に関しては、UARTの場合は谷の部分が0Vとなり、山の部分はマイコンの電源電圧となります。このマイコンの電源電圧は、場合によって5Vだったり3.3Vだったりします。一方、RS-232Cの場合は谷の部分が−15〜−3V、山の部分が+3〜+15Vとなります。RS-232Cは電圧の振れ幅が大きいので、ケーブルがある程度長くなってもノイズの影響を受けにくいのです。

変換回路

 図4は、UARTからRS-232Cへのレベル変換を行う回路図です。

図4
図4 UARTからRS-232Cへのレベル変換を行う回路図

 抵抗のR1、R2、R3、R4とも抵抗値は2.7KΩです。トランジスタのTR1は汎用トランジスタの2SC1213を用いています。動作速度もそれほど早くないですし、電流も小電流しか流さないので、NPN型のトランジスタであれば他のものでも使えると思います。

 RXDとGNDはRS-232Cケーブルを介して送信先のPCのRS-232Cアダプターに接続します。VCCは今回の実験では+12Vを供給しています。ArduinoのD3が1を出力するとGND−RXD間の電圧は-6Vとなります。D3が0の場合は+6Vになります。

プログラム

 リスト1に、Arduinoで動作させるプログラムを示します。

// 1200bps
 void setup(){
    pinMode(3, OUTPUT); 
  }
void loop(){
      PORTD &= ~8;
      delayMicroseconds(26*32);       // 0 start bit
      PORTD |= 8;
      delayMicroseconds((17+9)*32);   // 1
      PORTD &= ~8;
      delayMicroseconds((17+9)*32*5); // 00000
      PORTD |= 8;
      delayMicroseconds((17+9)*32);   // 1
      PORTD &= ~8;
      delayMicroseconds((17+9)*32);   // 0
      PORTD |= 8;                     // 1 stop bit
      delay(200);
  } 
リスト1 Arduinoに組み込むプログラム

 アルファベットの“A”のデータをPCに送信するためのプログラムです。

 “A”はアスキーコード表において16進数の「0x41」で表されます。これを2進数で表現すると「0100-0001」ですが、RS-232Cでは最下位ビットから送信するので逆順になり「1000-0010」となります。さらに。先頭にスタートビットと末尾にストップビットを加えて「0-1000-0010-1」となります。

 なお、「PORTD &= ~8」はD3に直接0を、「PORTD |= 8」はD3に直接1を出力します。

通信実験の様子

 図5に今回の通信実験の様子を示します。

図5
図5 今回の通信実験の様子[クリックで拡大]

 取りあえずの動作確認ということで長いケーブルは使っていませんが、受信側PCのTeraTermの画面には“A”が表示されていました。

おわりに

 今回の“A”を送信する例を基に、RS-232Cで文字データを送る仕組みをお分かりいただけたかと思います。もちろん、Arduinoで受け取った熱電対センサーの測定値を送ることも可能ですし、他の文字データも送れると思いますので適宜改造してみてください。

 RS-232Cは元祖シリアル通信ともいわれ、シリアル通信の基本を学ぶにはよい教材といえます。また、規格策定から60年以上が経過するRS-232Cの欠点を埋めるべくさまざまなシリアル通信規格が提案されているので、今後はそれらについても紹介していきたいと思います。

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る