ミニ四駆をラジコンみたいに自由に動かしたい
Arduinoを使ってDCモータを制御したいけどやり方がわからない
ミニ四駆のラジコン化をするためには、DCモータの制御とステアリング機構の設置が不可欠となります。ミニ四駆を自由に操作できたら楽しいですよね。ここでは、Arduino を使ったDCモータを制御するための回路、プログラムを初心者の私が細かく教えます。
Arduinoをはじめて1年の私は今では、携帯を使って無線操作できるまでになっていますので、やってみて困った点、わからなかった点を紹介します。
DCモータを制御するために最低限必要なもの・あると便利なもの
以前紹介した、超基礎的なものは省きますが、DCモータを制御するために必要なものとして、トランジスタやモータドライバが必要になります。今回はトライジスタを使用します。
トランジスタが必要な理由はArduinoでは電流が不足するから(Arduino 出力電流は約20mA)
まずDCモータを回すためには、無負荷時において200mA必要となります。一方Arduinoから供給可能な電流は20mA程度と、モータの必要電流を下回ります。そのため、Arduinoの信号のみではモータは回転しません。
そこで、トランジスタを使用する必要が生じます。トランジスタは図のようにベース・コレクタ・エミッタで構成されております。このベースに微弱電流(Arduinoからの入力)を流すことで、外部電源を用いて、エミッタからコレクタへ電流を流すことができます。(PNP型トランジスタ)
<参考> モータ仕様(FA-130RA-2270)
https://product.mabuchi-motor.co.jp/detail.html?id=9
DCモータを制御するために最低限必要なもの
DCモータを扱う際に最低限必要なものは、下記3点です。基礎的なものについては、下記記事を見てください。
DCモータ
ミニ四駆で使っているDCモータでも構いません。または、スタータキットに入っているDCモータを準備してください
トランジスタ(NPNTransister) PN2222
私はスタートキットに入っていたトランジスタを使用していますが、なんでも問題ありません。ただし、エミッタ、ベース、トランジスタの位置は確認してください。
電池(リード線+端子がついているものがベター)
通常の単3電池(1.5V)でも問題ありません。今回はリチウムイオン電池(4V)を使用しております。端子と接続されているものが扱いやすくよいです。端子の接続方法は別途紹介いたします。
あると便利なもの
電子工作をしていると、電池の端子はどうやって作るのか?ジャンパワイヤを好みの長さで作りたい、等の悩みが出てきます。その際に、端子を自分で作ることができると非常に便利になるので、端子作成用の下記3点を紹介します。
ワイヤーストリッパ
電子工作を行うと、断線が起きたり、微妙な長さのリード線が欲しくなってきます。その際に、被覆をはがす際に非常に便利です。
圧着ペンチ
圧着端子を作成する際に使用します。好みのワイヤ長さにできるため、自由度があり便利です。ラチェット機能があると失敗がなく、おすすめです。
ドュポンコネクタ
ジャンパワイヤを用途に応じて作ることができるため非常に便利です。電池の端子等についても自分で作れるようになります。
DCモータを使った電子回路を作成
Arduinoの端子には、デジタル入出力ピンと(0~13番ピン)を有しています。これらの中には、アナログ出力ピン(3, 5, 6, 9, 10, 11番ピン)があります。Arduinoボードを見ると、ピンの番号に”~”が記載されています。このアナログ出力ピンでは、ON信号のパルス幅を変化させることで、モータの回転数を制御することができます(PWM)。今回は、これらのデジタル出力とアナログ出力を実施するために、3番ピンを使用してみましょう。
実際の回路は写真のようになります。
デジタル出力、アナログ出力のプログラム作成してDCモータを動かす
デジタル出力するためには、LEDでも使いましたが、digitalWrite関数を使います。またアナログ出力するためには、analogWrite関数を使って指定の数値(0~255の値)にて回転数を調整することができます。
digitalWrite関数を使ったプログラム作成
デジタル出力では、信号のON-OFFを調整します。プログラムとしては1秒間隔でOn-OFFを繰り返す下記プログラムを作ってみましょう。先ほどの回路で3番ピンを指定しましたので、信号の出力は3番ピンを設定します。
void setup() { // put your setup code here, to run once: pinMode(3, OUTPUT);//3端子を出力端子として使用 } void loop() { //デジタル入力// digitalWrite(3,HIGH);//3端子に信号ON delay(1000); //1000ms維持 digitalWrite(3,LOW); //3端子に信号OFF delay(1000); //1000ms維持 }
analogWrite関数を使ったプログラム作成
次にアナログ出力のプログラムを追加しましょう。アナログ出力では、0~255の値を指定することができます。ここでは、delay関数を用いて、1秒間隔にて、回転数を1/5増加するプログラムを追加してみます。
int i; //デジタル出力 int j; //アナログ出力 void setup() { // put your setup code here, to run once: pinMode(3, OUTPUT);//3端子を出力端子として使用 } void loop() { //デジタル出力を3回On-OFF繰り返し for (i = 1; i <=3;i++){ digitalWrite(3,HIGH);//3端子に信号ON delay(1000); //1000ms維持 digitalWrite(3,LOW); //3端子に信号OFF delay(1000);//1000ms維持 } //アナログ出力 5分の1ずつ回転数を増加 for (j =0; j <=5;j++){ analogWrite(3,255/5*j);//回転数を5 delay(1000);} analogWrite(3,0); delay(1000); }
この内容で、Arduinoのコンパイル、ボードへの書き込みを実施すると3回On-OFFを繰り返した後、アナログ出力に切り替わり、DCモータの回転数が徐々に増加します。
ミニ四駆に接続するとこんな感じになります。電圧が高いため若干音がすごいです。電池を変えることや、アナログ出力の255の数値を下げることで対応できます。以上で、ミニ四駆の速度調節をすることができます。