2011年4月アーカイブ

 だいぶGPSらしくなりました。

課題4
 rlockの次のデータには受信している衛星の数が入っています。これを表示するプログラムを作成しましょう。変数はstnを使います。穴埋めではなく、課題1~3を参考にしてプログラムを完成してください。

Publish
 下記URLにてPublishしています。
  http://mbed.org/users/takeuchi/programs/2bk0123_GPS_Test04/llt8rd

  前回の処理で、使用しないI/Oピンをアナログ入力に設定し終えました。次に示す緑色の強調表示された関数、RCC_APB2PeriphClockCmd()で各ペリフェラルのクロックを停止します。

 RCC_APB2PeriphClockCmd()の関数は、各ポートの設定を行う前に呼び出し各ペリフェラルの変更を行うために各ペリフェラルを活動状態にするクロックをイネーブルにし、設定が終了したので、同じ関数で不要なペリフェラルの活動を止め、省電力化を図っています。

IAR5900010.jpg
 モータ課題4まででビュートローバーの基本走行ができるようになりました。この課題では前進、後進、停止をC言語の関数化して使いやすくすることを考えます。

モータ課題5
 前進、後進、停止を関数化しましょう。関数の名前は次のようにします。
   前進:forword()、後進:back()、停止:qstop() 
 動作としては・・・前進1秒=> 停止1秒=> 後進1秒=> led_flash()による点滅
とします。
 プログラムを簡単に説明します。なお、このプログラムは早く作ることを目的に作りましたので、一応の動作テストは行っていますが、まだまだ改良の余地が残っていると思います。
 このサンプル・プログラムは、LCD表示に、LCD表示ライブラリ TextLCDを使用しています。このライブラリの情報は、以下のURLで参照できます。
  http://mbed.org/users/simon/libraries/TextLCD/livod0/docs/classTextLCD.html

 GT-720Fのデータをうまく加工できるようになりましたか?

課題3
 GPGGA行のデータを、変数:time,hokui,ns,tokei,ew,rlockの並びとして取り込みます。rlock=1の時にGT-720Fがロック=測位が完了したと判断し、そのときの北緯=hokui、東経=tokeiを表示します。ロックできない間は、受信データをそのまま表示します。この課題では表示はLCD表示を中心にします。
 前回はハードウェアの解説をしましたので、次にソフトウェアの解説をします。
  なお、これから解説するプログラムは、早く作ることを目標にしましたので、多くの改良の余地があります。いわば、サンプル・プログラムに近いものです。このサンプル・プログラムが、みなさまの創作のヒントとなり、インターネット上でマッシュアップされ、改良されたシステムや、より良い仕組みが実現できればと願います。
 右Uターンはうまくできましたか? 同じ要領で左Uターンをプログラムしましょう。

モータ課題4
 前進1秒 =>左Uターン旋回=> 前進1秒 =>停止 するプログラムを考えましょう。

■■考え方
  前進:Mtr_Run_lv(10000,-10000,0,0,0,0)
  右旋回:Mtr_Run_lv(-10000,-10000,0,0,0,0)
  左旋回:Mtr_Run_lv(10000,10000,0,0,0,0)

はんだ付けなしでも工作可能
 今回の製作は、はんだ付けが苦手な人でも工作できるようにしています。これは、一般のITエンジニア(ソフトウェア・エンジニア)でも、工作できるようにするための方策です。そのため、AC100V制御部に市販のUSB感知式連動タップを使用しており、電気に弱い人でも安全・簡単にON/OFFできるように工夫しています。
 もちろん、電子工作の腕に自信のあるかたは、 AC100V制御部にリレーを使用した回路や、SSR(半導体リレー)などの回路を自作することも可能です(秋月電子のSSRキットなどが使えると思う)。
 課題1で$マークをうまく発見できましたか?

課題2

 $マークに引き続き、文字列GPGGAを発見し、それに続く数値二つをdummy1、dummy2に取り込みましょう。

 sscanf()関数を使います。まず、$マークを見つけます。発見後、行末までgps_data[i]に1文字ずつ取り込みます。sscanf()を使い、gps_dataの先頭にGPGGAがあれば続く二つを実数データとして取り込みます。dummy1には時刻データ、dummy2には緯度データが入ります。

Serial pc(USBTX, USBRX); // tx, rx
Serial gps(p9,p10);

int main() {

      int i;
      char gps_data[256];
      float dummy1,dummy2;
      
      gps.baud(9600);
      lcd.cls();
      lcd.locate(0,0);
      lcd.printf("GPS GT720F Test\n");

    while (1) {
      i=0;
      while( (1) !='$'){
      }
     
      while( ( (2) =gps.getc()) != '\r'){
        i++;
        if(i==255){
           pc.printf("*** Error! ***\n");
           break;
         }
      }
      gps_data[i]='0';
    
      if(sscanf( (3) , " (4) ,%f,%f",&dummy1,&dummy2) >= 1){
        pc.printf("\x0D");
        pc.printf("GPGGA data:\n");
        pc.printf("%s\n\n",gps_data);
      }
     
    }//while
}//main



汎用 東京電力電力供給状況表示装置 とは
 インターネット上で公開されている東京電力の電力供給量の情報(※東京電力電力供給状況API)にアクセスし、電力消費率に合わせて、AC100Vのランプや回転灯を点灯させ、省エネの必要性を通知する装置です。図1が本装置の利用イメージです。写真1が、製作例(試作零号機)です。

zu-1.jpg
<図1 本装置の利用イメージと構成>

GPIOx CRLレジスタ
 今回は、GPIO_Init関数の内部の次の範囲の処理について確認していきます。この処理は、AからE各GPIOポートの下位の0から7番ピンの設定を分担しているGPIO_CRLレジスタに対する処理のルーチンです。

tmpreg = GPIOx->CRL;
for (pinpos = 0x00; pinpos < 0x08; pinpos++)

 から
              GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
             }
          }
       }
    }
  GPIOx->CRL = tmpreg;

 モータ課題に慣れてきましたか? 応用してみましょう。

モータ課題3
 前進1秒 =>180°右Uターン旋回 =>前進1秒 =>停止 させましょう。
 GPS GT-720Fより送られてくるデータを受信し、加工する課題を楽しみましょう。最初の課題は先頭にくっついている$マークを見つけます。

1_gps_kadai1.jpg





カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.