45,077 total views, 12 views today
以前、レゴテクニックのパーツを利用したメカナムホイール車を作った。
3Dプリンターでレゴ(LEGO)用メカナムホイールを作った
オムニホイールのWi-Fiラジコンカーを3Dプリンターで自作した(ESP32)
スマホで操作できるメカナムホイールのWi-Fiラジコンカーを作った(ESP-WROOM-02)
せっかくメカナムホイールを使っているのだから、キッチリ真横や斜めに移動してほしいところだが、このときは横移動や斜め移動の具合がイマイチだった。
なので、もっとキッチリ真横や斜めに移動できるメカナムホイールのラジコンを作ることにした。
そうして完成したのがこちら↓
目次
動作
リモコン越しに動いている様子
横移動多め
使用パーツ一覧
パーツ | 使用品 |
---|---|
Arduino | Arduino Uno互換機 |
車体 | 透明 ユニバーサルプレートL |
タイヤ | PLAフィラメント TPUフィラメント |
ローテーションサーボ | S35 STD |
サーボマウント | PLAフィラメント |
赤外線 | 受信モジュール リモコン |
バッテリー | Anker PowerCore 5000 |
電池ケース | 単3×4 スイッチ・カバー付 |
ブレッドボード | 4.5×3.5 cm 白 |
ジャンパワイヤ | オス-オス |
Arduino Uno互換機
以前購入したラズベリーパイ用のパーツセットの中に、赤外線受信モジュールとリモコンがあったので、それとArduino Uno互換機を利用する。
ローテーションサーボ
ローテーションサーボは通常のサーボモータと異なり、あらかじめ決められた角度までしか回らない、ということはなく、DCモータのようにずっと回り続けるタイプのモータである。
LEGO用メカナムホイールのとき真横に移動できなかったのは、モータの出力差によってモータごとの回転数に差が生じたためではないかと考え、今回は、タイヤの回転数に差が生じなさそうで、かつ、割りと安価に手に入りそうなローテーションサーボを使用することにした。
なお、タイヤ1つにつきモータ1つ、計4つのモータ必要となるが、サーボモータを使用する場合、必要となるGPIOピンの数がDCモータの場合よりも少なくて済む。
GWSの「S35 STD」というモータが安かったので、それを使うことにした。
メカナムホイール
ホイールについては、例によってThingiverseで良さそうなのを探し、3Dプリンターで出力して使う。
色々と探してみた結果、評判が良さそうな44mm Mecanum Wheel (Small, Solid and Low Cost)を試して見ることにした。
車体
車体には、タミヤの「透明 ユニバーサルプレートL」を使用した。
サーボモータマウントパーツ
そのままでは、サーボモータをユニバーサルプレートに上手く取り付けることができないので、簡単なL字型のマウントパーツを自作した。
自作マウントパーツのデータについては、以前作った自作のスマホケース同様、Thingiversにアップした。
配線
前述の通り、配線はごく単純である。
スケッチ(プログラム)
#include <Servo.h> #include <IRremote.h> const int RECV_PIN = 2; Servo F_R; Servo F_L; Servo B_R; Servo B_L; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver F_R.attach(3); F_L.attach(5); B_R.attach(6); B_L.attach(9); } void loop(){ if (irrecv.decode(&results)) { Serial.println(results.value); receive(); irrecv.resume(); } } void receive() { switch (results.value) { case 16724175: //リモコンボタン:1 DG_UL(); break; case 16718055: //リモコンボタン:2 FW(); break; case 16743045: //リモコンボタン:3 DG_UR(); break; case 16716015: //リモコンボタン:4 SW_L(); break; case 16726215: //リモコンボタン:5 ST(); break; case 16734885: //リモコンボタン:6 SW_R(); break; case 16728765: //リモコンボタン:7 DG_DL(); break; case 16730805: //リモコンボタン:8 BK(); break; case 16732845: //リモコンボタン:9 DG_DR(); break; case 16738455: //リモコンボタン:0 TR(); break; case 16756815: //リモコンボタン:200+ TL(); break; } } void FW() { //前進 Serial.println("forward"); F_R.writeMicroseconds(0); F_L.writeMicroseconds(3000); B_R.writeMicroseconds(0); B_L.writeMicroseconds(3000); } void TR() { //右旋回 Serial.println("turn right"); F_R.writeMicroseconds(3000); F_L.writeMicroseconds(3000); B_R.writeMicroseconds(3000); B_L.writeMicroseconds(3000); } void TL() { //左旋回 Serial.println("turn left"); F_R.writeMicroseconds(0); F_L.writeMicroseconds(0); B_R.writeMicroseconds(0); B_L.writeMicroseconds(0); } void BK() { //後退 Serial.println("back"); F_R.writeMicroseconds(3000); F_L.writeMicroseconds(0); B_R.writeMicroseconds(3000); B_L.writeMicroseconds(0); } void SW_R() { //右移動 Serial.println("side way right"); F_R.writeMicroseconds(3000); F_L.writeMicroseconds(3000); B_R.writeMicroseconds(0); B_L.writeMicroseconds(0); } void SW_L() { //左移動 Serial.println("side way left"); F_R.writeMicroseconds(0); F_L.writeMicroseconds(0); B_R.writeMicroseconds(3000); B_L.writeMicroseconds(3000); } void DG_UR() { //右斜め前方移動 Serial.println("diagonal up right"); F_R.writeMicroseconds(1500); F_L.writeMicroseconds(3000); B_R.writeMicroseconds(0); B_L.writeMicroseconds(1500); } void DG_UL() { //左斜め前方移動 Serial.println("diagonal up left"); F_R.writeMicroseconds(0); F_L.writeMicroseconds(1500); B_R.writeMicroseconds(1500); B_L.writeMicroseconds(3000); } void DG_DR() { //右斜め後方移動 Serial.println("diagonal down right"); F_R.writeMicroseconds(3000); F_L.writeMicroseconds(1500); B_R.writeMicroseconds(1500); B_L.writeMicroseconds(0); } void DG_DL() { //左斜め後方移動 Serial.println("diagonal down left"); F_R.writeMicroseconds(1500); F_L.writeMicroseconds(0); B_R.writeMicroseconds(3000); B_L.writeMicroseconds(1500); } void ST() { //停止 Serial.println("stop"); F_R.writeMicroseconds(1500); F_L.writeMicroseconds(1500); B_R.writeMicroseconds(1500); B_L.writeMicroseconds(1500); }
感想
自作マウントパーツの調整(ネジ穴の位置、大きさ等)に時間がかかったが、その他は割とスムーズにできた。
念願だった真横の移動や斜めの移動ができたので満足した。
次は、Wi-Fi接続でスマホから操作できるようにしたい。
まとめ
- Arduino Uno互換機を使ってメカナムホイールのラジコンカーを作った
- サーボモータ用のマウントパーツを自作した
- 真横や斜めの移動ができて満足した