AVRでロボットをつくる(その9-接触スイッチ取り付けの巻き)
さて、いよいよ制御関係を詰めていきたいと思います。接触スイッチを前面に取り付けます。(電子部品屋さんで1個100円でした。)入力はマイコンからの5V出力を1KΩの抵抗を介してスイッチとマイコンに分岐します。スイッチの他端はGNDに落とします。障害物に接触したら、後進し、2秒間回転して進行方向を変えてまた前進するというプログラムを作成しました。---------------------------------------------------.include "m168def.inc".org 0x00 jmp reset reset: ldi r16,low(ramend) out spl,r16 ldi r16,high(ramend) out sph,r16 ldi r16,0b00000000 out ddrb,r16 ldi r16,0b11111111 out ddrc,r16main: ldi r16,0b00101110 out portc,r16 main01: in r16,pinb cpi r16,0b01111111 breq backandturn rjmp mainbackandturn: ldi r16,0b00000000 out portc,r16 rcall delay1s ldi r16,0b00110101 out portc,r16 rcall delay1s rcall delay1s ldi r16,0b00101101 out portc,r16 rcall delay1s rcall delay1s rcall delay1s jmp main(この後にディレイのソースコードが続くのですが省略しています。)---------------------------------------------------さてうまく動くのか?動きはほぼ意図道理ですね。進行方向を変えるつもりが回転しておなじ向きになってしまうのは回転時間を変更すればなんとかなりそうです。あと、吸引用のファンモータが付いていないのは、このファンモータが介在することによってノイズが発生し、せっしょくしていないにもかかわらずスイッチが入るためです。ファンモータに対してもノイズ対策が必要みたいですね。