ラベル CAD の投稿を表示しています。 すべての投稿を表示
ラベル CAD の投稿を表示しています。 すべての投稿を表示

2021年12月16日木曜日

Debian 11(Bullseye)にFreeCADをインストールする

FreeCADはオープンソースのCAD描画アプリケーションです。

〇FreeCADの画面

インストール方法

以下のコマンドを実行します。
sudo mkdir -p /opt/freecad

cd /opt/freecad

sudo wget https://github.com/FreeCAD/FreeCAD/releases/download/0.19.2/FreeCAD_0.19-24291-Linux-Conda_glibc2.12-x86_64.AppImage

sudo chmod +x FreeCAD_0.19-24291-Linux-Conda_glibc2.12-x86_64.AppImage

cat << EOF | sudo tee /usr/share/applications/freecad.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/freecad/FreeCAD_0.19-24291-Linux-Conda_glibc2.12-x86_64.AppImage
Name=FreeCAD
Categories=Development;
EOF

関連情報

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

2021年9月2日木曜日

Rocky Linux 8.4にKiCADをインストールする

KiCADで回路図やプリント基盤をデザインする事ができます。

〇KiCADの画面

インストール方法

以下のコマンドを実行します。
sudo dnf -y install flatpak

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak -y install --from https://flathub.org/repo/appstream/org.kicad_pcb.KiCad.flatpakref

関連情報

・KiCADに関する他の情報はこちらを参照してください。

・KiCADのwebサイト
https://kicad-pcb.org/

2021年8月14日土曜日

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴がついた十字アームを作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴がついた十字アームを作るには以下の手順を実行します。

〇LEGO Technic互換の穴とSG92Rギアに対応する穴がついた十字アームの写真
※十字アームに付けられている灰色の部品は純正のLEGOブロックです。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
・穴の半径など3Dプリンタや設定によって微調整してください。
・ギアの歯の半径サイズはSMALL_RADIUS/LARGE_RADIUSで変更できます。ギアが緩かったり、はまらなかった場合は増減して調整してください。
・アームのサイズは穴・ギアの数を表すNUM_HOLE_Wで調整できます。奇数を指定してください。

〇LEGO Technic互換の穴とSG92Rギアに対応する穴がついた十字アームのソースコード
// アームの厚さ
PLATE_THICK=4;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
HOLE_MARGIN=0.5;
LEGO_HOLE=4.8+HOLE_MARGIN;
LEGO_HOLE_R=LEGO_HOLE/2;
LEGO_HOLE_H=1.8;
LEGO_HOLE_L=6.2+HOLE_MARGIN;
LEGO_HOLE_LR=LEGO_HOLE_L/2;
LEGO_HOLE_LH=0.5;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=7; // 奇数を指定してください
NUM_HOLE_D=1;

// SG92Rのギアのサイズ
SMALL_RADIUS=4.70/2;
LARGE_RADIUS=4.82/2;
NUM_POINTS=20;
GEAR_HEIGHT=3;
ANGLE = 360/NUM_POINTS/2;

