でんでんむし

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

<<