2020年10月31日土曜日

OpenSCADとUltimaker Curaを使用して1x4用のソーガイドを作成する

OpenSCADとUltimaker Curaを使用して、1x4用のソーガイドを作成するには以下の手順を実行します。

〇1x4用のソーガイド

〇作成手順
1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。
ノコギリの厚さに合わせてSAW_THICKを調整します。

・1x4用ソーガイドのOpenSCADコード
// 1x4用ソーガイド
JIG_BODY_W=19;
JIG_BODY_H=10;
JIG_HANDLE_W=10;
JIG_HANDLE_D=10;
JIG_HANDLE_H=89;
JIG_W = JIG_BODY_W + JIG_HANDLE_W*2;
JIG_CONE_R=3;
JIG_CONE_H=4;
SAW_THICK=2;

module jig_arm()
{
translate([-JIG_BODY_W/2, -JIG_HANDLE_D/2, 0])
linear_extrude(height=JIG_BODY_H){
    square([JIG_BODY_W, JIG_HANDLE_D]);
}
translate([-JIG_W/2, -JIG_HANDLE_D/2, 0])
linear_extrude(height=JIG_HANDLE_H+JIG_BODY_H){
    square([JIG_HANDLE_W, JIG_HANDLE_D]);
}
translate([JIG_BODY_W/2, -JIG_HANDLE_D/2, 0])
linear_extrude(height=JIG_HANDLE_H+JIG_BODY_H){
    square([JIG_HANDLE_W, JIG_HANDLE_D]);
}
}

translate([0, JIG_HANDLE_D/2+SAW_THICK/2])
color("#ccddff") jig_arm();
translate([0, -JIG_HANDLE_D/2-SAW_THICK/2])
jig_arm();

translate([JIG_BODY_W/2+JIG_HANDLE_W, -JIG_HANDLE_D-SAW_THICK/2, 0])
linear_extrude(height=JIG_BODY_H){
    square([JIG_HANDLE_W, JIG_HANDLE_D*2+SAW_THICK]);
}


・OpenSCADの画面

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

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

関連情報

・そのほかの3Dプリンターを活用した記事は以下を参照してください。
OpenSCADまとめ

Debian 10(Buster)にSnap版Blenderをインストールする

Blenderはオープンソースの3D CG作成ソフトウェアです。

〇Blenderの画面(Debian 10)


〇インストール方法
snapをインストール後、blenderをインストールします。

sudo apt-get update
sudo apt-get -y install snapd
sudo snap install core

sudo snap install blender --classic

〇Blenderの実行方法
以下のコマンドを実行して、Blenderを実行します。
snap run blender

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


2020年10月30日金曜日

TFab Worksのmicro:bit用温度・湿度・気圧センサーのデータをBluetoothでRaspberry Piに送信する

TFab Worksのmicro:bit用温度・湿度・気圧センサーのデータをBluetoothでRaspberry Piに送信するには、以下の手順を実行します。

実装手順

1. microbitで以下のプログラミングを行う
ネームスペースnsに「S000」を10進数に変換した数値1395666992を指定して、インスタンスとして16bit(65536)シフトした温度、8bit(256)シフトした湿度、800引いた気圧をアドバタイズします。
2秒アドバタイズしたあとは、598秒停止して10分おきにデータを送付します。

・mirobitのプログラム画面

2. Raspberry Piで受信プログラムを作成する
bluepyをインストールしたうえで下のプログラムを入力します。
advertise-env.py
from bluepy import btle
import bluepy
import datetime

class MyScanDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)

  def handleDiscovery(self, dev, isNewDev, isNewData):
    if isNewDev or isNewData:
      for (adtype, desc, value) in dev.getScanData():
        #print(adtype, desc, value)
        if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '00000000000053303030':
          val_temp = int(value[34:36], 16)
          val_humidity = int(value[36:38], 16)
          val_atomosphere = int(value[38:40], 16) + 900
          now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9)))
          path = "./advertise-env.log"
          with open(path, mode="a") as lf:
            lf.write('{},{},{},{}\n'.format(now.strftime('%Y-%m-%d %H:%M:%S'),val_temp, val_humidity, val_atomosphere))
          print('{},{},{},{}\n'.format(now.strftime('%Y-%m-%d %H:%M:%S'),val_temp, val_humidity, val_atomosphere))

