PR

ロボット制作⑮ ウォームギアを試してみる(後編)
炭素繊維ナイロンフィラメントと無限回転サーボでウォームギアを作って動かしてみた。

加工・組み立て

ロボットに搭載できるウォームギア

前編で手動でのウォームギアを作ってみましたが、今回は、360°回転サーボモータを使って実用的なロボット駆動機構(アクチュエーター)を試作したいと思います。

カーボンフィラメント

ウォームギアの特徴としてセルフロック機能がありますが、重たいものを持ち上げる場合は、造形物にある程度の強度が必要となります。いつも使っているPLA(Poly Lactic Acid-植物由来のポリエステル)は、比較的やわらかく強度が必要なものには向いていません。
そこで候補に挙がってくるのが炭素繊維(Carbon Fiber)になります。炭素繊維は軽くて丈夫な素材です。しかし、単一素材だと高価で、加工も困難なため、家庭用3Dプリンタで使用する場合は、別の素材に組み合わせて使います。
今回は、75%のナイロンと25%炭素繊維を組み合わせたものを使いました。

強度が必要なウォームとウォームホイールを炭素繊維ナイロンフィラメントで印刷しました。

ホットエンド260°、ベッドは80°で印刷しました。ナイロンが入っているためかPLAよりも粘度が高く、少し遠くから見ると非常に滑らかに仕上がっています。近くで見ると少し繊維の筋が見えます。動かしてみないと分からないですが、おそらく動作に支障はないと思います。

360°回転サーボモータ

ウォームギアは、ウォーム側のネジの回転でホイールを回すので、ウォーム側の駆動は、今まで使ってきたサーボモータのように0°~180°といった1回転未満では、しっかりと駆動させることが出来ません。そこで無限回転が出来るサーボモータが必要になります。

サーボモータを開けてストッパーを取り除き、ポテンショメーターを固定値の抵抗に変えて無限回転に改造する方法がありますが、SG90のように改造が簡単なものと、大きめのサーボモータのように改造が難しいものがあります。今回は、最初から無限回転のサーボモータを購入して使用しました。

Model: DS04-NFC データシート

重量38g
入力電圧4.8V~6.0V※データシートには4.8Vで記載されていました。
トルク5.5kg/cm (4.8V)
スピード0.22 s/60° ≒ 45rpm (4.8V)
電流1000mA未満
制御タイプJR / Futaba
周波数50Hz / 20msMG90S と同じ
反時計回り0°~90° (1ms~1.5ms)値が小さいほど回転速度が上がる
ストップ角度90°(1.5ms)
時計回り90°~180° (1.5ms~2ms)値が大きいほど回転速度が上がる
DS04-NFC データシート

テスト用の回路とプログラムで動かしてみます。

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);

#define SERVO_FRQ   50    // サーボモータの周波数
#define SERVO_MSEC  20000 // サーボモータの回転時間(μs)
#define SERVOMIN    1000  // 最小パルス幅(μs)
#define SERVOMAX    2000  // 最大パルス幅(μs)
#define SERVOSTOP   1500  // 停止パルス幅(μs)
#define PWMMIN      205   // 最小パルス幅÷回転時間×4096
#define PWMMAX      401   // 最大パルス幅÷回転時間×4096
#define ANGLEMIN    0     // 最小角度(固定)
#define ANGLEMAX    180   // 最大角度

// 360度回転サーボの仕様
// 90°が停止、0°から90°が逆時計回り、90°から180°が時計回り
// 1.5msが停止、1ms-1.5msが逆時計回り、1.5ms-2msが時計回り 

int Servo_pin = 8;
int Servo_ms;


void setup() {
  pwm.begin();
  pwm.setPWMFreq(SERVO_FRQ);
  Serial.begin(9600);
  Serial.println("Start 360 ServoMoter Test");
  pwm.writeMicroseconds(Servo_pin, 1500);
  delay(1000);
}

void loop() {
  // 停止から逆時計回りに早くしていく(約9秒)
  for (int i = 90; i >= 0; i--) {
    Servo_ms = map(i, ANGLEMIN, ANGLEMAX, SERVOMIN, SERVOMAX);
    pwm.writeMicroseconds(Servo_pin, Servo_ms);
    delay(100);
  }
  Serial.println("Counter Clockwise: Max Speed.");
  delay(1000);
  // 逆時計回りを徐々に遅くして止める(約9秒)
  for (int i = 0; i <= 90; i++) {
    Servo_ms = map(i, ANGLEMIN, ANGLEMAX, SERVOMIN, SERVOMAX);
    pwm.writeMicroseconds(Servo_pin, Servo_ms);
    delay(100);
  }
  Serial.println("Counter Clockwise: Stop.");
  delay(1000);
  // 停止から時計回りに早くしていく(約9秒)
  for (int i = 90; i <= 180; i++) {
    Servo_ms = map(i, ANGLEMIN, ANGLEMAX, SERVOMIN, SERVOMAX);
    pwm.writeMicroseconds(Servo_pin, Servo_ms);
    delay(100);
  }
  Serial.println("Clockwise: Max Speed.");
  delay(1000);
  // 時計回りを徐々に遅くして止める(約9秒)
  for (int i = 180; i >= 90; i--) {
    Servo_ms = map(i, ANGLEMIN, ANGLEMAX, SERVOMIN, SERVOMAX);
    pwm.writeMicroseconds(Servo_pin, Servo_ms);
    delay(100);
  }
  Serial.println("Clockwise: stop.");
  delay(1000);
  exit(0);
}

プログラムは、ストップした状態から反時計回りに徐々に速度を上げていき1秒回転したら、反時計回りのまま徐々に速度を落として回転を停止します。同じ要領で時計回りに回転して終了します。

サーボモーターでウォームギアを動かしてみる

実際に今回揃えた部品を組み立ててウォームギア機構を作っていきたいと思います。

声:VOICEVOX-玄野武宏

ウォームギアが駆動することを確認出来たので次はロボットの股関節や腰に応用していきたいと思います。

以上

コメント

タイトルとURLをコピーしました