2012年6月アーカイブ

4 カメラを制御

 今回はmbedでカメラを制御するプログラムを以下の手順に沿って作成していきます。
(1) シリアル・カメラを使った画像の取得
(2) カメラとパソコンを有線(RS-232C)で接続しカメラで撮影した画像をパソコンに表示
(3) RS-232C(有線)をXBee(無線)に置き換えカメラをマイコン・カーに搭載
 2列車の交換ができるレイアウトは完成しましたか? このレイアウトのmbedプログラミングを楽しみましょう。

課題9
 次のように列車を運行するプログラミングを楽しみましょう。

11_P1010186.jpg写真手前:列車1、奥:列車2とします。

ポイント初期化・・・切り替え1、2、1
列車1=> 3周=>4周目:センサ3より速度ダウン =>駅停車=>ポイント切り替え
列車2=> 同じ走行パターン繰り返し

Vr1:列車1速度、Vr2:列車2速度

ポイント・・・ポイントを切り替える際には0.8A程度の電流が0.2秒間流れるので、両方を同時に切り替えるのではなく、順次切り替えないと電圧降下によるトラブルが発生する可能性があります。
 小型のエンドレスにポイントを2か所設けて、2列車が交換運転できるレイアウトを楽しみましょう。CdS光センサは3か所設置します。写真を参考にしてください。

1_image.jpgCdS光センサの設置
 センサ1 設置の様子です。場所を変えながらテストを繰り返したので、いくつか穴が開いています。
ローカル線ムードを楽しみましょう
 単線往復運転システムは完成しましたか? CdSセンサの前に駅やホームを配置して、目線を下げて列車の運行を楽しみましょう。

7_P1000144.jpg 単線レイアウトはエンドレス・レイアウトに比べると、狭い場所でも楽しむことができることが特徴です。
 
課題8
 両端にCdS光センサを設置した単線往復レイアウトのセンサの間を、列車が往復するmbedプログラムを作成しましょう。

4_P1000138.jpgmbed プログラミング
 アルゴリズムとしては以下の動作を繰り返します。
  センサ1より発車=> センサ2が反応するまで走行継続 => センサ2到着 =>5秒停車
  センサ2より発車=> センサ1が反応するまで走行継続 => センサ1到着 =>5秒停車
3 マイコン・カーの制御

 マイコン・カーを制御するプログラムを作成してする前にちょっとだけ前に作成した回転数を求めるプログラムを修正したいと思います。以前作成したプログラムはシャフトに取付けた円盤の黒いマーカーをフォト・リフレクタで読込むとパルスが出力されました。そこで、図23のように一定時間の間に何個パルスが発生するかをカウントすることで回転数を求めていました。

s図23_回転数の求め方.jpg
図23 回転数の求め方


 しかし、この方法では一定時間(以前作成したプログラムでは3秒)の間回転数の表示が更新されません。そこで、フォト・リフレクタの周期から回転数を求めるプログラムに変更したいと思います。ただし、この方法はノイズの影響を受けやすいため、求まった値をそのまま表示すると回転数がありえない値になってしまうことがあります。そこで、回転数が300を超えた場合は、前回求めた回転数をそのまま表示するようにしています。

 単線エンドレス・レイアウトであってもCdS光センサを一つ追加することでずいぶんと楽しむことができたと思います。センサを二つ設置した単線レイアウトを題材にした課題です。

レイアウトの準備
 直線のみで構成する簡単なレイアウトです。

1_P1000113.jpg
2-3 PWMを使った速度制御
 前項ではモーター・ドライバICの機能Vrefを使って回転数を制御しましたが、ここでは、PWMを使って回転数を制御してみます。PWMとはPulse Width Modulationの略で、パルス幅を変えることで様々なものを制御します。
 マイコン・カーでは、PWM制御を使ってサーボやモーターの回転数を制御しています。
 図19のように周期に対するパルス幅の割合のことをデューティ比とよび、
  デューティ比 = パルスの幅(ONの幅) / 周期
で表され、モーターを制御する場合はこの値が大きいほどモーターの回転が速くなります。

s図19_duty比.jpg
図19 duty比


 もし、周期が100[mS]でパルスの幅を50[mS]とした場合、デューティ比は50%になりますが、デューティ比100%と比べて回転数が半分になるわけではありません。あくまでも、周期に対するパルス幅の割合が50[%]になるだけです。
 マイコン・カーにPWMの信号を与えるには、モーター・ドライバーICのIN1とIN2の端子を使用します。
 通常この端子に、0と1もしくは1と0を入力することで前進や後進しますが、そのときに 1 を入力する代わりにPWMの信号を入力します。
 mbedではPWM信号を簡単に出力するためにPwmOutオブジェクトが準備されていて、このオブジェクトを使うと変数宣言と、周期とパルス幅(もしくはデューティ比)を設定するだけで、簡単にPWM信号を出力することができます。
 以下はPwmOutオブジェクトで使用する主な関数です。





カテゴリ


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