scanner = btle.Scanner().withDelegate(MyScanDelegate())
while True:
  scanner.scan(5.0)

3. 以下のコマンドで、日時、温度、湿度、気圧をファイルに記録します。
/usr/bin/python3 advertise-env.py >> ./advertise-env.log

・micro:bitとTFab Worksのmicro:bit用温度・湿度・気圧センサー
 
Panasonicのエボルタ1950mAhの電池2本で 約9日くらい持つようです。

関連情報

・microbitに関する記事は以下を参照してください。
http://serverarekore.blogspot.com/search/label/microbit

2020年10月21日水曜日

Debian 10(Buster)にストレージベンチマークソフトiozoneをインストールする

iozoneはストレージベンチマークソフトです。

インストール方法

以下のコマンドを実行します。
sudo apt-get install -y software-properties-common
sudo apt-add-repository -y non-free
sudo apt-get update
sudo apt-get -y install iozone3

実行例

iozone -az -i0 -i1 -Rb test.xls


出力ファイルは、ExcelやLibreOfficeで参照する事ができます。

 


2020年10月20日火曜日

mplfinanceまとめ

mplfinanceを使用する事で株式やFXの取引情報を休場を考慮した形でローソク足を簡単に描画する事が出来ます。mplfinanceに関する記事を纏めました。

〇インストール方法
Jupyterにmplfinanceインストールする方法は以下を参照してください。もちろん、jupyterを利用しなくてもmplfinanceを使用する事ができます。
JupyterLabにmplfinance、pandas、matplotlibをインストールして、ロウソク足チャートを表示する

Minikubeでローソク足グラフを描画できるmplfinanceをインストールしたJupyterLabをデプロイする

〇軸の設定
軸に関する設定・制御に関する記事です。
mplfinanceのロウソク足チャートの日付形式を設定する

mplfinanceのチャートのY軸を右側に表示する

mplfinanceのチャートの日付ラベルの回転角度を変更する

mplfinanceのチャートの軸を非表示にする

〇チャートの比率・大きさ
チャート全体の設定は以下を参照してください。
mplfinanceのチャートを拡大縮小表示する

mplfinanceのチャートの縦横比を設定する

mplfinanceのチャートの端の余白を狭くする

〇色の変更
背景色やグラフの色を変更します。
mplfinanceのロウソク足チャートのスタイルを設定して見た目を変える

mplfinanceのチャートの背景色や軸の色・サイズを設定する

mplfinanceのロウソク足チャートの色を設定する

〇グリッド線の設定
グリッド線の設定に関する記事です。
mplfinanceのチャートのグリッドを破線・点線に変更する

mplfinanceのチャートのグリッドを水平線のみ・垂直線のみ・両方に変更する

〇データ表示の制御
データ表示の制御に関する記事です。
mplfinanceのロウソク足チャートにボリュームも表示する

mplfinanceのチャートに休場日などのデータのない日付を表示する

mplfinanceのチャートのY軸表示範囲を設定する

〇折れ線グラフの追加
ローソク足に追加で指標などの棒グラフを表示する方法には、以下の様なものがあります。
mplfinanceのチャートに折れ線グラフを追加する

mplfinanceのチャートに移動平均線を追加する

mplfinanceのチャートに凡例を追加する

mplfinanceのチャートにマーカーを追加する

〇その他
mplfinanceのチャートのタイトル・Priceラベル・Volumeラベルに日本語を設定する

mplfinanceのチャートを画像ファイルとして保存する

Jupyter・mplfinace・yahoo_finance_api2を使用して、米国株価・日本株価・通貨レートをローソク足で描画する

2020年10月19日月曜日

mplfinanceのチャートに凡例を追加する

mplfinanceのチャートに凡例を追加するには、plotメソッドでreturnfig引数を使用します。

サンプルコード

以下のサンプルでは移動平均2, 4, 6に対応する凡例ma2, ma4, ma6を表示しています。
from datetime import datetime
import pandas as pd
import mplfinance as mpf

