ボクにもわかる
IchigoJam用サンプルプログラム
超簡単ワイヤレス通信実験

[IchigoJam メニューへ戻る]
IchigoJamを使った超簡単ワイヤレス通信実験の様子
IchigoJamを使った超簡単ワイヤレス通信実験の様子

はじめに

 IchigoJam Uの登場で2台以上のマイコンボードを保有されている方も多いと思います。ここでは、赤外線LEDと赤外線リモコン受信モジュールを使った超簡単な赤外線ワイヤレス通信の実験を紹介します。Wi-FiやBluetoothで通信実験をされている方も一息ついてみませんか?

ハードウェアの製作@受信側(冒頭の写真の左側)

 赤外線リモコン受信モジュールには秋月電子通商で販売されている「GP1UXC41QS(参考価格50円)」を使用しました。3.3Vで動作可能なものであれば、他のモジュールでも動作すると思います。但し、本ページの後ろの方に書かれている実験では結果が異なってしまう場合があります。

GP1UXC41QSのピン配列
ピン番号 1 2 3
役割 OUT GND VCC

 モジュールのピン配列は、受光部側(ドームのついている方)を正面にして、左から順に信号出力OUTピン、GNDピン、電源VCCピンです。OUTをIchigoJamのRXD端子に、GNDをIchigoJamのGNDに、VCCをIchigoJamのVCCにそれぞれ接続します。
 下図は受信モジュールにジャンパー線を接続した様子です。

赤外線リモコン受信モジュール
赤外線リモコン受信モジュール

 受信モジュールに接続したジャンパー線を下図のようにIchigoJamに接続します。黄色がOUT信号、黒色がGND、赤色がVCCです。

IchigoJamへの接続
IchigoJamへの接続

 完成したら、電源を入れてコマンド「BPS 300」を実行します。あるいは「10 BPS 300」と入力し、「SAVE 0」で保存しておくと、IchigoJamのタクトスイッチを押しながら電源を入れると自動的に命令を実行してくれます。キーボードを1台しか持っていない場合は、この方法が便利です。

受信側のプログラム(ファイル番号0にSAVEしておく)
1 ?"BPS 300"
10 BPS 300

 受信側の最小構成は本回路と電源だけです。もしテレビを2台もっていれば、受信文字をテレビに表示できるので実験が分かりやすいです。圧電ブザーを付けても良いでしょう。通信エラーによって文字化けしたコマンドなどによるエラー音を鳴らせます。


ハードウェアの製作A送信側(冒頭の写真の右側)

 次は送信側のハードウェア製作です。IchigoJam BASICのファームウェアにはVersion 1.1.0以降を用います。予めIchigoJamに書き込んでおいてください。
 送信用のデバイスには赤外線リモコン用として販売されている高輝度赤外線LEDを用います。私が使用したLEDは順方向電圧1.35V、最大パルス順電流1A、26mW/srのタイプです。(長期保管品につき型番は不明)
 赤外線LEDを下図のようにIchigoJamのOUT5とTXD端子に接続します。必ずアノード側(リード線の長い方)をOUT5にします。(そうしないと壊れるかもしれません。)

IchigoJamへの接続
IchigoJamへの接続(LEDのリード線の長い方をOUT5に接続する)

 完成したら動作確認を行うために以下のコマンドを入力します。受信側のIchigoJamのLEDが点灯すれば実験成功です。もし、点灯しない場合は、赤外線LEDと受信モジュールを近距離で対向させて再送信してみて下さい。

送信確認
PWM 5,1,3
BPS 300
?"LED1"
追加情報(2020/1/16) 前野 様(Facebook IchigoJam-FANグループ) より
今はichigojam1.4.1なので PWM5,630,-1260 で38KHzがOUT5から出せます。

 この実験で、少しでもワクワクと感じた方は、もう少し付き合ってください。感動も何もない方は実験終了です。お疲れ様でした。ワイヤレス実験ってこんなものなので、これで嬉しく無ければ、この先も嬉しくないでしょう。


ワイヤレス通信のためのサンプルソフトウェア

 次に送信側(冒頭の写真の右側)に下記のプログラムをキーボードから入力します。パソコンからシリアルで転送することも可能です。IchigoJamのTXDにはLEDが接続されていますが、RXD側は空いているのでUSBシリアル変換器のTX側をIchigoJamのRXD端子に接続すれば転送することが出来ます。