module lego_servo_arm()
{
    difference()
    {
        union(){
            translate([-(LEGO_SQUARE*(NUM_HOLE_W-1))/2, -LEGO_SQUARE/2, 0])
            linear_extrude(height=PLATE_THICK){
                square([LEGO_SQUARE*(NUM_HOLE_W-1), LEGO_SQUARE*NUM_HOLE_D]);
            }
            translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE/2, 0, 0])
            linear_extrude(height=PLATE_THICK){
                circle(LEGO_SQUARE/2, $fn=50);
            }
            translate([(LEGO_SQUARE*NUM_HOLE_W)/2-LEGO_SQUARE/2, 0, 0])
            linear_extrude(height=PLATE_THICK){
                circle(LEGO_SQUARE/2, $fn=50);
            }
        }
        union(){
            for( lw = [0 : NUM_HOLE_W-1] ){
                for( ld = [0 : NUM_HOLE_D-1] ){
                    if( floor(NUM_HOLE_W/2) != lw ){

                        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2-LEGO_SQUARE/2, 0])
                        linear_extrude(height=PLATE_THICK){
                            circle(LEGO_HOLE_R, $fn=50);
                        }
                        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2-LEGO_SQUARE/2, 0])
                        linear_extrude(height=LEGO_HOLE_LH){
                            circle(LEGO_HOLE_LR, $fn=50);
                        }
                        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2-LEGO_SQUARE/2, PLATE_THICK-LEGO_HOLE_LH])
                        linear_extrude(height=LEGO_HOLE_LH){
                            circle(LEGO_HOLE_LR, $fn=50);
                        }
                    }
                }
            }

        }
    }
}
difference(){
    union(){
        lego_servo_arm();
        rotate([0, 0, 90])
        lego_servo_arm();
    }
    union()
    {
        translate([0, 0, 0])
        linear_extrude(height=PLATE_THICK){
            for( pt = [0 : NUM_POINTS-1]) {
                l_px = cos(pt*ANGLE*2)*LARGE_RADIUS;
                l_py = sin(pt*ANGLE*2)*LARGE_RADIUS;
                s_px = cos(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                s_py = sin(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                l_px2 = cos(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                l_py2 = sin(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                polygon(points=[[0, 0], [l_px, l_py], [s_px, s_py], [l_px2,  l_py2]], paths  = [[0, 1, 2, 3]]);
            }
        }
    }
}

〇OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成する

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴が端についたアームを作る

2021年8月13日金曜日

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴が中央についたアームを作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rサーボモータのギアに対応する穴が中央についたアームを作るには以下の手順を実行します。

〇LEGO Technic互換の穴とSG92Rギアに対応する穴が中央についたアームの写真
※ギアに対応する穴が中央に配置されています。灰色の部品は純正のLEGOブロックです。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
穴の半径など3Dプリンタや設定によって微調整してください。
ギアの歯の半径サイズはSMALL_RADIUS/LARGE_RADIUSで変更できます。ギアが緩かったり、はまらなかった場合は増減して調整してください。

・LEGO Technic互換の穴とSG92Rギアに対応する穴が中央についたアームのソースコード
// アームの厚さ
PLATE_THICK=4;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
HOLE_MARGIN=0.5;
LEGO_HOLE=4.8+HOLE_MARGIN;
LEGO_HOLE_R=LEGO_HOLE/2;
LEGO_HOLE_H=1.8;
LEGO_HOLE_L=6.2+HOLE_MARGIN;
LEGO_HOLE_LR=LEGO_HOLE_L/2;
LEGO_HOLE_LH=0.5;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5; // 奇数を指定してください
NUM_HOLE_D=1;

// SG92Rのギアのサイズ
SMALL_RADIUS=4.76/2;
LARGE_RADIUS=4.86/2;
NUM_POINTS=20;
GEAR_HEIGHT=3;
ANGLE = 360/NUM_POINTS/2;

difference()
{
    union(){
        translate([-(LEGO_SQUARE*(NUM_HOLE_W-1))/2, 0, 0])
        linear_extrude(height=PLATE_THICK){
            square([LEGO_SQUARE*(NUM_HOLE_W-1), LEGO_SQUARE*NUM_HOLE_D]);
        }
        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
        translate([(LEGO_SQUARE*NUM_HOLE_W)/2-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
    }
    union(){
        for( lw = [0 : NUM_HOLE_W-1] ){
            for( ld = [0 : NUM_HOLE_D-1] ){
                if( floor(NUM_HOLE_W/2) != lw ){

                    translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                    linear_extrude(height=PLATE_THICK){
                        circle(LEGO_HOLE_R, $fn=50);
                    }
                    translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                    linear_extrude(height=LEGO_HOLE_LH){
                        circle(LEGO_HOLE_LR, $fn=50);
                    }
                    translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, PLATE_THICK-LEGO_HOLE_LH])
                    linear_extrude(height=LEGO_HOLE_LH){
                        circle(LEGO_HOLE_LR, $fn=50);
                    }
                }
            }
        }

        translate([0, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            for( pt = [0 : NUM_POINTS-1]) {
                l_px = cos(pt*ANGLE*2)*LARGE_RADIUS;
                l_py = sin(pt*ANGLE*2)*LARGE_RADIUS;
                s_px = cos(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                s_py = sin(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                l_px2 = cos(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                l_py2 = sin(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                polygon(points=[[0, 0], [l_px, l_py], [s_px, s_py], [l_px2,  l_py2]], paths  = [[0, 1, 2, 3]]);
            }
        }

    }
}

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成する

OpenSCADとUltimaker Curaを使用して、LEGO互換の凹みがついたサーボモーター固定台を作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴が端についたアームを作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴が端についたアームを作るには以下の手順を実行します。

〇LEGO Technic互換の穴とSG92Rギアに対応する穴が端についたアームの写真
※白色のアームが今回作った物、灰色の部品は純正のLEGOブロックです。片方の端の穴がSG92Rギアに対応する穴になっています。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
穴の半径など3Dプリンタや設定によって微調整してください。
ギアの歯の半径サイズはSMALL_RADIUS/LARGE_RADIUSで変更できます。ギアが緩かったり、はまらなかった場合は増減して調整してください。

・LEGO Technic互換の穴とSG92Rギアに対応する穴がついたアームのソースコード
// アームの厚さ
PLATE_THICK=4;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
HOLE_MARGIN=0.5;
LEGO_HOLE=4.8+HOLE_MARGIN;
LEGO_HOLE_R=LEGO_HOLE/2;
LEGO_HOLE_H=1.8;
LEGO_HOLE_L=6.2+HOLE_MARGIN;
LEGO_HOLE_LR=LEGO_HOLE_L/2;
LEGO_HOLE_LH=0.5;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=4;
NUM_HOLE_D=1;

// SG92Rのギアのサイズ
SMALL_RADIUS=4.76/2;
LARGE_RADIUS=4.86/2;
NUM_POINTS=20;
GEAR_HEIGHT=3;
ANGLE = 360/NUM_POINTS/2;

difference()
{
    union(){
        translate([-LEGO_SQUARE/2, 0, 0])
        linear_extrude(height=PLATE_THICK){
            square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
        }
        translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
        translate([-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
    }
    union(){
        for( lw = [0 : NUM_HOLE_W-1] ){
            for( ld = [0 : NUM_HOLE_D-1] ){
                translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                linear_extrude(height=PLATE_THICK){
                    circle(LEGO_HOLE_R, $fn=50);
                }
                translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                linear_extrude(height=LEGO_HOLE_LH){
                    circle(LEGO_HOLE_LR, $fn=50);
                }
                translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, PLATE_THICK-LEGO_HOLE_LH])
                linear_extrude(height=LEGO_HOLE_LH){
                    circle(LEGO_HOLE_LR, $fn=50);
                }

            }
        }

        translate([-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            for( pt = [0 : NUM_POINTS-1]) {
                l_px = cos(pt*ANGLE*2)*LARGE_RADIUS;
                l_py = sin(pt*ANGLE*2)*LARGE_RADIUS;
                s_px = cos(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                s_py = sin(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                l_px2 = cos(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                l_py2 = sin(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                polygon(points=[[0, 0], [l_px, l_py], [s_px, s_py], [l_px2,  l_py2]], paths  = [[0, 1, 2, 3]]);
            }
        }

    }
}

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG92Rギアに対応する穴がついた十字アームを作る
OpenSCADとUltimaker Curaを使用して、LEGO互換の凹みがついたサーボモーター固定台を作る

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成する

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成するには以下の手順を実行します。

〇LEGOブロック上に固定できるLEDキューブの写真1
LEGOブロックの2x2に相当する大きさです。

〇LEGOブロック上に固定できるLEDキューブの写真2
表面と裏面の写真です。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
3Dプリンタの種類や設定によって、LED_DIAMETER_MARGINで穴の半径のパラメータを微調整してください。
// LED直径(mm)
LED_DIAMETER_MARGIN = 1.0;
LED_DIAMETER = 5.5+LED_DIAMETER_MARGIN;
// LEDの高さ
LED_H_MARGIN=0.2;
LED_H = 8.4+LED_H_MARGIN;
// 足の距離
TERMINAL_W=2;
TERMINAL_H=2;

// キューブ型ケース
CUBE_W=7.95*2;
CUBE_D=7.95*2;
CUBE_H=16;
WALL_THICK=1.5;

// LEDの足の穴
LED_LEG_W=4;
LED_LEG_H=4;

module cube_led()
{
    difference(){
        // 本体
        translate([0, 0, 0])
        linear_extrude(height=CUBE_H){
            square([CUBE_W, CUBE_D]);
        }
        union(){
            // LED部分の穴
            translate([CUBE_W/2, CUBE_D/2, CUBE_H-LED_H])
            linear_extrude(height=LED_H){
                circle(LED_DIAMETER/2, $fn=50);
            }
            // 下部空間
            translate([WALL_THICK, WALL_THICK, 0])
            linear_extrude(height=CUBE_H-LED_H){
                square([CUBE_W-WALL_THICK*2, CUBE_D-WALL_THICK*2]);
            }

            // 配線用穴
            translate([CUBE_W/2-LED_LEG_W/2, CUBE_D/2, 0])
            linear_extrude(height=LED_LEG_H){
                square([LED_LEG_W, CUBE_D/2]);
            }
        }
    }

    translate([CUBE_W/2-TERMINAL_W/2, 0, CUBE_H-LED_H-TERMINAL_H])
    linear_extrude(height=TERMINAL_H){
        square([TERMINAL_W, CUBE_D]);
    }
}
rotate([180, 0, 0])
cube_led();

・OpenSCADの画面

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

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

4. 部品の準備
以下に相当する部品を準備します。
・5mm赤色LED 640nm OSDR5113A
https://akizukidenshi.com/catalog/g/gI-11655/

・カーボン抵抗(炭素皮膜抵抗) 1/2W330Ω (100本入)
https://akizukidenshi.com/catalog/g/gR-07812/

・電池ボックス 単3×3本 リード線・スイッチ付
https://akizukidenshi.com/catalog/g/gP-12240/
※スイッチがついているので、ちょっとした実験回路のON/OFFに便利です。

5. 配線
以下の回路図のように電池ボックス・抵抗・LEDを配線します。
電池ボックスの赤い線→抵抗→LEDの足の長い方(アノード)→LEDの足の短い方→電池ボックスの黒い線というようにつなぎます。
LEDをほかの部品とつなぐ前にLEDキューブの丸い穴に差し込みます。

〇LEDキューブと配線した抵抗と電池ボックス

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGO互換の凹みがついたサーボモーター固定台を作る

2021年8月12日木曜日

OpenSCADとUltimaker Curaを使用して、0.96インチ有機ELディスプレイのケースを作成する

OpenSCADとUltimaker Curaを使用して、秋月電子さんの0.96インチ128x64ドット有機ELディスプレイのケースを作成するには以下の手順を実行します。

0.96インチ 128×64ドット有機ELディスプレイ(OLED) 青
https://akizukidenshi.com/catalog/g/gP-15870/

〇OLEDディスプレイにケース・フタをはめた状態(前面)の写真

〇OLEDディスプレイにケース・フタをはめた状態(背面)の写真

〇ケース・OLEDディスプレイ・フタの写真

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
3Dプリンタの種類や設定によって、OLEDディスプレイの穴に差し込む突起の半径を指定するパラメータSPACER_PEG_RADIUSを微調整してください。

・OLEDディスプレイのケースのSCADソースコード
// ケースのサイズ
OLED_CASE_W=30;
OLED_CASE_D=30.6;
OLED_CASE_H=8;
CASE_MARGIN=0.6;
// 壁の厚さ
WALL_THICK=2;
// OLEDの厚さ
OLED_THICK=1.5;
// OLEDの高さ
OLED_W=25.4;
// OLEDの奥行き
OLED_D=13.4;
// スペーサーのサイズ
SPACER_SIZE=4;
// スペーサーの突起
SPACER_PEG_RADIUS=0.8;
SPACER_PEG_H=2;

difference()
{
    union(){
        translate([0, 0, 0])
        linear_extrude(height=WALL_THICK){
            square([OLED_CASE_W, OLED_CASE_D]);
        }
        // スペーサ1
        translate([WALL_THICK+CASE_MARGIN/2, WALL_THICK+CASE_MARGIN/2, WALL_THICK])
        linear_extrude(height=OLED_THICK){
            square([SPACER_SIZE, SPACER_SIZE]);
        }
        translate([WALL_THICK+CASE_MARGIN/2+SPACER_SIZE/2, WALL_THICK+CASE_MARGIN/2+SPACER_SIZE/2, WALL_THICK+OLED_THICK])
        linear_extrude(height=SPACER_PEG_H){
            circle(SPACER_PEG_RADIUS, $fn=50);
        }

        // スペーサ2
        translate([OLED_CASE_W-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2, WALL_THICK+CASE_MARGIN/2, WALL_THICK])
        linear_extrude(height=OLED_THICK){
            square([SPACER_SIZE, SPACER_SIZE]);
        }
        translate([OLED_CASE_W-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2+SPACER_SIZE/2, WALL_THICK+CASE_MARGIN/2+SPACER_SIZE/2, WALL_THICK+OLED_THICK])
        linear_extrude(height=SPACER_PEG_H){
            circle(SPACER_PEG_RADIUS, $fn=50);
        }

        // スペーサ3
        translate([WALL_THICK+CASE_MARGIN/2, OLED_CASE_D-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2, WALL_THICK])
        linear_extrude(height=OLED_THICK){
            square([SPACER_SIZE, SPACER_SIZE]);
        }
        translate([WALL_THICK+CASE_MARGIN/2+SPACER_SIZE/2, OLED_CASE_D-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2+SPACER_SIZE/2, WALL_THICK+OLED_THICK])
        linear_extrude(height=SPACER_PEG_H){
            circle(SPACER_PEG_RADIUS, $fn=50);
        }

        // スペーサ4
        translate([OLED_CASE_W-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2, OLED_CASE_D-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2, WALL_THICK])
        linear_extrude(height=OLED_THICK){
            square([SPACER_SIZE, SPACER_SIZE]);
        }
        translate([OLED_CASE_W-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2+SPACER_SIZE/2, OLED_CASE_D-WALL_THICK-SPACER_SIZE-CASE_MARGIN/2+SPACER_SIZE/2, WALL_THICK+OLED_THICK])
        linear_extrude(height=SPACER_PEG_H){
            circle(SPACER_PEG_RADIUS, $fn=50);
        }

        // 壁
        translate([0, 0, 0])
        linear_extrude(height=OLED_CASE_H){
            square([OLED_CASE_W, WALL_THICK]);
        }
        translate([0, OLED_CASE_D-WALL_THICK, 0])
        linear_extrude(height=OLED_CASE_H){
            square([OLED_CASE_W, WALL_THICK]);
        }
        translate([0, 0, 0])
        linear_extrude(height=OLED_CASE_H){
            square([WALL_THICK, OLED_CASE_D]);
        }
        translate([OLED_CASE_W-WALL_THICK, 0, 0])
        linear_extrude(height=OLED_CASE_H){
            square([WALL_THICK, OLED_CASE_D]);
        }

    }
    union(){
        // 液晶部分の穴
        translate([WALL_THICK+CASE_MARGIN/2, WALL_THICK+SPACER_SIZE+CASE_MARGIN/2, 0])
        linear_extrude(height=WALL_THICK){
            square([OLED_W, OLED_D]);
        }
    }
}

・OpenSCADの画面(ケース)

・OLEDディスプレイのフタのSCADソースコード
// ケースのサイズ
OLED_CASE_W=30;
OLED_CASE_D=30.6;
CASE_MARGIN=0.6;
// 壁の厚さ
WALL_THICK=2;

// 端子の幅と高さ
TERMINAL_W=11;
TERMINAL_D=3;


difference()
{
    union(){
        translate([0, 0, 0])
        linear_extrude(height=WALL_THICK){
            square([OLED_CASE_W, OLED_CASE_D]);
        }
        translate([WALL_THICK, WALL_THICK, WALL_THICK])
        linear_extrude(height=WALL_THICK){
            square([OLED_CASE_W-WALL_THICK*2, OLED_CASE_D-WALL_THICK*2]);
        }

    }
    union(){
        // 端子部分の穴
        translate([OLED_CASE_W/2-TERMINAL_W/2, WALL_THICK, 0])
        linear_extrude(height=WALL_THICK*2){
            square([TERMINAL_W, TERMINAL_D]);
        }
    }
}

・OpenSCADの画面(フタ)

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

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

4. 各部品をはめ込みます。

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、Raspberry Pi ZeroをLEGOブロック上に固定できるマウンタを作成する

OpenSCADとUltimaker Curaを使用して、Raspberry Pi ZeroをLEGOブロック上に固定できるマウンタを作成するには以下の手順を実行します。

〇Raspberry Pi ZeroをLEGOブロック上に固定できるマウンタの写真1
マウンタとRaspberry Pi ZeroはM2.6のネジで固定しています。

〇Raspberry Pi ZeroをLEGOブロック上に固定できるマウンタの写真2
Raspberry Pi Zeroを固定していない状態です。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
3Dプリンタの種類や設定によって、HOLE_RADIUSで穴の半径のパラメータを微調整してください。

// Raspberry Pi Zeroのベースサイズ
PIZERO_W=65;
PIZERO_D=30;
PIZERO_H=9;

// オフセット
OFFSET_W=3.2;
OFFSET_D=1;

// 四隅のスペーサーの高さ
SPACER_H=5;

// スペーサーのサイズの半分
HOLE_OFFSET = 3.5;

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

// プレートの厚さ
PLATE_THICK=2;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// LEGOの側面の厚さ
LEGO_WALL=1.5;
// 突起の直径
LEGO_PEG=4.8;
LEGO_PEG_R=LEGO_PEG/2;
LEGO_PEG_H=1.8+1;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE=6.4;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=9;
NUM_HOLE_D=4;


module pi0_mounter_lego()
{
    difference(){
        union(){
            // スペーサー
            translate([OFFSET_W, OFFSET_D, PLATE_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
            translate([OFFSET_W+PIZERO_W-HOLE_OFFSET*2, OFFSET_D, PLATE_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
            translate([OFFSET_W, OFFSET_D+PIZERO_D-HOLE_OFFSET*2, PLATE_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }
            translate([OFFSET_W+PIZERO_W-HOLE_OFFSET*2, OFFSET_D+PIZERO_D-HOLE_OFFSET*2, PLATE_THICK])
            linear_extrude(height=SPACER_H){
                square([HOLE_OFFSET*2, HOLE_OFFSET*2]);
            }

            // LEGOの穴
            translate([0, 0, 0])
            linear_extrude(height=PLATE_THICK){
                square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
            }

            translate([0, 0, -LEGO_PEG_H])
            linear_extrude(height=LEGO_PEG_H){
                square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
            }

            translate([0, LEGO_SQUARE*NUM_HOLE_D-LEGO_WALL, -LEGO_PEG_H])
            linear_extrude(height=LEGO_PEG_H){
                square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
            }

            translate([0, 0, -LEGO_PEG_H])
            linear_extrude(height=LEGO_PEG_H){
                square([LEGO_WALL, LEGO_SQUARE*NUM_HOLE_D]);
            }

            translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_WALL, 0, -LEGO_PEG_H])
            linear_extrude(height=LEGO_PEG_H){
                square([LEGO_WALL, LEGO_SQUARE*NUM_HOLE_D]);
            }


            for( lw = [0 : NUM_HOLE_W-2] ){
                for( ld = [0 : NUM_HOLE_D-2] ){
                    translate([LEGO_SQUARE*(lw+1), LEGO_SQUARE*(ld+1), -LEGO_PEG_H])
                    linear_extrude(height=LEGO_PEG_H){
                        circle(LEGO_BOTTOM_CIRCLE/2, $fn=50);
                    }
                }
            }

        }
        // スペーサーの穴
        translate([OFFSET_W+HOLE_OFFSET, OFFSET_D+HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+PLATE_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }
        translate([OFFSET_W+PIZERO_W-HOLE_OFFSET, OFFSET_D+HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+PLATE_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }
        translate([OFFSET_W+HOLE_OFFSET, OFFSET_D+PIZERO_D-HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+PLATE_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }
        translate([OFFSET_W+PIZERO_W-HOLE_OFFSET, OFFSET_D+PIZERO_D-HOLE_OFFSET, 0])
        linear_extrude(height=SPACER_H+PLATE_THICK){
            circle(HOLE_RADIUS, $fn=50);
        }

    }
}

pi0_mounter_lego();

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用してRaspberry Pi Zero WHのケースを作成する

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成する

AlmaLinux 8にLeoCADをインストールする

LeoCADで、LEGOブロックをコンピュータ内で組み立てることができます。

〇LeoCADの画面

インストール方法

シェルから以下のコマンド実行します
sudo mkdir -p /opt/leocad

cd /opt/leocad

sudo wget 'https://github.com/leozide/leocad/releases/download/v21.06/LeoCAD-Linux-21.06-x86_64.AppImage'

sudo chmod +x /opt/leocad/LeoCAD-Linux-21.06-x86_64.AppImage

cat << EOF | sudo tee /usr/share/applications/leocad.desktop
[Desktop Entry]
Type=Application
Version=1.0
Name=LeoCAD
GenericName=Virtual LEGO CAD Software
Exec=/opt/leocad/LeoCAD-Linux-21.06-x86_64.AppImage
Categories=Development;
EOF

関連情報

https://github.com/leozide/leocad

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

2021年8月11日水曜日

OpenSCADとUltimaker Curaを使用して、Raspberry Pi Zeroをタミヤのユニバーサルプレートに固定できるマウンタを作成する

OpenSCADとUltimaker Curaを使用して、Raspberry Pi Zeroをタミヤのユニバーサルプレートに固定できるマウンタには以下の手順を実行します。

〇Raspberry Pi Zeroをタミヤのユニバーサルプレートに固定できるマウンタの写真1
タミヤのユニバーサルプレート上にM3のネジで固定しています。

〇Raspberry Pi Zeroをタミヤのユニバーサルプレートに固定できるマウンタの写真2
マウンタとRaspberry Pi ZeroはM2.6のネジで固定しています。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
3Dプリンタの種類や設定によって、HOLE_RADIUSで穴の半径のパラメータを微調整してください。

// Raspberry Pi Zeroのベースサイズ
PIZERO_W=65;
PIZERO_D=30;
PIZERO_H=9;

// 四隅のスペーサーの高さ
SPACER_H=5;

// スペーサーのサイズの半分
HOLE_OFFSET = 3.5;

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

// 底の厚さ
BOTTOM_THICK=2;

// タミヤユニバーサルプレート互換の穴
HOLE_DIAMETER=3+1;
HOLE_DISTANCE=5;
NUM_HOLE_W=9;
NUM_HOLE_D=6;
OFFSET_W=10;
OFFSET_D=0.5;
module pi0_mounter_tamiya_univ()
{
    difference(){
        union(){
            linear_extrude(height=BOTTOM_THICK){
                square([PIZERO_W, 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);
        }

        for( lw = [0 : NUM_HOLE_W-1] ){
            for( ld = [0 : NUM_HOLE_D-1] ){
                translate([HOLE_DISTANCE*lw+HOLE_DIAMETER/2+OFFSET_W, HOLE_DISTANCE*ld+HOLE_DIAMETER/2+OFFSET_D, 0])
                linear_extrude(height=BOTTOM_THICK){
                    circle(HOLE_DIAMETER/2, $fn=50);
                }
            }
        }

    }
}

pi0_mounter_tamiya_univ();

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用してRaspberry Pi Zero WHのケースを作成する

OpenSCADとUltimaker Curaを使用してRaspberry Pi Zero WHの土台を作成する
 ※こちらはマウンターの穴がないバージョンです。

OpenSCADとUltimaker Curaを使用して、TAMIYAのユニバーサルプレートに配置できるブリッジを作る

OpenSCADとUltimaker Curaを使用して、TAMIYAのユニバーサルプレートに配置できるブリッジを作るには以下の手順を実行します。

〇TAMIYAのユニバーサルプレートに配置できるブリッジの写真

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
穴の半径など3Dプリンタや設定によって微調整してください。

・TAMIYAのユニバーサルプレートに配置できるブリッジのソースコード
HOLE_DIAMETER=3+1;
HOLE_DISTANCE=5;
HOLE_HEIGHT=10;
PLATE_H=3;
// ブリッジの幅
NUM_HOLE_W=6;
PADDING=0;
OFFSET=0.5;

// ブリッジの高さ
BRIDGE_H=30;
PEG_DIAMETER=3;

module tamiya_plates_compatible_bridge()
{
    difference()
    {
       union(){
            translate([0, 0, 0])
            linear_extrude(height=PLATE_H){
                square([NUM_HOLE_W*HOLE_DISTANCE+PADDING*2, HOLE_DISTANCE+PADDING*2]);
            }
            // 柱1
            translate([0, 0, 0])
            linear_extrude(height=BRIDGE_H){
                square([HOLE_DISTANCE+PADDING*2, HOLE_DISTANCE+PADDING*2]);
            }
            // 柱2
            translate([HOLE_DISTANCE*(NUM_HOLE_W-1)+PADDING, 0, 0])
            linear_extrude(height=BRIDGE_H){
                square([HOLE_DISTANCE+PADDING*2, HOLE_DISTANCE+PADDING*2]);
            }

            // 柱1の突起
            translate([HOLE_DIAMETER/2+OFFSET+PADDING, HOLE_DIAMETER/2+OFFSET+PADDING, BRIDGE_H])
            linear_extrude(height=PLATE_H){
                circle(PEG_DIAMETER/2, $fn=50);
            }

            // 柱2の突起
            translate([HOLE_DISTANCE*(NUM_HOLE_W-1)+HOLE_DIAMETER/2+OFFSET+PADDING, HOLE_DIAMETER/2+OFFSET+PADDING, BRIDGE_H])
            linear_extrude(height=PLATE_H){
                circle(PEG_DIAMETER/2, $fn=50);
            }

        }
        union()
        {
            for( lw = [0 : NUM_HOLE_W-1] ){
                    translate([HOLE_DISTANCE*lw+HOLE_DIAMETER/2+OFFSET+PADDING, HOLE_DIAMETER/2+OFFSET+PADDING, 0])
                    linear_extrude(height=HOLE_HEIGHT){
                        circle(HOLE_DIAMETER/2, $fn=50);
                    }
            }

            
        }

    }
}
tamiya_plates_compatible_bridge();

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレート互換の四角形フレームを作成する

2021年8月8日日曜日

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついた十字アームを作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついた十字アームを作るには以下の手順を実行します。

〇LEGO Technic互換の穴とSG90ギアに対応する穴がついた十字アームの写真
※十字アームに付けられている灰色の部品は純正のLEGOブロックです。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
穴の半径など3Dプリンタや設定によって微調整してください。

・LEGO Technic互換の穴とSG90ギアに対応する穴がついた十字アームのソースコード
// アームの厚さ
PLATE_THICK=4;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
HOLE_MARGIN=0.5;
LEGO_HOLE=4.8+HOLE_MARGIN;
LEGO_HOLE_R=LEGO_HOLE/2;
LEGO_HOLE_H=1.8;
LEGO_HOLE_L=6.2+HOLE_MARGIN;
LEGO_HOLE_LR=LEGO_HOLE_L/2;
LEGO_HOLE_LH=0.5;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5; // 奇数を指定してください
NUM_HOLE_D=1;

// SG90のギアのサイズ
SMALL_RADIUS=4.90/2;
LARGE_RADIUS=5.05/2;
NUM_POINTS=21;
GEAR_HEIGHT=3;
ANGLE = 360/NUM_POINTS/2;

module lego_servo_arm()
{
    difference()
    {
        union(){
            translate([-(LEGO_SQUARE*(NUM_HOLE_W-1))/2, -LEGO_SQUARE/2, 0])
            linear_extrude(height=PLATE_THICK){
                square([LEGO_SQUARE*(NUM_HOLE_W-1), LEGO_SQUARE*NUM_HOLE_D]);
            }
            translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE/2, 0, 0])
            linear_extrude(height=PLATE_THICK){
                circle(LEGO_SQUARE/2, $fn=50);
            }
            translate([(LEGO_SQUARE*NUM_HOLE_W)/2-LEGO_SQUARE/2, 0, 0])
            linear_extrude(height=PLATE_THICK){
                circle(LEGO_SQUARE/2, $fn=50);
            }
        }
        union(){
            for( lw = [0 : NUM_HOLE_W-1] ){
                for( ld = [0 : NUM_HOLE_D-1] ){
                    if( floor(NUM_HOLE_W/2) != lw ){

                        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2-LEGO_SQUARE/2, 0])
                        linear_extrude(height=PLATE_THICK){
                            circle(LEGO_HOLE_R, $fn=50);
                        }
                        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2-LEGO_SQUARE/2, 0])
                        linear_extrude(height=LEGO_HOLE_LH){
                            circle(LEGO_HOLE_LR, $fn=50);
                        }
                        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2-LEGO_SQUARE/2, PLATE_THICK-LEGO_HOLE_LH])
                        linear_extrude(height=LEGO_HOLE_LH){
                            circle(LEGO_HOLE_LR, $fn=50);
                        }
                    }
                }
            }

        }
    }
}
difference(){
    union(){
        lego_servo_arm();
        rotate([0, 0, 90])
        lego_servo_arm();
    }
    union()
    {
        translate([0, 0, 0])
        linear_extrude(height=PLATE_THICK){
            for( pt = [0 : NUM_POINTS-1]) {
                l_px = cos(pt*ANGLE*2)*LARGE_RADIUS;
                l_py = sin(pt*ANGLE*2)*LARGE_RADIUS;
                s_px = cos(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                s_py = sin(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                l_px2 = cos(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                l_py2 = sin(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                polygon(points=[[0, 0], [l_px, l_py], [s_px, s_py], [l_px2,  l_py2]], paths  = [[0, 1, 2, 3]]);
            }
        }
    }
}

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームを作る
※こちらのページのアームはサーボモーターSG90のギア穴が端に配置されています。

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアーム(中央ギア穴版)を作る
※こちらのページのアームはサーボモーターSG90のギア穴が中央に配置されています。

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成する

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアーム(中央ギア穴版)を作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアーム(中央ギア穴版)を作るには以下の手順を実行します。

〇LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームの写真
※ギアに対応する穴が中央に配置されています。灰色の部品は純正のLEGOブロックです。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
穴の半径など3Dプリンタや設定によって微調整してください。

・LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームのソースコード
// アームの厚さ
PLATE_THICK=4;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
HOLE_MARGIN=0.5;
LEGO_HOLE=4.8+HOLE_MARGIN;
LEGO_HOLE_R=LEGO_HOLE/2;
LEGO_HOLE_H=1.8;
LEGO_HOLE_L=6.2+HOLE_MARGIN;
LEGO_HOLE_LR=LEGO_HOLE_L/2;
LEGO_HOLE_LH=0.5;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5; // 奇数を指定してください
NUM_HOLE_D=1;

// SG90のギアのサイズ
SMALL_RADIUS=4.90/2;
LARGE_RADIUS=5.05/2;
NUM_POINTS=21;
GEAR_HEIGHT=3;
ANGLE = 360/NUM_POINTS/2;

difference()
{
    union(){
        translate([-(LEGO_SQUARE*(NUM_HOLE_W-1))/2, 0, 0])
        linear_extrude(height=PLATE_THICK){
            square([LEGO_SQUARE*(NUM_HOLE_W-1), LEGO_SQUARE*NUM_HOLE_D]);
        }
        translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
        translate([(LEGO_SQUARE*NUM_HOLE_W)/2-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
    }
    union(){
        for( lw = [0 : NUM_HOLE_W-1] ){
            for( ld = [0 : NUM_HOLE_D-1] ){
                if( floor(NUM_HOLE_W/2) != lw ){

                    translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                    linear_extrude(height=PLATE_THICK){
                        circle(LEGO_HOLE_R, $fn=50);
                    }
                    translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                    linear_extrude(height=LEGO_HOLE_LH){
                        circle(LEGO_HOLE_LR, $fn=50);
                    }
                    translate([-(LEGO_SQUARE*NUM_HOLE_W)/2+LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, PLATE_THICK-LEGO_HOLE_LH])
                    linear_extrude(height=LEGO_HOLE_LH){
                        circle(LEGO_HOLE_LR, $fn=50);
                    }
                }
            }
        }

        translate([0, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            for( pt = [0 : NUM_POINTS-1]) {
                l_px = cos(pt*ANGLE*2)*LARGE_RADIUS;
                l_py = sin(pt*ANGLE*2)*LARGE_RADIUS;
                s_px = cos(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                s_py = sin(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                l_px2 = cos(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                l_py2 = sin(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                polygon(points=[[0, 0], [l_px, l_py], [s_px, s_py], [l_px2,  l_py2]], paths  = [[0, 1, 2, 3]]);
            }
        }

    }
}

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームを作る
※こちらのページのアームはサーボモーターSG90のギア穴が端に配置されています。

OpenSCADとUltimaker Curaを使用して、LEGOブロック上に固定できるLEDキューブを作成する

OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレート互換の四角形フレームを作成する

OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレート互換の四角形フレームを作成するには以下の手順を実行します。
タミヤのユニバーサルプレートと同じの穴の四角形フレームです。

〇作成した四角形フレームの写真
白いフレームが今回作成したフレームです。灰色がタミヤのユニバーサルプレートです。

〇作成手順
1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
NUM_HOLE_DとNUM_HOLE_Wでサイズを調整する事が出来ます。3Dプリンタの種類や設定によって、HOLE_DIAMETERで穴の直径などのパラメータを微調整してください。

・タミヤのユニバーサルプレート互換の四角形フレームのOpenSCADコード
// tamiya universal plates compatible frame
HOLE_DIAMETER=3+1;
HOLE_DISTANCE=5;
HOLE_HEIGHT=3;
PLATE_H=3;
NUM_HOLE_W=8;
NUM_HOLE_D=5;
PADDING=0;
OFFSET=0.5;

module tamiya_plates_compatible_frame()
{
    difference()
    {
        translate([0, 0, 0])
        linear_extrude(height=PLATE_H){
            square([NUM_HOLE_W*HOLE_DISTANCE+PADDING*2, NUM_HOLE_D*HOLE_DISTANCE+PADDING*2]);
        }
        union()
        {
            for( lw = [0 : NUM_HOLE_W-1] ){
                for( ld = [0 : NUM_HOLE_D-1] ){
                    translate([HOLE_DISTANCE*lw+HOLE_DIAMETER/2+OFFSET+PADDING, HOLE_DISTANCE*ld+HOLE_DIAMETER/2+OFFSET+PADDING, 0])
                    linear_extrude(height=HOLE_HEIGHT){
                        circle(HOLE_DIAMETER/2, $fn=50);
                    }
                }
            }
            translate([HOLE_DISTANCE+PADDING*2, HOLE_DISTANCE+PADDING*2, 0])
            linear_extrude(height=PLATE_H){
                square([(NUM_HOLE_W-2)*HOLE_DISTANCE, (NUM_HOLE_D-2)*HOLE_DISTANCE]);
            }
            
        }

    }
}
tamiya_plates_compatible_frame();

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームを作る

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームを作るには以下の手順を実行します。

〇LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームの写真
※白色のアームが今回作った物、灰色・赤色の部品は純正のLEGOブロックです。片方の端の穴がSG90ギアに対応する穴になっています。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
穴の半径など3Dプリンタや設定によって微調整してください。

・LEGO Technic互換の穴とSG90ギアに対応する穴がついたアームのソースコード
// アームの厚さ
PLATE_THICK=4;

// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
HOLE_MARGIN=0.5;
LEGO_HOLE=4.8+HOLE_MARGIN;
LEGO_HOLE_R=LEGO_HOLE/2;
LEGO_HOLE_H=1.8;
LEGO_HOLE_L=6.2+HOLE_MARGIN;
LEGO_HOLE_LR=LEGO_HOLE_L/2;
LEGO_HOLE_LH=0.5;

// プレートのサイズ(ブロック単位)
NUM_HOLE_W=4;
NUM_HOLE_D=1;

// SG90のギアのサイズ
SMALL_RADIUS=4.90/2;
LARGE_RADIUS=5.05/2;
NUM_POINTS=21;
GEAR_HEIGHT=3;
ANGLE = 360/NUM_POINTS/2;

difference()
{
    union(){
        translate([-LEGO_SQUARE/2, 0, 0])
        linear_extrude(height=PLATE_THICK){
            square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
        }
        translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
        translate([-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            circle(LEGO_SQUARE/2, $fn=50);
        }
    }
    union(){
        for( lw = [0 : NUM_HOLE_W-1] ){
            for( ld = [0 : NUM_HOLE_D-1] ){
                translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                linear_extrude(height=PLATE_THICK){
                    circle(LEGO_HOLE_R, $fn=50);
                }
                translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, 0])
                linear_extrude(height=LEGO_HOLE_LH){
                    circle(LEGO_HOLE_LR, $fn=50);
                }
                translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, PLATE_THICK-LEGO_HOLE_LH])
                linear_extrude(height=LEGO_HOLE_LH){
                    circle(LEGO_HOLE_LR, $fn=50);
                }

            }
        }

        translate([-LEGO_SQUARE/2, LEGO_SQUARE/2, 0])
        linear_extrude(height=PLATE_THICK){
            for( pt = [0 : NUM_POINTS-1]) {
                l_px = cos(pt*ANGLE*2)*LARGE_RADIUS;
                l_py = sin(pt*ANGLE*2)*LARGE_RADIUS;
                s_px = cos(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                s_py = sin(pt*ANGLE*2+ANGLE)*SMALL_RADIUS;
                l_px2 = cos(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                l_py2 = sin(pt*ANGLE*2+ANGLE*2)*LARGE_RADIUS;
                polygon(points=[[0, 0], [l_px, l_py], [s_px, s_py], [l_px2,  l_py2]], paths  = [[0, 1, 2, 3]]);
            }
        }

    }
}

・OpenSCADの画面

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

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

関連情報

OpenSCADまとめ

OpenSCADとUltimaker Curaを使用して、LEGO Technic互換の穴とSG90ギアに対応する穴がついたアーム(中央ギア穴版)を作る
※こちらのページのアームはサーボモーターSG90のギア穴が中央に配置されています。

OpenSCADとUltimaker Curaを使用して、LEGO互換の凹みがついたサーボモーター固定台を作る