モーターを使って、正転、反転を制御していきます。 今回、モーターを制御するために、モータードライバーという部品を使います。 以下の流れで学習していきます。 1) モーターの仕組み 2) fritzingを使用して、配線図を作成 3) 配線図を見て、Arduinoとブレッドボードを配線 4) プログラムの作成 5) コンパイルと書き込みの実行
第7回で事前準備するものを紹介します。
項目名 | 個数 | |
Arduino本体 | 1個 | |
ブレッドボード | 1個 | |
DCモーター | 1個 | |
モータードライバー(TA7291P) | 1個 | |
単三電池ボックス | 1個 | |
単三電池 | 4本 | |
ジャンパーワイヤー10cm(オス-オス) | 5本 | |
ジャンパーワイヤー15cm(オス-オス) | 2本 |
DCモーターと呼ばれるモーターを使用します。 DCモーターとは、一般的に呼ばれる直流モーターで、上記のように接続することで、直流電源で回すことができます。 モーターの電圧を高くすることで、回転速度が上がり、逆に電圧を低くすることで回転速度が下がります。 上記の図の接続では、正転で同じ速度で動きます。 逆転で動かせたい場合、プラスマイナスを逆にしないと、モーターを逆転させることはできません。 また、速度を調節することもできません。 今回は、モーターの回転方向や速度を調整するために、モータードライバやPWMといった仕組みを利用していきます。
制御 | ⑤番ピン | ⑥番ピン |
正転 | HIGH | LOW |
逆転 | LOW | HIGH |
ストップ | LOW | LOW |
ブレーキ | HIGH | HIGH |
Arduinoには、PWMという仕組みが用意されています。 Arduinoのピンの出力電圧は、0Vか5Vのどちらかの電圧値しか出力できませんが、PWMの仕組みを利用することによって、アナログ的に電圧を出力したことと同じような効果が得られます。 PWM(アナログ出力)を利用できるピンは、ボード上に"~"と書かれている、3, 5, 6, 9, 10, 11番ピンになります。 プログラム上では、以下のanalogWrite関数を使用します。
analogWrite 関数
書式) void analogWrite(byte pin, int value) 説明) pinで指定した番号のピンの電圧を、valueに0から255までの値を設定することで0Vから5Vまでの電圧を出力します。
fritzingを使用し、配線図を作成してみましょう。 Arduino、ブレッドボード、モーター、モータドライバ、単三電池ボックスのパーツを使用して配線します。 モータードライバのパーツについては、fritzingの標準部品にはない為、サイトからダウンロードし、インポートする必要があります。 または、fritzingパーツを自作することもできるので、興味のある方は試してみて下さい。 モータドライバのパーツのダウンロード 上記のサイトでダウンロードされた場合、TA7291P.lzhという形式でダウンロードされるので、解凍します。 解凍すると、TA7291P.fzpzというfritzingで使用ができる形式で展開されます。 インポート方法は、fritzingを起動し、ファイル → 開くでTA7291P.fzpzを選択します。 そうすると、fritzingツールの右上のパーツのMINEタブに、My PartsとしてTA7291Pが表示されます。
下記のボタンをクリックすると、fritzingを使ったモーターの配線図の作成動画を確認できます。
モーターの配線図の作成作成した配線図を見ながら、実際に配線します。
モーターを正転、逆転させるプログラムを作成していきます。 1) Arduino IDEを起動します。 2) ファイル → 名前を付けて保存をクリックして、今回は、motorと入力しファイルを保存します。 下記のボタンをクリックして、プログラムの作成動画を見ながら作成してみましょう。
プログラムの作成プログラムの作成ができたら、コンパイルを行い、Arduinoへの書き込み処理を行います。 1) コンパイルを実行 → をクリックします 2) アップロードを実行 → をクリックします 下記のボタンをクリックすると、プログラムのコンパイルと書き込み動画を見て確認できます。 プログラムのコンパイルと書き込み
実際に動かして、モーターの回転を見てみましょう。 今回、モーターを正転させた時はスピードの値を100、モーターを逆転させた時はスピードの値を20と設定していたので、正転させた時と逆転させた時の回転速度が違うはずです。 逆転速度の動きが正転速度よりも遅いことに注目してみてください。 モータードライバやPWMの仕組みを利用することにより、モーターの速度調整ができるので、この仕組みを利用してラジコンなどを作成することができます。 モーターのプログラムを確認しておきましょう。
#define motor_A 10 #define motor_B 9 #define motor_PWM 11 int speed_A = 100; int speed_B = 20; void setup() { pinMode(motor_A, OUTPUT); pinMode(motor_B, OUTPUT); pinMode(motor_PWM, OUTPUT); } void loop() { digitalWrite(motor_A, LOW); digitalWrite(motor_B, LOW); delay(1000); digitalWrite(motor_A, HIGH); digitalWrite(motor_B, LOW); analogWrite(motor_PWM, speed_A); delay(2000); digitalWrite(motor_A, LOW); digitalWrite(motor_B, LOW); delay(1000); digitalWrite(motor_A, LOW); digitalWrite(motor_B, HIGH); analogWrite(motor_PWM, speed_B); delay(2000); }
ここまでの第7回までを通して、fritzingや、Arduinoとブレッドボードの配線にもだいぶ慣れてきたでしょうか。 次は温度センサーを使用して、室内の温度を測ってみましょう。