🔧
農業IoTの準備として、TWELITEを使った環境情報の取得をやってみた-その4(試作機の作成)
今回は、試作機をつくるうえでやったことを記載します。
📑本記事のシリーズ
- その1:🌡️ 環境情報の取得
- その2:📶 中継器
- その3:🔋 電池持ちと死活監視
- その4:🔧 試作機の作成 !!!本記事!!!
🏁完成図(試作機)
子機 → 親機に環境データ(温度/湿度/気圧)を無線で定期的に送信する装置です。
😕やりたいこと
センサーを複数配置し、データの可視化をしたいと思います。
ただ、ブレッドボードで用意するのは大変なため、基板を書くことにしました。
また、合わせて筐体を作りました。
💡やったこと
- 基板の作成
- 筐体の作成
基板の作成
その1で記載した接続図に、LED/ディップスイッチ/UARTを接続できるように追加しました。
また、回路設計はKiCadを使用しました。
- その1の接続図
- 作成した回路図
また、配置配線を行い、完成図は以下のようにしました。
基板の発注
基板の発注は、PCB FUSIONに注文しました。
もっとも安上がりなプランの$4.9で10枚の基板を発注しました。
かかった料金はです。
- 基板製造
- $4.9
- 輸送費(OCS使用)
- $18.41
- 総計
- $23.31(約2650円)
注文から手元に届くまでは、約2週間ほどかかりました。
- 注文~注文受付~基板審査 1/5-1/7
- 生産中~製造完了 1/7-1/15
- 郵送(中国→国内)1/15-1/20
- 郵送(東京→関東)1/20-1/21
無事、基板が届きました👏。
動作の確認
早速、はんだ付けを行い、部品実装を行いました。
無事、温度センサーを認識することができました。
これで、複数確認ができます🎉。
筐体の作成
設置を考え、3Dプリンタで筐体を作りました。
筐体のコード
下記のコードで、筐体(3Dデータファイル)が作成できます。
twe_case.py
from fnmatch import translate
from solid import *
from solid.utils import *
def add_corner(cu, p_x=24, p_y=24, p_z=0, cy_h=5, cy_r=1.3):
"""ネジ穴土台
"""
cy = cylinder(h=cy_h, r=cy_r)
offs = [ (p_x/2, p_y/2, p_z),
(p_x/2, -p_y/2, p_z),
(-p_x/2, p_y/2, p_z),
(-p_x/2, -p_y/2, p_z),
]
for off in offs:
cu += translate(off)(cy)
return cu
def add_nejiana(cu, cu_x=24, cu_y=24, cu_z=10, cy_h=5, cy_r=1.3):
"""ネジ穴の追加
"""
cy = cylinder(h=cy_h, r=cy_r)
offs = [ (cu_x/2, cu_y/2, cu_z),
(cu_x/2, -cu_y/2, cu_z),
(-cu_x/2, cu_y/2, cu_z),
(-cu_x/2, -cu_y/2, cu_z),
]
for off in offs:
cu -= translate(off)(cy)
return cu
def add_side(cu, x_w=50, y_w=60, z_w=20, t=2):
wa = cube([x_w+t, y_w+t, z_w], center=True) - cube([x_w, y_w, z_w+t], center=True)
wa = translate((0, 0, z_w/2))(wa)
return cu + wa
def make_base(cu_x=24, cu_y=24, cu_z=10, cut_x=12, cut_y=12, cut_z=5, cut_mizo=3):
"""btm部品の作成
"""
cu_base = cube([cu_x, cu_y, cu_z])
cu_cut_naka = translate([(cu_x-cut_x)/2, (cu_y-cut_y)/2, cu_z-(cut_z-0.1)])(cube([cut_x, cut_y, (cut_z+0.1)]))
wa = cu_base - cu_cut_naka
wa = translate([(-1)*cu_x/2, (-1)*cu_y/2, 0])(wa)
return wa
def cut_side(cu, xcut=20, ycut=30, zcut_min=10, zcut_max=20):
cu -= up(zcut_min + (zcut_max-zcut_min)/2 )(cube([xcut, 200, (zcut_max-zcut_min)], center=True))
cu -= up(zcut_min + (zcut_max-zcut_min)/2 )(cube([200, ycut, (zcut_max-zcut_min)], center=True))
return cu
def make_totte():
# totte
cy = cylinder(h=2, r=20)
cy += translate([-18.5, +2, 0])(cube([9, 2, 5]))
cy += translate([-18.5, -2-2, 0])(cube([9, 2, 5]))
cy -= down(1)(cylinder(h=2+1+1, r=10))
c_cut = translate([0, -60/2, -1])(cube([20+1, 60, 2+2], center=False))
cy -= c_cut
c = translate([0, -60/2, 0])(cube([10, 60, 2], center=False))
return cy+c
if __name__ == "__main__":
# base
wa_base = make_base(cu_x=52.5, cu_y=62.5, cu_z=2, cut_x=40, cut_y=50, cut_z=5, cut_mizo=3)
wa_base = add_corner(wa_base, p_x=50-4*2, p_y=60-4*2, p_z=0, cy_h=5, cy_r=4.3)
wa_base = add_nejiana(wa_base, cu_x=50-4*2, cu_y=60-4*2, cu_z=-1, cy_h=10, cy_r=1.7)
wa_base = add_side(wa_base, x_w=50, y_w=60, z_w=5+60, t=2.1)
wa_base = cut_side(wa_base, xcut=35, ycut=45, zcut_min=10, zcut_max=100)
wa_base = color("red")(wa_base)
scad_render_to_file(wa_base, "twcase_base.scad", include_orig_code=False)
# kasa
kasa = make_base(cu_x=52+3, cu_y=62+3, cu_z=10, cut_x=52.5, cut_y=62.5, cut_z=8, cut_mizo=3)
kasa += make_base(cu_x=52-2, cu_y=62-2, cu_z=10, cut_x=47, cut_y=57, cut_z=8, cut_mizo=3)
kasa = cut_side(kasa, xcut=20, ycut=30, zcut_min=0, zcut_max=100)
kasa += make_base(cu_x=52+3, cu_y=80, cu_z=10, cut_x=52+1, cut_y=78, cut_z=8, cut_mizo=3)
# totte
totte = make_totte()
totte_left = left(27)(totte)
totte_right = right(27)(mirror([180, 0, 0])(totte))
kasa_all = color("blue")(totte_left + totte_right + kasa)
scad_render_to_file(kasa_all, "twcase_kasa.scad", include_orig_code=False)
# all
kasa_all = rotate([180, 0, 0])(kasa_all)
kasa_all = up(70)(kasa_all)
scad_render_to_file(wa_base + kasa_all, "twcase.scad", include_orig_code=False)
return
組み立てたモノが、冒頭の写真になります。
さいごに
今回は、自身の備忘録を含めた試作機の作成について記載しました。
複数のデータ取得ができたので、次は実際にデータを取得し、可視化を行う予定です。
Discussion