Micom Car Rally NET
MCR - Micom Car Rally
大会情報 マイコンカーラリーとは? 今から始めるマイコンカーラリー 技術情報 大会記録 MCRファン倶楽部 お問い合せ
マイコンカーラリートップへ マイコンカーラリートップへ
技術情報 >> R8C/M12A 技術情報
技術情報
各種資料
YouTube情報
R8C/M12A 技術情報
上位入賞マイコンカー
よくある質問(FAQ)
ダウンロード
R8C/M12A 技術情報
XBeeを使って、温度を無線で飛ばす

内容
XBeeを使って、温度情報を無線でパソコンに送ります(下図)。温度は、「液晶を使った温度計」のLM60BIZの回路を使用します(液晶は使用しません)。

説明1

XBeeを2枚使い、XBee間が無線になります。XBeeの概要を下記に示します。詳しくは、「Google」などで調べてください。

・Digi international社のXBeeモジュールを使用し、簡単に無線通信が可能
・XBeeはアンテナ外付けや、アンテナ内蔵など多種あるが、今回は「XB24-ZB」というチップアンテナタイプを使用
・XBeeの電源、信号線のレベルは3.3Vなので、今回はSparkFun製の「XBeeエクスプローラ5Vマイコン用」という電圧変換基板を使用し、R8C/M12Aマイコン、RY-WRITER基板と接続
・「X-CTU」という専用ソフトで、XBeeを設定 ※必ずインストールが必要です

XBee基板
XBee基板

XBeeエクスプローラ5Vマイコン用
XBeeエクスプローラ5Vマイコン用

XBee基板+XBeeエクスプローラ5Vマイコン用+4ピンコネクタ
XBee基板+XBeeエクスプローラ5Vマイコン用+4ピンコネクタ

ワークスペース

r8cm12a_com_temperature_100.zip
ファイルを解凍し、フォルダを「c:\worksapce」に入れてください。

回路
ブレッドボードの回路を下図に示します。

回路図

全体の接続回路を下図に示します。

回路図

ブレッドボード実装図
ブレッドボードの実装を下図に示します。
ブレッドボード実装図

追加する部品
液晶を使った温度計」の他に追加する部品を下表に示します。

部品
番号
名称、メーカ 数量
  XB24-ZB
販売先:(株)秋月電子通商(株)スイッチサイエンス(株)ストロベリー・リナックスなど
2
  SparkFun製 XBeeエクスプローラ5Vマイコン用
販売先:(株)スイッチサイエンス(株)千石電商など
2
  電池ボックス
※充電電池を使用する場合は4本、アルカリ電池を使用する場合は3本
1
  その他、基板間をつなぐコネクタ、線材など 適宜

XBeeの設定

X-CTUのインストール

XBee基板の設定は「X-CTU」という、専用のソフトで行います。「X-CTUダウンロードサイト」にアクセスします。「X-CTU」をダウンロード(下図)、インストールします。

X-CTUのダウンロード

XBee基板の結線

下図のように、パソコンとXBee基板を接続します。「XBeeエクスプローラ5Vマイコン用」は、5Vの信号でも接続できるように電圧を変換する基板です。

パソコンとの結線

「XBeeエクスプローラ5Vマイコン用」と「RY-WRITER基板」間の4芯ケーブルの結線は、上記の「回路」を参照してください。

XBee基板の設定

1枚目のXBee基板に書き込む内容を設定します(下画面)。設定ができたら、「Write」ボタンをクリックして書き込みます。

設定

相手のXBeeの番号は、書き込むXBee基板ではなく、もう1枚のXBee基板の裏にある番号です(下写真)。

設定

XBee基板を交換します。2枚目のXBee基板に書き込む内容を設定します(下画面)。設定ができたら、「Write」ボタンをクリックして書き込みます。相手のXBeeの番号は、先ほど「ルーターAT」で設定を書き込んだ基板の番号です。

設定

これで、それぞれのXBee基板同士が通信するよう、設定できました。同じ場所で、異なるXBee基板を使った通信を行う場合は、「PAN ID」を変えてください。

パソコンの設定

COMポートの送受信信号をやり取りできるソフトで、XBeeから送れてきたデータを受信、表示します。ここでは「TeraTerm」を使います。パソコンにインストールされていなければ、「窓の杜」などからダウンロード、インストールしてください。

TeraTermを立ち上げ、接続を「シリアル」、ポートはRY-WRITER基板の番号にします("Prolific USB-to-Serial Comm Port"と表示されているポートです)。
TeraTermの設定

R8C/M12Aマイコンに4.5〜5.5Vを供給すると、XBee基板から温度情報が送られてきます。パソコン側のXBee基板でその情報を受信して、TeraTermに表示します。
TeraTermに温度が表示されているところ

※TeraTeamの立ち上げは、R8C/M12Aマイコンにプログラムを書き込んだ後にしてください。TeraTeamがRY-WRITER基板を使い、R8C Writerで書き込みができなくなります。

プログラムの説明

UART0の設定

init関数内でUART0を設定して、XBee基板へ送受信できるよう設定します。「UART0による通信」と同じ設定です。

  /* UART0の設定 */
  mstuart = 0;    /* UART0を有効にする            */

  p15sel2 = 0;    /* P1_5 = RXD0端子にする        */
  p15sel1 = 0;
  p15sel0 = 1;

  p14sel2 = 0;    /* P1_4 = TXD0端子にする        */
  p14sel1 = 0;
  p14sel0 = 1;

  u0mr = 0x05;    /* UARTモード8bit               */
                  /* 1ストップビット,パリティなし         */
  u0c0 = 0x10;    /* U0BRGカウントソース:f1              */
  u0brg = 129;    /* f1 / (bps*16) - 1            */
                  /* = 20*10^6/(9600*16)-1=129.2  */
  te_u0c1 = 1;    /* 送信許可ビット:送信許可      */
  re_u0c1 = 1;    /* 受信許可ビット:受信許可      */

main関数

AN7端子から温度のA/D値を読み込み、電圧に変換します。この電圧を100回、読み込みます。A/D値を読み込むだけならすぐに終わってしまうので、1回読み込む毎に5msの時間稼ぎをして、100回で0.5秒程度かかかるようにしています。

void main( void )
{
  long vtmp, temp;
  int i, j;

  init();       /* 初期化                       */

  while( 1 ) {
    // 温度を100回取得
    vtmp = 0;
    for( i=0; i<100; i++ ) {
      // 電圧変換(5000mVなら、vtmp = 5000)
      vtmp = vtmp + (long)get_ad7() * 5000 / 1023;
      for( j=0;j<5000; j++ );      /* ウエイト 約5ms              */
    }

電圧(vtmp変数の値:0〜5000)を、温度に変換します。
0〜100℃で、temp変数は100℃のとき1000になります。

    // 温度変換(100℃のとき、1000に変換)
    temp = (vtmp - 241680) * 1000 / 356250;

tempの温度情報を、文字列に変換してUART0から出力します。
例えば、temp=123のとき、「+12.3゚C」と出力されます。

    // 0℃以下か確認
    if( temp < 0 ) {
      temp = -temp;
      put_uart0_str( "-" );
    } else {
      put_uart0_str( "+" );
    }

    // 上位3桁+"."+下位1桁表示+改行
    put_uart0_num( temp / 10, 3 );
    put_uart0_str( "." );
    put_uart0_num( temp % 10, 1 );
    put_uart0_str( "゚C\n" );
  }
}

BACK