2021年6月14日月曜日

OpenSCADとUltimaker Curaを使用してRaspberry Pi Zero WHとゼロワン リレー回路 拡張基板のケースを作成する

OpenSCADとUltimaker Curaを使用して、Raspberry Pi Zero WHとゼロワン リレー回路 拡張基板のケースを作成するには以下の手順を実行します。

〇ケースにRapberry Pi Zeroとゼロワン リレー回路 拡張基板を収納した状態

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
・ケース部分のOpenSCADコード
// Raspberry Pi Zeroのベースサイズ
PADDING=0.5;
PIZERO_W=65;
PIZERO_D=30+PADDING;

HOLE_OFFSET = 3.5;
// 四隅の穴の半径: ネジの大きさやプリンタの設定により適宜変更してください。
// HOLE_RADIUS = 1.4;
HOLE_RADIUS = 1.45;

// 底の厚さ
BOTTOM_THICK=2;
// 四隅のスペーサーの高さ
SPACER_H=3;
CAMERA_MARGIN=2;

WALL_THICK=2;
WALL_CONNECTOR_H=14;
WALL_CONNECTOR_HL=6;
MINI_HDMI_W=12;
WALL_BETWEEN_MINI_HDMI_AND_USB=10.5;
// USB2つ+Relay
MICRO_USB_X2_W=29.5;
SDCARD_D=12;

