Arduinoからの出力を元祖シリアル通信であるRS-232Cに変換する:注目デバイスで組み込み開発をアップグレード(36)(2/2 ページ)
「センサーの値を遠くまで届ける」をテーマにした新シリーズの第4回。今回は、元祖シリアル通信とも呼ばれるRS-232Cを適用するために、Arduinoからの出力をRS-232Cに変換する実験を行う。
UARTとRS-232C
図3に、Arduinoのマイコンに搭載されている汎用シリアル通信インタフェースである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へのレベル変換を行う回路図です。
抵抗の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);
}
アルファベットの“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に今回の通信実験の様子を示します。
取りあえずの動作確認ということで長いケーブルは使っていませんが、受信側PCのTeraTermの画面には“A”が表示されていました。
おわりに
今回の“A”を送信する例を基に、RS-232Cで文字データを送る仕組みをお分かりいただけたかと思います。もちろん、Arduinoで受け取った熱電対センサーの測定値を送ることも可能ですし、他の文字データも送れると思いますので適宜改造してみてください。
RS-232Cは元祖シリアル通信ともいわれ、シリアル通信の基本を学ぶにはよい教材といえます。また、規格策定から60年以上が経過するRS-232Cの欠点を埋めるべくさまざまなシリアル通信規格が提案されているので、今後はそれらについても紹介していきたいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「注目デバイスで組み込み開発をアップグレード」バックナンバー
- ≫連載「空間伝送で学ぶ光通信入門」バックナンバー
周波数を使って熱電対センサーの測定値を安価な電線でより遠くまで伝送する
「センサーの値を遠くまで届ける」をテーマにした新シリーズの第3回。第2回では熱電対センサーの測定値を、安価な電線を使って10m程度離れた距離から確認できるようにした。今回は同じく安価な電線を使って測定値をより遠くまで伝送する方法を検討する。
熱電対センサーの測定値を安価な電線で伝送しアナログメーターに表示する
「センサーの値を遠くまで届ける」をテーマにした新シリーズの第2回。第1回で薪ストーブに取り付けた熱電対センサーについて、その測定値を安価な電線を使って10m程度離れた距離からアナログメーターで確認できるようにする。
IoTとは何かを問いただすため、まずは薪ストーブに熱電対センサーを取り付ける
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。今回から、IoTとは何かを問いただすことを目的に「センサーの値を遠くまで届ける」をテーマにした新シリーズを始める。そのモデルケースとして、まずは薪ストーブに熱電対センサーを取り付けるところから始める。
USBシリアル変換モジュールが必要なら、代わりにArduinoを使えばいいじゃない
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。今回は、USBシリアル変換モジュールの代わりに、Arduinoに搭載されているシリアル変換チップを単独で使う方法を紹介する。