fx_data = [
    [datetime(2020, 7, 8), 107.475, 107.711, 107.202, 107.253],
    [datetime(2020, 7, 9), 107.231, 107.398, 107.097, 107.201],
    [datetime(2020, 7, 10), 107.169, 107.264, 106.639, 106.93],
    [datetime(2020, 7, 13), 106.861, 107.319, 106.787, 107.283],
    [datetime(2020, 7, 14), 107.227, 107.427, 107.119, 107.236],
    [datetime(2020, 7, 15), 107.205, 107.309, 106.666, 106.939],
    [datetime(2020, 7, 16), 106.895, 107.401, 106.833, 107.272],
    [datetime(2020, 7, 17), 107.250, 107.360, 106.938, 106.986],
    [datetime(2020, 7, 20), 107.011, 107.537, 106.970, 107.279],
    [datetime(2020, 7, 21), 107.193, 107.367, 106.681, 106.803],
    [datetime(2020, 7, 22), 106.789, 107.288, 106.705, 107.153],
    [datetime(2020, 7, 23), 107.124, 107.231, 106.711, 106.865],
    [datetime(2020, 7, 24), 106.826, 106.872, 105.681, 106.052]
]

df = pd.DataFrame(fx_data, columns=['date', 'open', 'high', 'low', 'close'])
df = df.set_index("date")
cs  = mpf.make_mpf_style(gridcolor="lightgray", mavcolors=['red', 'green', '#405173'])
fig, axes = mpf.plot(df,type='candle', datetime_format='%Y/%m/%d', mav=(2,4,6), returnfig=True)
legend=["ma2", "ma4", "ma6"]
axes[0].legend(legend)
fig.show()

・実行結果

○2021/12/08追記: モジュールの仕様が変わったのか、凡例の色が正しく表示されなくなったのでソースコードを修正しました。
from datetime import datetime
import pandas as pd
import mplfinance as mpf
import matplotlib.patches as mpatches

fx_data = [
    [datetime(2020, 7, 8), 107.475, 107.711, 107.202, 107.253],
    [datetime(2020, 7, 9), 107.231, 107.398, 107.097, 107.201],
    [datetime(2020, 7, 10), 107.169, 107.264, 106.639, 106.93],
    [datetime(2020, 7, 13), 106.861, 107.319, 106.787, 107.283],
    [datetime(2020, 7, 14), 107.227, 107.427, 107.119, 107.236],
    [datetime(2020, 7, 15), 107.205, 107.309, 106.666, 106.939],
    [datetime(2020, 7, 16), 106.895, 107.401, 106.833, 107.272],
    [datetime(2020, 7, 17), 107.250, 107.360, 106.938, 106.986],
    [datetime(2020, 7, 20), 107.011, 107.537, 106.970, 107.279],
    [datetime(2020, 7, 21), 107.193, 107.367, 106.681, 106.803],
    [datetime(2020, 7, 22), 106.789, 107.288, 106.705, 107.153],
    [datetime(2020, 7, 23), 107.124, 107.231, 106.711, 106.865],
    [datetime(2020, 7, 24), 106.826, 106.872, 105.681, 106.052]
]

df = pd.DataFrame(fx_data, columns=['date', 'open', 'high', 'low', 'close'])
df = df.set_index("date")
cs  = mpf.make_mpf_style(gridcolor="lightgray", mavcolors=['red', 'green', '#405173'])
fig, axes = mpf.plot(df,type='candle', datetime_format='%Y/%m/%d', mav=(2,4,6), style=cs, returnfig=True)
legend=["ma2", "ma4", "ma6"]

# 移動平均凡例の色を指定
ma2_patch = mpatches.Patch(color='red', label='ma2')
ma4_patch = mpatches.Patch(color='green', label='ma4')
ma6_patch = mpatches.Patch(color='#405173', label='ma6')
axes[0].legend(handles=[ma2_patch, ma4_patch, ma6_patch])

fig.show()

○実行結果

関連情報

・mplfinanceのインストール方法は以下の記事を参照してください。
JupyterLabにmplfinance、pandas、matplotlibをインストールして、ロウソク足チャートを表示する

