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