ラジオペンチさんの、こないだのチューブポンプの
特性を調査されていた記事を読んでいて、ふと以前、
流体ポンプ関係にオイラお熱を上げて、ちょっと調べて
いたときのことを思い出してた。
チューブポンプは、流体を扱うポンプの中でも、構造が
シンプルで、設計も比較的簡単で、逆流もしづらいと
いう、けっこうイイカンジの動作原理だと思うんだけど、
チューブの耐久性とか、チューブを押しつぶすときの
エネルギーロスとかがちょっと気になってたところ。
で、機械式(ソリッドな構造)のポンプについてあれこれ
調べていたんだけど、例えばこんなのが。
まず、トロコイドポンプ。
トロコイド曲線を使って、外歯と内歯の隙間で流体を
送り出す仕組みのポンプ。内接歯車ポンプなんて呼び方
もするみたい。↓これらなんかが解り易い。
https://www.youtube.com/watch?v=Ds_SlghtImA
https://www.youtube.com/watch?v=OU9DZOmbGhk
よく、エンジンのオイルポンプとかに使われているっぽい。
トロコイドポンプには、こういうのもあるみたい。
https://www.youtube.com/watch?v=MYvbDaHoxRg
三日月形の境目構造が中に入っているのが特徴的。まぁ、
ギヤの形がトロコイドっぽいないんだけど。
それ以外にも、rootsポンプとか、rotery Lobeポンプとか、
外接ギヤポンプなんていうのがあるみたい。
https://www.youtube.com/watch?v=_-fwWrFLiyY
https://www.youtube.com/watch?v=eDTske_nSeI
https://www.youtube.com/watch?v=Z05tau_4jes
あと、モーノポンプっていうのが、一見、摩訶不思議
なんだけど、
https://www.youtube.com/watch?v=RNs7MOeuZqw
これって、
https://www.youtube.com/watch?v=h236SP86nnQ
https://www.youtube.com/watch?v=AMtyFwMDL7w
このECギヤなんかと、動作原理とか構造とか、近いもの
なんだろうな。
で、いくつかあるうち、最初に触れた「トロコイドポンプ」。
計算原理っていうか、描き方の解り易い動画が。
https://www.youtube.com/watch?v=zOVCLddlBvs
とても解り易い。
こういうのって、FDMの3Dプリンタなんかだと精度的に
厳しいだろうけど、造形自体は、比較的簡単な計算式
で出来ている。計算式自体はここに詳しい。
http://aozoragakuen.sakura.ne.jp/taiwa/taiwaNch04/hikari/node4.html
このうち、外側の花びらみたいな絵が描ける方(円周
の外を円が転がるときのサイクロイド)の方は
「Epicycloid」、内側のトゲトゲみたいな絵が描ける方
(円周の内側を円が転がるときのサイクロイド)の方は
「Hypocycloid」と呼ぶみたい。
https://en.wikipedia.org/wiki/Epicycloid
https://en.wikipedia.org/wiki/Hypocycloid
これらの図形を描いて、凸凹部分を1個おきに内側→外側
→内側→外側…って拾っていけば、この図形が描けるという
具合。
こういう風に、計算式で簡単に表せられる図形って、
OpenSCADなら簡単に出来ちゃうよな、と思って、ちょっと
OpenSCAD関係で検索してみると、
https://www.thingiverse.com/thing:8348
thingiverseにそれっぽいの発見。(これはポンプじゃなく、
変速ギヤだけど)
やっぱ、OpenSCADだとサクッと出来るだろうなと思って、
この図形を描くプログラムを書いてみる。
/**************/
/* parameters */
/**************/
// radial of outer circle
outer_r = 15;
// number of outer teeth (must be a even number)
out_teeth = 8;
// degrees par step
$fa = 1;
/******************/
/* sub parameters */
/******************/
// tooth height (radial of small circle)
tooth_h = outer_r / (out_teeth * 2);
// radial of inner circle
inner_r = outer_r - (tooth_h * 2);
// number of inner teeth
in_teeth = out_teeth - 1;
/*************/
/* functions */
/*************/
// Epicycloid(outer circloid) //
function epicycloid_x (r1, r2, agl) =
(r1 + r2) * cos(agl)
- r2 * cos (((r1 + r2) / r2) * agl);
function epicycloid_y (r1, r2, agl) =
(r1 + r2) * sin(agl)
- r2 * sin (((r1 + r2) / r2) * agl);
// hypercycloid(inner circloid) //
function hypercycloid_x (r1, r2, agl) =
(r1 - r2) * cos(agl)
+ r2 * cos ((-(r1 - r2) / r2) * agl);
function hypercycloid_y (r1, r2, agl) =
(r1 - r2) * sin(agl)
+ r2 * sin ((-(r1 - r2) / r2) * agl);
/***********/
/* modules */
/***********/
// a epicycloid //
module epicycloid (a, b) {
for (i = [1: (360 / $fa)]) {
echo(i);
agl1 = i * $fa; // now angle
agl2 = (i+1) * $fa; // next angle
x1 = epicycloid_x(a, b, agl1);
y1 = epicycloid_y(a, b, agl1);
x2 = epicycloid_x(a, b, agl2);
y2 = epicycloid_y(a, b, agl2);
echo (x1, y1);
polygon (points = [[0,0],[x1,y1],[x2,y2]] );
}
}
// a hypercycloid //
module hypercycloid (a, b) {
for (i = [1: (360 / $fa)]) {
echo(i);
agl1 = i * $fa; // now angle
agl2 = (i+1) * $fa; // next angle
x1 = hypercycloid_x(a, b, agl1);
y1 = hypercycloid_y(a, b, agl1);
x2 = hypercycloid_x(a, b, agl2);
y2 = hypercycloid_y(a, b, agl2);
echo (x1, y1);
polygon (points = [[0,0],[x1,y1],[x2,y2]] );
}
}
// difference between epicycloid and hypercycloid
module diff (a, b) {
difference () {
epicycloid (a, b);
hypercycloid (a, b);
}
}
module shadow (a, h, n) {
for (i = [1: 2: n]) {
agl1 = i * (360 / n);
agl2 = (i + 1) * (360 / n);
x1 = cos(agl1) * (a + h * 2);
y1 = sin(agl1) * (a + h * 2);
x2 = cos(agl2) * (a + h * 2);
y2 = sin(agl2) * (a + h * 2);
polygon (points = [[0,0],[x1,y1],[x2,y2]] );
}
}
module gear (r, t) {
union () {
difference () {
epicycloid (r, tooth_h);
shadow (r, tooth_h * 2, t * 2);
}
hypercycloid (r, tooth_h);
}
}
/**************/
/* draw gears */
/**************/
linear_extrude(10) {
// outer gear
gear (outer_r, out_teeth);
// inner gear
translate ([0, 40, 0]) {
gear (inner_r, out_teeth - 1);
}
translate ([40, 0, 0]) {
difference () {
// outer gear
gear (outer_r, out_teeth);
// inner gear
translate ([tooth_h * 2, 0, 0]) {
gear (inner_r, out_teeth - 1);
}
}
}
}
プログラム冒頭の、「out_teeth」の値が、外歯の歯の数。
「outer_r」が、外歯の平均半径。(歯の山と谷を均した
ときの半径)
外歯の数は、4以上の「偶数」であることを想定。
(奇数でもそれなりにでるっぽい)
これら2つのパラメタに適当に数値を放り込むと、色々な
パターンで描ける。
まず、外歯が8枚。
左下が8枚の外歯。その上が7枚の内歯。右側は、それら
を引き算してみただけのサンプル。
このプログラム自体は、2D図形としての「Epicycloid」
「Hypocycloid」からトロコイドの図形を描くモジュール
がメインで、ここではおまけとして、その図形をextrude
で立体化してみただけ。
本当は、外歯のお肉は外側にあって、内歯のお肉は内側。
2D図形のうち、左の2枚がそのメインモジュールの結果。
パラメタ変えると、16枚とか。
4枚とか。
なぜか4枚とか特定の条件では、図形の境目部分に、剃り
残しのへんなゴミが残っちゃう。あとでもうちょっと
プログラムチェックしておかないといけないかな。
ロジック的には、こういう剃り残しが出ないようにして
いるはずなんだけどな。
5枚歯以下の図形が出てくると、この剃り残しが出るみたい。
なんでだろ?
2D図形で見ても、やっぱりこんな剃り残しの線が出ちゃう。
まぁ、3Dプリンタで出力するときには、この立体は出て来ない
んじゃないかと思うんだけど。
shadowモジュールとのブール演算あたりが悪さしてるの
かなぁ?多分。半径にh*2を足したことで、小数点以下
の細かい誤差が出て、それが悪さしているのかなぁ?
まぁ、そういうわけで、このモジュールを使うと、外歯、内歯
の図形が描けるので、これを元にして、内歯の回転軸から軸を
生やしたり、外歯の回転させる方法を考えたり、吸引口、
吐出口を設けたりすれば、ポンプの完成という具合になるはず。
吸引口、吐出口は、結局どうするのが良いのかよくわからな
かったんだけど、参考にしたさっきの動画とか、もしくは
https://www.youtube.com/watch?v=6DwLpKvMU-k
このアクリルモデルのものが参考になりそう。
FDMの3Dプリンタだと、さすがに精度的に厳しいだろうけど、
光学造形の3Dプリンタなら、それなりに動くんじゃないかな、
という気がする。
まぁ、チューブポンプと違って、ほんのちょっとの隙間でも
逆流が起こりそうな気はするので、「連続回転稼動」する
用途ならいいんだけど、回転と休止を繰り返すような用途
だと機械式ポンプは厳しいところがあるかな。
(追記)
https://twitter.com/famitsu/status/1034352402470658048
いしかわきょーすけさんの29日の日記から。
なんと!!、待ちかねていた「遊ぶ!ゲーム展3」が
とうとう開催されるみたい。あぁ、よかった。
10月6日からか。
いくらチェックしても、新しい情報出てこなかった
から、立ち消えになっちゃったの?とか思っていた
んだけど、開催うれしい。
オイラ、格ゲー、音ゲーはほとんどやらなかったから
苦手なんだけど。しいて言えば、パラッパラッパーと
鉄拳はちょっとだけやったな。
https://www.youtube.com/watch?v=7OL-p7REIBk

0