・mplfinanceのgithubリポジトリ
https://github.com/matplotlib/mplfinance

Ubuntu 20.04にJupyter Labをインストールする(pipenv版)

Raspberry Pi(Raspbian Buster)にJupyter Labをインストールする

2020年10月17日土曜日

PythonとMoz SQL Parserを使用してSQLを解析する

Moz SQL ParserでSQLを構文解析して、JSON形式で結果を取得することができます。

インストール方法

以下のコマンドでMoz SQL Parserをインストールします。
pip install moz-sql-parser

サンプルコード

使用方法はシンプルで、parseにSQLクエリを渡すと、JSONで返されます。
from moz_sql_parser import parse
import json

query = """select * 
from pg_stats 
where n_distinct >= 50 and schemaname = 'pg_catalog'
order by n_distinct desc
"""
print(json.dumps(parse(query), indent=2))

・実行結果
{
  "select": "*",
  "from": "pg_stats",
  "where": {
    "and": [
      {
        "gte": [
          "n_distinct",
          50
        ]
      },
      {
        "eq": [
          "schemaname",
          {
            "literal": "pg_catalog"
          }
        ]
      }
    ]
  },
  "orderby": {
    "value": "n_distinct",
    "sort": "desc"
  }
}

関連情報

Moz SQL Parserのgithubリポジトリ
https://github.com/mozilla/moz-sql-parser

2020年10月15日木曜日

Ubuntu 20.04/Raspbeery Pi OS(Buster)にディスクベンチマークソフトDBENCHをインストールする

DBENCHはディスクベンチマークソフトです。

インストール方法

以下のコマンドを実行します。
sudo apt-get -y install dbench

使用例

-Dでベンチマークを行うディレクトリを指定します。最後の数値はプロセス数です。
sudo dbench -D /tmp 2

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX    2215234     0.034   520.287
 Close        1627239     0.004    17.331
 Rename         93810     0.087    29.653
 Unlink        447375     0.075   296.401
 Deltree           56     6.597    31.205
 Mkdir             28     0.005     0.007
 Qpathinfo    2007912     0.017   289.381
 Qfileinfo     351890     0.002    11.389
 Qfsinfo       368192     0.006    19.250
 Sfileinfo     180449     0.037   378.580
 Find          776316     0.054    27.279
 WriteX       1104514     0.063   248.552
 ReadX        3472767     0.009    40.232
 LockX           7216     0.008     3.529
 UnlockX         7216     0.003     1.556
 Flush         155266     5.363  2345.556

Throughput 115.941 MB/sec  2 clients  2 procs  max_latency=2345.576 ms

関連情報

・DBENCHのホームページ
https://dbench.samba.org/

2020年10月7日水曜日

OpenSCADとUltimaker Curaを使用して穴開け用治具を作成する

OpenSCADとUltimaker Curaを使用して、穴開け用治具を作成するには以下の手順を実行します。

〇穴開け用治具
ひっくり返して、木材の端に押し付けて穴開け位置を正確にします。

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。

・穴開け用治具のOpenSCADコード
※ベースのネジ穴の半径はJIG_HOLE_Rで指定します。端から穴の中心への距離はJIG_HOLE_OFFSETで変えることが出来ます。
JIG_BODY_W=30;
JIG_BODY_D=20;
JIG_BODY_H=10;

JIG_HANDLE_D=10;
JIG_HANDLE_H=30;

JIG_HOLE_R=2;
JIG_HOLE_OFFSET=JIG_BODY_D-13/2;

difference(){
    union(){
        translate([0, 0, 0])
        linear_extrude(height=JIG_BODY_H){
            square([JIG_BODY_W, JIG_BODY_D]);
        }
        translate([0, JIG_BODY_D, 0])
        linear_extrude(height=JIG_HANDLE_H){
            square([JIG_BODY_W, JIG_HANDLE_D]);
        }
    }
    union(){
        translate([JIG_BODY_W/2, JIG_HOLE_OFFSET, 0])
        linear_extrude(height=JIG_BODY_H){
            circle(JIG_HOLE_R, $fn=100);
        }
    }
}