送信側のプログラム
1 'WIRELESS IR TX
10 L=0
20 BPS 300
30 PWM 5,1,3
40 UART 1
100 'KEY
110 K=INKEY():IF K=0 GOTO 100
120 IF K=ASC("!") GOTO 200
130 ? CHR$(K);
140 GOTO 100
200 'LED
210 L=L+1:IF L=2 THEN L=0
220 ? CHR$(27,16);"LED ";L
230 GOTO 100

 これは送信側のIchigoJamに接続したキーボードから入力した文字を、受信側に送信するプログラムです。また「!」キー(「Shift」を押しながら「1」)を押すとLEDが点灯または消灯します。

 私は過去に似たような通信実験を様々な機器で行ってきましたが、本例のようなBASICコマンドを直接実行する実験は初めてで、実際にLEDが点灯した時は、感激しました。


ご注意:実験後は必ず電源を切ってください。

 この実験ではICに直接、赤外線LEDを接続していますが、本来は電流制限用の抵抗を直列に挿入します。そうしないと、マイコンが壊れるかもしれないし、LEDが壊れたり発熱するかもしれません。場合によっては火災につながる可能性もゼロではありません。このため、実験が終わったら必ず電源を切っておくようにしてください。
 もちろん、一定の試験や繰り返しの実験などを行い、私の環境・実験程度では壊れないことは確認済みです。過剰に脅える必要はありませんが、万が一、事故による損失が発生した場合であっても、当方は一切の責任を負いませんので、ご容赦ください。
 


PWM 5,1,3とは? 副搬送波とは? ASKとは?

 ここからは、赤外線通信の仕組みの話です。PWMはIchigoJamから特定の周波数の信号を発生させる命令です。PWM 5,1,3を実行するとOUT5端子に、ON区間10us、OFF区間20usの連続パルス信号を出力し続けます。PWMに続く5がOUT5を、1がON区間のパルス幅10usを3は周期の30usを示します。つまり、OUT端子に33kHzのON/OFF信号が出続けます。これを副搬送波と呼びます。
 赤外線LEDをこの端子とTXD端子に接続すると、TXD信号がLレベルの時だけ33kHzの信号で赤外線LEDが点滅し、Hレベルの時は赤外線LEDは消灯したままになります。このような信号の生成方法をASK変調と呼びます。

IchigoJamへの接続
赤外線LEDの送信(発光)に使用するASK変調の様子

 赤外線リモコン受信モジュールは、副搬送波に38kHzのASK変調された赤外線信号を受信し、ASK変調を元に戻す「復調」を行います。IchigoJamの変調は33kHzなので、少し周波数が違っていますが、なんとか受信することが出来ました。
 (2020/1/19・追記) 最新のIchigoJam BASICでは、PWM 5,630,-1260 で 38KHzが出せます。

 では、なぜ副搬送波が必要なのでしょうか。室内には様々な赤外線が飛び交っています。副搬送波を使用すると不要な周波数をフィルタで除去することが出来るようになります。赤外線リモコン受信モジュールには、そういったフィルタが入っているのです。


CHR$(27,16);とは?

 行番号220のCHR$(27,16)は何でしょう。これはプログラムを停止するためのESCコマンドと、それまでに受信したエラーなどの不要文字を削除するための制御文字です。この実験では、送信側のIchigoJamは受信側のIchigoJamの状態が分からないので、受信側のIchigoJamが命令を受け付けるような状態にしてからコマンドを送信します。



