前回のArduinoライントレースロボット制作の続きです。
今回は、モーター制御とマイコンとモーターの電源の回路を作ります。
- Arduino NANO(互換品)
- ユニバーサル基板
- モータードライバDRV8835
- 5V昇圧回路
- 電池ボックス(単4×2本)
- 単4乾電池x2本
- XHコネクタ
- トグルスイッチ
- タクトスイッチ
- M3ボルト・ナット
- 六角スペーサー
電源
マイコンの電源とモーターの電源を分けるつもりでいましたが、重さとスペースの関係で、単4乾電池x2本で何とかすべく考えます。
Arduinoの電源
Arduino NANOの動作電圧は5Vです。そして、電源の供給方法は3種類あります。
- USB電源・・・5V
※ NANOでは、mini-B USBポートです。 - VIN(30)ピン・・・7~12V
- 5V(27)ピン・・・5V(ただし、5V安定化電源)
NANOには、DCプラグがありません。
モーター電源
130モーターの適正電圧は3Vです。Arduinoのデジタルピンは5Vですので、電圧は問題ありません。問題は電流で、消費電流は450mAとなっており、始動時にはもっと多くの電流が流れることになります。Arduinoのデジタルピンは最大でも20mAですので、モータがArduinoから無理に電流450mAを引き出そうとして、最終的にArduinoが壊れてしまいます。したがって、モーター用の外部電源が必要となります。
共通の電源、単4×2本で可能か?
Arduinoの外部電源は7~9Vまたは安定した5Vが必要となり、単4×2本ではそもそも電圧が足りません。そこで、モーターのノイズの問題は別として単4×2本(3V)の電源を並列で、Arduinoの電源用には5Vに昇圧し、そのまま3Vをモーターに供給することができるか、下図の回路でテストしてみました。
最初にモーターなしの状態で、次にモーターを動かしながらテスターで電圧を測定したところ、昇圧後の電圧は5.0-5.1Vで安定していました。本来はノイズの問題もありますので電源を分けた方が良いとは思いますが、今回はコンパクトを優先してこれで行こうと思います。
その他
モータードライバ
以前に、130モーターをArduinoで動かすテストをしたときに使用したDRV8835を使用します。
ただし、今回はPololu製ではなく、秋月で販売しているものを使用します。ピンの配置は少し異なりますが、使い方は同じです。
電源スイッチなど
スイッチのない電池ボックスしか手元になかったため、電源スイッチとしてトグルスイッチを取り付けます。また、プログラムをダウンロードした後、すぐに動き出さないよう、スタートボタンとしてタクトスイッチを取り付けようと思います。
トグルスイッチ(1回路2接点)は、つまみ状の操作レバーを一方向に倒すことで電気回路を切り替えることができます。今回はオン/オフですので、3つの端子のうち、中央と左右のどちらか一方の2つだけを使用します。
タクトスイッチは押されたときだけオンとなり、離すとオフになるスイッチです。4本の端子がありますが、下図の上下の端子は常につながった状態ですが、左右の端子はスイッチを押すことでつながるようになっています。使い方を間違えるとスイッチとしての役目を全く果たせないことになります。
基板制作
ここまでにテスト結果を元に、ユニバーサル基板を使って、Arduino NANO、昇圧回路、電源スイッチ、スタートボタン、モータードライバ、ラインセンサーと超音波センサー接続用のコネクタを配置した基盤を作ります。
各部品の配置を考えてから、部品をユニバーサル基板に半田付けしていきます。私は不器用なので、配線はきれいな仕上がりとは言えませんが、無事にメインとなる基板の制作が完了しました。
前回制作した機体に六角スペーサーとM3ボルトで固定し、電池ボックスを取り付け、電源とモーターのコードにコネクタを取り付けて、接続した状態が右写真です。
モーター動作確認
最後に、モーターを動かして動作確認をします。
まっすぐ前進とバック、左右に回転する動きをプログラミングしてみました。PWMによる回転速度調整の確認ため、速度「100」と「200」と交互に変わるようにしました。
左右のモーターの差によって直進が少し曲がりますが、動作としては問題なさそうです。
モーター動作テストのコード
#define TACT1 6
#define PHASE1 2
#define ENABLE1 3
#define PHASE2 4
#define ENABLE2 5
void setup() {
pinMode(TACT1, INPUT_PULLUP);
pinMode(PHASE1, OUTPUT);
pinMode(ENABLE1, OUTPUT);
pinMode(PHASE2, OUTPUT);
pinMode(ENABLE2, OUTPUT);
while(digitalRead(TACT1) == HIGH) {
}
}
void loop() {
// 前進100
digitalWrite(PHASE1, LOW);
analogWrite(ENABLE1, 100);
digitalWrite(PHASE2, LOW);
analogWrite(ENABLE2, 100);
delay(1200);
// バック100
digitalWrite(PHASE1, HIGH);
analogWrite(ENABLE1, 100);
digitalWrite(PHASE2, HIGH);
analogWrite(ENABLE2, 100);
delay(1200);
// 左回転100
digitalWrite(PHASE1, LOW);
analogWrite(ENABLE1, 100);
digitalWrite(PHASE2, HIGH);
analogWrite(ENABLE2, 100);
delay(1200);
// 右回転100
digitalWrite(PHASE1, HIGH);
analogWrite(ENABLE1, 100);
digitalWrite(PHASE2, LOW);
analogWrite(ENABLE2, 100);
delay(1200);
// 前進200
digitalWrite(PHASE1, LOW);
analogWrite(ENABLE1, 200);
digitalWrite(PHASE2, LOW);
analogWrite(ENABLE2, 200);
delay(1200);
// バック200
digitalWrite(PHASE1, HIGH);
analogWrite(ENABLE1, 200);
digitalWrite(PHASE2, HIGH);
analogWrite(ENABLE2, 200);
delay(1200);
// 左回転200
digitalWrite(PHASE1, LOW);
analogWrite(ENABLE1, 200);
digitalWrite(PHASE2, HIGH);
analogWrite(ENABLE2, 200);
delay(1200);
// 右回転200
digitalWrite(PHASE1, HIGH);
analogWrite(ENABLE1, 200);
digitalWrite(PHASE2, LOW);
analogWrite(ENABLE2, 200);
delay(1200);
}
部材購入先のリンク
ユニバーサル基板
https://akizukidenshi.com/catalog/g/gP-03229/
DRV8835使用ステッピング&DCモータドライバモジュール
https://akizukidenshi.com/catalog/g/gK-09848/
DC-DCコンバーター(5V)
https://akizukidenshi.com/catalog/g/gK-15097/
トグルスイッチ
https://akizukidenshi.com/catalog/g/gP-02399/
タクトスイッチ
https://akizukidenshi.com/catalog/g/gP-03647/