ライントレース用のすべての要素が揃ったので組み立てていきます。
関連:
ライントレース関連記事一覧・マイコン(
AD,PWM)
・
車体・
モータドライバ・
センサー(1)(2)・
電源機械設計が得意な人は自由に設計してください。
半田付けが得意な人はブレッドボードを使わずユニバーサル基板で回路を作成しても良いでしょう。
今回は誰でも作りやすいよう様な構成で作ってみます。
追加部品・
30mmスペーサ×4本
・
10㎜スペーサ×4本
・M3ネジ(長さ10mm)×沢山
・M3ナット×沢山
・
ミニブレッドボード・黒ビニールテープ
車体に30mmのスペーサーを取り付けます。
裏から見るとこの4か所
空きスペースに電池ボックスが載ります。
この上にもう一枚のプレートを載せる予定です。
続いてマイコンボードをもう一枚のプレートに固定します。
マイコンボードの4隅に10㎜のスペーザーを付けます。
プレートを台車に固定する穴にネジを通しておいてから
マイコンボードの対角2ヵ所をネジ止めします。
本当は4か所ネジ止めしたいのですが、微妙に間隔が合わないので止めることができません。
2枚目のプレートを付けると電池ボックスが取り外せなくなるので、スイッチを切ってから電池を入れておきます。
2枚目のプレートを載せるときにプレートの穴にモーターと電池ボックスの配線を通しおておきます。
2枚目のプレートを30mmのスペーサーにネジ止めします。
台車はいったん置いといて、回路を組み立てます。
ミニユニバーサル基板にモータードライバ2つと3端子レギュレータを載せます。
ほかの配線を接触しないように抵抗とコンデンサの脚はジャンパ線の長さに合わせてカットしておきます。
10kΩプルアップ抵抗の足は10mmと12.5mmに曲げてからカットしました。
ユニバーサル基板に部品を載せます。
不足した配線はクリップを伸ばして曲げて切って作成しています。
モータドライバの4番と8番には電池の電圧そのまま、7番にはレギュレータで生成した5Vを接続します。
左端には5VとGNDの取り出し口を設けました。マイコンとセンサー基板に供給する5Vはここから取り出します。
電池ボックスのスイッチ切り忘れ防止用に電源LEDを付けました。
LEDの
電流制限抵抗は1kΩとしてあります。
回路やプログラムのミスで暴走する可能性があるので、
この時点ではまだモーターを接続しないように。
電源周りの配線が正しいことを確認したら電池ボックスを接続。
5Vが正しく生成されていることが確認できたらマイコンボードへ電源を持っていきます。
以前作成したマイコンボード用電源コネクタは短すぎました。無理矢理延長してます。
ブレッドボードを付属の両面テープで固定すると部品を再利用するとき剝がすのが大変なので、ブレッドボードの横にネジを差しておいて横移動しないようにしとくと便利です。
と言うか、この構成でここにブレッドボードを固定すると書き込みができません。
続いて
センサー基板の取り付け。
ライントレース用のラインには黒ビニールテープを使用します。
センサーの間隔はビニールテープの幅より広くなるように取り付けます。
それぞれのセンサー基板の電源とGNDをブレッドボードの5VとGNDに接続し、
信号線は空地に挿した後、
PF0,PF1へ接続します。
これでセンサーの読み取りができる様になりました。
センサーの感度調整
一度プログラムを書き込んでセンサーの読み取りができるか確認しておきます。
AD変換とPWMの使い方は
PWMテストの回を参照。
#include "iodefine.h"
#include "io_setup.h"
#include "intMTU.h"
#include "ADConv.h"
void main(void){
short sens_R=0,sens_L=0;
hardware_setup();
//汎用IOの初期化 init_MTU();
//PWM機能の初期化 init_ADC();
//AD変換機能の初期化 while(1){
check_ai();
//AD変換を実行 sens_R=get_ai(0);
//AD変換値を取得 sens_L=get_ai(1);
//AD変換値を取得 set_pwm( PWM_PE0 , sens_R);
//PWM出力 set_pwm( PWM_PE1 , sens_L);
//PWM出力 }
// end while}
センサーに指を近づけてベースボードLEDの明るさが変われば成功です。
このままではライントレースできないのでセンサーの入力をON-OFF動作に変換します。
#include "iodefine.h"
#include "io_setup.h"
#include "intMTU.h"
#include "ADConv.h"
#define SENS_THRESHOLD 800 //判定値#define PWM_MAX 400 //PWM出力void main(void){
short sens_R=0,sens_L=0;
short sens_R_on=0,sens_L_on=0; short pwm_out_L=0,pwm_out_R=0; hardware_setup();
//汎用IOの初期化 init_MTU();
//PWM機能の初期化 init_ADC();
//AD変換機能の初期化 while(1){
check_ai();
//AD変換を実行 sens_R=get_ai(0);
//AD変換値を取得 sens_L=get_ai(1);
//AD変換値を取得 sens_R_on=(sens_R>SENS_THRESHOLD)? 1:0; sens_L_on=(sens_L>SENS_THRESHOLD)? 1:0; pwm_out_R=(sens_R_on==0)?0:PWM_MAX; pwm_out_L=(sens_L_on==0)?0:PWM_MAX; set_pwm( PWM_PE0 ,
pwm_out_R);
//PWM出力 set_pwm( PWM_PE1 ,
pwm_out_L);
//PWM出力 }
// end while}
SENS_THRESHOLDの値でセンサーの感度調整を行います。
台の色やビニールテープの光沢などで適切な感度は変わります。
台にビニールテープを貼り、台車の位置でLEDの光り方が変わればセンサーの調整は完了です。
モーターの配線をつないで、PE0,PE1をそれぞれ右モータ、左モータのモータードライバに接続します。
ライントレースができれば成功です。
モータードライバが結構発熱します。
移動が速すぎてカーブしきれない場合は
PWM_MAXの値を調整してください。
カーブが急すぎるとどんなに調整しても曲がれません。