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