AVRで作るライントレースロボット
AVRのコンパレータを利用すると非常に簡単な回路構成でライントレースロボットが作れます.
ボディは,タミヤのユニバーサルプレートを使いました.
前輪はツインモータギヤボックス+トラックタイヤセット,後輪はボールキャスターを1つ使いました.
AVRのPD0,PD1の信号によりツインモータギヤボックスのモータをドライブさせます.
ドライブ用のトランジスタは,BD675,C3279など1A以上の電流が流せるものだったら大丈夫だと思います.マイコンの動作が不安定になるので,マイコンとモータ駆動の電源(1.5×3)を分けています.モータonの時間を増やし,offの時間を短くすれば,動きは速くなりますがラインからはずれやすくなります.マイコンの電源部にコンデンサを入れるなどノイズ対策をしっかりしないと誤動作します.

ソースコード
;LTrace 10MHz 2003-05-28
;外部発振用ライントレース
;た。
;PB0:フォトダイオード
;PB1:可変抵抗
;PD0:トランジスタ->モータ1
;PD1:トランジスタ->モータ2
;PD2:赤LED
RJMP RESET
RETI
RETI
RETI
RESET:
LDI R16,0B11111100 ;PBの0,1ビットが入力2-7ビットが出力
OUT 0X17,R16 ;
LDI R16,0B11111111 ;PDは全て出力
OUT 0X11,R16 ;
MAIN:
SBI 0X12,2 ;LED ON
LDI R25,1 ;R25に入れる値で待ち時間が決まる(0-255)
RCALL TIME ;LEDが光り,フォトダイオードが反応するまで少し待つ
SBIC 0X08,5 ;コンパレータ出力が0でスキップ
RJMP S2
S1: SBI 0X12,0 ;モータ1をon
CBI 0X12,1 ;モータ2をoff
RJMP L1
S2: CBI 0X12,0 ;モータ1をoff
SBI 0X12,1 ;モータ2をon
RJMP L1
L1: CBI 0X12,2 ;LED OFF(ずっと光らせるのは電池の無駄)
; LDI R25,4 ;モータを動かす時間
LDI R25,4 ;モータを動かす時間
RCALL TIME ;RCALL TIMEの間モータを動かす
CBI 0X12,0 ;モータ1をoff
CBI 0X12,1 ;モータ2をoff
; LDI R25,100 ;モータを止める時間
LDI R25,40 ;モータを止める時間
RCALL TIME ;RCALL TIMEの間モータを止める
RJMP MAIN ;MAINに戻る
;
TIME: ;R25の値に比例して時間を消費する
LOOP1:
LDI R26,100
LOOP2:
LDI R27,255
LOOP3:
NOP
DEC R27
BRNE LOOP3
DEC R26
BRNE LOOP2
DEC R25
BRNE LOOP1
RET