できること

第13回 Arduinoでモーターを制御する!(その3)。自作ラジコンカーに挑戦!サーボモーターでステアリング実装。

2014-12-04 19.47.10

第12回でモータードライバの使い方について学びました。今回はモータードライバのさらに詳しい使い方と、実際にモータードライバを使った簡単な自作ラジコンカーを作っていきたいと思います。

簡易百葉箱の作成のときの流れのように、ラジコンカーの仕様を決めて、実際に制作に取りかかっていきたいと思います。

今回の電子工作レシピ

完成までの時間目安:90分
必要なパーツ

 

ラジコンカーの構成

本格的なラジコンカーモータードライバを使った例は、以前の記事「ラジコンバギーに超スロー走行とブレーキ機能をプラス! Zigbeeとモータードライバを組み合わせて、市販のラジコンをリアルな走行に改造しよう」に紹介されていますが、本記事ではラジコンカーの基本部分から自作をして、電子回路部分の他に、ステアリングやエンジンなどの動きの部分についても勉強しながら進めていきます。

ラジコンカーの構成

図1:ラジコンカーの構成

ラジコンカーの構成を主要な機能で分類すると大まかに図1のように分けることができます。逆に、この構成を満たせばラジコンカーと言える、ということですね。
「ラジコンバギーに超スロー走行とブレーキ機能をプラス! Zigbeeとモータードライバを組み合わせて、市販のラジコンをリアルな走行に改造しよう」の紹介記事では、このラジコンカーのステアリングやステアリング部分は市販の製品を利用して、エンジン部分やコントローラーを実装することでラジコンカーに仕上げています。
本記事では、すべての部分についてその仕組みやカスタマイズをするにはどうしたらよいかを手を動かしながら考えてみたいと思います。

ラジコンカーの仕様を決める

手を動かす前に、どのようなラジコンカー作るかということで、大まかな仕様を決めましょう。ざっと仕様を考えて見ると…

  1. 基本動作は前進・後退、ステアリングを実装
  2. ボディは手軽に組めるようにしたい
  3. できるだけコンパクト化を図りたい
  4. コントローラーはできれば無線化

という感じでしょうか。では、次に実現するにはどのような技術があるか簡単に調べてみると…

  1. 基本動作は前進・後退、ステアリングを実装
    →前進・後退するためのモーターとステアリング用のモーターの2つ必要です。ステアリング用のモーターはサーボモーターを利用したほうが良いようです。
  2. ボディは手軽に組めるようにしたい
    →LEGOブロックでいつでも作り変えたりするようにするのが便利なようです。
  3. できるだけコンパクト化を図りたい
    →現在使っているArduino UNO自体がやや大きいので、他のArduinoを使ってみるのが良いようです。さらに電池も小型化できないか考えましょう。
  4. コントローラーはできれば無線化
    →赤外線での通信や、XBEEという無線モジュールなどを利用できそうですが、ちょっと難易度が高そうなので、できれば実装する方向で進めてみます。

という感じになりそうですね。今回のラジコンカーの実装は、新しく勉強することがたくさん出てきて盛りだくさんになりそうですね(汗)。一つひとつじっくりと取り組んでみたいと思います。

 

モーター回路を設計する

さっそく取り掛かってみましょう。まず「1.仕様基本動作は前進・後退、ステアリングの実装」について、ラジコンカーの心臓部分となる回路を設計します。

モータードライバを使って前進・後退する
モーターの前進・後退については、第12回Arduinoでモーターを制御する!(その2)の回で使った回路を利用します。

DCモーターの回路

図2:DCモーターの回路

図2の回路(第12回 参照)では、Arduinoの9番10番から交互に出力することで回転・逆回転をすることができます。ラジコンカーの前進・後退についてはこの回路をそのまま利用すれば実現が可能です。

 

ステアリングの実現

ラジコンを左右に方向を変えるためのステアリングの実装を考えてみます。
これまでのようにDCモーターを利用すると考えたときに、右に30度ハンドルを切るというような処理をできるでしょうか?瞬間的にモーターを回して30度だけモーターを動かせば・・・と考えてみても、ちょっと実現が難しそうですね。そこで登場するのがサーボモーターです。

 

サーボモーターって何?

サーボモーターは、これまで利用してきたモーターに角度などの制御する回路が組み込まれたモーターです。

サーボモーター

写真1:サーボモーター

今回利用するサーボモーターは0度から180度までモーターを制御することができます。
さっそくサーボモーターを動かす回路を作成してみましょう。Arduinoでサーボモーターを利用する場合、Arduinoに予めサーボモーターを利用するための「ライブラリ」(処理が一式まとまったプログラム郡)が用意されています。このサーボライブラリを利用してサーボモーターを制御します。

 

Arduinoでサーボモーターを制御

写真2:Arduinoでサーボモーターを制御

サーボモーター用Arduino回路

図3:サーボモーター用Arduino回路

