メカキネを使った自動人形

メカキネを使って自動人形を作りたいと考えています。

イメージしている動きは以下のようになります。

1 舞台のカーテンが上がる
2 少年が立っている 背景は雪がやさしく降っている絵
3 舞台のカーテンが下がる

4 舞台のカーテンが上がる
5 青年が立っている 背景は雪がやや強く降っている絵
6 舞台のカーテンが下がる

7 舞台のカーテンが上がる
8 大人が立っている 背景は雪が激しく降っている絵
9 舞台のカーテンが下がる

さっそく質問があります。

ホーミングをする際、CNCのように軸を直線運動するときは
リミットスイッチが押されることで原点が設定されますが、
軸が回転運動をする場合、メカキネではどのような方法で原点を設定すれば良いでしょうか?

(例えば、軸が時計回りに回転するとして、
最初に反時計回りに回ってリミットスイッチを押し、原点を設定して、
それから時計回りに回転するとリミットスイッチを逆側から押してしまいます。。。)

ちなみにArduinoを使って作品制作をしたとき、同様のケースでは透過型光電センサを使って
非接触で原点を設定していました。

こんにちは。

回転物の原点検出方法は悩みますよね・・・。
原点検出センサーの基本的な考えとしてはリミットスイッチと同じように、ホーミングのセンサーを探して動く時に電気的にオン→オフ、あるいはオフ→オンにされれば原点として認識されます。
Duet制御基板にはハードリミット(駆動中にリミットスイッチを押されると停止)の機能がないので、通常の駆動中にスイッチが押されてしまうことに関しては気にしなくても問題ありません。

スイッチの検出はホーミング時のスイッチを検出しながら動く特殊な移動の時のみ検出されます。
なので、原点設定後に時計周りをしてスイッチを押しても原点が再設定されないです。
ただし、現状のhomingファイルは直線駆動向けになっていたと思うので、ホーミングするときの移動量の調整は必要かもしれません。(home◯.gとかhomeall.gを編集して調整することになります。)

同じようにフォトインタラプタ(透過型光電センサ)を使ってもよいと思います。
あるいは、スイッチやボタンを押すような突起を作ってそれらを押すハード的解決でもいいかもしれません。

一応、フォトインタラプタ(透過型光電センサ)を使う場合の配線例をあげておきます。
ほぼリミットスイッチと同じで、追加でモジュールのVに制御基板の3.3Vを繋ぐだけです。

画像のような3Dプリンター向けの光学式リミットスイッチモジュール(フォトインタラプタ)を使ったことがあるのですが、その時は上記のような配線で特に問題なく機能していました。
モジュール品以外にも単品のセンサーなど色々なセンサーがあるので、必ず上記の配線でいけるとは言いませんが、もし使う場合は3Dプリンター向けのものを選んでおくと接続関係は楽かもしれません。

「いいね!」 1

↑まさに知りたかったことでした。
とても助かります。
どうもありがとうございました!!

光学式リミットスイッチモジュールをDUET3に配線したところ、
センサーに障害物がないときにTriggeredがyesとなり、
センサーを障害物があるとTriggeredがnoとなります。
期待したのと逆の動きをするのですが、これを解決するにはどうすればよいでしょうか?

confin.gは以下のようになっています。

; Endstops
M574 X1 S1 P"!^io0.in" ; configure active-high endstop for low end on X via pin io0.in

追記
解決しました。
!を消したら良かったのですね。

「いいね!」 1

制作を再開しました!
年明けの完成を目指しています。

「いいね!」 2

大まかに動くようになりました。これから細かい部分を詰めていきます。

ひとつ質問があります。
正面の黒いボタンを押すと幕が上がり、
人形が動き出します。3場面切り替わると幕が閉じます。
幕が閉じると、幕の向こうで人形の台が逆回転して初期位置に戻ります。

幕が閉じて、幕の向こうで人形の台が逆回転しているときは
ボタンを押しても入力を受け付けないのですが、
お客さんはなぜボタンを押しても何も起きないのだろう?と
思われる可能性が高いです。
モーターが動いている間は赤いライトが点灯して、
ライトが消えているときに、黒いボタンを押すと
人形が動き始める(赤いライトが付いているときは黒いボタンは押さないでね)
というようにできると理想なのですが、
DUET3でそのようなことが出来るのでしょうか?

こんにちは。
素晴らしい作品ですね!

可能だと思います。モーションのファイルの最初と最後にライトをオン・オフするGコードを差し込めば実現可能のように思います。
ただし少し変更が必要になります。

  1. config.gを編集して出力ピンの定義をする
  2. 再生するNCファイルの先頭と最後に出力ピンのONOFFのGコードの追記
  3. ライト関連の配線

ざっくり説明します。
どんなライトを使うつもりかによって若干配線やDuetの使うピンが変わると思いますが、一番簡単そうなDuetの出力ピンに直接ランプやLEDをつなぐ方法で考えてみます。

1. config.gを編集して出力ピンの定義をする

1.1 使う出力ピンを決めます。

DuetのOUT7~9のピンがプラスマイナスの2ピンしかなくて非常にわかりやすいと思います。ただし、自分で圧着してコネクタ作りが必要です。

コネクタづくりが難しそうであれば空いているIO0~8のGNDとio◯.outを使うことにすれば、リミットスイッチのケーブルのコネクタの金具部分を入れ替えて配列を変えることで使えるので、多少楽です。
これも難点があり、IO0~8のio◯.outは3.3V出力のため、使いたいランプに対して電圧が不十分な可能性があります。

使う予定のランプに合わせて出力ピンを選んでください。

1.2 Duetのconfigに出力ピンの定義

Duetのconfig.gに以下を追記します。
OUT7を前提に記載していますが、他のピンに変える場合はout7の部分を変更してください。

;出力ピン定義
M950 P0 C"out7"                              ;出力ピンP0作成
M42 P0 S0.0                                  ;出力ピンP0 デフォルトはオフ

1.3 動作確認

実際に配線してみて、WEBUIにて以下のGコードを送信してみて
M42 P0 S1.0 でランプがオン
M42 P0 S0.0 でランプがオフ
になるかを確認します

2. 再生するNCファイルの先頭と最後に出力ピンのONOFFのGコードの追記

WEBUIでジョブメニューのところにあるtrigger◯.gのファイルを編集で開いて先頭と最後に上記の動作確認で使ったGコードを差し込みます。

先頭 M42 P0 S1.0
最後 M42 P0 S0.0

これでおそらくボタンが押されたら最初にランプが点灯し、最後にランプが消灯するように動作するかと思います。
ただし、このジョブメニュー内のtrigger◯.gのファイルはメカキネソフトでモーションを変更して送信すると上書きされてしまいますので、ご注意ください。

たぶんこれでいけると思うのですが、一度ご確認ください

「いいね!」 1

おお!出来るんですねー!
分かりやすい説明ありがとうございます。
早速必要な部品を取り寄せて試してみたいと思います。