スマホで動くロボットアームを作る

スマホで動くロボットアームを作る

 

続き

ステッピングモーターの駆動方式でチョット面白いアイデアが浮かびました。

 

テストプログラム

byte stepPins = {15, 0, 5, 19, 22, 32, 25, 27}; // クロック
byte dirPins
= {2, 4, 18, 21, 23, 33, 26, 14};      // 回転方向
byte step_data[256] = {0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x80, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x83, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00,
                       0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00};  // 256
int num = 0;

void setup() {
  for (int i = 0; i < sizeof(stepPins); i++) {
    pinMode(stepPins[i], OUTPUT);
  }
  for (int i = 0; i < sizeof(dirPins); i++) {
    pinMode(dirPins[i], OUTPUT);
  }
}

void loop() {
  rotation(num);
  num++;
  if (num > 255)
    num = 0;
}

void  rotation(int num) {
    digitalWrite(stepPins[0],step_data[num] & 0x01);
    digitalWrite(stepPins[1],step_data[num] & 0x02);
    digitalWrite(stepPins[2],step_data[num] & 0x04);
    digitalWrite(stepPins[3],step_data[num] & 0x08);
    digitalWrite(stepPins[4],step_data[num] & 0x10);
    digitalWrite(stepPins[5],step_data[num] & 0x20);
    digitalWrite(stepPins[6],step_data[num] & 0x40);
    digitalWrite(stepPins[7],step_data[num] & 0x80);
    delay(1);
}

step_dataの8ビットにそれぞれ1ビットづつステッピングモーター0~7に割り当てて制御できないかとテストプログラムを作って見ました。

ビット0は1つ置きにビットが立っている。

ビット1は3つ置きにビットが立っている。

色々書き換えてテストしていますがいい感じです。

 

まだ、スマホとのやり取りなど未知数ですがもしこの方式が上手く行くと「少し賢くなったプロッター」で培った音声信号を使っての制御方法が流用できる。

(バイトデータから音声信号に変換していたのでバイトデータがそのまま使える。)

 

もし上手く行ったら8軸制御が出来てしまう。

 

楽しみ!

 

ハード関係

テスト用にステッピングモーターを注文しました。

2個で860円 1ステップ3.6度と粗めですが遊星ギヤの動作確認用に買ってみました。

 

また、更新します。