モータドライバを作りArduinoからモータ制御をする
Arduinoを使った簡単工作を通して、初心者の方向けに電子工作の原理や基本を学ぶ連載がスタートします。教えてくれるのは、メディアアートの分野で、また「ちょっと深い仕組み」を解説する書籍の世界で活躍している、伊藤尚未さんです。それでは早速いってみましょう!
目次
①はじめに
こんにちは、伊藤尚未です。今回はArduinoを使って初心者の方でもわかる、カンタンなロボットカーの制作を紹介しようと思います。テーマは、電子工作の入門ロボットとして昔から扱われているライントレースカーにしてみたいと思います。
初めて電子工作に触れる方には「ライントレースカー」はあまり馴染みないかもしれませんが、これは床に描かれた線にそって走るロボットです。多くの場合、左右のタイヤをそれぞれのモータ、ギヤで駆動し、右折、左折をおこないます。前輪(?)はフリーに動くキャスターを使ったものもありますが、ここでは重機などで使われているクローラーを使ってみました。
ちなみに一般的に知られている呼び方の「キャタピラ」は米国キャタピラ社の登録商標のようで、別名でクローラーとかトラックベルトとも呼ばれるようです。履帯、無限軌道という表記もあるようですが、無限軌道と言われると漫画、アニメで出てくるような強そうなイメージです(笑)。
クローラーはいわば一列に並んだ車輪にベルトを巻き、接地面積が車輪よりも多くなることで、悪路も難なく走ることができます。曲がるときには左右それぞれの駆動を緩める、あるいは止めることで右左折しますが、それぞれを逆回転させればその場でクルクルと車体を回転させることもできます。
この「その場でクルクル」は「超信地旋回」というのだそうですが、これも必殺技のようで強そうです(笑)。
もちろん、ここでは大きなものではなく、模型程度のものを作りますが、それでもモータの正転逆転をコントロールしなければいけません。そこで今回は、まずはモータを動かす回路から考えていきたいと思います。
今回の工作で使う部品:
名前、説明 | 部品 |
---|---|
Arduino UNO | |
モータ(FA-130RA) | |
ブレッドボード(400穴) | |
ツインモーターギヤボックス ユニバーサルプレートセット トラック&ホイールセット (すべてタミヤ) |
|
抵抗器(1kΩ 1/4W) | |
ユニバーサル基板 | |
ピンソケット
(分割ロングピンソケットを6Pに分割) |
|
トランジスタ(2SB1259、2SD2081) | |
ジャンパー線、スズめっき線 |
②トランジスタでモータを駆動させる
Arduinoの直接出力では模型用モータを駆動させることはできません。例えばマブチモーターさんのFA-130モータを例にとっても、パッケージには消費電流として500mAという電流値が表示されています。
さまざまな書籍でArduinoを使ってLEDをチカチカさせる回路が紹介いるので初心者の方も見たことはあるかもしれませんが、ここで登場する多くのLEDは20mAのもので、もちろん電流制限抵抗器を直列に接続しています。Arduinoの出力ピンは40mAという最大定格もあるようですので、LEDは光らせることができても、モータを駆動するほどのことはできないことになります。
そこで、トランジスタを使ってモータを制御する方法を考えました。バイポーラトランジスタはベースへの信号入力で大きなコレクタ電流をコントロールすることができます。ArduinoからトランジスタのベースへHigh、Lowで信号を出し、モータをコレクタに接続することでモータを回すことができるわけです。電源もArduinoとモータと分けることができるので、安全でもあります。
使ったトランジスタはNPN型の「2SD2081」で、データシートでは逆起電流対策のためのダイオードが内蔵されている形のものになり、モータ駆動、ソレノイドの制御用のものです。コレクタ電流が10Aですから模型用のモータに使うのは十分すぎるでしょう。
ちなみにブレッドボードで回路を組み、ArduinoのサンプルプログラムでLED点滅させるもの(1秒ON、1秒OFF)で動かしてみるとこうなります。
見やすいようにプーリーを付けてみましたが…動画じゃわかりにくいかもしれません
void setup() {
pinMode(12, OUTPUT);
}
void loop() {
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(2000);
}
シンプルなスイッチングになります
これでモータを回すことはできましたが、このままでは逆転しません。クローラーを使う以上、やはりここは逆転させたいですよね。
③正転逆転を制御するモータドライバの設計
モータの正転逆転は電気を流す方向で制御できます。要は電池を反対向き、つまり電流の方向を入れ替えればいいわけです。
電気の流れる方向を制御できる回路を考え、NPN型とPNP型のトランジスタを組み合わせてこのような回路を作りました。これらのトランジスタにより、入る信号によって図の右から左、あるいは左から右に流れるようになるわけです。
そのためにコントロールする信号としては二つの信号を使います。AとBを使い、AがHigh、BがLowだった場合にはモータは図の右から左に、AとBが反対の場合は左から右に電気が流れることになり、モータを正転逆転できるようになります。
これを具体的に回路図にするとこのようになります。
Arduinoからの出力を2種類のトランジスタで受けますが、ここではPNP型の2SB1259、NPN型の2SD2081を使用します。これらは同じ性能で電流の流れが逆向きになるコンプリメンタリと言われるものです。このベースへは1kΩの抵抗器を通して信号を出します。
例えばAがHighでBがLowだった場合は図の左側の2SD2081、右側の2SB1259がスイッチングONになり、モータへは右から左に電流が流れ、反対の入力の場合は反対に流れます。
AとBの両方がHighまたはLowであれば実質モータには電気が流れず、どちらかがHigh、どちらかがLowだった場合に正転または逆転するというドライバになります。
④基板に組んでみる
実際にユニバーサル基板を使ってこのドライバを作るとこのような形になります。左右のモータがあるので、合計8個のトランジスタの構成となっています。端子部分はピンソケットにしてみました。
ジャンパー線を多用しているのは工作がしやすいようにです。いや、しやすいかどうかはそれぞれですが、ジャンパー線も部品のひとつとして組み立てることで、ハンダ面での配線で「あれ?」と思うことを少なくさせるという配慮ですが…この記事を読むような方には不要ですかね?
⑤Arduinoに接続しコントロールテストをおこなう
実際にモータを2個つなぎ、Arduinoのスケッチも書き換えて試してみるとこのようになりました。これで左右のモータの正転逆転をコントロールできるようになります。
わかりにくいですが、ちゃんと左右正転逆転しています
void setup() {
pinMode(9, OUTPUT); // A
pinMode(10, OUTPUT); // B
pinMode(11, OUTPUT); // C
pinMode(12, OUTPUT); // D
}
void loop() {
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
delay(500);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
delay(2000);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
delay(500);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
delay(2000);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
delay(2000);
}
これもスイッチングの羅列です
⑥ギヤボックスと車体の組み立て
さて、次は車体を組み立てていきますが、ここはタミヤさんの部材に頼りましょう。我が静岡が誇る世界的なメーカーです。今回はツインモーターギヤーボックス、ユニバーサルプレート、トラック&ホイールセットを使って組み立てます。
非常に洗練された部品と行き届いた説明書で組み立ては安定したものですが、何といっても自分の視力が…近くの細かいものが見えにくくなっておりまして…(汗)。
ということで、次回は光センサを組み立て、床の線を読み取れるようにしていきます。お楽しみに!
今回の連載の流れ
第1回:モータドライバを作りArduinoからモータ制御をする(今回)
第2回:光センサを組み立てて車体へ取り付ける
第3回:センサ、ドライバ、マイコンを車体に組み込みライントレーサーとして仕上げる
第4回:ライントレース機能を拡張、改造し、センサー部分とプログラムを変更する