でんでんむし
Osamu Tamura @ Recursion Co., Ltd.
1. 概要
タミヤ模型の「かたつむりライントレーサー工作セット」を改造しました。オリジナルでは1個のラインセンサで左右のモーターを切り替えるのみですが、ForCy-AVR を搭載し、左右それぞれのモーターを正逆転制御するとともに、3個のラインセンサで高度な状況判断?を可能としました。逆進、回転、全速前進など目玉を振り回しながらの動きが楽しめます。IPAX2006 で展示しました。
2. 回路
モータードライブにはそれぞれにトランジスタ4つのブリッジを組みました。2SC1815, 2SA1015 などで作ってください。3V電源なのでトランジスタでの電圧降下を抑えるため、ベース電流は多めに流します。ここでは 100Ω のベース抵抗経由で AVR の I/O ポートにつなぎました。8個のトランジスタ制御にそのまま I/O の 8bit を占有しています。
ラインセンサには、「レンズ付き反射形フォトリフレクター」 GP2S05 を3個、並列にしました。フォトトランジスタのエミッタ、コレクタどうしをすべてつなぎ、コレクタ抵抗 10KΩ を共有します。LED 側は抵抗 220Ω 経由で AVR の I/O ポートにつなぎます。計測するセンサの LED のみ発光し、そのときのコレクタレベルを読み取ります。ラインに銀紙テープを使ったので反射の有無が明瞭になり、A/D 変換せずともデジタルで読み取れました。
3. プログラム
オリジナルと異なり、同時に両モータを回す時間が長いので 2/3 の時間だけ ON にして節電します。ラインに左右いずれかのセンサがかかっているときは方向修正、完全にはずれたときは探索モードとなるようプログラムしました。ラインは \100 ショップで買った緑の工作用紙に銀ピカテープを貼りました。
/* ----------------------------- かたつむり ----------------------------- */ 0x28 =sfr 0x26 sfr 8 & { 0 } { 1 } ifelse :bittest // フォトリフレクタ発光&反射検出 ;R ;C ;L clk 3 & { 3 { 4 bittest =C } case 2 { 2 bittest =L } case 1 { 1 bittest =R } case // 0 bittest } switch . 0 R { 4 | } if C { 2 | } if L { 1 | } if 1 << :sensor // ライン検査 ;current dup =current 0x25 =sfr :motor // モーター回転制御 ~ 4 << 0x0f | 0x2b =sfr :led // LED 表示(ライントレース状況) ;line ;search ;on on { on -- =on current } { 2 =on 0x55 } ifelse 0x25 =sfr // 節電( duty 67% でモーター駆動) sensor line == { . return } if =line line led // R %d C %d L %d "\r\n" %s search { C // 探索モードでライン中央に復帰 { 0 =search //'f' %c // 走行モード移行 0x33 motor // 全速前進 } if } { C { R ! L ! && // 走行モードでライン中央 { 0x33 motor // 全速前進 } if } { R L | // 走行モードでラインに片かかり { 0 R { . 0x35 } if // 方向修正 L { . 0x53 } if } { 1 =search //'s' %c // 走行モードでラインはずれ "\x3c\xc3\x5c\xc5" clk 3 & @s // 探索モード移行。ランダム後方旋回 } ifelse motor } ifelse } ifelse :intclk 0x55 motor 0xff 0x24 =sfr // PB0-7 を出力 0 0x28 =sfr 0xf7 0x27 =sfr // PC0-2 を出力 0 =on 0xf =line 1 =search { intclk 0 } interrupt @c . 0x55 motor :mainリスト1.かたつむりのプログラム
簡単な制御ですが、これで結構うまくライン上をうろうろします。たまに探索モードでラインにかからず旋回が止まらなくなります。探索モード移行時の制御にもう一工夫必要なようです。アルカリ電池(単三2本)で1時間半ぐらい動きます。
22 May. 2006