void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6,INPUT_PULLUP); } void forward(){ digitalWrite(3,LOW); digitalWrite(2, HIGH); delay(5); digitalWrite(5,LOW); digitalWrite(4, HIGH); delay(5); digitalWrite(2, LOW); digitalWrite(3, HIGH); delay(5); digitalWrite(4, LOW); digitalWrite(5,HIGH); delay(5); } void backword(){ digitalWrite(3,LOW); digitalWrite(5, HIGH); delay(5); digitalWrite(2,LOW); digitalWrite(3, HIGH); delay(5); digitalWrite(5, LOW); digitalWrite(4, HIGH); delay(5); digitalWrite(3, LOW); digitalWrite(2,HIGH); delay(5); } void loop() { if (digitalRead(6)==LOW) backword(); else forward(); }
このプログラムでは、Setup()関数の中で新たにスイッチを接続するための入力用のGPIOを設定しています( pinMode(6,INPUT_PULLUP); )。
また6番ピンを入力用に設定しているのですが、第2引数にINPUT_PULLUPとしています。これはArduinoのCPU Atmega328P内部で6番ピンをプラス側に接続することを意味しています。6番ピンに接続するスイッチが開いているとき、値を1にするためです。
もしこのプラス側に接続する抵抗がない場合は、スイッチが開いているとき値が非常に不安定になってしまいます。このような抵抗のことをプルアップ抵抗と呼びます。以前、このような抵抗はCPUの外に取り付けていましたが、最近のマイコンでは内部で設定できるものもあります。
Loop()関数内で6番ピンの状態を見て、スイッチが押されていればbackword()関数を実行します。それ以外の場合はforward()が実行されます。
今回はバイポーラ型のステッピングモーターについてお話ししました。
トランジスタでドライブ回路を作り、またGPIOをコードで直接制御する方法でステッピングモーターを回転させてみましたが、これは基本を押さえることに重点を置いたからです。
最近は便利なドライバ回路や制御モジュールが出回っていますので、実際にステッピングモーターを使った機器を製作する場合はそれらを使うのが一般的でしょう。次回はそれらの使い方についてお話ししたいと思います。お楽しみに。(次回へ続く)
Copyright © ITmedia, Inc. All Rights Reserved.