自作コントローラで制御 ーロボットアーム自作への道5ー
Arduino Advent Calendar 2019 | 19日目
さてここまでは主に逆運動学によってロボットアームを制御してきましたが、やっぱり物理コントローラでグリグリしたくなるのが摂理。
ロボットアームを2対用意して、一方を手で動かして他方が追従するみたいのがやりたかったのですが、
それはPWMサーボでは無理で位置検出可能な高級なシリアルコマンドサーボというのが必要であると教えていただきました。
ご参考まで。:双葉電子のロボット用サーボモータRS304MDを動かしてみた。 https://t.co/n0B7QAavTH
— robo8080 (@robo8080) December 13, 2019
今からシリアルコマンドサーボ買って2対のロボットアームを作る金など当然なく途方に暮れていたところ、
可変抵抗でサーボを動かす用例を紹介いただきました!
これだ!これでいい!これならPWMサーボによる自前のロボットアームがそのまま使えますよ!
ということで、ここでは可変抵抗を用いたロボットアームコントローラを製作しましたので報告させていただきます。
目次
構成
ロボットアームはこれまでのPWMサーボを3つ使用したもので、それぞれの角度を可変抵抗で制御します。可変抵抗はBカーブの10kohmを使用しました。
部品
- Arduno UNO
- サーボモータMG995
-
サーボモータDS3115
- 可変抵抗 10kohm
コントローラ製作
先日購入した3Dプリンタでコントローラの筐体を作りました。
生まれて初めてのオリジナルモデルです。
DesignSpark Mechanicalでモデルを作成しました。
☟設計通りに出力されて大感動!
可変抵抗のツマミを通してネジ止めするための穴と位置決め穴や、ツマミを差し込むヘコミを設けています。
できたー!
と思いきや。。。
自分が憎い pic.twitter.com/QNkUPqrj6v— HomeMadeGarbage (@H0meMadeGarbage) December 15, 2019
ちょっとサイズミスした部品があったのでモデルを修正して台座と共に出力。。。。
作製した部品と3つの可変抵抗とを組み立てて完成!
できた!
でも結局 木は使う#3Dプリンタ #anycubic pic.twitter.com/oEMYbeX144— HomeMadeGarbage (@H0meMadeGarbage) December 15, 2019
これでバッチリ ロボットアームのサーボモータの回転軸と同じ方向に可変抵抗を配置できました!
モデル
アーム1
ベース
Arduinoコード
可変抵抗の値をアナログピンで読んで角度に変換し、対応するサーボに入力するだけの簡単なコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <Servo.h> Servo myservo1, myservo2, myservo3; float th1=90.0,th2=90.0,th3=90.0; float val1, val2, val3; void setup() { Serial.begin(9600); myservo1.attach(9, 500, 2420); //MG995 myservo2.attach(10, 820, 2140); //DS3115 myservo3.attach(11, 820, 2140); //DS3115 set_servo(); } void loop() { val1 = analogRead(A1); val2 = analogRead(A2); val3 = analogRead(A3); th1 = map(val1, 170.0, 880.0, 0.0, 180.0); if(th1 >= 180.0){ th1 = 180.0; }else if(th1 <= 0.0){ th1 = 0.0; } th2 = map(val2, 150.0, 860.0, 0.0, 180.0); if(th2 >= 180.0){ th2 = 180.0; }else if(th2 <= 0.0){ th2 = 0.0; } th3 = map(val3, 860.0, 160.0, 0.0, 180.0); if(th3 >= 180.0){ th3 = 180.0; }else if(th3 <= 45.0){ th3 = 45.0; } set_servo(); } void set_servo(){ myservo1.write(th1); myservo2.write(th2); myservo3.write(th3); } |
動作
可変抵抗を配線してArduinoに接続すれば完成!
やっすい可変抵抗でロボットアームコントローラ
いい感じにシンクロナイズ#ロボットアーム #黄金狂時代 pic.twitter.com/DfoIsDwzrp— HomeMadeGarbage (@H0meMadeGarbage) December 15, 2019
簡単なのに驚きのシンクロ率です。
動きをレコードして再生する機能も追加してみました。
動作REC機能追加。
そろそろArduino UNOじゃキツい#ロボットアーム #Arduino pic.twitter.com/3pAgPEQbrc— HomeMadeGarbage (@H0meMadeGarbage) December 16, 2019
こちらの詳細は以下を参照ください (2020/6/7 追記)。
おわりに
手軽に安価でロボットアームのコントローラが作れました!
目標は以下のような感じなので引き続き頑張ります。。。
ロボット展に来てます。TOYOTAの遠隔操作ロボットが進化してますー! pic.twitter.com/Jl3sYXRxvL
— Engadget 日本版の田沢梓門 (@samebbq) December 18, 2019
こんにちは、
ロボットアーム自作の記事とても参考になりました。
私は電子工作はまだ素人ですが、手持ちのサーボ(SG90)で試作してみましたらなんと動きました。感動!
欲が出て可変抵抗のコントローラーを作っている最中です。
そこで一つお聞きしたいことがありましてコメント致しました。
クローンの物理コントローラーの記事で「動きをレコードして再生する機能も追加してみました。」とありますが、もしよろしければ、参考になるサイト等ありましたら、教えて頂けませんでしょうか?
欲をいえば、そこも記事にして頂ければと、、。
ありがとうございます!
ロボットアーム動作の記録・再生につきまして記事記載いたしました。
以下ご参照ください。
https://homemadegarbage.com/arm07
宜しくお願い致します!
追伸:ちなみにSG90のサーボではペンを持つ力はなさそうですが、十分楽しめました。
質問させて下さい。
1:構成にある図と部品まではわかったのですが、実際にロボットアームの黄色い結合部はどこにあたるのでしょうか。他にも部品は必要なのでしょうか。
2:やり方一式をまとめて購入させて頂けないでしょうか。
3:アームの力を強くするにはarginoではなくラズパイ選択になるということなのでしょうか。もしくはコマンドサーボなどが必要になるということなのでしょうか。
非常に興味があります。
宜しくお願い致します。
コメントいただきありがとうございます。
1:ロボットアームの構成自体は以下が参考になるかと思います。
https://homemadegarbage.com/arm02
2:購入とはどういうことでしょうか?
形式、費用によっては検討可能です。
3:アームの力についてはコントローラの種類には依存せず。サーボのトルクに依存します。
はじめまして。
最近サーボコントロールに興味のあるものです。
わからない点ご教授いただくと幸いです。
1.サーボモーターを停止させている時にはトルクはあるのでしょうか。
その時モーターはどのように制御(制御信号)しているのでしょうか。
正転、逆転を繰り返している?その位置から動かないようにコイルに通電している?
2.少し内容が外れているかもしれませんが超低速(10rpmとか)でギアなしでブラシレスモータを回す方法をご存じでしょうか。なにかアドバイスいただけると次に進めると思います。
よろしくお願いいたします。