【Arduino】ロボットハンドを超簡単に自作する
前からロボットハンドやロボットアームに憧れて作ってみたいと思っていたのですが、やらなければいけない作業が一区切りついたので、自由工作がてらロボットハンドを作ってみることにしました。
本来は3Dプリンターで出力するはずだったのですが、TPUフィラメントを使わなければいけないようで(PLAしかなかった)、機構だけでも確かめたいと思い、そこらへんで買ってきた工作用紙を使って古典的に自作しました。
このままだとあまり見た目はよろしくないですが、きちんと動くのでご容赦ください。
用意するもの
- Arduino Uno
- サーボモーター SG90×5
- ジャンパワイヤ ×17
- ブレッドボード
- 工作用紙
- PPシート等のしなる板
- 糸
- 接着剤
- 強力両面テープ
- キリや目打ち等の穴を開けるもの
- PCと周辺機器
作り方
手の本体を作成
まず五本指をそれぞれ作成していきます。
作りたい手の指の長さも人によって違うと思いますので、この流れは参考程度に適当に変えつつ制作してください。
このような感じで適当に切り抜きます。青が切り取り線、黒が折り線、赤がのりしろです。 のちに使うサーボによって切り欠きの角度等を変える必要があるかもしれません。
接着剤や両面テープを使って指を組み立てます。
ここに指の芯となる、よくしなるプラスチック板を接着剤等で固定します。
加えて、指の先端部分の裏側に細目に切ったプラスチック板を接着します。
これだけで細目に切ったプラスチック板を引っ張ると指が動くようになります。
これを各指ごとに調整しつつ作りすべてを手のひらサイズに切った工作用紙に貼り付けます。
本体が完成しました。今回は左手を制作したため、右手を制作したい場合は左右逆向きで取り付けてください。
サーボモーターの取り付け
サーボモーターの動く向きに注意して、手のひら部分に取り付けていきます。事前に動きを確認しておくと良いと思います。
先ほど貼り付けた、細目に切ったプラスチック板にキリ等で穴を開け、サーボモーターと糸で結びつけます。
今回は上の画像のように適当に取り付けましたが、絶対もっと良い取り付け方があると思うので試行錯誤してみてください。
サーボモーターの設定
サーボモーターをArduinoと接続します。ブレッドボードとジャンパワイヤを用いて赤いケーブルを5Vに、茶色いケーブルをGNDにつなぎます。
緑のケーブルは今回は親指から順に、3,5,6,9,10番ピンに接続します。
ArduinoをPCと接続し、以下のコードを書き込みます。
※追記
さすがにプログラムが適当すぎるので後日書き直します。
#include <Servo.h>
Servo servo_th; # サーボ変数の宣言
Servo servo_i;
Servo servo_m;
Servo servo_r;
Servo servo_l;
void setup() {
servo_th.attach(3); # ピンの割り当て
servo_i.attach(5);
servo_m.attach(6);
servo_r.attach(9);
servo_l.attach(10);
}
void loop() {
beat(1500);
}
void paper(){
setFingers(180, 0, 0, 180, 0); # ここサーボの配置によって値を変更
}
void rock(){
setFingers(90, 180, 180, 0, 180); # ここサーボの配置によって値を変更
}
void scissors() {
setFingers(90, 0, 0, 0, 180); # ここサーボの配置によって値を変更
}
void setFingers(int thumb, int index, int middle, int ring, int little) {
servo_th.write(thumb);
servo_i.write(index);
servo_m.write(middle);
servo_r.write(ring);
servo_l.write(little);
}
void beat(int sleepTime){ # グー・チョキ・パーの順に指を動かす
rock();
delay(sleepTime);
scissors();
delay(sleepTime);
paper();
delay(sleepTime);
}
完成
これだけの作業でロボットハンドが完成しました。簡単にできるので、小学生の自由工作等にも最適なのではないかと思います。
まとめ
久しぶりに工作用紙を使って工作をしましたが、子供の頃に戻ったようでとても楽しかったです。ただ、次回はきちんと設計して3Dプリンターで印刷しようと思います。