〇LeoCADの画面(Ubuntu 22.04)
Ubuntu Softwareによるインストール方法
1. Ubuntu Softwareを起動して、leocadを検索します。2.LeoCADのインストールボタンをクリックします
コマンドでのインストール方法
以下のコマンド実行しますsudo apt-get update
sudo apt-get -y install snapd
sudo snap install leocad
sudo apt-get update
sudo apt-get -y install snapd
sudo snap install leocad
// プレートの厚さ
PLATE_THICK=5;
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// LEGOの側面の厚さ
LEGO_WALL=1.5;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE=6.4;
// 底の側面の高さ
LEGO_BOTTOM_H=2.6;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=8;
NUM_HOLE_D=2;
// Instax mini用写真フレームを差し込むスリット
SLIT_W=LEGO_SQUARE*NUM_HOLE_W;
SLIT_D=3.3;
SLIT_H=3.1;
//rotate([-180,0,0])
difference(){
union(){
// 天板
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
// 側面
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, LEGO_SQUARE*NUM_HOLE_D-LEGO_WALL, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_WALL, LEGO_SQUARE*NUM_HOLE_D]);
}
translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_WALL, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_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_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
circle(LEGO_BOTTOM_CIRCLE/2, $fn=50);
}
}
}
}
union()
{
// Instax mini用写真フレームを差し込むスリット
translate([0, (LEGO_SQUARE*NUM_HOLE_D)/2-SLIT_D/2, PLATE_THICK-SLIT_H])
linear_extrude(height=SLIT_H){
square([SLIT_W, SLIT_D]);
}
}
}
// USBタイプAのサイズ
USB_A_W=12.1;
USB_A_D=8.5;
USB_A_H=4.6;
// 端子のサイズ
USB_A_TERMINAL_H=2.2;
TERMINAL_EDGE=0.5;
TERMINAL_DISTANCE=1.5;
TERMINAL_TOP_H=1;
TERMINAL_TOP_W=1.5;
// キャップ部分
CAP_W=7.95*2;
CAP_D=7.95*2;
CAP_H=5;
rotate([90, 0, 0])
union(){
translate([-USB_A_W/2, 0, 0])
linear_extrude(height=USB_A_TERMINAL_H){
square([USB_A_W, USB_A_D]);
}
translate([-USB_A_W/2, 0, USB_A_TERMINAL_H])
linear_extrude(height=TERMINAL_EDGE){
square([TERMINAL_EDGE, USB_A_D]);
}
translate([USB_A_W/2-TERMINAL_EDGE, 0, USB_A_TERMINAL_H])
linear_extrude(height=TERMINAL_EDGE){
square([TERMINAL_EDGE, USB_A_D]);
}
translate([-CAP_W/2, -CAP_D, 0])
linear_extrude(height=CAP_H){
square([CAP_W, CAP_D]);
}
translate([-USB_A_W/2, 0, USB_A_TERMINAL_H+TERMINAL_DISTANCE])
linear_extrude(height=TERMINAL_TOP_H){
square([USB_A_W, TERMINAL_TOP_W]);
}
}
// プレートの厚さ
PLATE_THICK=1;
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
LEGO_PEG=4.9;
LEGO_PEG_R=LEGO_PEG/2;
LEGO_PEG_H=1.8;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=2;
NUM_HOLE_D=2;
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
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, PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
circle(LEGO_PEG_R, $fn=50);
}
}
}
// プレートの厚さ
PLATE_THICK=7;
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
LEGO_PEG=4.9;
LEGO_PEG_R=LEGO_PEG/2;
LEGO_PEG_H=1.8;
// LEGOの側面の厚さ
LEGO_WALL=1.5;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE_S=3;
// 底の側面の高さ
LEGO_BOTTOM_H=2.6;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=2;
// 上面プレート
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE]);
}
// 突起
for( lw = [0 : NUM_HOLE_W-1] ){
translate([LEGO_SQUARE*lw+LEGO_SQUARE/2, LEGO_SQUARE/2, PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
circle(LEGO_PEG_R, $fn=50);
}
}
// 側面
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, LEGO_SQUARE-LEGO_WALL, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_WALL, LEGO_SQUARE]);
}
translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_WALL, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_WALL, LEGO_SQUARE]);
}
// 下の円柱
for( lw = [0 : NUM_HOLE_W-2] ){
translate([LEGO_SQUARE*(lw+1), LEGO_SQUARE/2, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
circle(LEGO_BOTTOM_CIRCLE_S/2, $fn=50);
}
}
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5;
NUM_HOLE_D=4;
// 壁の厚さ
WALL_THICK=2;
// 左右の壁の厚さ
SIDE_THICK=3.5;
// 上側の厚み
TOP_THICK=4;
// 下側の厚み
BOTTOM_THICK=4;
// サーボ固定アーム下
MOUNTER_HANDLE_D=8;
MOUNTER_HANDLE_H=12.2;
MOUNTER_HANDLE_W=5.15;
// サーボ固定アーム上
MOUNTER_HANDLE_D2=8.4;
// サーボ固定アームオフセット
ARM_OFFSET_D=11.4;
ARM_OFFSET_W=7.0/2;
// サーボ固定アーム間距離
ARM_DISTANCE=22.5;
// サーボモーターの円形部分
LARGE_CIRCLE=11.7+0.2;
SMALL_CIRCLE=5.6+0.2;
// ケーブル用の穴
CABLE_D=2.5;
CABLE_W=6;
// 突起の直径
LEGO_PEG=4.9;
LEGO_PEG_R=LEGO_PEG/2;
LEGO_PEG_H=1.8;
// LEGOの側面の厚さ
LEGO_WALL=1.5;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE=6.4;
// 底の側面の高さ
LEGO_BOTTOM_H=2.6;
difference(){
union(){
// ベース
translate([0, 0, 0])
linear_extrude(height=WALL_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
// 壁上側
translate([0, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([LEGO_SQUARE*NUM_HOLE_W, TOP_THICK]);
}
// 壁下側
translate([0, LEGO_SQUARE*NUM_HOLE_D-BOTTOM_THICK, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([LEGO_SQUARE*NUM_HOLE_W, BOTTOM_THICK]);
}
// 壁右側
translate([0, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([SIDE_THICK, LEGO_SQUARE*NUM_HOLE_D]);
}
// 壁左側
translate([LEGO_SQUARE*NUM_HOLE_W-SIDE_THICK, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([SIDE_THICK, LEGO_SQUARE*NUM_HOLE_D]);
}
// アーム右上
translate([ARM_OFFSET_W, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D2]);
}
// アーム左上
translate([ARM_OFFSET_W+ARM_DISTANCE+MOUNTER_HANDLE_W, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D2]);
}
// アーム右下
translate([ARM_OFFSET_W, ARM_OFFSET_D, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D]);
}
// アーム左下
translate([ARM_OFFSET_W+ARM_DISTANCE+MOUNTER_HANDLE_W, ARM_OFFSET_D, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D]);
}
// 側面
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, LEGO_SQUARE*NUM_HOLE_D-LEGO_WALL, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_WALL, LEGO_SQUARE*NUM_HOLE_D]);
}
translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_WALL, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_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_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
circle(LEGO_BOTTOM_CIRCLE/2, $fn=50);
}
}
}
}
union(){
// 大きな円の穴
translate([ARM_OFFSET_W+MOUNTER_HANDLE_W+LARGE_CIRCLE/2, 0, WALL_THICK+MOUNTER_HANDLE_H/2])
rotate([-90, 0, 0])
linear_extrude(height=TOP_THICK){
circle(LARGE_CIRCLE/2, $fn=50);
}
// 小さな円の穴
translate([ARM_OFFSET_W+MOUNTER_HANDLE_W+LARGE_CIRCLE, 0, WALL_THICK+MOUNTER_HANDLE_H/2])
rotate([-90, 0, 0])
linear_extrude(height=TOP_THICK){
circle(SMALL_CIRCLE/2, $fn=50);
}
// ケーブル穴
translate([0, ARM_OFFSET_D+MOUNTER_HANDLE_D, WALL_THICK+MOUNTER_HANDLE_H/2-CABLE_W/2])
linear_extrude(height=CABLE_W){
square([MOUNTER_HANDLE_H, CABLE_D]);
}
}
}
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5;
NUM_HOLE_D=4;
// 壁の厚さ
WALL_THICK=1;
// 左右の壁の厚さ
SIDE_THICK=3.5;
// 上側の厚み
TOP_THICK=4;
// 下側の厚み
BOTTOM_THICK=4;
// サーボ固定アーム下
MOUNTER_HANDLE_D=8;
MOUNTER_HANDLE_H=12.2;
MOUNTER_HANDLE_W=5.15;
// サーボ固定アーム上
MOUNTER_HANDLE_D2=8.4;
// サーボ固定アームオフセット
ARM_OFFSET_D=11.4;
ARM_OFFSET_W=7.0/2;
// サーボ固定アーム間距離
ARM_DISTANCE=22.5;
// サーボモーターの円形部分
LARGE_CIRCLE=11.7+0.2;
SMALL_CIRCLE=5.6+0.2;
// ケーブル用の穴
CABLE_D=2.5;
CABLE_W=6;
module lego_servo_case(){
difference(){
union(){
// ベース
translate([0, 0, 0])
linear_extrude(height=WALL_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
// 壁上側
translate([0, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([LEGO_SQUARE*NUM_HOLE_W, TOP_THICK]);
}
// 壁下側
translate([0, LEGO_SQUARE*NUM_HOLE_D-BOTTOM_THICK, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([LEGO_SQUARE*NUM_HOLE_W, BOTTOM_THICK]);
}
// 壁右側
translate([0, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([SIDE_THICK, LEGO_SQUARE*NUM_HOLE_D]);
}
// 壁左側
translate([LEGO_SQUARE*NUM_HOLE_W-SIDE_THICK, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([SIDE_THICK, LEGO_SQUARE*NUM_HOLE_D]);
}
// アーム右上
translate([ARM_OFFSET_W, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D2]);
}
// アーム左上
translate([ARM_OFFSET_W+ARM_DISTANCE+MOUNTER_HANDLE_W, 0, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D2]);
}
// アーム右下
translate([ARM_OFFSET_W, ARM_OFFSET_D, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D]);
}
// アーム左下
translate([ARM_OFFSET_W+ARM_DISTANCE+MOUNTER_HANDLE_W, ARM_OFFSET_D, WALL_THICK])
linear_extrude(height=MOUNTER_HANDLE_H/2){
square([MOUNTER_HANDLE_W, MOUNTER_HANDLE_D]);
}
}
union(){
// 大きな円の穴
translate([ARM_OFFSET_W+MOUNTER_HANDLE_W+LARGE_CIRCLE/2, 0, WALL_THICK+MOUNTER_HANDLE_H/2])
rotate([-90, 0, 0])
linear_extrude(height=TOP_THICK){
circle(LARGE_CIRCLE/2, $fn=50);
}
// 小さな円の穴
translate([ARM_OFFSET_W+MOUNTER_HANDLE_W+LARGE_CIRCLE, 0, WALL_THICK+MOUNTER_HANDLE_H/2])
rotate([-90, 0, 0])
linear_extrude(height=TOP_THICK){
circle(SMALL_CIRCLE/2, $fn=50);
}
// ケーブル穴
translate([0, ARM_OFFSET_D+MOUNTER_HANDLE_D, WALL_THICK+MOUNTER_HANDLE_H/2-CABLE_W/2])
linear_extrude(height=CABLE_W){
square([MOUNTER_HANDLE_H, CABLE_D]);
}
}
}
}
mirror([0, 180, 0])
lego_servo_case();
// プレートの厚さ
PLATE_THICK=1;
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
LEGO_PEG=4.9;
LEGO_PEG_R=LEGO_PEG/2;
LEGO_PEG_H=1.8;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5;
NUM_HOLE_D=4;
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
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, PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
circle(LEGO_PEG_R, $fn=50);
}
}
}
// プレートの厚さ
PLATE_THICK=7;
// LEGOの1ブロック
LEGO_SQUARE=7.95;
// 突起の直径
LEGO_PEG=4.9;
LEGO_PEG_R=LEGO_PEG/2;
LEGO_PEG_H=1.8;
// LEGOの側面の厚さ
LEGO_WALL=1.5;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE=6.4;
// 底の側面の高さ
LEGO_BOTTOM_H=2.6;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=8;
NUM_HOLE_D=2;
// 柱の高さ
PILLAR_H=38.5;
// レールの厚さ
RAIL_THICK=2.2;
RAIL_DEPTH=3;
difference(){
union(){
// 上面プレート
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
// 左側柱
translate([0, 0, PLATE_THICK])
linear_extrude(height=PILLAR_H){
square([LEGO_SQUARE, LEGO_SQUARE*NUM_HOLE_D]);
}
// 左側突起
for( ld = [0 : NUM_HOLE_D-1] ){
translate([LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, PLATE_THICK+PILLAR_H])
linear_extrude(height=LEGO_PEG_H){
circle(LEGO_PEG_R, $fn=50);
}
}
// 右側柱
translate([LEGO_SQUARE*(NUM_HOLE_W-1), 0, PLATE_THICK])
linear_extrude(height=PILLAR_H){
square([LEGO_SQUARE, LEGO_SQUARE*NUM_HOLE_D]);
}
// 右側突起
for( ld = [0 : NUM_HOLE_D-1] ){
translate([LEGO_SQUARE*(NUM_HOLE_W-1)+LEGO_SQUARE/2, LEGO_SQUARE*ld+LEGO_SQUARE/2, PLATE_THICK+PILLAR_H])
linear_extrude(height=LEGO_PEG_H){
circle(LEGO_PEG_R, $fn=50);
}
}
// 側面
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, LEGO_SQUARE*NUM_HOLE_D-LEGO_WALL, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
square([LEGO_WALL, LEGO_SQUARE*NUM_HOLE_D]);
}
translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_WALL, 0, -LEGO_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_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_BOTTOM_H])
linear_extrude(height=LEGO_BOTTOM_H){
circle(LEGO_BOTTOM_CIRCLE/2, $fn=50);
}
}
}
}
translate([LEGO_SQUARE-RAIL_DEPTH, LEGO_SQUARE-RAIL_THICK/2, PLATE_THICK-RAIL_DEPTH])
linear_extrude(height=PILLAR_H+RAIL_DEPTH){
square([LEGO_SQUARE*(NUM_HOLE_W-2)+RAIL_DEPTH*2, RAIL_THICK]);
}
}
// Raspberry Pi Picoのベースサイズ
PICO_W=51;
PICO_D=22;
// Raspberry Pi Picoを支える足の部分
LEG_HEIGHT=4;
LEG_DISTANCE=8.2;
LEG_SIZE=4;
LEG_HOLE_DIAMETER=1.5+0.5;
// Raspberry Pi Pico固定用足のオフセット
LEG_OFFSET_W=1;
LEG_OFFSET_D=0.8;
// プレートの厚さ
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=2.8;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE=6.4;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=7;
NUM_HOLE_D=3;
module pico_mounter_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);
}
}
}
}
module pico_mounter()
{
difference(){
union(){
// 底面
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([PICO_W, PICO_D]);
}
translate([LEG_OFFSET_W, PICO_D/2-LEG_DISTANCE/2-LEG_SIZE, PLATE_THICK])
linear_extrude(height=LEG_HEIGHT){
square([LEG_SIZE, LEG_SIZE]);
}
translate([LEG_OFFSET_W, PICO_D/2+LEG_DISTANCE/2, PLATE_THICK])
linear_extrude(height=LEG_HEIGHT){
square([LEG_SIZE, LEG_SIZE]);
}
translate([PICO_W-LEG_SIZE+LEG_OFFSET_W, PICO_D/2-LEG_DISTANCE/2-LEG_SIZE, PLATE_THICK])
linear_extrude(height=LEG_HEIGHT){
square([LEG_SIZE, LEG_SIZE]);
}
translate([PICO_W-LEG_SIZE+LEG_OFFSET_W, PICO_D/2+LEG_DISTANCE/2, PLATE_THICK])
linear_extrude(height=LEG_HEIGHT){
square([LEG_SIZE, LEG_SIZE]);
}
}
union(){
translate([LEG_SIZE/2+LEG_OFFSET_W, PICO_D/2-LEG_DISTANCE/2-LEG_SIZE/2, 0])
linear_extrude(height=LEG_HEIGHT+PLATE_THICK){
circle(LEG_HOLE_DIAMETER/2, $fn=50);
}
translate([LEG_SIZE/2+LEG_OFFSET_W, PICO_D/2+LEG_DISTANCE/2+LEG_SIZE/2, 0])
linear_extrude(height=LEG_HEIGHT+PLATE_THICK){
circle(LEG_HOLE_DIAMETER/2, $fn=50);
}
translate([PICO_W-LEG_SIZE/2+LEG_OFFSET_W, PICO_D/2-LEG_DISTANCE/2-LEG_SIZE/2, 0])
linear_extrude(height=LEG_HEIGHT+PLATE_THICK){
circle(LEG_HOLE_DIAMETER/2, $fn=50);
}
translate([PICO_W-LEG_SIZE/2+LEG_OFFSET_W, PICO_D/2+LEG_DISTANCE/2+LEG_SIZE/2, 0])
linear_extrude(height=LEG_HEIGHT+PLATE_THICK){
circle(LEG_HOLE_DIAMETER/2, $fn=50);
}
}
}
}
pico_mounter_lego();
translate([LEG_OFFSET_W, LEG_OFFSET_D, 0])
pico_mounter();
// アームの厚さ
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]]);
}
}
}
}
// アームの厚さ
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]]);
}
}
}
}
// アームの厚さ
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]]);
}
}
}
}
// サーボモーター固定台
MOUNTER_THICK=2;
MOUNTER_BOTTOM_THICK=1;
BOX_W=7.95*5;
BOX_H=7.95*2;
SERVO_BOTTOM=7;
// アーム部分
MOUNTER_W=23;
MOUNTER_D=9;
HOLE_RADIUS=0.6;
HANDLE_W = 5;
HANDLE_H=12.2;
module lego_vert_mounter()
{
difference()
{
union()
{
translate([-HANDLE_W, 0, 0])
linear_extrude(height=MOUNTER_THICK){
square([MOUNTER_W+HANDLE_W*2, MOUNTER_D]);
}
translate([-HANDLE_W, 0, MOUNTER_THICK])
linear_extrude(height=HANDLE_H){
square([HANDLE_W, MOUNTER_D]);
}
translate([MOUNTER_W, 0, MOUNTER_THICK])
linear_extrude(height=HANDLE_H){
square([HANDLE_W, MOUNTER_D]);
}
}
// サーボモーター固定用穴
rotate([-90,0,0])
translate([-HANDLE_W/2, -MOUNTER_THICK-HANDLE_H/2, 0])
linear_extrude(height=MOUNTER_D){
circle(HOLE_RADIUS, $fn=50);
}
rotate([-90,0,0])
translate([MOUNTER_W+HANDLE_W/2, -MOUNTER_THICK-HANDLE_H/2, 0])
linear_extrude(height=MOUNTER_D){
circle(HOLE_RADIUS, $fn=50);
}
}
// servo motor直下
translate([-HANDLE_W, MOUNTER_D, 0])
linear_extrude(height=MOUNTER_THICK){
square([BOX_W, SERVO_BOTTOM]);
}
translate([-HANDLE_W, MOUNTER_D+SERVO_BOTTOM, 0])
linear_extrude(height=BOX_H){
square([BOX_W, MOUNTER_BOTTOM_THICK]);
}
}
lego_vert_mounter();
// プレートの厚さ
PLATE_THICK=1;
// 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;
// LEGOの底面の円の直径
LEGO_BOTTOM_CIRCLE=6.4;
// プレートのサイズ(ブロック単位)
NUM_HOLE_W=5;
NUM_HOLE_D=2;
translate([0, 0, 0])
linear_extrude(height=PLATE_THICK){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_SQUARE*NUM_HOLE_D]);
}
translate([0, 0, PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, LEGO_SQUARE*NUM_HOLE_D-LEGO_WALL, PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
square([LEGO_SQUARE*NUM_HOLE_W, LEGO_WALL]);
}
translate([0, 0, PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
square([LEGO_WALL, LEGO_SQUARE*NUM_HOLE_D]);
}
translate([LEGO_SQUARE*NUM_HOLE_W-LEGO_WALL, 0, PLATE_THICK])
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), PLATE_THICK])
linear_extrude(height=LEGO_PEG_H){
circle(LEGO_BOTTOM_CIRCLE/2, $fn=50);
}
}
}