バイポーラ型ステッピングモーターの制御Arduinoで学ぶ基礎からのモーター制御(8)(5/5 ページ)

» 2016年07月11日 07時00分 公開
[今岡通博MONOist]
前のページへ 1|2|3|4|5       
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();
}
List3

 このプログラムでは、Setup()関数の中で新たにスイッチを接続するための入力用のGPIOを設定しています( pinMode(6,INPUT_PULLUP); )。

 また6番ピンを入力用に設定しているのですが、第2引数にINPUT_PULLUPとしています。これはArduinoのCPU Atmega328P内部で6番ピンをプラス側に接続することを意味しています。6番ピンに接続するスイッチが開いているとき、値を1にするためです。

 もしこのプラス側に接続する抵抗がない場合は、スイッチが開いているとき値が非常に不安定になってしまいます。このような抵抗のことをプルアップ抵抗と呼びます。以前、このような抵抗はCPUの外に取り付けていましたが、最近のマイコンでは内部で設定できるものもあります。

 Loop()関数内で6番ピンの状態を見て、スイッチが押されていればbackword()関数を実行します。それ以外の場合はforward()が実行されます。

おわりに

 今回はバイポーラ型のステッピングモーターについてお話ししました。

 トランジスタでドライブ回路を作り、またGPIOをコードで直接制御する方法でステッピングモーターを回転させてみましたが、これは基本を押さえることに重点を置いたからです。

 最近は便利なドライバ回路や制御モジュールが出回っていますので、実際にステッピングモーターを使った機器を製作する場合はそれらを使うのが一般的でしょう。次回はそれらの使い方についてお話ししたいと思います。お楽しみに。(次回へ続く

⇒ 連載バックナンバーはこちら

前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.