module pizero_base()
{
    difference(){
        union(){
            // 底版
            translate([0, 0, 0])
            linear_extrude(height=BOTTOM_THICK){
                square([PIZERO_W+CAMERA_MARGIN, PIZERO_D]);
            }

            translate([0, 0, BOTTOM_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
            translate([PIZERO_W-HOLE_OFFSET*2, 0, BOTTOM_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
            translate([0, PIZERO_D-HOLE_OFFSET*2, BOTTOM_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
            translate([PIZERO_W-HOLE_OFFSET*2, PIZERO_D-HOLE_OFFSET*2, BOTTOM_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
        }
        translate([HOLE_OFFSET, HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+BOTTOM_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }
        translate([PIZERO_W-HOLE_OFFSET, HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+BOTTOM_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }
        translate([HOLE_OFFSET, PIZERO_D-HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+BOTTOM_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }

        translate([PIZERO_W-HOLE_OFFSET, PIZERO_D-HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+BOTTOM_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }
    }
}

module wall_connector()
{
    translate([-WALL_THICK, -WALL_THICK, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([HOLE_OFFSET*2+WALL_THICK, WALL_THICK]);
    }

    translate([HOLE_OFFSET*2, -WALL_THICK, 0])
    linear_extrude(height=WALL_CONNECTOR_HL){
        square([MINI_HDMI_W, WALL_THICK]);
    }

    translate([HOLE_OFFSET*2+MINI_HDMI_W, -WALL_THICK, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_BETWEEN_MINI_HDMI_AND_USB, WALL_THICK]);
    }

    translate([HOLE_OFFSET*2+MINI_HDMI_W+WALL_BETWEEN_MINI_HDMI_AND_USB, -WALL_THICK, 0])
    linear_extrude(height=WALL_CONNECTOR_HL){
        square([MICRO_USB_X2_W, WALL_THICK]);
    }

    // USBコネクタ右の側面
    translate([HOLE_OFFSET*2+MINI_HDMI_W+WALL_BETWEEN_MINI_HDMI_AND_USB+MICRO_USB_X2_W, -WALL_THICK, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([HOLE_OFFSET*2+WALL_THICK+CAMERA_MARGIN-PADDING*2, WALL_THICK]);
    }

}

module wall_pins()
{
    translate([-WALL_THICK, PIZERO_D, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK*2+CAMERA_MARGIN+PIZERO_W, WALL_THICK]);
    }
}

module wall_sdcard()
{
    translate([-WALL_THICK, 0, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK, PIZERO_D-HOLE_OFFSET*2-SDCARD_D]);
    }

    translate([-WALL_THICK, PIZERO_D-HOLE_OFFSET*2-SDCARD_D, 0])
    linear_extrude(height=WALL_CONNECTOR_HL){
        square([WALL_THICK, SDCARD_D]);
    }

    translate([-WALL_THICK, PIZERO_D-HOLE_OFFSET*2, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK, HOLE_OFFSET*2]);
    }

}

module wall_camera()
{
    translate([PIZERO_W+CAMERA_MARGIN, 0, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK, PIZERO_D]);
    }
}

pizero_base();
wall_connector();
wall_pins();
wall_sdcard();
wall_camera();

〇OpenSCADの画面(ケース)

・フタ部分のOpenSCADコード
// Raspberry Pi Zeroのベースサイズ
PADDING=0.5;
PIZERO_W=65;
PIZERO_D=30+PADDING;

HOLE_OFFSET = 3.5;
// 四隅の穴の半径: ネジの大きさやプリンタの設定により適宜変更してください。
// HOLE_RADIUS = 1.4;
HOLE_RADIUS = 1.45;

// 底の厚さ
BOTTOM_THICK=2;
// 四隅のスペーサーの高さ
SPACER_H=3;
CAMERA_MARGIN=2;

WALL_THICK=2;
//WALL_CONNECTOR_H=14+20;
WALL_CONNECTOR_H=27;
WALL_CONNECTOR_HL=10;
WALL_CONNECTOR_HH=30;
MINI_HDMI_W=12;
WALL_BETWEEN_MINI_HDMI_AND_USB=10.5;
// USB2つ+Relay
MICRO_USB_X2_W=29.5;
SDCARD_D=12;

module pizero_base()
{
    // 天版
    translate([0, 0, 0])
    linear_extrude(height=BOTTOM_THICK){
        square([PIZERO_W+CAMERA_MARGIN, PIZERO_D]);
    }
}

module wall_connector()
{
    translate([-WALL_THICK, PIZERO_D, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([HOLE_OFFSET*2+WALL_THICK, WALL_THICK]);
    }

    translate([HOLE_OFFSET*2, PIZERO_D, 0])
    linear_extrude(height=WALL_CONNECTOR_HH){
        square([MINI_HDMI_W, WALL_THICK]);
    }

    translate([HOLE_OFFSET*2+MINI_HDMI_W, PIZERO_D, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_BETWEEN_MINI_HDMI_AND_USB, WALL_THICK]);
    }

    translate([HOLE_OFFSET*2+MINI_HDMI_W+WALL_BETWEEN_MINI_HDMI_AND_USB, PIZERO_D, 0])
    linear_extrude(height=WALL_CONNECTOR_HL){
        square([MICRO_USB_X2_W, WALL_THICK]);
    }

    // USBコネクタ右の側面
    translate([HOLE_OFFSET*2+MINI_HDMI_W+WALL_BETWEEN_MINI_HDMI_AND_USB+MICRO_USB_X2_W-PADDING, PIZERO_D, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([HOLE_OFFSET*2+WALL_THICK+CAMERA_MARGIN-PADDING, WALL_THICK]);
    }

}

module wall_pins()
{
    translate([-WALL_THICK, -WALL_THICK, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK*2+CAMERA_MARGIN+PIZERO_W, WALL_THICK]);
    }
}

module wall_sdcard()
{
    translate([-WALL_THICK, 0, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK, HOLE_OFFSET*2]);
    }

    translate([-WALL_THICK, HOLE_OFFSET*2, 0])
    linear_extrude(height=WALL_CONNECTOR_HH){
        square([WALL_THICK, SDCARD_D]);
    }

    translate([-WALL_THICK, HOLE_OFFSET*2+SDCARD_D, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK, PIZERO_D-HOLE_OFFSET*2-SDCARD_D]);
    }

}

module wall_camera()
{
    translate([PIZERO_W+CAMERA_MARGIN, 0, 0])
    linear_extrude(height=WALL_CONNECTOR_H){
        square([WALL_THICK, PIZERO_D]);
    }
}

pizero_base();
wall_connector();
wall_pins();
wall_sdcard();
wall_camera();

〇OpenSCADの画面(フタ)

2. Ultimaker CuraでSTLファイルを読み込み、スライスしてgcodeを保存します。

3. 3Dプリンターで印刷します

関連情報

・OpenSCADに関する記事はこちらを参照してください。

・ゼロワン リレー回路 拡張基板については、以下のページを参照してください。
https://bit-trade-one.co.jp/product/module/adrszru/

Raspberry Pi Zeroと小型ターンテーブルをREST APIで制御する

0 件のコメント:

コメントを投稿