🔧

農業IoTの準備として、TWELITEを使った環境情報の取得をやってみた-その4(試作機の作成)

2022/01/23に公開

今回は、試作機をつくるうえでやったことを記載します。

📑本記事のシリーズ

🏁完成図(試作機)

子機 → 親機に環境データ(温度/湿度/気圧)を無線で定期的に送信する装置です。

😕やりたいこと

センサーを複数配置し、データの可視化をしたいと思います。
ただ、ブレッドボードで用意するのは大変なため、基板を書くことにしました。
また、合わせて筐体を作りました。

💡やったこと

  • 基板の作成
  • 筐体の作成

基板の作成

その1で記載した接続図に、LED/ディップスイッチ/UARTを接続できるように追加しました。
また、回路設計はKiCadを使用しました。

  • その1の接続図
  • 作成した回路図

また、配置配線を行い、完成図は以下のようにしました。

基板の発注

基板の発注は、PCB FUSIONに注文しました。

https://www.fusionpcb.jp/fusion_pcb.html

もっとも安上がりなプランの$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プリンタで筐体を作りました。

https://zenn.dev/kotaproj/articles/a70464d8cd3540

筐体のコード

下記のコードで、筐体(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

組み立てたモノが、冒頭の写真になります。

さいごに

今回は、自身の備忘録を含めた試作機の作成について記載しました。
複数のデータ取得ができたので、次は実際にデータを取得し、可視化を行う予定です。

GitHubで編集を提案

Discussion