さぁ実験だ。エラーレート

 ワイヤレス通信は失敗します。と、書くとネガティブな気持ちになりますが、ワイヤレスに限らず有線通信であっても距離が離れれば通信エラーが発生しやすくなるという原理に変わりありません。とくに、ワイヤレス通信の場合、使用状態や環境により、通信可能距離が変化しやすいので、通信エラーが発生する条件に至る確率が高くなります。
 通信エラーを定量的に捉えるために良く使われる指標に「エラーレート」があります。成功率では無く、エラー率なところが、これまたネガティブな表現です。
 エラーレートとは、例えば「10回のコマンド送信のうち何回失敗したのか」を示す指標です。近距離では10回中0回となると思います。しかし通信の距離を離してゆくとエラーレートが10回中1回とか2回とか上がり(悪くなる)、ある距離で10回中10回のエラーになります。この実験では「!」キーで送信するLEDのON/OFFのエラーレートを測ってみると良いでしょう。
 手作業で測定する場合の測定回数は10回程度ですが、自動的に測定するのであれば100回中ならどうか、1000回中なら、、、といった評価が可能です。測定回数を増やすことで、より広範囲の部分でエラーレートを評価することが出来ます。

 エラーレートを悪化させる要因は距離だけではありません。例えば、液晶テレビから放出される赤外線の影響を受けてもエラーレートが上昇する場合があります。受光部をテレビに向けた状態で通信を行ってみましょう。テレビをつけている時と消している時でエラーレートが異なれば、テレビから放射されている赤外線の影響を確認することが出来ます。

 エラーや、失敗というのは、あまり好まれない用語ですが、定量的な指標として表し、測定して実用的に使用できる値であることを確認したり、改良・改善したりすることで、様々な商品が生まれてきました。ネガティブなのは言葉だけで、行動はポジティブです。


どこまで飛ぶのか

 動作確認が出来たら、まずは1mくらい離して実験してみましょう。赤外線LEDと受信モジュールを正確に対向させれば問題なく通信が出来ると思います。ところが、少し傾けると文字化けしたり、通信が出来なくなったりします。
 分度器を使って角度と通信成功可否(またはエラーレート)の関係を調べてみても良いでしょう。私の実験では1mの距離では±30°〜35°くらいの範囲で通信が行えました。
 距離が離れるほど通信可能な角度幅が狭くなります。2m、3mと離して実験してみましょう。赤外線LEDや受信モジュールの性能にもよりますが3mくらいまで通信が行えるでしょう。

光の反射

 赤外線は白い紙などで反射する特性があります。1m離した距離で45°の向きなど通信の出来ないことを確認したうえで、白い壁もしくは壁に白いA4用紙を貼って反射させてみましょう。壁の場所や角度によって、受信できる場合があります。
 光の反射は、用紙の垂直方向を軸とした入射角に対して、負の反射角が生じます。つまり45°で入射した場合は-45°で反射します。壁が通信方向と50cmだけ離れて平行になるように実験機器を配置すると、反射波を受信モジュールに届けることが出来るようになります。ただし反射時に若干の減衰があったり、通信距離も余分な経路の分(約1.4倍)だけ長くなるので、通信可能な距離の半分以下の距離で実験しましょう。赤外線LEDや受信モジュールの性能にもよりますが1mくらいがちょうど良いと思います。
 高校生以上の方であれば、反射による通信経路距離をD、赤外線LEDの送信角度θ(LEDから受信モジュールに対してずらす角度)、並行する壁との距離Dwとし、通信経路距離Dを固定したうえで、Dwに対するθを求め、実際にθで送信して検証してみるのも良いでしょう。当然ながらD2・Dwで、前例だとD=1.4 [m]、Dw=0.5 [m]、θ=45 [°]です。

よりハイパワーに

 「PWM 5,1,3」だと、30usの周期で10usの区間がHレベルになります。もし20usにしたらどうなるのでしょう。計算上のエネルギーは2倍になるので、通信可能な角度や距離が増大します。ただし、受信モジュールによっては副搬送波を捉えにくくなるものもあるので、必ずしも良い結果が出るとは限りません。

30 PWM 5,2,3


どうやって使うの

 いよいよ応用に取り組んでみましょう。ワイヤレス通信の実用的なプログラムで考慮しなければならないことは、既に、お気づきだと思いますが、通信エラー対策です。通信エラーが起こっても不具合が出ないように設計します。
 例えば、同じデータを3回、送るというのもエラー対策です。あるいは信号が届いていない可能性を考慮し、常に送り続けるという方法もあるでしょう。受信側は同じものが続けて2度、届いた時に限り正しいデータであると判断するなどの仕組みが必要です。また、サンプルソフトウェアの「CHR$(27,16)」のように受信機側の状態を確定するための情報付与も必要です。


