2011年5月アーカイブ

1-2 赤外線LEDと赤外線受光モジュールの関係
 次に赤外線LEDと赤外線受光モジュールの関係について調べてみましょう。

 実は前回掲載した図7と図8の解析結果に従って[0]->[LED OFF]、[1]->[LED ON]のように
赤外線LEDを単純にON-OFFしてもCHOROQは動作しません。
 これには理由があり、リモコンが外乱の影響を受け誤動作しないようにちょっとした細工が
してあるためです。
 赤外線受光モジュールは、通常5[V](Hi)を出力しています。LEDをONにしてもOFFにしても出力に変化はありません。ところが、 38[kHz]の信号をLEDに入力し、高速にLEDを点滅すると、出力が変化し0[V](Lo)になります。図10は、赤外線LEDと赤外線受光モ ジュールの出力信号をオシロスコープで観測したものです。上のオレンジ色の波形が赤外線LEDの信号で、下の水色の波形が赤外線受光モジュールの出力で す。
 

s図10_赤外線LEDと赤外線モジ.jpg
図10 赤外線LEDと赤外線モジュールの波形

KML形式について
 KML(Keyhole Markup Language)は、Open Geospatial Consortium,
Inc.(OGC)が管理する国際標準規格です。地理データの表示に使用するマークアップ形式です。

   http://code.google.com/intl/ja/apis/kml/

 KMLは次のような構造をしています。HTML形式と似た構造ですね。
Relays Shield とmbedを接続
 前述したようにRelays Shieldはarduino 用のシールドであるため、mbedとの接続に、 mbeduinoを使用します。mbeduinoには、イーサネットLANのインターフェース(パルス・トランス付のRJ45コネクタ)がありますので、ルータを介してインターネットへ接続することができます。ただし、キャラクタ表示LCDとのインターフェースがありませんので、別途I/Oポートの線を引き出すか、I2Cを使用してI2C用のLCDを接続する必要があります。
 今回は、とりあえずLCDなしで、試作してみました。その変わりmbed本体のLED2~LED4を使用して、電力の消費電力の状態を表示させています(プログラム上では、LCD表示を残しています。LCDを☆board Orangeの場合と同じように接続すると、LCDに表示するはずです)。

Relays Shield の出力回路と外部との接続
 Relays Shieldは4個のリレー( X1~X4)を持ちます。X1とX2の2回路は単純なON/OFFの制御用です。X3とX4は、2個で1組のON/OFFと正/逆の切り替えができる回路構成になっています。
 図2に本装置の出力を示します。

zu2.jpg
<図2 本装置の出力>

 ビュートローバーは標準で二つのセンサを装備しています。このセンサを使ってみましょう。

センサについて
 センサは赤外線LEDを発光させて反射した光を赤外線受光素子で受光します。
 ビュートローバに装備されている赤外線センサの動作はビュートビルダを楽しんだときに確認しました。今回はセンサ出力が256より大きければ検出としています。

1_br_sensor.jpg
回路
 回路は電源回路とモータ・ドライバのみの単純なものです。モータ・ドライバはスイッチサイエンス社で売られているBD6211F搭載モータ・ドライバ・モジュールを使用しています。

sイメージ-13.jpg

はじめに
 GPS+GT-720Fを題材にした課題をずいぶんとこなしました。ここではGT-720Fの緯度経度データをmbedドライブに記録するデータロガーに発展させます。ログは、ルートラボなどの地図Webアプリケーションで表示します。緯度経度データの記録方式には、ハンディGPSなどで使われているトラック形式(*.trk,*.log,*.nme)やウェイポイント(*.wpt)、KML形式(*.kml)などがあります。ここではKML形式で記録します。

while(1){ }で無限に繰り返す
 初期化を終えた後は、
   while(1){
     ここに記述した処理は終わることなく続く
   } 

 電力供給逼迫(ひっぱく)時シャットダウン装置とは、東京電力電力供給状況API から入手した電力供給情報を元にAC100Vの警告灯などのON/OFFの制御とWindows のUPSサービスを使用してOSをシャットダウンさせる装置です(図1)。

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

車体
 車体は、タミヤのユニバーサルプレートとプラ板、スペーサなどで構成しました。足回りはタミヤのダブルギヤボックス(左右独立4速タイプ)に、同じくタミヤのナロータイヤセット(58mm径)を壁走りするためにちょっと改造したものを使用しています。

ssイメージ-7.jpg

 完成したforword()やleft()などの関数を使って課題に挑戦しましょう。

モータ課題7
 左回りに四角く走行するスクエア走行をプログラムしてください。具体的な走行シーケンスは下のとおりです。

  前進1秒 =>左直角旋回 =>前進1秒 =>左直角旋回 =>前進1秒 =>左直角旋回 =>前進1秒 =>停止 =>LED点滅

2_motor_kadai.jpg
課題6
   $GPGGA,114107.046,

 $GPGGAセンテンスには時刻データが含まれています。このデータからLCDに時刻を表示しましょう。

 一番最初のデータが時刻です。
   114107.046
   11時41分07.046秒
