diff --git a/anim.scad b/anim.scad index df75af4..63500c9 100644 --- a/anim.scad +++ b/anim.scad @@ -4,12 +4,13 @@ function get_anim_keys() = [ 0.1, // resting 0.25, // holodisk free-inserted 0.3, // holodisk click-inserted -0.4, // laser raised +0.4, // laser raised, waiting 0.5, // start playing 0.7, // stop playing, start lowering laser -0.8, // laser lowered, holodisk removing -0.85, // holodisk click-removed -1 // final, holodisk free-removed +0.75, // laser lowered, holodisk removing +0.8, // holodisk click-removed +0.95, // holodisk free-removed, NOPing +1 // final ]; function ANIM_START()=0; @@ -17,11 +18,12 @@ function ANIM_RESTING()=0; function ANIM_INSERTING()=1; function ANIM_OPENING()=2; function ANIM_RAISING()=3; -function ANIM_PLAYING()=4; -function ANIM_LOWERING()=5; -function ANIM_CLOSING()=6; -function ANIM_REMOVING()=7; -function ANIM_END()=8; +function ANIM_WAITING()=4; +function ANIM_PLAYING()=5; +function ANIM_LOWERING()=6; +function ANIM_CLOSING()=7; +function ANIM_REMOVING()=8; +function ANIM_END()=9; function anim(key_from, key_to, KEYS=get_anim_keys()) = max(0, min(($t - KEYS[key_from]) / (KEYS[key_to] - KEYS[key_from]), 1)); diff --git a/create_gif.sh b/create_gif.sh new file mode 100755 index 0000000..edb8815 --- /dev/null +++ b/create_gif.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +convert -delay 10 -loop 0 *.png demo.gif diff --git a/demo.gif b/demo.gif new file mode 100644 index 0000000..5e84c37 Binary files /dev/null and b/demo.gif differ diff --git a/fallout_holodisk.scad b/fallout_holodisk.scad index 7cfc8c8..272dbb3 100755 --- a/fallout_holodisk.scad +++ b/fallout_holodisk.scad @@ -13,3 +13,14 @@ use include include + +/*/ read camera +echo($vpr); +echo($vpt); +echo($vpd); +/**/ +// set camera +$vpr=[70.4, 0, 314.3]; +$vpt=[35.2535, 26.4734, 12.9879]; +$vpd=325.228; +/**/ \ No newline at end of file diff --git a/holodisk.scad b/holodisk.scad index 2464078..e3971ee 100755 --- a/holodisk.scad +++ b/holodisk.scad @@ -43,6 +43,7 @@ module holodisk_mechanism() { aux_spool_plate_hole_inner_rim=2; aux_spool_plate_hole_outer_rim=2; spindle_diam=get_holodisk_spools_spindle_diam(); + spindle_diff_scale=1.02; tape_z=plate+spool_plate_height; module main_spool() { @@ -52,7 +53,12 @@ module holodisk_mechanism() { in_rim=spool_plate_hole_inner_rim, out_rim=spool_plate_hole_outer_rim, in_height=spool_inner_height, - spindle_traction=true); + spindle_diam=spindle_diam, spindle_traction=true); + down(plate) + difference() { + spindle(h=height, d=spindle_diam, traction=true); + scale(spindle_diff_scale) holodisk_spool_spindle_connection_driver(); + } } module aux_spool() { zrot(500*anim(ANIM_PLAYING(), ANIM_PLAYING()+1)) diff --git a/holodisk_spec.scad b/holodisk_spec.scad index 32d12d4..edd11cf 100644 --- a/holodisk_spec.scad +++ b/holodisk_spec.scad @@ -88,4 +88,28 @@ function get_holodisk_spool2_socket_pos_center() = [ function get_holodisk_spools_spindle_diam() = 3; +function get_holodisk_spool_spindle_connection_driver_size() = [ + get_holodisk_spools_spindle_diam()-1, + get_holodisk_spools_spindle_diam()-1, + 3 + ]; + +module holodisk_spool_spindle_connection_driver_profile() { + circle(d=get_holodisk_spool_spindle_connection_driver_size().x, $fn=6); +} +*holodisk_spool_spindle_connection_driver_profile(); + +module holodisk_spool_spindle_connection_driver() { + h=get_holodisk_spool_spindle_connection_driver_size().z; + d=get_holodisk_spool_spindle_connection_driver_size().x; + intersection() { + linear_extrude(height=h, scale=0.8) { + holodisk_spool_spindle_connection_driver_profile(); + } + cylinder(h=h*1.15, d1=d*1.15, d2=d/1.8, $fn=100); + cylinder(h=h*1.1, d1=d*1.8, d2=d*0.45, $fn=100); + } +} +*holodisk_spool_spindle_connection_driver(); + // -- END -- diff --git a/reader.scad b/reader.scad index bb8b52b..082e479 100755 --- a/reader.scad +++ b/reader.scad @@ -9,7 +9,6 @@ include tape_height=5; tape_z=4; - module reader(disk_size) { width=disk_size.x; depth=disk_size.y; @@ -32,6 +31,15 @@ module reader(disk_size) { up(corner) color("Red") fwd(laser_cutout_size.y/3) cube(laser_size, center=true); + + beam_anim=anim(ANIM_PLAYING(), ANIM_PLAYING()+1); + if (beam_anim > 0 && beam_anim < 1) { + color("red") + up(get_holodisk_laserwindow_size().x/4) + yrot(beam_anim*1234) + xrot(90) + cylinder(h=get_holodisk_laserwindow_size().y, d=get_holodisk_laserwindow_size().x/4, $fn=3); + } } module laser_tower(corner=1) { @@ -69,15 +77,62 @@ module reader(disk_size) { } } + spindle_driver_shaft_diam = get_holodisk_spool_spindle_connection_driver_size().x; + module spindle_driver_shaft() { + h=10; // TODO + down(h) cylinder(d=spindle_driver_shaft_diam, h=h, $fn=100); + } + + module spindle_driver() { + union() { + holodisk_spool_spindle_connection_driver(); + spindle_driver_shaft(); + } + } + + module spindle_driver_space() { + s=get_holodisk_spool_spindle_connection_driver_size(); + down(0.01) scale(1.01) cylinder(d=s.x, h=s.z, $fn=100); + } + + anim_spindle_rot=100; + module spindle1_driver() { + translate(get_holodisk_spool1_socket_pos_center()) + zrot(anim(ANIM_PLAYING(), ANIM_PLAYING()+1)*anim_spindle_rot) + spindle_driver(); + } + + module spindle1_driver_space() { + translate(get_holodisk_spool1_socket_pos_center()) + spindle_driver_space(); + } + + module spindle2_driver() { + translate(get_holodisk_spool2_socket_pos_center()) + zrot(anim(ANIM_PLAYING(), ANIM_PLAYING()+1)*anim_spindle_rot) + spindle_driver(); + } + + module spindle2_driver_space() { + translate(get_holodisk_spool2_socket_pos_center()) + spindle_driver_space(); + } + //head(); retraction=laser_tower_size.z; down(retraction) - up(anim(2, 3)*retraction) - down(anim(5, 6)*retraction) - translate(laser_pos) { - laser(); - laser_tower(); + up(anim(ANIM_RAISING(), ANIM_RAISING()+1)*retraction) + down(anim(ANIM_LOWERING(), ANIM_LOWERING()+1)*retraction) + union() { + translate(laser_pos) { + laser(); + laser_tower(); + } + color("yellow") { + spindle1_driver(); + spindle2_driver(); + } } color("DarkSlateBlue") { @@ -88,6 +143,8 @@ module reader(disk_size) { down(frame) difference() { fwd(frame) cube([width, depth + frame, frame]); scale(1.01) down(0.01) laser_space(); + scale([1,1,5]) spindle1_driver_space(); + scale([1,1,5]) spindle2_driver_space(); } } } diff --git a/tape_spool.scad b/tape_spool.scad index 0ab69be..8b8c72b 100644 --- a/tape_spool.scad +++ b/tape_spool.scad @@ -69,11 +69,6 @@ module spool( } } -module spool_spindle() { - spindle_h=height-plate; - spindle(d=spindle_diam, h=spindle_h); -} - // test spindle_diam=2; tape_height=5;