応用例1:超狭域の見えるラジオ

 IchigoJamに受信モジュールと液晶を接続し、展示会やIchigoJamファンの集まりで配布する/もしくは製作したものを持参してもらうというアイデアです(ユーザ側の端末)。商品や展示物には送信用LEDつきのIchigoJamをセットしておき、ユーザ端末に商品説明を送信します。
 将来的には自動販売機などから送信してユーザ端末に商品説明を表示する安価な専用端末の応用に利用可能です。コカコーラの景品で配ってみるのも良いかもしれません。
 さらに、地域のコミニティ情報が見えたり、本屋に行くとお勧めの本の情報が読めたり、映画館で、ショッピングで、と超狭域だから多くの情報が見えるという応用が広がりそうです。

 なお、本アイデアはIchigoJam-FANグループの松永義幸さんの提案を基にしています。


応用例2:ワイヤレス認証IDカード

 上記の送受信機を入れ替えた場合です。IDの送信機を持ち歩けば展示側に、その人に合わせたデモができそうです。「ようこそ〇〇さん」といった表示だけでも面白いでしょう。また、その展示を見た証拠にもなり、IchigoJam関連展示リストに自動的にチェックしてゆくスタンプラリーのような使い方も出来そうです。
 何より期待できるのは、ハードウェアがIchigoJamに赤外線LEDを接続するだけで完成することです。


応用例3:超小型IchigoJamへのプログラム転送

 この受信機はマイコンに直接、立体配線をしたような超小型IchigoJamや、表面実装パッケージを使った超小型IchigoJamプリント基板などのプログラム転送用にも使えそうです。
 超小型化の課題の一つに通信インタフェースやUSBコネクタでした。これを赤外線リモコン受信モジュールに置き換えることで、超小型IchigoJamが実現できそうです。
 ただし、電力は伝送できません。リチウム電池などを使い、起動直後にエスケープのコードが送られてこなければすぐにSLEEPを実行、また、赤外線受信信号でSLEEPを解除するなどの仕組みが必須です。


応用例4:双方向通信

 以上までの例は片方向通信でした。双方向通信にするには、一工夫必要です。送信中に受信モジュールをOFFにしないと同じデータを受信してしまうからです。また、他の機器からのデータ受信時に自己の送信が被ると受信エラーが発生します。
 したがって、少なくとも送信中は受信モジュールをOFFに、また受信中はPWM出力をOFFするのがが良いでしょう。
 受信モジュールの電源を制御するには、受信モジュールの電源ピンをVCCではなくOUT1に接続し、「OUT 1,0」で受信OFF、「OUT 1,1」で受信ON出来るようにします。また、送信をOFFにするには「OUT 5,0」を実行します。送信をONにする場合は、「PWM 5,1,3」を実行します。
 少なくとも、「プログラム実行中」はこれらによって対応することが出来ますが、BASICのダイレクトモード(コマンドを受け付ける状態)だと、「OK」や「ERROR」の送信時に同じ文字を受信してしまうので、上記の動作コマンドをうまく与えて制御するための工夫が必要です。(ダイレクトモードでの具体的な双方向実現方法は未検討。)


その他

 IchigoJamにLEDを追加して送信するというアイデアは先行例(https://fukuno.jig.jp/1042)がありした。先行例との違いは、副搬送波を使用し、より通信距離を伸ばせるようにしたことです。


掲載情報について

  • IchigoJamを用いた電子工作、応用回路、BASICプログラム等を紹介しています。
  • 当ページの著作権は国野亘が所有します。
  • 複製・改変・再配布する場合は、合理的な手段による著作権表示が必要です。
  • インターネットで配布する場合は、当サイトへのリンクで権利表示の代用が可能です。
  • IchigoJamは(株)jig.jpの登録商標です。当ページはjig.jp社の作成物ではありません。
  • 背景画像はライセンス CC BY https://pcn.club/ に基づいて使用しています。
  • IchigoJamロゴは CC BY https://ichigojam.net/ に基づいて使用しています。
  • 当ページの作成にあたりFacebookグループIchigoJam-FANの情報を参照しました。
  • 当ウェブサイトの内容や情報については、ご自身の責任でご利用ください。
    製作品などで事故が発生した場合であっても当方は一切の補償をいたしません。

IchigoJam メインメニューへ戻る