- 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.