久々の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で双方向(全二重)を実現させます。
SoftwareSerial receiver(10, 11, false)のfalseはどのような働きや意味をしているのでしょうか。
返信削除リファレンスにはないので疑問に思いました。
inverse logicです。
削除trueにすると負論理になります。
なので、今回の場合falseを指定してる意味はありません。
いろいろ変更して動作確認をしていたので、そのまま残してました。
ありがとうございます。
削除