ペーパークラフト・テオ・ヤンセンのダウンロード一時停止のお知らせ
ご好評頂いている、テオ・ヤンセンのペーパークラフトですが、現在、Theo Jansen ライセンス会社との間で公認プロセスに入っており、一時的にデータのダウンロードを停止させて頂いています。
大変申し訳ございませんが、ご了承願います。
なお、すでにダウンロードされた方は、作り方は公開しておりますので、ご利用ください。
Ouch!
ご好評頂いている、テオ・ヤンセンのペーパークラフトですが、現在、Theo Jansen ライセンス会社との間で公認プロセスに入っており、一時的にデータのダウンロードを停止させて頂いています。
大変申し訳ございませんが、ご了承願います。
なお、すでにダウンロードされた方は、作り方は公開しておりますので、ご利用ください。
Ouch!
少し遅くなってしまったけど、ペーパークラフトのテオ・ヤンセンメカのpdfデータとその作り方を更新しました。
ぜひ、作ってみてね。ホントに感動するはずだから。
ペーパークラフトで作るテオ・ヤンセン
11/22,23に開催されるMake Tokyo Meeting04に出展するよ。
前回のMTM03で好評だったペーパークラフトのテオ・ヤンセンレプリカをさらにスムーズに動くように改良して、Rhenonicsライクなモデルが出来上がった!かなり苦労したけどね:)
このモデルも近いうちに作り方を公開するので、ぜひトライしてみて。
もう一つTipsを紹介しよう。
これはArduinoの無邪気な回路が引き起こす悪影響をどうクリアするか?という話。
基本的にArduinoはAVRマイコンの端子をそのままソケットに引き出してしまっている。これが問題。
通常、回路のケアとしては、端子に対するノイズ処理が必要だ。つまり、単純に機能を実現する回路では実は不十分だと言うこと。もしモーターをArduinoで動かそうと思っているなら、結構ハマるはずだよ。
わかりやすいのは、バッテリーでモーターを使ったArduinoアプリケーションを作ろうとした場合。
バッテリーには内部抵抗というのが存在していて、バッっと電流を流そうと思っても、この内部抵抗で瞬間に流せる電流は決まってしまう。モーターみたいに大電流が流れるものをつなげると、この内部抵抗がジャマになって電圧が下がってしまう。モーターをPWMで制御するとバッテリーの電圧をオシロスコープで測定するとギザギザになっていることがわかる。
このギザギザ波形は結局、この電源を利用しているすべての回路に影響を与える。
この場面では、まずは必要な電源系にモーターの周波数の影響がないローパスフィルター(CRフィルター:抵抗とコンデンサの組合せ回路)を設けて電源電圧の変動の影響がないようにしよう。CRフィルターのカット周波数は、1/2πCRで計算できる。ハイパスフィルターも同じ式。
それから、センサの出力端子にクロストークなどでノイズが乗ってしまう場合にもフィルターは有効だ。センサの出力周波数にマッチしたフィルターを用意しよう。
ちなみに、ArduinoのPin2を割込み(attachInterrupt)で設定してFA-130を動かしてみたら、ものの見事にノイズが乗って割込みが入りまくってしまったので、対策しようと思ったんだけど、うまくいかなかった〜。もっと勉強しないとダメだなぁ、と思ったのでした。アナログ回路は奥ふぁふかい。orz

