センサは前回と同じPSD測距センサです。前回は一つだけで手前にものがあったら避ける動作をさせましたが、今回は手前にあるものに向かわせる動作を左右に2つのPSDセンサを使って、やってみようと思います。
まずは、タミヤのROBO CRAFTシリーズのボクシングロボット(Boxing Fighter)を開梱。
説明書に従って組み立て・・・の前に、いつものDRV8830 I2Cモータドライバをモータに取り付けます。ロボットのボディ内部に余裕があるので、モータドライバ基板は絶縁テープで巻いて、ボディ内に入れてしまいます。
モータにノイズ用のコンデンサとドライバへの配線をはんだづけしてギアボックスに取り付け。
あとは、組み立て。本来リモコンと繋ぐ線を出す切り込みから、電源、GND、I2CのSDA、SCLの4本の線を取り出しています。
形ができたところで、前回の昆虫ロボットからIchigoJamを取り外して、
ボクシングロボットの背中にIchigoJamと単3×2本用電池ボックスを取り付けました。
それから、頭の上にPSD測距センサを左右斜めに向けて取り付け。
コネクタを差すために簡単なドータボード(シールド)を準備しました。
できあがり。
この時点ではPSDセンサは縦置きにしていますが、実際に動かしてみて、調整した結果、最終的には横向きに取り付けることになりました。
プログラムを入れて実際に動かしてみたところ、センサは横向きであまり左右に斜めにしない方向で落ち着きました。
ボクシングロボット対博士。
動かしてみたところです。ロボットの左側の足が右側に比べて接地が悪く(短い?)、左方向へはすぐに方向転換できるのですが、右方向へ向くのに時間がかかってしまいます。
以下、ソースです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 clt:clv:A=#64:B=#65:goto 610 | |
110 if C<0 E=1 else E=2 | |
120 if C=0 E=0 | |
130 E=E+(ABS(C)-5)<<2 | |
140 if D<0 F=1 else F=2 | |
150 if D=0 F=0 | |
160 F=F+(ABS(D)-5)<<2 | |
170 poke #700, 0, E, F | |
180 R=i2cw(A, #700, 1, #701, 1) | |
190 R=i2cw(B, #700, 1, #702, 1) | |
200 return | |
300 ' stop | |
310 C=0:D=0:gosub 110 | |
320 return | |
400 ' right punch to left | |
410 C=0:D=-50:gosub 110 | |
420 return | |
460 C=50:D=0:gosub 110 | |
470 return | |
510 C=50:D=-50:gosub 110 | |
520 return | |
600 ' main | |
610 P=ANA(0):Q=ANA(2) | |
620 ?P;",";Q | |
640 if P>=300 and Q<300 gosub 410 | |
650 if P<300 and Q>=300 gosub 460 | |
660 if P>300 and Q>=300 gosub 510 | |
670 if P<300 and Q<300 gosub 310 | |
680 goto 610 | |
1000 ' 以下コメントです。入力不要。。 | |
1001 ' タミヤのボクシングロボットをDRV8830 I2Cモータドライバと | |
1002 ' PSD測距センサで動かす。 | |
1110 ' 変数説明: | |
1120 ' A: 左モータ用DRV8830のI2Cアドレス | |
1130 ' B: 右モータ用DRV8830のI2Cアドレス | |
1140 ' C: 左モータのスピード | |
1150 ' D: 右モータのスピード | |
1160 ' P: 左PSD測距センサのアナログ値 | |
1170 ' Q: 右PSD測距センサのアナログ値 | |
2000 ' プログラムブロック説明 | |
2010 ' 10 初期化して、メイン処理へ | |
2020 ' 110~200 モータのスピード設定 | |
2040 ' 410~420 右パンチを出して、左方向へ進む | |
2050 ' 460~470 左パンチを出して、右方向へ進む | |
2060 ' 510~520 左右のパンチで前進 | |
2070 ' 600~680 メイン処理。PSD測距センサの値で動作分け。 |
0 件のコメント:
コメントを投稿