中野島ロボット

小さなロボットの自作記事を書いています。

週間中ロボ207 Nano Robot Arms テストコード公開

はじめに
小さな産業用ロボット風のディスクトップに置けるロボットアームのテストコードを公開しました。

f:id:nakarobo:20220405000952j:plain

3Dモデルは以下のリンクから、無料でダウンロードして作ることができますが、スケッチも置きました。
www.thingiverse.com

 

開発環境
HW:Raspberry Pi4B
OS:Raspberry Pi OS(Bullsyse 64bit)
IDE:Aruduino IDE 1.8.13
ライブラリ:
Stepper.h 

www.arduino.cc

Servo.h

www.arduino.cc

スケッチ
標準のライブラリのみを使用した、できるだけシンプルな形のスケッチにしました。

/*
  NanoArmFirstTest.ino
  2022/04/04 Nakanosima Robot
*/

#include <Stepper.h>
#include <Servo.h>

#define STEPS 2048  // Full Step 2048

#define TEST true

// Arduino Pin Outputs to to the ULN2003 for the 28BYJ-48 Stepper Motors
//                             IN1   IN2   IN3   IN4
Stepper stepper1(STEPS,  2,   4,   3,   5);
Stepper stepper2(STEPS,  6,   8,    7,    9);
Stepper stepper3(STEPS, 10,  12,   11,   13);

Servo handServo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position

void setup()
{
  Serial.begin(115200);
  stepper1.setSpeed(7);
  stepper2.setSpeed(8);
  stepper3.setSpeed(10);
  handServo.attach(A3);

  if (TEST) {

    Serial.println("Gripper Test");
    for (pos = 0; pos <= 90; pos += 1)
    {
      handServo.write(pos);
      delay(25);
    }

    Serial.println("Stepper 1 Test");
    stepper1.step(256);
    stepper1.step(-512);
    stepper1.step(256);

    Serial.println("Stepper 2 Test");
    stepper2.step(-512);
    stepper2.step(256);

    Serial.println("Stepper 3 Test");
    stepper3.step(-512);
    stepper3.step(256);
    
    delay(1000);

    // Return to home position
    stepper3.step(256);
    stepper2.step(256);
 
  }

  // Power off
  for(int i=2; i<=13; i++) digitalWrite(i, LOW);
  handServo.detach();

}


void loop() {
  }

// End of File.

 

動作
最初にSG90のグリッパーの開閉を行い、次に各ステッパーモーターを駆動してテストしています。
最後にホームポジションに戻して、出力をオフにして終了です。
出力をオフにしないとモーターに電流が流れ続けて発熱します。
特にSG90はグリッパーが閉じたときにちょうど止まる位置で調整しておかないと、発熱して壊れてしまいます。

解説
ステッパーライブラリは何ステップ動かすかを指定して動かしていますが、28BYJ-48は1回転するのに2048ステップかかるので、角度にすると1ステップは
}360/2048=0.175度
となります。
28BYJ-48の速度は無負荷状態で、15rpm(一分間の回転数)が限界で、回すものが重くなると、これより遅くする必要があります。下のステッピングモーター程、重いものを動かすことになるので、Stepperに指示する回転数を下から順に7,8,10rpmにしています。これより早くすると脱調(回らない)してしまいます。回りが悪い場合は、配線をストレスの無いように調整するか、回転数を遅くしてみてください。
28BYJ-48 ステッピングモーターはカタログを見ると、ホールディングトルクが1.5kg/cmもあるので、電源オフでも位置が固定され、自重で動くことはありませんでした。
Loop()が空なのは、”自分で動きを書き込んで下さい”という意味です。

おわりに
最終的にはシリアル経由でコマンドを送れるようなスケッチを公開するつもりなのですが、左手の制作に取り掛かっているので、その後になるかと思います。
左手は28BYJ-48を改造してバイポーラ駆動で、より速く動けるようにするしようとしています。

おしまい

購入品情報
28BYJ-48 は5Vと12Vのものがあり、左手は12Vの方を使用しようと思います。
ただ値段が高いので、バイポーラ駆動は電流駆動なので、5Vでも大丈夫です。