赤外線LEDとフォトトランジスタでシリアル通信
2014.05.31 · 574 words · 2 minute read
久々のArduinoネタ。
赤外線LED(OSI5FU5111C-40)とフォトトランジスタ(L-51ROPT1D1)を使ってシリアル通信をする。
最終的にATtiny85に載せる計画なので、SerialではなくSoftwareSerialを使っています。
送信側はこんな感じ。
普通のLEDと同様に抵抗1本を入れる。
受信側はこんな感じ。
トランジスタ(2SC1815)を入れてD10に接続。
これを向かい合わせにして、配置する。
プログラムは以下のような感じ。
・送信側
#include <SoftwareSerial.h>
SoftwareSerial sender(10, 11);
void setup() {
sender.begin(1200);
}
void loop() {
sender.println("Hello World!");
delay(1000);
sender.println("1234567890");
delay(1000);
sender.println("abcdefghijklmnopqrstuvwxyz");
delay(1000);
}
・受信側
#include <SoftwareSerial.h>
SoftwareSerial receiver(10, 11, false);
void setup() {
receiver.begin(1200);
Serial.begin(9600);
}
void loop() {
if (receiver.available()) {
Serial.write(receiver.read());
}
}
送信側のプログラムは、「Hello World!」→「1234567890」→「a〜z」を1s毎に出力、受信側は赤外線で受け取ったデータをSerialにそのままフォワーディングするような感じ。
仕組み的には独自のプロトコルではなく、Serial(SoftwareSerial)を使っているので特に複雑な訳でもなくサクッと使えるのが利点。
環境にもよると思いますが、この構成だと約20cmくらいまで離しても通信できました。
通信距離を伸ばすには赤外線LEDの球数を増やす、電圧を上げる(もちろん高出力タイプに置換した上で)等で出力を強くする必要あります。
次の記事では送受信×2で双方向(全二重)を実現させます。