Sunday, May 8, 2011

コマンドラインでステッピングモータ制御

ここしばらくモータをいじっていたのは、遠隔のライブカメラを動かしたいという理由だったので、
ひとまずコンソールからモータを動かせるようなプログラムを作ってみた。


int pin[4] = {8,9,10,11};
int incomingByte = 0;
int STEPWAIT = 50;

void setup(){
  Serial.begin(9600);
  for(int i=0;i < 4;i++){
    pinMode(pin[i], OUTPUT);
  }
}

void loop(){
  //入力があったら対応
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    switch(incomingByte){
      case 'r':
        turnRight(10);
        break;
      case 'l':
        turnLeft(10);
        break;
    }
  }
  delay(100);
}
/**
  右回転
*/
void turnRight(int count){
  for(int i=0; i< count;i++){
    for(int j=0;j<4;j++){
      int pre = j-1;
      int next = j+1;
      if(pre < 0){
        pre = 3;
      }
      if(next > 3){
        next = 0;
      }
      digitalWrite(pin[pre], LOW);
      digitalWrite(pin[j], HIGH);
      digitalWrite(pin[next], HIGH);
      delay(STEPWAIT);
    }   
  }
  pinOff();
}
/**
  左回転
*/
void turnLeft(int count){
  for(int i=0; i < count;i++){
    for(int j=3;j>=0;j--){
      int pre = j+1;
      int next = j-1;
      if(pre > 3){
        pre = 0;
      }
      if(next < 0){
        next = 3;
      }
      digitalWrite(pin[pre], LOW);
      digitalWrite(pin[j], HIGH);
      digitalWrite(pin[next], HIGH);
      delay(STEPWAIT);
    }   
  }
  pinOff();
}
/**
  オフ
*/
void pinOff(){
  for(int i=0;i<4;i++){
    digitalWrite(pin[i], LOW);
  }
}
あとはrubyのruby-serialportあたりを利用してコマンドを送ってもいいし、もっと単純にコマンドラインから $ echo llrl > /dev/ttyUSB1 こんな感じのコマンドを送るだけでも動作する。

あとは電子の付かない純粋な工作と、Webから操作できるように適当なページとCGIの作成で、
まあそれはどうとでもできるでしょ。

No comments: