ちょっとジオラマを離れて、横に添える予定のヨーダのおもちゃの改造を紹介します^^
話しかけると頭を動かしながら返事を返してくれます。
返事と言っても、内容に沿った返事ではなくてただ単にしゃべってくるだけなんですけどねw
とりあえず笑い声とかも入れて34種類の言葉が有るようです。
元はぼちぼちの値段したみたいですが、現在はアマゾンで送料込みで1800円でした^^。
で、これをジオラマの横に添えてサウンドに合わせて動いていただこうという算段です^^
てなことで、まずは早速背中の6個のネジを外して開けていきましょうw
いつも思いますが、こういった工業製品てホントスマートでよく出来ていますよね~。
この基板を支えてる部分は単4電池2本分の電池ボックスになっています。
これは接着されていないので引っ張れば取れます。
ヨーダの足元にマイクとお腹辺にスピーカーが有るのが確認できました。
この辺は後で外していきます。
ふむふむ、胴体側にはギミックは無いのね。
頷き首を横に振るとなると最低でもモーターは2個ですかね~?
と思いながら頭後ろのネジ4本外し、
ここにバネがかかっていますのでこれを外します。
頭部のギアボックスが出てきました。
まずわかるのは頭を上下に動かす時のリミットスイッチですね。
開ける前によく観察です。配線の位置や色等を確認のため写真を色々な方向から撮影
えっ!!衝撃の事実がww
モーター1個だけなの??
どうやってあの動きを再現してるのよ!!どう考えても最低2個はいるでしょう???
ギアボックスの中に答えが有るのか!こりゃ楽しみ~!どりゃ!!
まずはこの時点でも写真撮りまくりギアの位置を記録
では早速邪魔な一番上の大きなギアを取ってみましょう。
なんか変な形のギア群が取れたw
このギアの大きな部分がモーターからの直接な力を伝えて来るのですが、それだけを取り覗いた状態で下のプラ部分と小さなギアを戻してじっくり見てみると・・・・・・・・・・・・・・・
な!る!ほ!ど~~~~~!!
すげーな!この設計!!いや~これは思いつかなかった!!
中央のギアがモーターの回転方向によってスイングするようにできているんですよ。
これによって2系統の動きが生まれるようになっています!!
何この天才www
で、こちらに動力が来た場合
右下のギア
が回転しますが、このギアの形が
このようなカム状なっています。
このギアが顔面パーツのここに当たって頭部が下に動かされるようです。
原理としてはこんな感じで動かされています。
頭を起こす時は頭頂部にあるバネの力で戻っているんですね。
この方式なら、確かに1方向の回転で頭部を頷かせることできますもんね。
で頭部が動く際にギアボックスのここと
顔面パーツのここが当たって
瞼が動かされ、戻る時はバネのようです。
でね、細かいこと言うとこの頭上下のリミットスイッチが秀逸でちょっと薄い板バネで弾力が有るんですよね。
これによって頭が下がってリミットスイッチが押されている状態からさらに少し頭を下げることが出来るんです。言い換えれば、頭を下げきる途中で止まるようにリミットスイッチが設定されているんですよね。
そのため、最初の動画をよく見てもらうと分かるのですが、頭を上げる時にわずかに一回さらに頭を下げてから頭を上げ始めるんですよね~。
このちょっとした動作が、すごくリアルな感じを出しています。ホントこれ作った人天才!!!
次にギアがこちらに来た時
最終的のこのようなギアが回されます。
で、この出っ張り部分が
この穴に刺さります。
白いパーツが見えていますが、これがリミットスイッチです。先ほどのギアに一部欠けが有りそこで判断しているようです。
ここはこのリンクの応用です。
これで頭が左右に振られる状態になってます。
すげーよ!!改めて工業製品の凄さを思い知らされましたw
ホント私が普段作っているギミックの方こそおもちゃだね^^;
とりあえず、これでリミットスイッチとの関係が理解できましたので制御できそうです。
まずは写真撮影後に配線を切断。
ご丁寧にも基板にも配線が書いてあるねw
この時基板側に配線の色が分かるように少し配線を残した状態で切断すると後々トラブル少ないですw
纏めると
赤黒 モーターの配線
青 頭を下げた時のリミットスイッチ
白 頭を上げた時のリミットスイッチ
オレンジ 頭上下のリミットスイッチマイナス
緑 頭を振る時の中央検出用リミットスイッチ
頭を振る時用のリミットスイッチマイナス
緑は2本ありますが、特に区別なし。どちらでも構わない。
てな感じですね。とりあえずarduinoでコントロールするのに、緑1本(どちらでも可)とオレンジ線はマイナスとしてまとめる事が出来ますので、ヨーダから出てくる配線は合計で6本となります。
ここで注意!
私個人のルールでマイナス線は黒というのが有りますので、オレンジ、緑の1本をまとめた配線を黒とします。
その代わりにモーターから出ている黒の配線を黄色の配線としました。
今後の画像では黄色い線が出てきますのでお間違え無く^^;
モーターを動かしますのでモータードライバーが必要です。
今回はDRV8835を使用しています。
回路図は手書きですがwこちらです。
補足として
ヨーダからの配線のそれぞれの接続場所は
赤 モータードライバーのAOUT1
黄(元は黒線でした) モータードライバーのAOUT2
青 arduinoのA2ピン
白 arduinoのA1ピン
緑 arduinoのA0ピン
黒(元はオレンジと緑の配線を纏めたもの) arduinoのGND
となります。
モータードライバーの配線は
VCC arduinoの5V
MODE arduinoのGND
AIN1 arduinoのD6ピン
AIN2 arduinoのD5ピン
VIN arduinoの3V3
AOUT1 ヨーダの配線 赤
AOUT2 ヨーダの配線 黄
GND arduinoのGND
となります。
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#define yoda_motor01 5 #define yoda_motor02 6 #define yoda_limit_LR A0 #define yoda_limit_up A1 #define yoda_limit_down A2 void yoda_initial(){ while(digitalRead(yoda_limit_up)==1){analogWrite(yoda_motor01,200);} analogWrite(yoda_motor01,0); while(digitalRead(yoda_limit_LR)==1){analogWrite(yoda_motor02,200);} analogWrite(yoda_motor02,0); } void y_up(int s){ //sは100~255 analogWrite(yoda_motor01,s); analogWrite(yoda_motor02,0); while(digitalRead(yoda_limit_up)==1){} analogWrite(yoda_motor01,0); } void y_down(int s){//sは100~255 analogWrite(yoda_motor01,s); analogWrite(yoda_motor02,0); while(digitalRead(yoda_limit_down)==1){} analogWrite(yoda_motor01,0); } void y_LR(int s){//sは50~255 analogWrite(yoda_motor01,0); analogWrite(yoda_motor02,s); while(digitalRead(yoda_limit_LR)==1){} while(digitalRead(yoda_limit_LR)==0){} analogWrite(yoda_motor02,0); } void y_unazuku(int s){y_down(s); y_up(s); } void setup() { pinMode(yoda_limit_LR, INPUT_PULLUP); pinMode(yoda_limit_up, INPUT_PULLUP); pinMode(yoda_limit_down, INPUT_PULLUP); yoda_initial(); delay(500); } void loop() { y_unazuku(150); delay(2000); y_down(200); delay(1000); y_LR(200); delay(1000); y_up(200); delay(2000); y_LR(100); delay(2000); }//loop |
少しだけ関数の方解説しておきます
例としてこちらの関数を
1 2 3 4 5 6 |
void y_up(int s){ //sは100~250 analogWrite(yoda_motor01,s); analogWrite(yoda_motor02,0); while(digitalRead(yoda_limit_up)==1){} analogWrite(yoda_motor01,0); } |
void y_up(int s){ //sは100~255
関数の名前の宣言部分です。プログラム中にy_up(100);とかの記載が有った場合はこちらが参照されます。
()内のsでモーターのスピードが決まります。
この場合は100~255迄の数字を入れましょう。数字が小さい方が遅くなります。
この数字が小さすぎるとモーターが動かない事が有ります。
analogWrite(yoda_motor01,s);
モーターの一方の端子に先ほど入力した数字がPWMの出力数として入力されます。
これで電流を流し始めます。
analogWrite(yoda_motor02,0);
もう一方の端子のPWMを0としてmotor01端子から出力された電流が流れてこれるようにします。
while(digitalRead(yoda_limit_up)==1){}
リミットスイッチが押されていない状態。
つまり今回の場合は頭が上がりきってリミットスイッチを押していない場合。
その間は何もせずに待機します。
何もしないと言っても先ほど指定した電流の流れは維持されていますのでモーターは回り続けています。
でリミットスイッチが押されると
digitalRead(yoda_limit_up)=0
となりますので、while文の条件から外れますので、プログラムは次の行に進んでいきます。
analogWrite(yoda_motor01,0);
リミットスイッチが押されている状態。つまり顔が起き上った状態になりましたから、先ほど流していた電流を切ります。
これでモーターが止まります。
void y_LR(int s)の所ではリミットスイッチの作用方法が違うのでプログラムも少し違っています。
このように、ギミックの構造が違うとプログラムも変わるので冒頭のようなギミックチェックが必要でした^^
このプログラムでこのような動きをします。
よし!ここまで書いたら絶対動かせるでしょう^^
<余談>
34種類のセリフがあるならそれを録音しておこうと思い
スピーカはチャチイのでもう少しましな物に変えて電源接続してスイッチを入れるのですが、最初の起動時のセリフだけ喋って動きませんでした。
どうやら、頭を強制的に動かされた時用に安全プログラムが組まれているようで、それぞれに動きに応じたリミットスイッチの信号がなければスリープ状態に入るようです。
配線つなぎなおしたら動きました^^;
ほんと何から何まですげーなww
関連すると思われる記事:
- None Found
こりゃプロの仕事だね。
何十とこういうトイを低コストで設計している人から見れば常套手段なんだろうけど、初見の素人には衝撃的な仕組み。
一度設計した方に弟子入りしたいですねww
いわゆるピタゴラスイッチてきにここに来たらここにスイッチングみたいな
誘導路があってモーター一軸の回転はいわば重力の一方向の運動方向を
替えてあげるみたいな?
からくり人形のおちゃくみ人形をハイテクかしたみたいなスゴ技
よくもまあこれを分解しようとおもいましたね。
チャレンジャーだわあ。あっぱれ!
gyoさん こんばんは!
ほんとプロの仕事ってこういうもんなんだろうね~。
シンプルでありながらよく考えられている。
確かに、モーター一つ増えるだけでモータ分だけでなくて全体のコストが上がりますもんね~。
私も弟子入りしたいww
teznoさん こんばんは!
サーボと違ってモーターでの可動をする場合はリミットスイッチて必須ですからね~。
その辺が面倒でサーボに逃げちゃうこと多いけど、こうやって1つのモーターを使ってギアで動かしている物見ると改めてその構造と凄さに驚かされますわ~。
3dプリンターもあるから、この辺やろうと思えば出来るはずで、このギアとリンクを使ったギミックが思いつき作れるようになったら一人前なんだろうね・・・・・遠いなww
あっ、元に戻せるかどうかは分かりませんがとりあえず分解しますよww
戻らない場合はそのままおもちゃ箱へズドンww
こんばんは
この「ヨーダ」氏はよくできていますよね!!
こういう細かいメカ設計は、昭和の、たぶん零細企業の年配のおじいさんなんかが、匠の技で設計するんでしょうね。凄いです。
ギア付きのパルスモーター(コンデジのレンズ駆動の)二個の方が手っ取り早いのでしょうが。
よくできてるし、またよく解析してるしw
2方向に動くんなら動力源もその数必要って思っちゃうけどね。
これ、中央のギアが左右?に動いて動作系を切り替えるのもあまり甘いとスリップしちゃいそうだし、そこの抵抗をどのくらいにするか?とかも製造誤差も含めてキチンんと考えてるんだろうな、と思うとホントすごいですね。
ひとつ教えてください。リミットスイッチをデジタル端子ではなくアナログ端子に割り当ててるのって何か意図があるんですか?digitalReadしてるから、しきい値の調整とかでもないようだけど。。。
Vividさん こんにちは!
よく出来てますよね~!
ギアボックス開けた時唸っちゃいましたよww
ギアが左右に振って可動ギアを変えるなんて思いもしませんでした^^;
ほんと匠の技による設計ですね~。
私が作るならおっしゃるようなギア付きのモーター2個を考えて、スペース的に入らないから諦めるというパターンの気がしますww
なおさん こんにちは!
さすが千里眼ww
そこそこ!モーターの回転だけであの部分をうまく左右に振らす抵抗値とギアのかみ合わせ具合とが絶妙なんですしょうね。ちなみに分解しギアを元に戻す時に、ほぼ同じ大きさに見えたのでギアの順番を無視して戻したら一切動きませんでしたww
微妙な差で出来ているみたいですよ~。
ああっwあのリミットスイッチがアナログ端子につながっているのは、元々今回のプログラムはダゴバのX-wing用のプログラムのヨーダの可動部分を一部抜粋したものなので、他の端子はダゴバの方で使っていたのでたまたまこのピンにリミットスイッチを割り当てただけで全く意味はありません^^;
こんばんわ
おもちゃとはいえ中身はすごいからくりだったんですね❗️
びっくりでした。
schuさん こんばんは!
最近のおもちゃはホント凄い物多いですよ~。
昔のおもちゃもギアの組み合わせで色々な機能を付加している物が多いですが、今回のヨーダもかなりの物でした^^
これだからおもちゃの分解やめられませんねw
これはすごい。いろいろと考えが詰まった商品ですね!
いわゆる絡繰人形とか、こんなんなんでしょうね~。
スイングして噛合わせるギヤは、工場設備でも使ってますが、意外と壊れないんですよね。ただ少しでも不具合が進むと一気に壊れちゃうので、出来れば避けたい仕組みです(^^;
パイロットpapa さん おはようございます!
凄いですよね~。アイデア満載でびっくりでした^^:
ギアの組み合わせでここまで出来るんですね~
おおっw工場設備都下でもこのようなギミックが使われているんですね。
となるとアイデア自体は結構前からあるんですね。
確かにあの部分不具合出ると一気に使えなくなりそうですねw
実はギアを戻す時に順番を間違えて組み込んでしまい、動かなくなってしばらく悩みましたww