・OpenSCADの画面

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

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

関連情報

・そのほかの3Dプリンターを活用した記事は以下を参照してください。
OpenSCADまとめ

2020年10月6日火曜日

Ubuntu 20.04にLightZoneをインストールする

LightZoneはデジタル写真編集アプリケーションです。

〇LightZoneの画面

インストール方法

以下のコマンドを実行してLightZoneをインストールします。
sudo add-apt-repository -y ppa:lightzone-team/lightzone

sudo apt-get -y update

sudo apt-get -y install lightzone

2020年10月4日日曜日

OpenSCADとUltimaker Curaを使用して吊るしフックを作成する

OpenSCADとUltimaker Curaを使用して、吊るしフックを作成するには以下の手順を実行します。

〇吊るしフック

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。

・吊るしフックのOpenSCADコード
※ベースのネジ穴の半径はHOLE_Rで指定します。
BASE_THICK=2;
BASE_W=15;
BASE_D=35;

HOOK_OFFSET_W=5;
HOOK_OFFSET_D=10;
HOOK_SIZE=5;
HOOK_H=20;
HOOK_D=15;

HOLE_R=4/2; // 3.3/2;
HOLE_OFFSET=5;

difference()
{
    union()
    {
        translate([0, 0, 0])
        linear_extrude(height=BASE_THICK){
            square([BASE_W, BASE_D]);
        }
        translate([HOOK_OFFSET_W, HOOK_OFFSET_D, BASE_THICK])
        linear_extrude(height=HOOK_H){
            square([HOOK_SIZE, HOOK_SIZE]);
        }
        translate([HOOK_OFFSET_W, HOOK_OFFSET_D, BASE_THICK+HOOK_H-HOOK_SIZE])
        linear_extrude(height=HOOK_SIZE){
            square([HOOK_SIZE, HOOK_SIZE*3]);
        }
        translate([HOOK_OFFSET_W, HOOK_OFFSET_D+HOOK_SIZE*2, BASE_THICK+HOOK_H-HOOK_SIZE*2])
        linear_extrude(height=HOOK_SIZE){
            square([HOOK_SIZE, HOOK_SIZE]);
        }
    }
    union()
    {
        translate([BASE_W/2, HOLE_OFFSET, 0])
        linear_extrude(height=BASE_THICK){
            circle(HOLE_R, $fn=100);
        }
        translate([BASE_W/2, BASE_D-HOLE_OFFSET, 0])
        linear_extrude(height=BASE_THICK){
            circle(HOLE_R, $fn=100);
        }
    }
}

・OpenSCADの画面

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

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

関連情報

・そのほかの3Dプリンターを活用した記事は以下を参照してください。
OpenSCADまとめ

2020年10月3日土曜日

OpenSCADとUltimaker Curaを使用して紐や結束バンドで固定できるタグを作成する

OpenSCADとUltimaker Curaを使用して、紐や結束バンドで固定できるタグを作成するには以下の手順を実行します。

〇作成したタグの写真

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。

・タグのOpenSCADコード
※タグの厚さはTAG_THICKパラメータ、タグの幅はTAG_BODY_W、タグの奥行はTAG_BODY_Hで大きさを変えることができます。
// タグ本体
TAG_THICK=2;
TAG_BODY_W=15;
TAG_BODY_D=40;

// タグの頭の部分と穴
TAG_HEAD_D=4;
TAG_CORNER_SIZE=3;
SLIT_W=8;
SLIT_D=2.5;

difference()
{
    translate([0, 0, 0])
    linear_extrude(height=TAG_THICK){
        square([TAG_BODY_W, TAG_BODY_D]);
        polygon([
            [TAG_BODY_W, TAG_BODY_D],
            [TAG_BODY_W-TAG_CORNER_SIZE, TAG_BODY_D+TAG_HEAD_D],
            [TAG_CORNER_SIZE, TAG_BODY_D+TAG_HEAD_D],
            [0, TAG_BODY_D]
        ]);
    }
    translate([TAG_BODY_W/2-SLIT_W/2, TAG_BODY_D, 0])
    linear_extrude(height=TAG_THICK){
        square([SLIT_W, SLIT_D]);
    }
}

