ここでは,実験の手順を述べる.機器の動作やプログラムの詳細については,
pp.-に記述している.
2枚のユニバーサルプレートを車のシャーシにして,ギヤボックスやキャスター,タイア,
センサーなどを図8のように取り付け車体を製作する.最初に製作する
ライントレースカーはここで示す基本モデルとする.基本モデルの動作を確認の後,ライ
ントレースカーレース(秋田高専グランプリ) で勝つことを目指して,高速モデルにチャ
レンジすることになる.
ギヤボックスは,高速ギヤボックスと低速ギヤボックスの2種類用意している.基本モデ
ルでは,低速ギヤボックスを使うこと.低速ギヤボックスは,'C'のマークの部分に
回転軸がある.一方,高速ギヤボックスは'A'である.
車体製作時の注意を次に列挙するので,厳守すること.
- 低速ギアボックスを使うこと.
- 部品をきちんと固定すること.
- 図8に示すねじ2を用いて,機械
部品を固定する.その際,ワッシャー(座金)を必ず取り付けること.これが無い
と,穴から外れる場合もあるし,シャーシなどを傷つけることもある.
まず初めに,図8や図9のようにブレッドボー
ド上にH8マイコンを取り付ける.取り付けの際,方向を確認すること.このとき,JP1を
ジャンパーピンでショートさせること.これ以降,この実験ではこのJP1のジャンパーピ
ンを取り外してはならない.もし,このジャンパーピンを取り外して9[
] を印可す
ると,マイコンが破壊される.
図9にH8マイコンボードのピン番号を示す.H8マイコンボード
の下側の電極はブレッドボードに差し込まれるので,それに接続されているブレッドボー
ドの穴を通して配線を行う.H8マイコンボードの上側の電極は,直接,配線材を接続する.
図11にライントレースカーの電気回路を示す.主な回路は,ラ
インを探すセンサー部とその表示(LED)部,H8マイコン,モーター駆動部である.すべの
の回路はジャンパー線により接続され,その中心にH8マイコンがある.全ての制御信号は
H8マイコンと入出力され,ライントレースカーの制御が行われる.H8マイコンの入出力の
電極については,p.の付録
A.1 「H8マイコン」に詳しく記述している.
センサー部のフォトトランジスターの出力はアナログなので,インバーター3(74HC04AP)で信号の出力を二値化--0と2.4[
]に--している.こ
の二値化した信号をH8マイコンのAD変換器で読み取っている.AD変換器で読み取るため,
二値化しなくても制御は可能である.ここでは,センサーの推奨回路にしたがい,インバー
ターを使った.センサーの動作の詳細については,p.の付録
A.2「赤外線センサー」に記述している.
DCモーターの制御には Pulse Width Modulation(PWM)を使っている.PWMではある周期--
ここでは30.5[
]--で,モーターのON/OFFを繰り返す.ONとOFF時間の比を変える
ことにより,モーターに流れる平均電流を制御する.これにより,モーターの回転数を変
化させることができる.センサーの情報に応じて,左右のモーターの速度を変化させるこ
とにより,ライントレースカーの方向制御を行っている.モーターの構造とPWM制御につ
いては,p.の付録A.3「DCモーターとPWM
制御」にもう少し詳しく記述している.
モーターのスイッチングには,ダーリントン接続4したトランジスターを用いている.トランジ
スターひとつでは増幅率が不足しているからである.ここで使うトランジスターひとつの
増幅率は100倍程度であるが,モーターを駆動するためには200倍程度の増幅率が必要とな
る.H8マイコンからの出力の電流は最大でも1[
]程度で,DCモーターでは
200[
]程度の電流が必要で,200倍程度の増幅率となる.トランジスターの動作に
ついては,p.の付録A.4「トランジス
ター」に更に詳しく説明している.
モーター電極の両端には,フライホイールダイオードを接続している.このようにするこ
とにより,PWMのOFF時にコイルに発生する逆起電力による悪影響を防止するとともに,それをモーター
の回転エネルギーに変えている.動作の内容については,p.の付
録A.5「ダイオード」に更に詳しく説明している.
ここでは,ライントレースカーの電気回路(図11)を作成する.
p.の図8を参考に,H8マイコンやLED,半導体部品などを接続すること.
以下,注意点を列挙しておく.
- 回路を作成しているとき,部品の破損を防ぐために電源を接続していはならない.
意図しない電流が素子に流れることがあるからである.
- 初めに,ブレッドボード上に電源とアースのラインを作成する.まだ,電源を接続しない.
- ブレッドボード上に必要な部品を取り付け,配線材(ジャンパー線)で接続する.
- 配線材の先端を曲げてはならない.
- 配線材は,まっすぐ真上から差し込むこと.
- センサーやモーターの配線をを行う.回転部品に巻き込まないように配線するこ
と.
- 抵抗はカラーコード(図10を参照)を読み,テスター
でチェックした後,接続すること.
- 回路が完成したならば,極性および接続に間違いの無いことをチェックする.
全ての部品を組み付け,回路ができあがったならば,以下のことを確認すること.
- 部品がきっちりと固定されていることを確認すること.ねじなどがゆるんでいる
場合は,締め直すこと.
- センサーの高さが,3〜5[
]であることを確認すること.センサーの焦点
距離は4[
]であり,大きく外れると感度が低下する.
- タイアが回転した場合,電線を巻き込まないように配線ができているか?--確認すること.
- 図11の通りに,回路が構成されていることを確認する
こと.以下の項目を確認し,回路図にチェックマークを記入すること.
- 回路の配線の経路を確認する.
- グランドが共通となっている--ことを確認する.
- H8マイコンのJP1のジャンパーピンが接続されている--ことを確認する..
- トランジスターの型番と接続方法が正しい--ことを確認する.
- カラーコード(p.の図
10)を見て,全ての抵抗の値を確
認する.
- LEDの接続と方向を確認する.
- ダイオードの接続と方向を確認する.
- インバーターの接続の接続を確認すする.
- H8マイコンの電極の接続を確認する.
- リセットスイッチの接続を確認する.
- センサーユニットの接続を確認する.
ハードウェアーの確認が終われば,電気情報工学実験室でプログラムの作成を行う.
この実験のプログラムは,Linuxのgccを使って開発する.gccは統合開発環境ではないた
め,プログラム開発は原始的な部分5から作成しなくてはならない.原始的な部分からプログラム
を開発すると大変ではあるが,コンピューターに関する多くの知識が得られる.
この実験では原始的な部分に触れないが,勉強は可能である.この実験で使う全てのプロ
グラムを,pp.-の付録B
に載せておく.また,私のWEBページ「H8プログラム開発(Linux
C言語 編)」で
も記述している.このような原始的なプログラムに,興味があれば参考文献 []から読みはじめればよいだろう.
この実験で必要な原始的な部分のプログラム(付録B)は全て,
実験実習のWEBページからからダウ
ンロードして使う.これらのプログラムの中身を全て理解できれば,一人前である.興味
のある者はこれを理解するよう努力せよ.コンピューターの仕組みがよくわかるようにな
る.
ライントレースカーレース(秋田高専グランプリ)に向けて高速化の工夫を行う前に,確実
に動作するプログラムで,マイコンの動産の確認を行う.
プログラム作成に先立って,以下の注意事項を読み,厳守すること.
- H8マイコンへのプログラム転送の手順を間違えないこと.
- プログラムが暴走したら,[Ctrl]に続けて[c]を押すことにより,強制
終了させる.
プログラム作成にはLinuxを用いる.電気情報工学実験室のパソコンには,H8マイコンを
開発するためのプログラム類がインストールされている.
以下の順序に従い,もっとも基本的なプログラムを作成せよ.
- D-SUBコネクターを使って,パソコンとライントレースカーを接続する.ただし,
この状態では,ライントレースカーの電源(2.4[
]と9[
])はOFFにして
おく.
- パソコンの電源をONにして,Linuxを立ち上げる.
- プログラムのソースファイルを保存するディレクトリーを作成する.ディレクト
リー名は,全てアルファベットで記述すること.
- プログラムに必要な以下のファイルを実験実習のWEBペー
ジか
らダウンロードし,先ほど作成したディレクトリーに保存する.
|
Makefile |
コンパイルの方法やH8への転送方法を記述している. |
|
3664.h |
主にレジスターのアドレスを記述している. |
|
h8c.c |
ライントレースカー用の関数. |
|
h8c.h |
ライントレースカー用の関数のヘッダーファイル. |
|
h8_starts.s |
スタートアップルーチン. |
|
h8_link.x |
リンクの方法を記述しているリンカースクリプト. |
|
|
|
ファイル名や拡張子を変えてはならない.Makefileをダウンロード
するときに余分な拡張子--.htmや.html-- が付くことがあるので,取り除くこ
と.
- リスト1のとおりH8マイコンのプログラムを作成する.作
成したファイルは,先ほどダウンロードしたファイルと同じディレクトリーに保
存すること.
- ファイル名は,「experiment.c」とする.
- コメント文は,記述しなくてもよい.
- ダウンロードしたファイルは,変更してはならない.
- コンパイルする.コマンドは,「make」である.
- makeの結果,できあがったプログラムをH8マイコンへ転送する.
- H8マイコン基板のJP2とJP3をジャンパーピンでショートする.JP1は常
にショートしておくこと.
- 回路に9[
]を供給する.9[
]電池をブレッドボードに接続する.
- コマンド「make write」をタイプし,プログラムを転送する.転送
がはじまると,「H8/3664F is ready! 2001/2/1 Yukio Mituiwa.」と
表示される.もし失敗したならば,[Ctrl]と[c]を押して,プ
ログラムを止める.
- 転送には,20秒くらい必要である.「EEPROM Writing is successed.」
と表示されるまで待つ.
1 #include "h8_3664.h"
2 #include "h8c.h"
3
4 int main()
5 {
6 init_led();
7 init_pwm();
8 init_ADC();
9
10 duty_pwm(0,0); // PWMの初期値
11 start_pwm(); // PWM信号出力の開始
12
13
14 while(1){
15 ADC(); // AD変換器でセンサーデータ取得
16
17 //---- LEDの発光 -----
18 PDR5=((0x01*ch1+0x02*ch2+0x04*ch3+0x08*ch4) & 0x3f) | (PDR5 & 0xc0);
19
20 //---- DCモーターの制御 -----
21 if(ch2==1 && ch3==0) duty_pwm(0,100);
22 if(ch2==1 && ch3==1) duty_pwm(100,100);
23 if(ch2==0 && ch3==1) duty_pwm(100,0);
24
25 }
26
27 }
まずは,転送したプログラムを実行させて,ライントレースカーの動作を確認する.動作
確認の順序は,以下の通り.
- マイコンに電力を供給している9[
]の電池をOFFにする.ブレッドボー
ドから9[
]のジャンパー線を引き抜く.
- H8マイコン基板のJP2とJP3のジャンパーピンを取り外し,オープンにする.決し
て,JP1を取り外してはならない.
- ブレッドボードに,モーターおよび赤外線センサー駆動用のニッケル水素電池2本
の2.4[
]を供給する.
- マイコンに9[
]の電池をONにする.ブレッドボードから9[
]電池のジャ
ンパー線を取り付ける.
- すると,プログラムが実行される.
- プログラムを最初から実行させたければ,RESスイッチを押す.
次に,練習用あるいはグランプリ用のサーキットにライントレースカーを持ち込んで,ちゃ
んと黒線上をトレースすることを確認する.ライントレースができることが確認できれば,
ハードウェアーは完成である.
ライントレースカーを高速化するためには,ハードウェアーとソフトウェアーの改良が可
能である.
ギヤボックスやタイア,前輪はそれぞれ2種類用意している.基本モデルを改良するとき,
これらの部品を上手に選定し,ライントレースカーの速度の向上を図ることができる.高
速になった分,制御は難しくなるので,プログラムの改良も必要であろう.
高速化のためにモーター駆動用の電池の電圧を上げることは,禁止する.基本モデル同様
に,単三型のニッケル水素電池2個を使用すること.電圧をあげることは,高速化には大
変有効な方法である.しかし,他の半導体部品を損傷する可能性があるため,ここでは禁
止する.
ギヤ比の小さい高速のギヤボックスが使用可能である.これを使うことにより,より高速
にライントレースカーを動かすことができる.ただし,高速に動作する分,制御が格段に
難しくなる.
タイアを変えることにより速度を変えることもできる.大小2種類のタイアを用意してい
るので,上手に選択せよ.
高速化のためには,4個のセンサーを上手に使う必要がある.ラインを探す赤外線センサー
のユニットにはセンサーが5個組み込まれている.しかし,H8マイコンの入力は4個であ
る6.この5個の内,どの4個を使うかは諸君の考え方次第である.また,基本プログラム
(pのリスト1)では2個のセンサーの
みで制御を行っている.多くのセンサーを制御に使えば,より高速にライントレースカー
を動かすことができるであろう.
また,センサーやタイアの位置を変えることでも高速化ができるだろう.センサーやタイ
アの位置を変えて,もっとも制御しやすい位置を探すと良い.
制御方法を変えるだけでも,ライントレースカーは高速に動作する.諸君が制御できるの
は,センサーの入力とDCモーターの速度,LEDの点灯である.
センサーの入力信号は,グローバル変数ch1〜ch4に設定される.ch1〜
ch4のそれぞれのグローバル変数は,H8マイコンボートのAN0〜AN3の入力
に対応する.もし,接続されているセンサーが白を検知したならば,グローバル変数の値
は整数の0となる.黒ならば,整数の1になる.AD変換器を実行させる関数ADC()を呼
び出したとき,これらのグローバル変数の値が設定される.
センサーの状態はLEDにより,観測することができる.センサーの状態を表すグローバル
変数ch1〜ch4の値を,レジスターPDR5に次のように設定する.
PDR5=((0x01*ch1+0x02*ch2+0x04*ch3+0x08*ch4) & 0x3f) | (PDR5 & 0xc0);
すると,センサーが黒を感知した場合,LEDが点灯する.白の場合は消灯である.
ライントレースカーを制御するために,次の関数を用意している.いずれも,基本プログ
ラム(p.のリスト1)に含まれている
ので,使い方は容易に分かるであろう.これらの関数の詳細を知りたければ,
p.のリスト4を見よ.
- void init_led(void)
-
LED表示のための初期化関数.センサーの状態をLEDで表示させ得るために,
最初に1度呼び出す必要がある.LEDはレジスターPDR5の下位4ビット
を表示している.
- void init_pwm(void)
-
PWM出力のための初期化関数.PWM出力を使ってモーターを制御するときに,
最初に1度呼び出す必要がある.
- void duty_pwm(unsigned int b, unsigned int d)
-
この関数を呼び出すと,H8マイコンから出力されるPWMのテューティ比を変
えることができる.第一引数のbはFTIOB端子,第二引数のは
FTIOD端子のディーティ比を決める.両方とも0〜100の値の整数を引数とし,
デューティ比[
]を示す.引数の値が0の時にデューティ0[
]
となり,モータは停止する.100 とすれば,最高速度でモーターは回転す
る.この関数を使う前に,init_pwm()を事前に一度呼び出しておく必要
がある.そして,この関数でデューティ比を設定した後,
start_pwd()関数によりPWM信号が出力される.その後は,この関数
によりデューティ比を変えれば,即座にPWM出力が変わる.
- void start_pwm(void)
-
モーターを制御するためのPWM信号を出力する.一度呼び出せば,デューティ
比は,dugy_pwm()関数を呼び出す毎に変化させることができる.
- void init_ADC(void)
-
赤外線センサー信号入力のための初期化関数.実際にはH8マイコンのAD変
換器を設定して使用可能な状態にしている.赤外線センサーの信号処理の
ために,最初に1度呼び出す必要がある.
- void ADC(void)
-
赤外線センサーの信号を取り込みを行う関数.この関数が呼び出される毎
に,センサーの状態を表すグローバル変数ch1〜ch4の状態が変
化する.
もし,これらの命令で不足と感じたならば,新たに独自の関数を追加することも可能であ
る.自信のある者はトライせよ.
実験の最終日,ライントレースカーの競技大会「秋田高専グランプリ」を行う.そこでは,
各自工夫したライントレースーを持ち寄り,レースを行う.レースは図
12のサーキットで行う.このサーキットを上手にトレースし
た車が勝者となる.
トレースする黒い線は,幅23[
]である.センサーの間隔は,この線の幅を考えて設定して
いる.
図:
秋田高専グランプリのサーキット.線幅は23[
]である.
|
この競技の準備および運営も実験の一部である.グランプリのルールと各自の役割を決
め,自主的にグランプリを運営することを求める.例えば次のような役割が必要であろう.
-4pt
このようなプロジェクトを遂行ことは,エンジニアーの中心的な仕事の一つである.プロ
ジェクトを企画し,それを実行することを学習する.
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年12月27日