これまではArduino単体でLチカやスイッチを元に組み込みソフトウェアについて体験してきました。
今回はArduino互換基板であるGR-SAKURA基板も利用して光通信(らしきもの)を行いたいと思います。
光通信と書きましたが実際はエントリーキットに含まれる素子であるCdSを利用します。
テキストにもあるようにCdSには受光すると内部抵抗が下がり、電流を流せるようになるため光スイッチとして動作させることができます。
今回はGR-SAKURA側でLチカプログラムを組み、これを受光したArduinoがCdSの入力状態を監視しながらLED出力を切り替える、そんなプログラムを作成します。
回路作成例
回路の組み方は下記のようになります。
回路に関してですが、GR-SAKURA側はArduino互換ということもあり、これまで培った内容で問題はありません。Arduino側はCdSの繋ぎに注意が必要です。CdSは受光によって電流を流すと書きましたが、これでは電圧を検知することができません。よって、CdSが流した電流を電圧に変換する抵抗が必要になります(オームの法則 V=IRですね)。Arduino側では8ピンでCdS状態を監視していますが、GNDとの間に抵抗を挟んでいるのはそのためです。
プログラム例
GR-SAKURA側からプログラムを組んでみましょう。
こちらはLチカプログラムとなりますのでポートを出力指定し、インターバルに則ってON/OFFを行います。
/*GR-SAKURA Sketch Template Version: V1.08*/ #include <rxduino.h> #define INTERVAL 1000 void setup() { pinMode(13,OUTPUT); } void loop() { digitalWrite(13, 1); // LED点灯 delay(INTERVAL); digitalWrite(13, 0); // LED消灯 delay(INTERVAL); }
GR-SAKURAのプログラムはWEBコンパイラを利用しました。Renesasへログインが必要となりますので、継続的に利用する方はIDを作成することをお勧めします。今回限りならゲストログインで大丈夫です。(Webコンパイラの利用は無料です)
続いてArduino側です。こちらはCdSを監視する入力ポートとLEDを点灯/消灯させる出力ポートを設定します。CdSの監視は常時監視とし、状態によってLED出力を切り替えることにします。
// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(13, OUTPUT); pinMode(8, INPUT); } // the loop routine runs over and over again forever: void loop() { if(digitalRead(8) == HIGH){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); } }
Arduino側はおなじみArduinoIDEで開発、プログラムの書込みを行っています。
このプログラムをお互いに動作させるとどうなるでしょう?
GR-SAKURAには赤LED、Arduinoには受光素子CdSと受光確認として緑LEDを接続しています。
(音量はミュートされることをオススメします)
いかがでしょうか?GR-SAKURA側の発光をArduinoで無事受光し、受光内容を発信する事(緑LED発光)ができました。
これは外部機器からの何らかの信号を電気変換し、内部に取り込める様子を表しています。つまり、通信の基礎となります。
また、見方を変えるとArduinoの内部情報を外部へ発信したということは、デバッグの基礎ともなります。
最近はカシオさんで光パラレル通信(と言っていいのかな?)であるピカリコというサービスがあります。ピカリコの詳細はカシオさんのサイトをご覧ください。次回は光通信システムとしてピカリコさんのオマージュを製作してみたいと思います。
E.P.ラボではオープンソース基板を利用したプログラム教育、製品開発教育を行っております。デバイスの基礎、プログラムの基礎教育を通して製品開発の裾野を広げ、クリエイティブ(創造)の拡大による社会の発展・貢献を目指しています。