t-hom’s diary

主にVBAネタを扱っているブログです。

DIYついでに材料力学に入門してみた

皆さん明けましておめでとうございます。本年もよろしくお願いいたします。



さて、先日ふとしたことをきっかけに木工をしてみたところ案外うまくいったので、2021年はDIYを少しやっていきたいなと思っている。

これまで全く手を出してこなかった理由として、賃貸の集合住宅に住んでいるため大きな音を立てるということができないからだ。
しかしホームセンターで木材をカットしてもらえば、そのほかの作業は大きな音を立てずに済むということが分かったので試してみた。

作ったのはこちら。洗面所の横スペースに設置する。妙に足が長いのは下のスペースにゴミ箱を置くためである。
f:id:t-hom:20210101200547p:plain

作成にあたっては頭の中でなんとなくこんな感じでというイメージはあったんだけどそのままいきなり材料の買い出しに行くとおそらく失敗する。
そこでホームセンターのサイトで角材・板材を仮選定し、板の厚みと角材の太さを元にFusion360でモデリングを行った。最初1x1材で作ろうと思ってたんだけど、モデリングしてみると明らかに足が頼りなく、2x2材に切り替えてちょうどいい感じになった。やはり設計は重要だ。
f:id:t-hom:20210101200755p:plain

今回設計に際して困ったのが、板の厚みや角材の太さをどれくらいにすれば良いのかということ。
ビスの太さや長さ、板と角材をつなぐ金具の厚みなんかも分からない。

分からないので今回は見た目のバランスで適当に選んだが、どうにも気分的にスッキリしない。
やはり今後何か作る際には、きちんと根拠をもって材料選定や設計ができるようになりたい。

ということで、材料力学という分野に入門してみることにした。
小難しい書籍が並ぶなか、目に留まったのはこちら。

マンガでわかる材料力学

マンガでわかる材料力学

書店で立ち読みしてみると、棚とかベンチとかまさにDIYに直接役立ちそうなものが題材になっていて今回の学習目的にとても良さげなので購入してきた。


漫画なので序盤はスラスラと読み進められるのだが、数式が出てくるとやはり難しい。

ちょうどさっき困っていた問題があるので備忘録を兼ねて紹介しておこうと思う。

単純梁の反力計算というもので、左右2つの支点で支える梁の任意の箇所に荷重をかけた際に、それぞれの支点でどれくらいの反力が生じるかという問題である。
図で書くとこんな感じ。(書籍内の表現とは異なり、計算しやすいように変数を設定している。)
f:id:t-hom:20210101204722p:plain

ここで、次のような式が成り立つということが書かれていた。

力のつり合い式 P = Va + Vb
モーメントのつり合い式 Va * La = Vb * Lb

これを解くと次のようになると紹介されている。

Va = (P * Lb) / (La + Lb)
Vb = (P * La) / (La + Lb)

なるほど、分からん。。

。。。


。。。

小一時間ほどしてようやく方程式を解くプロセスが分かったので後から見直して分かるようにここに書いておこうと思う。
とりあえずVbを求める方法について。

(1) 力のつり合い式:
P = Va + Vb
(2) モーメントのつり合い式:
Va * La = Vb * Lb
(3) (1)を移項して、
Va = P - Vb
(4) (3)を(2)に代入して、
(P - Vb) * La = Vb * Lb
(5) (4)の左辺のかっこを外し、
P * La - Vb * La = Vb * Lb
(6) (5)を移項し、
P * La = Vb * Lb + Vb * La
(7) (6)の右辺を変形し、
P * La = (Lb + La) * Vb
(8) (7)を移項し、
P * La / (Lb + La) = Vb
(9) (8)の両辺を交換してちょっと体裁をいじれば解の完成。
Vb = (P * La) / (La + Lb)

式さえできてしまえばそのままプログラムに突っ込んでやれば簡単に計算できる。
たとえば1mの板の両端をそれぞれ支点a、支点bが支え、支点aから0.6mの位置に120kgの錘が乗ったとき、それぞれの支点の反力をVBA言語で求めてみる。

Sub 反力計算()
    Const P = 120 'kg
    Const La = 0.6 'm
    Const Lb = 0.4 'm
    
    Dim Va: Va = (P * Lb) / (La + Lb)
    Debug.Print "支点aの反力は" & Va & "kg."
    
    Dim Vb: Vb = (P * La) / (La + Lb)
    Debug.Print "支点bの反力は" & Vb & "kg."
End Sub

以下は出力結果である。

支点aの反力は48kg.
支点bの反力は72kg.

これくらいなら別にプログラムを書くほどのことではないかもしれないけど、やはり実際に慣れ親しんだコードの形で数式を表現してみるとようやく本当の意味で理解できたようでうれしい。


さて、序盤で既に苦戦し始めているので先が思いやられるが、最終的には微積分まで必要になるようで、そのための補助書籍もいくつか購入済である。
以前にも微積分にトライしたことはあるが、当時はファッション感覚で学ぼうとしてただけでさしたる目的もなく、途中で挫折してしまった。
今回はDIYに活かすというはっきりとした目的があるので、部材の選定や構造設計で多少使いこなせるところまではしっかり学びたいと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。