小型の二輪ロボットを作る:完成編
はじめに
今回はこれまで作ってきた二輪ロボットを、ひとまず動くところまで完成させました。プログラムには改良の余地があるのですが、機体と回路は一旦完成と言っていいでしょう。
完成に際して、この機体にコマゴマ一号と名付けました。小間使いの小間+駒です。私は小型のロボットが好きなので、あわよくばシリーズ化させようと思っています。
実際、無線で操作できる駒のような機体で、場合によっては人間ではなく他のマイコンから操作することもできます。
▼完成した機体。配線がごちゃごちゃしているので、まとめておいた方がよさそうです。
機体の調整
当初の予定から電池が一本増えたので、追加で装着しました。余っていたアクリル板と金具で、いい感じに固定しています。
▼背面の様子。車の後ろについている、使うのかどうかわからないスペアのタイヤみたいな位置についています。
▼アクリル板のほかに、タミヤの電池ボックスとユニバーサル金具を使っています。
今回は初めてスイッチで電源のオンオフを切り替えられるようにしています。マイコンに電源を供給している角型電池の+側に繋がっています。今まではコネクタを抜き差ししていたのですが、スイッチだと楽ですね。
本で知ったのですが、スイッチにも定格があるので注意が必要です。ものによっては大きな電流を流せないです。今回は「6A125V」と書いていたものを使っています。計算では1Aも使うかどうか程度だったので、6Aもあれば余裕です。
角型電池のボックスから伸びている電線が短かったので、電線の延長にも初めて挑戦してみました。電線どうしをはんだ付けして、収縮チューブで覆っています。
▼電線のはんだ付けについて、こちらでちゃんと紹介されていました。
電線のはんだ付け | はんだ付けテクニックを学ぼう! | [HAKKO]
プログラムの調整
プログラムはブレッドボードで実験したときのものをベースに、動かしながら調整しました。
当初は、超音波センサーが15cm以内に障害物があることを検知したら停止するというプログラムを書いていました。しかし、停止するだけだとずっと障害物の前で停止して動かなかったので、後進するようにプログラムを変更しました。
▼障害物を検知して、停止したままにならないように後進します。
これは超音波センサーの特性によるものなのですが、障害物に対して斜めに差し掛かると検知せずに衝突することがあります。超音波センサーの正面にあるときは検知するのですが、範囲が狭いので高さによっては検知しないこともあります。
▼斜めに差し掛かると、一旦障害物の正面に向くまで回転して、後進します。
また、前進するとき、回転するとき、後進するときで速度を変更しました。前進するときは速くていいのですが、他の場合は手動で位置を調整するのが難しかったからです。
▼実際のプログラム
動作確認(手動操作)
XBee経由で、パソコンから無線で操作しています。MPU6050関数のdelay(333)のせいで、この333ミリ秒の間に命令を送ると伝わらないのですが、特に問題なさそうなのでそのままにしました。
▼実際の動作
▼XBee経由で送られてきたデータ。こんな感じのデータが続いていました。
89cm AcX = -956 | AcY = 620 | AcZ = 19348 | Tmp = 32.29 | GyX = 372 | GyY = -275 | GyZ = -8045
39cm AcX = 760 | AcY = 200 | AcZ = 16100 | Tmp = 32.34 | GyX = 114 | GyY = -479 | GyZ = -8258
43cm AcX = -884 | AcY = 332 | AcZ = 17792 | Tmp = 32.29 | GyX = 261 | GyY = -595 | GyZ = -7492
50cm AcX = -1588 | AcY = -392 | AcZ = 17840 | Tmp = 32.20 | GyX = 753 | GyY = -803 | GyZ = -7593
13cm stop
DANGER!!!
go back
stop
AcX = -732 | AcY = 1124 | AcZ = 17432 | Tmp = 32.25 | GyX = -83 | GyY = -1130 | GyZ = 46
24cm AcX = 212 | AcY = 468 | AcZ = 17168 | Tmp = 32.29 | GyX = 16 | GyY = -173 | GyZ = 126
24cm AcX = 192 | AcY = 356 | AcZ = 17160 | Tmp = 32.34 | GyX = 97 | GyY = -153 | GyZ = 92
動作確認(自動走行)
手動での操作ではなくて、自動走行もさせたくなったので、プログラムを少し変えて走らせてみました。障害物を検知すると、ちょっと後進して回転します。
▼自動走行のプログラム
▼実際の動作
▼XBee経由で送られてきたデータ。後進して、停止して、回転しています。動画で見返すと、turn rightではなくてturn leftですね。
AcX = -1220 | AcY = -252 | AcZ = 16696 | Tmp = 31.82 | GyX = -149 | GyY = 297 | GyZ = 6656
9cm stop
DANGER!!!
go back
stop
turn right
go straight
AcX = -1840 | AcY = -2000 | AcZ = 15472 | Tmp = 32.01 | GyX = -284 | GyY = -140 | GyZ = 6467
42cm go straight
AcX = 400 | AcY = 1904 | AcZ = 16060 | Tmp = 31.97 | GyX = -570 | GyY = -889 | GyZ = 33
21cm go straight
AcX = -2492 | AcY = 904 | AcZ = 16936 | Tmp = 32.01 | GyX = 376 | GyY = -836 | GyZ = -700
26cm go straight
最後に
今回でコマゴマ一号は一旦完成です。プログラム的には改良の余地があります。というのも、実際に走らせているときに、加速度センサーを使えそうな場面があったのです。
家の中を走らせているときに気づいたのですが、タイヤの形状のせいで、棒状のものに引っかかるとそれを軸に回転し続けます。こうなると自力では抜け出せないのですが、加速度センサーの値で回転し続けていることに気づけるのではないかと考えています。
その他にも、プログラム通りに走っているかどうかの判断に使えるかもしれません。今後は加速度センサーのデータを集めながら、プログラムを調整していこうと思います。
▼回転し続けているときの様子。ちょっと面白い。