I2Cによる群制御

  1. I2Cによる群制御


    1. 群制御

      I2Cの利用例として、3枚のI2Cボードを制御して、蛍型の発光表示を行う例を紹介します(製作、プログラムは伊藤 彩)。

    2. 目的

       1枚の基板で3個のLEDをPWM点灯します。PWM点灯により、蛍のような明滅を行います。この基板3枚用いて合計9個のLEDの点滅を制御します。

  2. 回路構成


    1. フルカラーLED

       フルカラーLEDでは発光がきついので、ティッシュでくるみ、さらに、梱包用の「プチプチ」で包みました。
      これを、植え込みや木にかけて配置します。
       

    2. スレーブ回路

       (A6,A7,A3)、(A3,A1,A0)、(B2,B3,B5) で、フルカラーLEDのRGB端子を制御しています。他に I2C の制御端子(SCL,SDA)、ICSP によるプログラム端子、の接続が必要です。B0 につけたLEDはプログラムの監視用で、I2Cによる割り込みがあると点灯します。




    3. マスタ回路

      マスターの回路 I2C と焦電センサーを接続します。 I2C のマスター側には、I2Cのラインをプルアップする抵抗が必要です。



       焦電センサーは、NAPIONを利用しました。GND端子は金属ケースに接続されています。これは、アンプが組み込まれた赤外線のセンサーで、人体などが発生する赤外線の変化を捕捉して、0.1mA 程度の電流を流してくれます。これをトランジスタで受けて電圧に返還し、A0端子で読み取ります。電流は0.5〜2秒程度続きますから、これを検知すると、追加の発光を行います。
       



    4. 電源

       フルカラーLEDが3.5V以上の電圧と1個当り最大50mA程度の電流を食べますから、2次電池 4本 を電源とします。2次電池 は SANYO の NiH型の eneloop を利用しました。これは、メモリー効果問題を解消しかつ保存期間が長い(自己放電が少ない)優秀な電池です。容量1本で2000mAHあります。これは、平均1Aの電流を2時間流せる容量です(電圧は1.2Vです)。


  3. プログラム


    1. I2Cのアドレスとコマンド

       3枚のボードは別々のアドレス(0x60,0x62,0x64)を割り当てています。このアドレスは、ハードではなく、スレーブのソフトで定めています。
          #use I2c(slave,sda=PIN_B1,scl=PIN_B4,address=0x64,force_hw)
       I2C では、1バイトのフラグ(整数値)を送っています。この値により、同時に発光するLEDのグループを定めています。

    2. マスタープログラム

       各ボードに発光パターンを送り、暫く休止することを繰り返します。ここのプログラムで、発光するLEDが決定されます。各LEDの発光パターンは各ボードの 発光パターンを定める配列で定まります。
      全体のソースはこちらにあります。

    3. スレーブプログラム

       基本的には、蛍型発光の手法を利用しています。PWMのループの中で9種類の発光を制御しています。発赤と緑の光のパターンは RG[]で、青のパターンは B[] で独立に定めています。配列の値を変えることで、微妙な色の変化を設定できます。
       各時刻で、発光させるグループは I2C の割り込み処理(ssp_interupt ()Iから渡される Flag の値で定まります。
       全体のソースはこちらにあります。

  4. 課題・改善点


    1. 発光パターンを送る

       マスタから発光パターンを I2C で送信可能にすると、スレーブのプログラムの変更なしにLEDの発光パターンを変更できます。
       途中で発光パターンを変更すると、より変化のある発光を実現できます。

    2. 発光周期

       発光パターンだけでなく発光の周期(長さ)も変更可能です。

    3. センサー

       現在のプログラム(回路)では、検知した場合とそうでない場合の差が余りありません。通常はひっそりと発光し、人が近づくとにぎやかに(?)発光するのが目的でした。赤外線だけでなく、音(音声や拍手)を検知すると良いかもしれません。