2011年3月アーカイブ

 モータの動かし方はわかりましたか? 今度は後進するプログラムを考えましょう。

課題2
 ビュートローバーを前進1秒 =>停止 =>後進1秒 =>停止 させるプログラムを作成しましょう。

モータ命令
 前進のプラス、マイナスを入れ替えます。

■■使用例
Mtr_Run_lv(-10000,10000,0,0,0,0)
 モータを動かして、ビュートローバーARMを走行させましょう。
 ビュートローバーARMは搭載している二つのDCモータを動かして走行します。最初は指示通りに動かすシーケンス走行を楽しみましょう。

モータ命令の説明
 モータを回転・停止するにはMtr_Run_lv()を使います。
 LogicAnalyzerの設定を続けて、動かしましょう。

  =>Start/Stop Debug Session =>

12_keil_analyzer.GIF
■ Sky Traqを使いましょう
 GPS GT-720Fが受信 =>シリアル・データ =>mbedがUSBに変換 =>USBシリアル接続 =>パソコンではシリアル・データとして受信
 これはGPS GT-720Fの受信データ =>パソコンへUSBシリアル・データとして転送していることと同じになります。ということは、シリアル接続対応のGPSアプリケーションであれば、この自作システムで動作可能となります。

 GPS受信用アプリケーションとして、秋月電子通商webにSkyTraq(ファイル名:GPS Viewer.exe)があります。GPSデータの受信状況、位置、衛星の状況などを視覚的に楽しむことができます。
 こちらよりダウンロードすることができます。

  http://akizukidenshi.com/catalog/faq/goodsfaq.aspx?goods=M-02711


15_gt730_setuzoku.GIF

ARMマイコン入門(57) STM32 バリュー・ラインを使ってみる(12)
GPIO_Init()関数

   前回、GPIOの初期化を行うために必要な情報の受け渡しにデータ構造を使用していることを確認しました。また、列挙型の型定義で受け渡しデータの型定義を行っています。独自に定義された型のデータは定義部で具体的な設定の値を確認することができました。それらの結果を基にGPIO_Init関数で何が行われているか確認します。

GPIOモードの設定
   GPIO Mode ConfigurationでGPIOポートの設定を行っています。まず最初の命令で、初期化のために渡されたGPIO_Modeの値を変数currentmodeにセットしています。GPIO_Modeはデータ構造GPIO_InitStructの中に構造体のメンバとで、GPIOポートの入出力などのモードが設定されています。

 μVison4のデバッガには変数の変化をグラフ化することができるLogic Analyzer(以後、Analyzer)が内蔵されています。使ってみましょう。

事前準備
 ダウンロードしたAnalyzer確認用プログラムを解凍します。

 確認用プログラムは、こちらよりダウンロードできます。
  2bk0214_Analyzer_test.lzh


1_keil_analyzer.GIF
 GPS GT-720Fの信号を受信できるようにmbedのプログラミングを楽しみます。

mbedのプログラミング準備
 mbedをパソコンに接続します。

12_gt730_setuzoku.jpg
4 記録したGPSデータを地図上に表示してみる

 それでは、データがSDに書き込まれたら早速データを地図に表示してみたいと思います。
 オリジナルのデータはgps.txtにNMEAフォーマットのデータはNMEA.nmeのファイルに記録されているので、NMEAフォーマットを読み込み地図上に表示してみたいと思います。
 今回はwadachiというソフトを使用します。以下のURLにアクセスしてください。
  http://www.cyclekikou.net/
 左側のメイン・メニューからダウンロードを選ぶと、轍 Wadachiがダウンロードできます。最新版は3.44です。
 以前は数万円もしたGPSモジュールが入手しやすい値段になってきました。mbedに接続してGPSを楽しみましょう。

GPS GT-720Fの紹介
 秋月電子通商で入手したGPS GT-720Fです。詳細は下記をご覧ください。
  http://akizukidenshi.com/catalog/g/gM-02711/

1_gt730_setuzoku.jpg
課題4

 C言語でビュートローバーARMのプログラムを楽しみます。開発環境はLPCXpressoです。

 緑LED500ms間隔点滅10回 →橙LED500ms間隔点滅10回 →両方500ms間隔点滅10回 →繰り返すプログラムを制作しましょう。LEDの点灯に二重ループを使います。

1_kadai.jpg
 前回ストップウオッチで200000回のループ時間を計測した結果、0.6166892秒でした。これを1ループ0.5秒になるように調整します。
 ループ回数をx回とすると、次の式でxを求めることができます。

   200000:x=0.61666892:0.5

   x=162161

をセットすればよいことがわかりました。

  =>16216をセットしてbuild、download =>