//***********************************************************
// サーボモーターを動かすプログラム
//***********************************************************
#include <Servo.h>  //サーボモーター用ライブラリを読み込み
Servo myservo; //サーボ用のオブジェクトを作成
int val; //サーボの角度を格納するための変数
void setup()
{
myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
}
void loop()
{
val = 0;
myservo.write(val); //サーボを動かす(0度)
delay(1500);
val = 90;
myservo.write(val); //サーボを動かす(90度)
delay(1500);
}

ステアリングの制御ができたら、駆動部分の回路と一緒にしてみます。
サーボをデジタル11番に、DCモーターの制御をデジタル9,10番に割り当ててプログラムを作成してみました。

サーボモーターとDCモーター用Arduino回路

図4:サーボモーターとDCモーター用Arduino回路

 

 #include <Servo.h>  //サーボモーター用ライブラリを読み込み
Servo myservo; //サーボ用のオブジェクトを作成
int val; //サーボの角度を格納するための変数
void setup()
{
myservo.attach(11); //デジタル11番ピンをサーボの角度命令出力ピンとして設定
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
val = 0;
myservo.write(val);
delay(1500);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
val = 45;
myservo.write(val);
delay(1500);
}

今回は、delay(1500)で指定したように1.5秒ごとにステアリングと駆動部分が動くプログラムにしてみます。次回はコントローラーからの入力に応じて制御できるようにしましょう。

ステアリング部分を作ってみる

回路ができ、サーボモーターでモーターの角度制御ができるようになりましたので、ラジコンカーのステアリング部分を作成してみます。
「3Dプリンターを使って製品のようなかっこいいラジコンカーを作ってやるぜ!」と言いたいところですが、今の段階ではハードルが高すぎますね。ステアリングの機構をどうやって作ったらよいのか考えながら、手を動かしながら試行錯誤をしたいと思いますので、「2.ボディは手軽に組めるようにしたい」を満たすために、今回はLEGOブロックを使ってラジコンカーを作ってみたいと思います。

LEGOでステアリングを作成する際に、「LEGO ステアリング」で検索すると、様々な方法でステアリングの実装方法が出てきます。今回はコンパクトにしたいので、このような形でステアリングを作ってみました。

ステアリングの機構

写真2:ステアリングの機構

ステアリング部分(左:裏面 / 右:タイヤをはずした状態)

写真3:ステアリング部分(左:裏面 / 右:タイヤをはずした状態)

前進・後退の駆動部分を作ってみる

ステアリング部分がとりあえずできたので、次に駆動部分を作ってみます。こちらはDCモーターですが、LEGOのギアと接続させるために、 ミニ四駆用のピニオンギアを使ってモーターとLEGOのギアを自作する方法が紹介されていましたので、今回はこれを使いたいと思います。
LEGO用の専用モーターを持っている方は、それを利用しても良いと思います。今後モーターも小さいものを利用したいので、今後もできる限り工夫していきましょう!

ピニオンギアをLEGOのギアにはめ込む

写真4:ピニオンギアをLEGOのギアにはめ込む

モーターと駆動部分は、今回そのまま接続できるようにしました。とりあえず動くものを作成したいので、モーターの固定もゴムを使っています(笑)。
色々調べてみると、変速機構を持たせたり、ギア比率を変えて速度を優先したりトルクを出すようにしたりと色々工夫ができるみたいですので、自分なりのカスタマイズをして下さい!

駆動部分はシンプルに。

写真5:駆動部分はシンプルに。

では、ステアリング部分と駆動部分を合体させてみます。

合体させてみました。

写真6:合体させてみました。

Arduinoを本体に載せてみる

写真7:Arduinoを本体に載せてみる

Arduinoをそのまま載せたらなんかそれっぽい感じに!でもこれだとモーターの電池や回路のブレッドボードが載りません…

回路とボディができたら実際にテストして動かしてみます。

回路をテスト

写真8:回路をテスト

 

ステアリングと駆動部分がきちんと動いていますね。これでとりあえずラジコンカーの基本部分ができました。せっかくだから、このまま頑張ってボディにArduino等を載せてみます。

一式載せてみる

写真9:一式載せてみる

なんかむき出しなのがかっこいい!けどちょっとごてっとしています…

無理矢理ボディに全部載せてみましたがやはりちょっとむき出しすぎるし、ボディに対してArduinoなどが大きく重くなってしまっていますね。さらにArduinoの電源を取る為に9V電池を接続したら載せる場所がなくなってしまいます…。軽量化は必須ですね。

 

まとめ

次回以降はラジコンのコントローラー部分を作成して、コントローラーの入力に応じてモーターを操作できるようにしてみたいと思います。また、このままだとやはりArduinoやブレッドボードがちょっと大きく重くなってしまうので、Arduino Pro Miniなどの小さいサイズのArduinoを使ってみたいと思います。

Arduino UNOとArduino Pro Mini(互換ボード)

写真10:Arduino UNOとArduino Pro Mini(互換ボード)

アバター画像

電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。


Arduino互換機(M5Stick-C)とセンサを使った衝突回避機能付きリモコンカーをつくろう!