ロボットハンドをArduinoで電動化してみた

3Dプリンターで作ったロボットハンドをArduinoで電動化してみた

こんにちは! けい(Twitter)です。

今回は、前回設計したロボットハンド(グリッパ)をArduinoを使って電動化してみました。

この記事は「3Dプリンターで作るロボットアーム」シリーズの3つ目の記事です。
以前の記事を読んでいない方はぜひこちらのリンクから覗いてみてください。

使用したもの

3dプリンタ

FLASHFORGE製の「Adventure 3」を使用しました。(商品リンク

Arduino

サーボモータを制御するコンピュータとして、Arduinoを使用しました。

私は「Arduino UNO」を使用しましたが、別のモデルでも大丈夫です。

created by Rinker
Arduino
¥3,300 (2022/05/23 23:38:17時点 Amazon調べ-詳細)

サーボモータ

ロボットアームの先端部には軽量なモータが求められるので、小型かつ軽量な「sg90」を使用しました。

created by Rinker
TOWER PRO
¥440 (2022/05/23 23:38:17時点 Amazon調べ-詳細)

3DCADで設計する

前回設計したロボットハンド

前回はロボットハンドをとりあえず作ってみました。

前回の目的としては、ハンドの構造や強度関節部の形状の確認でした。

その部分については一旦クリアしたので、今回はサーボモータと組み合わせて実際に動かすことが出来るのかを確認したいと思います。

サーボモータの3Dモデルをダウンロードする

今回使用するサーボモータ(sg90)を3DCAD上で再現する必要があります。

しかし、sg90は有名なサーボモータなので、3Dモデルをフリーでアップしてくれている先人が多くいます。
なので、有難くフリーモデルを使わせていただきます。

こちらのリンクよりダウンロードできます。

サーボホーン付きの3Dモデルが再現されています。

今回は、両方向のサーボホーンではなく片方向のサーボホーンを使用するので、データを少し修正して使用します。

ロボットハンドとサーボモータの結合部の設計

前回作成したロボットハンドのモデルにサーボモータのモデルを持ってきて、結合部を設計します。

Fusion360の「修正」→「位置合わせ」を駆使して、サーボモータの回転軸と歯車の回転軸を合わせます。

また、「結合」の「切り取り」を駆使して、ハンドとサーボモータが干渉している部分をくり抜きます。

ねじを締めることで、ロボットハンドとサーボモータを固定することができます。

Arduinoで電動化する

ロボットハンドを3Dプリンターで出力し、実際に電動化してみました。

Arduinoとサーボモータの配線図

サーボモータは5Vで動作するので、Arduinoの5VピンとGNDピンを繋いで電源を供給します。

また、PWM信号のピンとして9番ピンを使用します。

Arduinoのサンプルプログラムを書きこむ

「Arduino IDE」で「Servo」のスケッチ例を開きます。

ファイル」→「スケッチ例」→「Servo」→「Sweep」の順にクリックします。

そうすると、このようなプログラム例が開きます。

このまま実行するとロボットハンドの可動域以上の角度で動いてしまうので、一部修正します。

可動域を変更したプログラムがこちらです。

/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 90; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 90; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

22行目と27行目を変更しました。

元々サンプル例では「pos = 180」となっていましたが、「pos = 90」に変更しています。

最後に

今回は、3Dプリンターで作ったロボットハンドを、Arduinoとサーボモータを使って電動化してみました。

ロボットハンドはこれにてほとんど完成に近づいたので、次回はロボットアーム全体の設計に進みたいと思います。

ではまた!