前の投稿で、Arduino用のモータードライバを紹介したけど、もう少し補足しよう。
まず、このモーターライブラリは、モーターの回転数をVref端子で制御出来るわけだけど、もちろん正転・逆転制御端子だけのPWM制御でも使うことが出来る。
Vrefモードは、Vrefにかかる電圧がモーターの回転数を決めるモード。対してPWMモードは、正転・逆転制御端子の単位時間におけるOn:Off時間比でモーターの回転数を決めるモードだ。
Vrefモードでは正転・逆転制御端子の設定はデジタル出力端子にする(のが一般的だろう)。PWMモードではアナログ出力端子に設定することになる。
Vrefモードが便利な場面はなんだろう?
Arduinoのアナログ出力は実はPWM出力なので(基板のシルクにもそう印刷されている)、Vrefモードも実はモータードライバICのVref端子にOn:Off時間比で電圧を設定していることになる。
このPWMの周波数がモータードライバの規格にあっているかどうか?が問題になる(参考:エレキジャック
連載キットで作る(67) ロームのBD6211モータ・ドライバをテストする(4))。例えば、ロームのBD6211FではPWM周波数は20k〜100kHzなのに対し、Arduinoでは500Hzであって、規格を満たすことが出来ない。
こういう時にVrefモードが役に立つ。Vrefへはあくまで平均電圧がどのくらいか?ということになるので、500HzでPWMで平均電圧を出力していても問題がないわけだ。
対して、PWMモードの便利なところは、制御端子がVrefモードに比べて1本少ないところ。Arduino電源電圧をモーター電圧が上回っていれば、こちらの方を使って、Arduinoの使用端子を減らすことが出来る。
さて、どちらのモードで動かすかをどうやって選択するか?なんだけど、このドライバライブラリでは2つあるDCMotor::Init関数のどちらを選択するかで決まる。
DCMotor::Init(int FINpin, int RINpin, int VREFpin, int motorVIN, int boardVIN)の方がVrefモード、DCMotor::Init(int FINpin, int RINpin)の方がPWMモードだ。
setup関数でDCMotor::Initをコールすればいいよ。
しばらくぶりのブログ。
ネタはいろいろあるんだけど、なかなかアップできなくて反省してる。
と、いうことで、今回はArduino用DCモータドライバライブラリをアップするね。
DCモーターってのは、直流モーターのことで、よく見ることが出来るのは模型用のFA-130とかRE-260とかだね。
こういうモーターを専用のモーター制御ICを使えば、Arduinoから制御出来る。
今回対象にしているのは、東芝TA7291(P)(秋月電子通商や千石電商で購入可)やBD6211F(スイッチサイエンス)というモータードライバーだ。
これらは、正転・反転(CW/CCW)をデジタル出力2本の組み合わせ+出力電圧(Vref)をアナログ出力で制御出来るICだ。
つまり、デジタル出力を2本とアナログ出力を1本、Arduinoにつなげればいいわけだ。
このファイルがそのArduino用のライブラリ。
これを解凍して、ArduinoIDEのhardware->librariesにそのままコピーする。そして、#include <DCMotor.h>とすれば、このライブラリを利用できる。
例えば、こんな感じだね。モーターは1秒間正転してから、1秒間逆転するSketchだ。
#include <DCMotor.h>
#define FIN 7 // 回転制御端子1
#define RIN 8 // 回転制御端子2
#define VREF 9 // モータ電圧制御端子
#define M_VOLTAGE 3 // モーター電圧最大値:3V
#define B_VOLTAGE 5 // Arduino電源電圧:5V
DCMotor motor; // モータードライバの宣言
void setup()
{
motor.Init(FIN, RIN, VREF, M_VOLTAGE, B_VOLTAGE);
}
void loop()
{
motor.Forward(1000); // 1秒間正転
motor.Free(); // モーター回転方向変更による電流保護
motor.Backward(1000); // 1秒間逆転
motor.Free(); // モーター回転方向変更による電流保護
}
ここで、M_VOLTAGEというのは、実際にモーターにかける電圧で、B_VOLTAGEというのは、Arduinoの電源電圧。
もし、2つのモーターを制御したければ、同梱したDoubleDCMotorが役に立つ。
これは、2つのモーターを1つのコマンドで制御出来るようにしたライブラリだ。
#include <DoubleDCMotor.h>
#define L_FIN 7 // 左モーター回転制御端子1
#define L_RIN 8 // 左モーター回転制御端子2
#define L_VREF 9 // 左モータ電圧制御端子
#define R_FIN 13 // 右モーター回転制御端子1
#define R_RIN 12 // 右モーター回転制御端子2
#define R_VREF 11 // 右モータ電圧制御端子
#define M_VOLTAGE 3 // モーター電圧最大値:3V
#define B_VOLTAGE 5 // Arduino電源電圧:5V
DoubleDCMotor motor; // モータードライバの宣言
void setup()
{
motor.Init(L_FIN, R_FIN, L_RIN, R_RIN, L_VREF, R_VREF, M_VOLTAGE, B_VOLTAGE, 1.1); // 例)左右のモータ回転速度のバラツキ補正は1.1
}
void loop()
{
motor.Go(1000); // 1秒間前進
motor.TurnLeft(1000); // 1秒間左回転
motor.TurnRight(1000); // 1秒間右回転
motor.Back(1000); // 1秒間後退
}
2つのモータを同時に制御出来る。このライブラリは、モーターの空回転(Free)を取り込んであるので、特に明示的にFreeを実行しなくてもいい。
バラツキってなに、って?同じモータでも同じ電流を流しても同じ速さで回転はしないんだ。それはどうしても発生してしまって、特に2つのモーターを使って動くようにしたくても、まっすぐ前進・後進できないで曲がって動いてしまう。そこで、左右の回転差を割合で指定して、モーターにかけるVrefを調整することでまっすぐ前進・後進出来るようにするパラメータだ。これはモーターによって変わるので、実際にくみ上げた後に最適な値を選んで欲しい。
トライしてみてね。
大人の科学No.10の付録のスターリングエンジンを作ってみた。
外燃で閉鎖系の面白いエンジンだ。
温度差だけでエンジンになるというのは、とても魅力的だね。
実際の製作過程は、tumbr(http://emergeplus.tumblr.com)に載せてあるよ。
動いている動画はこれ。温度差を出すために焼酎お湯割り(約90°)と保冷剤(0°)を使っている。焼酎はこの後おいしく飲んだけどね :p)
この付録のエンジンは小さな温度差(数十度)で動作するので、あまり大したトルクは出ていない。指で触れば泊まっちゃうし、実際トルクがないので、少しの組み立てフリクションで全く動かない。プッシュロッドの位置調整やプーリー軸の隙間調整でかなり苦労したよ。でも、スターリングエンジンは温度差が大きいほど、トルクは出るはずだ。いずれ、他の製作にもこのスターリングエンジンを使ってみたいと思っているんだ。
排気ガスが出ないのがスターリングエンジンの魅力。太陽電池の出力を熱源にすれば、とてもクリーンでエコなエンジンが出来上がる。
今までのペーパークラフトTheoJansenメカは、単体では動くけど、やっぱり複数つなげるとフリクションがすごいのと、リンクへの力のかかる向きが最適でないので、とてもスムーズに歩けないです。
なので、設計変更に取りかかっているんだけど、出来たらまたお知らせするね。
ちょっと時間をくださいね。
2日間にわたって開催されたMake:Tokyo Meeting03に、ペーパークラフトTheo Jansenを展示したよ。
正直、ぎりぎりまでチューニングしたんだけど、やりきれず、それでもエイヤっ!と出してしまって半分申し訳なかったwww。
2日間ともかなりの方がミニ・ワークショップに参加して頂き、またEmerge+の名刺も全てはけてしまう、という盛況でほんとにホッ。
出来れば、他の展示も見に行きたかったんだけど、やっぱりワークショップに来てくれる人に対応するのがうれしくて、結局見れずじまい。
今回のペーパークラフトは、未だ自分的に納得が行かないまま展示したので、秋のMTM04(開催されるかな?)には、もっとバッチリと準備して展示するね。
色々課題もあったんで、次回はもっと来てくださる方々に満足の行く展示をしようと誓うOuch!であったのでした。
Thanks for comming!
※ペーパークラフトは順次バージョンアップしていくので、乞うご期待!