こんにちは! けい(Twitter)です。
今回は、前回設計したロボットハンド(グリッパ)をArduinoを使って電動化してみました。
この記事は「3Dプリンターで作るロボットアーム」シリーズの3つ目の記事です。
以前の記事を読んでいない方はぜひこちらのリンクから覗いてみてください。
目次
使用したもの
3dプリンタ
FLASHFORGE製の「Adventure 3」を使用しました。(商品リンク)
Arduino
サーボモータを制御するコンピュータとして、Arduinoを使用しました。
私は「Arduino UNO」を使用しましたが、別のモデルでも大丈夫です。
サーボモータ
ロボットアームの先端部には軽量なモータが求められるので、小型かつ軽量な「sg90」を使用しました。
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とサーボモータを使って電動化してみました。
ロボットハンドはこれにてほとんど完成に近づいたので、次回はロボットアーム全体の設計に進みたいと思います。
ではまた!