以前、こちらの記事でPWM出力とタクトスイッチを使ってLEDの明るさを段階的に制御する方法を解説したのですが、今回は、その応用編として、DCモーターを制御する方法を扱ってみたいと思います。
Arduinoのスケッチ(ソースコード)は、LEDの時とほとんど一緒なのですが、今回はDCモーターを制御するため、MOSFETという電界効果トランジスタを使用します。そのため、回路を改良する必要がありますが、基本的には前回の延長線上にあるため、分かりやすいかと思います。
目次
- 必要なもの
- 回路の組み立て
- プログラムして実行!
- Nゲージの車両を走らせてみよう
- まとめ
1.必要なもの
まずは必要なものを揃えましょう。
- Arduino UNO本体
- DCモーター(マブチモーターやタミヤの楽しい工作シリーズなど)
- MOSFET(IRF520、2SK2232、TK40E06N1等)
- ダイオード
- 固定抵抗器(1kΩ)※帯:茶-黒-赤-金
- ジャンパワイヤ(オス-オス)
- タクトスイッチ
- 「Arduinoをはじめようキット」だと、DCモータ以外のものは全て揃っています。
※上記一覧のリンクはamazon・秋月電子通商へのリンクとなっています。
2.回路の組み立て
回路については、タクトスイッチの部分はLEDの時と一緒ですが、MOSFET及びモーターの接続が異なります。回路は下図を参考に組んでみてください。
ところで、今回使うMOSFETとはどんな部品なのでしょうか。MOSFETは英語の Metal Oxide Semiconductor Field Effect Transistor の略称で、日本語では金属酸化膜半導体・電界効果トランジスタのことです。3つの端子( ゲート:G、ドレイン:D、ソース:S)からなるトランジスタの一種です。
左側からゲート、ドレイン、ソースですが、ゲートに電圧がかかるとドレインとソース間に電流が流れるのですが、ゲートと他の端子の間は絶縁されていて電流が流れないことから、Arduinoに過電流を流すことなく、高い電圧・電流を扱うことができます。モーター制御によく使用されるトランジスタの一種です。なお、「Arduinoをはじめようキット」にはIRF520が含まれていますが、入手できない場合は、2SK2232、TK40E06N1(いずれも東芝セミコンダクター社製)でも代用できます。
タクトスイッチのスイッチングで、デジタル7番ピンを使い、MOSFETの制御には、PWM出力が可能な6番ピンを使用します。注意点としては、回路保護のためにドレイン端子の部分にダイオードを噛ませなければならない点です。
3.プログラムして実行!
では、コードを書いていきましょう。基本的にはLEDの時と一緒で、ちょっと変えている程度です。今回のコードでは、タクトスイッチを押すごとに低速、高速、低速、停止、低速…の順に段階的に回転を制御するようになっています。
// 停止・低速・高速・低速・停止の段階制御
const int MOSFET = 6; // MOSFETが接続されているピン
const int BUTTON = 7; // タクトスイッチが接続されているピン
int val = 0; // 入力ピンの状態
int state = 0; // MOSFETの状態(0ならオフ、1〜5ならオン)
void setup() {
Serial.begin(9600);
pinMode(MOSFET, OUTPUT); // ArduinoにMOSFETが出力であることを伝える
pinMode(BUTTON, INPUT); // BUTTONは入力に設定
}
void loop() {
val = digitalRead(BUTTON); // 入力を読み取りvalに格納
// ボタン押下回数による明るさ定義
if (state == 0) {
analogWrite(MOSFET, 0); // 停止:0%
delay(10);
if (val == 1) {
state++;
Serial.println(state);
delay(500);
}
} else if (state == 1) {
analogWrite(MOSFET, 127); // 低速:50%
delay(10);
if (val == 1) {
state++;
Serial.println(state);
delay(500);
}
} else if (state == 2) {
analogWrite(MOSFET, 255); // 高速:100%
delay(10);
if (val == 1) {
state++;
Serial.println(state);
delay(500);
}
} else if (state == 3) {
analogWrite(MOSFET, 127); // 低速:50%
delay(10);
if (val == 1) {
state = 0;
Serial.println(state);
delay(500);
}
}
}
Arduinoを起動して新規ファイルを作成して、コードを書いていきます。コードを書き終えたら一旦保存して、次いで「マイコンボードに書き込む」をクリックしてコンパイルしましょう。
コンパイルと転送が完了したら、タクトスイッチを押してみてください。うまくモーターの段階的な制御ができたでしょうか?
4.Nゲージの車両を走らせてみよう
モーターを回転させることができたわけですから、何かもっと面白いものを作りたくなりますよね?…では次に、いきなりですがNゲージを動かしてみましょう!!
Nゲージを動かすには、車両(モーター車)と電流を流すためのレールが必要です。Nゲージは国内ブランドとしては、KATOとTOMIXが有名ですが、今回はこの回路との相性の問題でトミーテック製の鉄コレ及び別売の動力ユニットをチョイスしてみました。
トミーテック製の鉄コレシリーズは、ややチープな造りではありますが、こんな車両揃えてくるかー!!というような渋い車両が充実しているのと、安価なので手軽に楽しめるというのがメリットです。
Nゲージを走らせるために必要なもの
- トミーテック製「鉄コレ」の好みの車両、及び適合する動力ユニット
- レール(一例:KATO Nゲージ 曲線線路 R249-45° 4本入 ×2セット)
- 不要なジャンパワイヤ(レールに直接半田付け)
今回は手持ちのKATO製のユニトラック(レール)に手を加えて、ブレッドボードに繋げられるように改造してみました。下図のようにジャンパワイヤをレールに半田付けすればOKです。レールは上記リンクの曲線レール2セットがあれば、円状の無限軌道を組むことができます。後は必要に応じて揃えてください。
準備ができたら、DCモーターを外して、ユニトラックに半田付けしたジャンパワイヤをブレッドボードに繋げてみましょう。
本来、Nゲージを制御する一般的なパワーパックは、通常12v程度まで電圧を上げることができます。しかし、この回路ではArduinoで扱える電圧5vまでしか電圧を上げられないため、高速運転は不可能です。
5.まとめ
本来、モーター制御はLEDとは異なり奥が深く高度なため、今回はとりあえず動けばOKというコンセプトでトライしてみました。でも、最初は動いただけでも感動するものですよね!
ちなみにKATO製、TOMIX製のNゲージのモーター車もノロノロと走らせることは可能でしたが、この回路では十分なパワーを得られず安定した走行はできませんでした。しかし、推奨したトミーテック製(TOMIXの下位ブランド)の鉄コレ車両のモーターは比較的この回路との相性が良いようでよく走りました。
今度電子工作でモーターを扱うときは、KATO製やTOMIX製のモーター車もしっかり走らせることができるような、パワーパックの代わりになるような本格的な回路を組んでみたいと思います!