・OpenSCADの画面

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

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

関連情報

・そのほかの3Dプリンターを活用した記事は以下を参照してください。
OpenSCADまとめ

2020年10月2日金曜日

OpenSCADとUltimaker Curaを使用して2x4の断面が短いほうの面の中心にしるしを付ける治具を作成する

OpenSCADとUltimaker Curaを使用して、2x4の断面が短いほうの面の中心にしるしを付ける治具を作成するには以下の手順を実行します。
2x4規格の木材は、比較的柔らかい材質で出来ているので、治具を押し付けると中央に窪みがつきます。

〇2x4規格の木材に治具をつけたところ

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。

・治具のOpenSCADコード
※JIG_BODY_Wを小さくすれば1x4などにも対応できます。
// 2x4側面治具
JIG_BODY_W=38;
JIG_BODY_H=10;
JIG_HANDLE_W=10;
JIG_HANDLE_D=10;
JIG_HANDLE_H=30;
JIG_W = JIG_BODY_W + JIG_HANDLE_W*2;
JIG_CONE_R=3;
JIG_CONE_H=4;

translate([-JIG_BODY_W/2, -JIG_HANDLE_D/2, 0])
linear_extrude(height=JIG_BODY_H){
    square([JIG_BODY_W, JIG_HANDLE_D]);
}
translate([-JIG_W/2, -JIG_HANDLE_D/2, 0])
linear_extrude(height=JIG_HANDLE_H){
    square([JIG_HANDLE_W, JIG_HANDLE_D]);
}
translate([JIG_BODY_W/2, -JIG_HANDLE_D/2, 0])
linear_extrude(height=JIG_HANDLE_H){
    square([JIG_HANDLE_W, JIG_HANDLE_D]);
}
translate([0, 0, JIG_BODY_H])
cylinder(h=JIG_CONE_H, r1=JIG_CONE_R, r2=0, center=true, $fn=100);

・OpenSCADの画面

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

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

関連情報

・そのほかの3Dプリンターを活用した記事は以下を参照してください。
OpenSCADまとめ

2020年10月1日木曜日

OpenSCADとUltimaker Curaを使用してコの字型ハンドル取り合付け穴開け用の治具を作成する

OpenSCADとUltimaker Curaを使用して、コの字型ハンドル取り合付け穴開け用の治具を作成するには以下の手順を実行します。

〇治具とコの字型ハンドル

作成手順

1. OpenSCADで以下のコードを実行して形状を調整し、STLファイルにエクスポートします。

・治具のOpenSCADコード
※JIG_HOLE_Rで穴の半径、JIG_HOLE_DISTANCEで穴の間隔を変えることができます。
JIG_BODY_W=80;
JIG_BODY_D=30;
JIG_BODY_H=10;

JIG_HANDLE_D=10;
JIG_HANDLE_H=30;

JIG_HOLE_R=3;
JIG_HOLE_DISTANCE=68;
JIG_HOLE_OFFSET=15;

difference(){
    union(){
        translate([0, 0, 0])
        linear_extrude(height=JIG_BODY_H){
            square([JIG_BODY_W, JIG_BODY_D]);
        }
        translate([0, JIG_BODY_D, 0])
        linear_extrude(height=JIG_HANDLE_H){
            square([JIG_BODY_W, JIG_HANDLE_D]);
        }
    }
    union(){
        translate([JIG_BODY_W/2-JIG_HOLE_DISTANCE/2, JIG_HOLE_OFFSET, 0])
        linear_extrude(height=JIG_BODY_H){
            circle(JIG_HOLE_R, $fn=100);
        }
        translate([JIG_BODY_W/2+JIG_HOLE_DISTANCE/2, JIG_HOLE_OFFSET, 0])
        linear_extrude(height=JIG_BODY_H){
            circle(JIG_HOLE_R, $fn=100);
        }
    }
}

・OpenSCADの画面

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

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

関連情報

・そのほかの3Dプリンターを活用した記事は以下を参照してください。
OpenSCADまとめ