CAN制御機器の製作(2)

設計方針というか、どういうものを作るかの予定を考えました。

●接続予定

ホストとなるCANノードを1つおいて、そこにいくつかのCANノードをぶら下げていきます。とりあえず、いま思いつくものを挙げておきます。それぞれを1個のノードで制御するものとします。

  1. ホスト(スイッチ、LCD表示)
  2. リレー
  3. 温度センサ(複数ノードにして多点測定とか)
  4. RCサーボモータ(ホストより角度データを受信して回転)
  5. フルカラーLED(色切り替え、点滅)
  6. 照明用赤外線リモコン(自作リモコン)
  7. モーションセンサ(焦電形赤外線センサ)

直接つなげば話は簡単ですが、それぞれのノードが何メートル、何十メートルも離れていると考えてください。

ホストはPCに接続してPCから操作できるようにしてもいいですね。LCDなどつなぐ前にそのようにします。

各ノードにArduino(WSN282)を1つずつ使います。ま、もったいない使い方ではありますが、CAN通信の実験ということで、このようにしました。全部同時につながなくても必要なものだけ製作してもいいですし。

●操作仕様、動作

ホストのLCDへ温度などを表示、同ホストのスイッチ操作により離れた場所のリレーなど操作。温度計はたとえば屋外と屋内、水槽の水温など、何点かを離れたホストで読み出し。

●メッセージの定義

CAN機器、プログラムを作成する前にメッセージについて定義しておきます。想定するデータはリレーなどON/OFF、LEDの色データなどの数ビットの数値、温度などの16ビット程度の数値、サーボモータの8ビットの角度値といったところです。いずれも8バイト以内に収まるでしょう。

メッセージID(SID値)はコマンドと宛先のノードの識別番号を11ビットで表すことにします。次のようなフォーマットにしました。

xxx xccc cccc

x、cはそれぞれ1ビットを表し、xxxxは宛先ノードの識別番号(0~15)、cccccccはコマンドコード(0~127)とします。

●ノードの識別番号の仮定義(xxxxの部分)

とりあえず、アサインしておきます。あとで変更するかもしれません。0はホストとします。

  1. リレー
  2. 温度センサ1
  3. 温度センサ2
  4. 温度センサ3
  5. 温度センサ4
  6. フルカラーLED
  7. RCサーボ
  8. 照明用赤外線リモコン送信機
  9. 以下、15までリザーブ

温度データは摂氏温度を10倍した整数値で2バイトとします。
RCサーボ・データはチャンネル番号が1バイト、角度データが1バイトとします。
フルカラーLEDはR,G,Bの3ビットと点灯/点滅/消灯の切り替え2ビットを1バイトで扱います。
赤外線リモコン・データは操作番号を1~15(実際に使うのは4種類のみの予定)

湿度計、気圧計、雨量計とかも付けられるとおもしろいかもしれませんね。余力があったらやりたいと思います。

モーションセンサで人が通るのを検知してカラーLEDを点灯させるとか、ホストノードを通さない制御なども混ぜられます。検知回数をカウントしてホストで表示させるとか、いろいろ組み合わせもできます。

●温度読み出し方法

温度を周期的の読み出す方法は次のように考えられます。

  1. 温度測定ノードが自立的、周期的に温度をホストへ送り出す
  2. ホストからの要求に応じて温度測定ノードがデータをホストへ送り返す

今回は、1のように、温度センサが勝手にデータを送ってきて、それをホスト側でまとめて表示させるようにします(温度測定ノードからホストノードへの一方通行)。従って、各温度計の測定タイミングは同期しませんが、ホストの表示時は特定の周期タイミングで全部まとめて一度に表示させるようにします。


CANについては下記書籍で説明していますのでよろしければ、ご覧ください。
書籍「動かして学ぶCAN通信」 → 書籍紹介ページ

ArduinoのCAN関係の記事は下記書籍でも扱っています(WSN292など使用)。
書籍「Arduino実験キットで楽ちんマイコン開発」 → 書籍紹介ページ

図やテキストの無断転写はお断りします。

コメントは受け付けていません。