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

内容
XBeeを使って、温度情報を無線でパソコンに送ります。このとき、NJM1431Aを使って電源電圧が変動しても正しく温度が取得できるようにします。XBeeについては「XBeeを使って、温度を無線で飛ばす」、温度取得については「液晶を使った温度計」、電源電圧補正については「液晶を使った温度計(電圧補正版)」をそれぞれ、参照してください。

ワークスペース
r8cm12a_com_temperature_vref_101.zip
ファイルを解凍し、フォルダを「c:\worksapce」に入れてください。
※2012.12.14にプログラムを訂正しました。

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

回路図

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

回路図

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

プログラムの説明

main関数

「液晶を使った温度計(電圧補正版)」の出力先は液晶ですが、これがXBeeに変わっただけです。
NJM1431電圧、温度計の電圧を5msごとに100回取得、A/D値を温度に変換して、UART0に出力します。

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

    init();                             /* 初期化           */

    while( 1 ) {
        // NJM1431電圧、温度計の電圧を100回取得
        vtmp = 0;
        for( i=0; i<100; i++ ) {
            // P1_3からVccを計算(vcc=5000なら5000mV)
            vcc = (long)1023 * V_NJM1431 / get_ad3();

            // P1_7から温度を計算(vtmp=5000なら5000mV)
            vtmp = vtmp + (long)get_ad7() * vcc / 1023;

            for( j=0; j<5000; j++ );     /* ウエイト 約5ms  */
        }

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

        // 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" );
    }
}

UART0への出力形式

例えば23.4℃なら、temp変数の値は「234」になっています。
まず、値を10で割って整数部分を計算して3桁分表示します。temp変数が234なら「023」を出力します。
次に、値を10で割った余りを計算して1桁分表示します。C言語で余りは「%」で求めることができます。temp変数が234なら、「4」が出力されます。

温度が23.4℃のときの液晶への表示例を下記に示します。

0 1 2 3 4 5 6 7 8
\n

※「\n」は改行コードです。

圧電サウンダーをつないで設定温度以上になったら音を鳴らすなど、いろいろと改造してみましょう!!


BACK