携帯でラジコン操作できるものを作ってみたい(無線化)。
DCモータを使って自由に動く車を作りたい
自由研究用に何か子供にやらせたい
こんなことをやりたいと思っている人に、携帯とBlynkを使って動く戦車を作るために最低限必要な知識と部品を説明します。この記事を見ることで、あなたは0から携帯で操作できるラジコン戦車を作ることができます。
わたしも、まったくの知識のない0から電子工作をはじめて、携帯でPCと切り離して動くものができたときは非常にうれしい気分になりました。今回は戦車が携帯で動くところまでを紹介します。
携帯でArduino(ESP32)を使って戦車を作るために必要な知識・部品を紹介
ラジコン操作をするためには、前進・後退・右折・左折が必要になります。そのため、モータ反転などの制御が必要になります。このモータを制御するために、モータドライバと呼ばれるものが必要になりますので、ここではモータドライバについて説明します。
モータドライバとは
Arduinoの信号をDCモータに接続すると、DCモータは動くでしょうか?結果は動きません。これは、モータを動かすために必要な電流は無負荷時において0.2A程度であるのに対して、Arduinoから供給できる電流は20mA程度であるからです。
ここでモータドライバが必要となります。外部電源とモータドライバを使うことで、比較的高い電流を流すことができ、さらに、Arduinoからの信号のやり取りのみでモータの正転・反転操作することができます。
詳しく説明すると、モータドライバを構成するHブリッジ回路図はこのような4つのパターンが考えられます。この回路のスイッチをArduinoの信号によON-OFFすることで、モータの正転・逆転を行っております。
実際にモータドライバを使うことで、理解が深まりますので、使ってみましょう。
携帯でArduinoを使って戦車を動かすために最低限必要なもの
ESP32 (Arduino UNOでも可)
Arduino Unoでも問題ありませんが、WiFiモジュールが必要となるため、ESP32のほうがべんりかなと個人的には思っています。
モータドライバ(DRV8835)
モータドライバには、DRV8835を使用しました。ESP32を使用する場合、ロジック電圧が3.3Vになるため、ロジック電源が2V~7VのDRV8835を選択しました。ESP32ではロジック電圧3.3VとArduinoと比較して小さいため、モータドライバを選定する際には、ロジック電源の確認が必要です。
ブレッドボード・ジャンパ線・セラミックコンデンサ
スタートキットで購入すれば、安価で基本的なものは購入できます。Arduinoを始める際に、これである程度遊べるかと思います。
タミヤ ツインモーターギヤボックス
比較的安価で、2つのモータを使用しており、正転・反転など自由に操作できます。また、下記2点と合わせて1500円程度で戦車がを作ることができます。
タミヤ トラック&ホイールセット
上記ギヤボックスとセットで購入すことをお勧めします。戦車を作るには必須です。
タミヤ ユニバーサルプレート 2枚セット
タミヤのまわし者ではないのですが、安価で自由度のあるものを製作するのには、これら3点の部品があることで、だいぶいろいろなことができるようになると思います。
上記部品を集めたら、実際に制作してみましょう。
タミヤのユニバーサルプレートを使った戦車の製作
ツインモータボックスの製作
タミヤの説明書にある通り、ツインモータボックスの製作をしてください。今回使用するものは、低速ギヤ比203:1のCタイプとしてください。おそらく、A, Bタイプだと、右・左の車輪が同期して同時に動くため、Cタイプでないと、右折・左折ができないと思います。
ギヤボックスの製作完了品はこちらになります。右側のギヤを回すと、右側のみの車軸が回転することを確認できます。(左側の車軸は回らない)
モータのと接続されている、ジャンパ線はブレッドボードに接続するため、オスタイプにしています。
ArduinoとBlynkで戦車を動かすための組み立て
ギヤボックスとができたら、ユニバーサルプレート上に配置します。配置したい位置を決めたら、固定ピンを使ってギヤボックスを固定しましょう。
(わたしのものはM3×50mmのボルトが取り付けられていますが、無視してください)
固定するとこんな感じになります。次に、車輪を固定していきます。車軸を固定するためのものを取り付けます。
取り付けると表面と裏面はこんな感じになります。
取り付けが終わるとこんな感じになります。ギヤ付きタイヤを取り付けましょう。
次に前方の車軸を取り付けるため、ユニバーサルプレートセットに入っているホルダーを取り付けます。両側取り付けるとこうなります。今回下からピンを指している理由は、このユニバーサルプレート上にブレッドボードを固定したいため、なるべく平らな面が残るように配置しています。車軸なども下にしましたが、上でも問題ありません。
車軸をつけるとこんな感じになってやっと戦車らしくなってきました。車軸とかはどこに配置しても問題ないので自由にやってみてください。
ちょっと戦車用のキャタピラを片側に取り付けます。雰囲気が出てきました。キャタピラはある程度張っていれば問題なく動きますが、緩んでいた場合、車軸の位置を調整してください。
ブレッドボードをのせて、戦車用の回路作成
前方側にブレッドボードをのせて、回路作成を行いましょう。ジャンパー線の長さの調整など必要になると思いますので、まずは、載せるだけでOKです。ここにモータドライバをのせましょう。
次にESP32(またはArduino)を配置しましょう。
モータドライバ(DRV8835)のピン配置は下記サイトにて確認できます。
https://www.pololu.com/product/2135/
まず、モータ2つとモータドライバを接続します。プラスマイナスは動作確認後でよいです。
次に、ESP32とモータドライバを接続します。モータドライバのVCCにESP32の5番端子をつなぎます。このようにセッティングしてください。(正転・逆転など異なっていた場合は、後でワイヤを差し替えてください。)
次に、ESP32のGNDとモータドライバのGNDを接続してください。
次にノイズ対策として、セラミックコンデンサ(104pF)を接続します。
最後に電池とモータドライバのVINとGNDに接続します。電池には、オス-オスのジャンパ線でつないています。
回路はこれで完成です。コンパクトにまとまったつもりです。
BlynkとArduinoで戦車を動かすためのプログラム作成
携帯とWi-Fiにて接続可能なBlynkの設定については以前の投稿で記載したので、そちらをご覧ください。
今回するプログラムでは、No5, 16, 17, 18, 19の端子を用いてモータドライバを動かして言います。そのためプログラムはこれらの設定でモータドライバのOn-OFFを調整しています。プログラムは下記のようになります。
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#define ENABLE 5
char auth[] = "YOUR AUTH";
char ssid[] = "YOUR ssid";
char pass[] = "Your PASS";
const int DIRA = 17;
const int DIRB = 16;
const int DIRC = 19;
const int DIRD = 18;
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
pinMode(ENABLE,OUTPUT);
pinMode(DIRA, OUTPUT); //
pinMode(DIRB, OUTPUT); //
pinMode(DIRC, OUTPUT); //
pinMode(DIRD, OUTPUT); //
}
void loop()
{
Blynk.run();
}
BLYNK_WRITE(V3) //V3(前進)という関数を設定
{
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,HIGH); //one way
digitalWrite(DIRD,LOW);
Serial.println("forward");
}
BLYNK_WRITE(V4) //V4(後退)という関数を設定
{
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,HIGH);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,HIGH);
Serial.println("backward");
}
BLYNK_WRITE(V5) //V5(停止)という関数を設定
{
digitalWrite(ENABLE,LOW); //
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,LOW);
Serial.println("STOP");
}
BLYNK_WRITE(V6) //V6(左折)という関数を設定
{
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,LOW);
digitalWrite(DIRD,LOW);
Serial.println("LEFT");
}
BLYNK_WRITE(V7) //V7(右折)という関数を設定
{
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
digitalWrite(DIRC,HIGH);
digitalWrite(DIRD,LOW);
Serial.println("RIGHT");
}
BlynkにてLEDをOn-OFFする際には、信号のON-OFFをBlynkのボタンで制御しました。Blynkではこのボタンと関数を対応させることができます。今回は例えば、V3という関数を設定しています。Blynkで設定したボタンにV3を設定し、このボタンを押すと、V3の動作つまり前進する(2つのモータが動く)ということが行われます。
携帯のBlynkとArduinoで戦車を動かしてみた
実際に動かした動画がこんな感じになります。これから、これに、超音波センサとサーボモータを取り付けてみたいと思います。