をUTCで示します。JST=日本時間表示にするには9時間加えます。
 今回はCHOROQ HYBRIDを使って赤外線リモコンを応用したプログラムを製作します。
 CHOROQ HYBRIDとは、タカラトミーから販売されている超小型のリモコン・カーで、付属の赤外線リモコンを使ってCHOROQを遠隔操作することができます。図1はCHOROQとリモコン、単3電池を並べたもので、この図を見るとCHOROQがどれくらい小さいかわかっていただけると思います。
 それでは今回の予定ですが、まず最初に赤外線リモコンを使ったプログラムを作成するのに必要な基礎知識について簡単に紹介します。続いてCHOROQのリモコンを操作すると、押したボタンの機能がLCDに表示されるプログラムを作成し、最後に2軸ジョイスティックを使ってオリジナルの赤外線リモコンを製作します。今回の記事を読めば、赤外線を使った送受信プログラムを製作するヒントが得られると思います。

s図1_CHOROQ_HYBRID.jpg図1 CHOROQ_HYBRID
緯度経度の表示形式
■■60進数形式 緯度経度表示
 GPS GT-720FのGGAデータはNMEA-183と呼ばれるフォーマットです。先頭の$マークに続き、GPGGAなどの種別を表すアルファベット5文字、データがアスキ・コードで送信されます。

$GPGGA,114107.046,3532.25024,N,13751.86820,E,1,04,2.5,0.0,M,38.5,M,,0000*

 GPGGAに緯度・経度のデータが含まれています。
   3532.25024,N 
   13751.86820,E
 
数字列:緯度または経度(分を60進数表記)
   N:北緯、S:南緯
   E:東経、W:西経

 したがって、上のデータは次の緯度経度を示します。
   3532.25024,N ・・・北緯35度32.25024分
   13751.86820,E ・・・東経137度51.86820分
 第1回目、2回目で紹介しました、汎用 東京電力電力供給状況表示装置は、警告灯などを点灯させるだけではなく、プログラムの修正により、AC100V電源で動作するモノをON/OFF制御することができます(ただし、許容電力以内に限ります)。たとえば、店舗の看板の照明を、電力消費率が90%を超えたとき、AC100 VをOFFに制御して節電するような使い方が考えられます(図1)。

zu1.jpg
<図1 本装置の応用イメージ例
(自動的に節電する電照看板)>
 BluetoothやEthernetなどの通信層のプログラムはとても複雑で様々な通信仕様に対応し、通信状況に応じた異常対応もする必要があります。BlueUSBのプログラムはWiiリモコンやBluetoothマウスと通信するのみの単機能な実装しかされておらず、異常時の対応も不十分な状態です。それでもこれだけのプログラムがすぐ動かせるレベルで公開されているのはとてもありがたいことです。またmbed.orgでは、BlueUSBを元に改善、または機能を追加プログラムも公開されているので、それらも参考になると思います。
 ここではとりあえずBlueUSBをそのまま使い、簡単にWiiリモコンのボタンと傾きでmbed上のLEDをコントロールしてみます。

 TestShell.cppの最初の部分に以下(太字)を追加します。
#include "Utils.h"
#include "USBHost.h"
#include "hci.h"
#include "mbed.h"

DigitalOut  led1(LED1);
DigitalOut  led2(LED2);
 完成したforword()やright()などの関数を使って課題に挑戦しましょう。

モータ課題7
 右回りに四角く走行するスクエア走行をプログラムしてください。具体的な走行シーケンスは下のとおりです。

  前進1秒 =>右直角旋回 =>前進1秒 =>右直角旋回 =>前進1秒 =>右直角旋回 =>前進1秒 =>停止 =>LED点滅

1_motor_kadai.jpg
少し時間が空きましたが、後半をお届けします。


 BlueUSBは、BluetoothドングルによるWiiリモコンとの通信以外にもBluetoothマウスやキーボード、USBメモリ(マスストレージ)も扱えるようになっています。

sイメージ-1.jpg

 昨年の末にIAR Embedded Workbench IDEのV5.507をダウンロードしたあと、しばらくIARのダウンロード・ページにアクセスしていなかったら、現在のバージョンはV6.10になっていました。
 次に示すように、V5.5よりV6.1はダウンロードするファイルの大きさが150Mバイトくらい増加しています。
 回線が込んでいてダウンロードのスピードがあまり出ず、このときはダウンロードに1時間以上の時間がかかってしまいました。

iar201105010010.jpg
モータ課題6
 モータ課題5に加えて右旋回、左旋回を関数化しましょう。関数名は次のとおりです。

  右旋回:right()
  左旋回:left()

 動作としては前進してから逆L字に曲がります・・・前進1秒 =>右直角旋回 =>前進1秒 =>左直角旋回 =>前進1秒 =>停止
 直角左右旋回は時間をうまく調整してください。

2_motor_kadai.jpg





カテゴリ


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