10_stopwatch.GIF
3 GPSライブラリおよびプログラムの作成

 それでは、プログラムの作成に取り掛かりたいと思います。mbedのcookbookに紹介されているGPSライブラリは少し使いづらいので、今回汎用のGPSライブラリMyGPSを作成してみたいと思います。
 このライブラリを使うと、GPSセンサから取得したNMEAフォーマットや緯度や経度などオリジナル・フォーマットをSDメモリ・カードに記録にすることができます。
 今回は緯度および経度などをLCDに表示し、オリジナル・フォーマットのデータをgps.txtに、NMEAフォーマットのデータをNMEA.nmeのファイルにそれぞれ出力しています。
 また、時間はGPSから取得した時間データを使ってmbedの日時を設定しています。

 新しいプロジェクトを作成します。
 今回はGPSロガーということで、GPS_Loggerにしました。
 緯度と経度をLCDに表示するので、プロジェクトにTextLCDライブラリを追加します。ライブリの追加方法はLCDを極める<2/5>を参考にしてください。
 また、データをSDメモリ・カードのファイルに出力するので、SDFileSystemライブラリも追加します。ライブリの追加方法は、メモリ・カードを使ったデータの読み書き<2/3>を参考にしてください。
 それではプログラムを説明していきます。
課題3

 C言語でビュートローバーARMのプログラムを楽しみます。開発環境はLPCXpressoです。

 緑LEDを500ms間隔で10回点滅 →橙LEDを500ms間隔で10回 →両方のLEDを500ms間隔で点滅10回 →これを繰り返すプログラムを作成しましょう。プログラムの先頭ではled_flash()を使って、100ms間隔で3回両LEDを点滅します。
 
 μVison4のデバッガにストップウオッチ機能があります。使ってみましょう。
  =>プロジェクトは前回使ったHello_LED.uvprojを使います =>

1_stopwatch.GIF

列挙型変数の定義
 GPIOMode TypeDefは型名で、enum宣言でGPIO_Modeの各設定状態を列挙型変数として定義しています。列挙型変数の基本的な要素(列挙定数)は整数です。この整数値に、各値に与えられた機能を類推できるわかりやすい名前を与えているのが、列挙型の型定義です。
 意味がわかりにくい0x00の値に、GPIO_Modeをアナログ入力モードに設定するという役割をGPIO_Mode_AINという名前を付けてわかりやすくしています。

課題2

 C言語でビュートローバーARMのプログラムを楽しみます。開発環境はLPCXpressoです。

 前回の課題1で作成した橙緑LEDを100ms間隔で点滅する部分を、関数化しましょう。関数名はled_flash()とします。

 使い方:led_flash(3,100) 100ms間隔で3回橙緑LEDをフラッシュします。

1_kadai.jpg
// 課題2
//橙緑LEDを100ms間隔で3回点灯部分を関数にする

/*インクルード***********************************************************/
#include "lpc13xx.h"
#include "gpio.h"
#include "vs-wrc103.h"
#include "ixbus.h"

int led_flash(int flash,long d_time){
        int i;
        for(i=0;i<  (1)  ;i++){
                 (2) ;
                Wait( (3) );
                 (4) ;
                Wait( (5) );
                  //LED(1);//緑LED点灯
         //LED(2);//橙LED点灯
                  //LED(3);//両方点灯
        }
}

/*メイン関数***********************************************************/

int main (void)
{
        //制御周期の設定[単位:Hz 範囲:30.0~]
        const unsigned short MainCycle = 60;
        Init(MainCycle);                //CPUの初期設定

        //ループ
        while(1){
        led_flash(3,100);
          Wait(1000);

        }//while
}//main

 課題2の解答はこちらよりダウンロードできます。
kadai_2.lzh


長野県飯田工業高校 竹内浩一

========<コラム>=====================

起動・・・筆者はプログラム起動時にLEDを3回フラッシュさせて起動確認することが多いです。

関数化・・・よく使うルーチンは関数化しておくと便利です。

関数・・・C言語を習い始めた頃、関数はメイン・ルーチンの後ろ部分に置いていましたが、改訂されて前におくようになりました。

解答

(1)  flash (2) LED(3) (3) d_time (4) LED(0) (5) d_time


 前回からいろいろなセンサをmbedにつなげて、それらを活用したプログラムを作成していますが、今回はその2回目としてGPSセンサを使ってGPSロガーを製作します。
 「GPSロガーなんて難しそう…」と思われるかもしれませんが、これがmbedを使うと意外と簡単に作れてしまうのです。まさに、mbedのキャッチフレーズであるRapid Prototyping(素早く試作)を感じることができると思います。

 ビュートローバーARMに装備しているLEDを利用した課題を考えましょう。

課題1

 C言語でビュートローバーARMのプログラムを楽しみます。開発環境はLPCXpressoです。

 橙と緑のLEDを100ms間隔で点滅を3回繰り返し、1秒休止します。これを繰り返すプログラムです。空欄を埋めてプログラムを完成してください。

1_kadai.jpg





カテゴリ


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