The base only screwed to the body at the back. New bosses in the side walls sit just behind the display, clear of the bezel's slide-in path; the base rim gets a gap around them and the feet part now has 6 feet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Desk case
A 3D-printable desk case for the Samsung 20L203 VFD and a WEMOS D1 R1 (UNO-sized ESP8266 board). The display is tilted back 15° and bolted to the front with M3 screws. The DC jack and the USB port are reachable through the back wall.
Outer size: about 208 × 112 × 86 mm (W × D × H). The parts need a print bed of at least 210 × 115 mm.
Parts
| File | Print orientation | Notes |
|---|---|---|
| stl/body.stl | upside down, top on the bed (as exported) | Sides, top and back wall. No supports needed. |
| stl/bezel.stl | face down (as exported) | Front panel with the window and the display bosses. |
| stl/base.stl | flat (as exported) | Floor with the board standoffs and the screw holes. |
| stl/feet.stl | flat side down (as exported) | 6 feet, print in TPU. Each clamps under one of the base screws, with a spigot that locates in the screw's counterbore. |
PETG is a good choice: the display warms the inside by a few degrees. PLA works if the case stays out of the sun.
Hardware
- 14 × M3 heat-set inserts, CNC Kitchen M3 × 5.7 (about 4.6 mm OD; the holes
are 4.2 mm and 6 mm deep, set by
insert_dif your printer runs tighter or looser):- 4 in the bezel's display bosses
- 2 in the bezel's feet
- 2 in the body's rear corners and 2 in its side walls, behind the display
- 4 on the base's board standoffs
- 4 × M3×6 to bolt the display to the bezel
- 4 × M3×6 to hold the D1 board on its standoffs
- 6 × M3×8 to hold the base on, from below (also with the TPU feet)
Assembly
- Melt the inserts in.
- Bolt the display to the bezel from behind, glass facing the window.
- Screw the D1 board onto the base, with the DC jack and USB edge at the back.
- Slide the bezel, with the display on it, into the body from below. Its edges run in the grooves in the side walls until it stops against the top.
- Connect the display cable. The MAX3232 sits inline in the cable; tie it to the anchor on the base.
- Put the body on the base and screw it together from below. The base holds the bezel in place. With the feet, put a foot on each screw first (the spigot faces the base); M3×8 is still long enough. Tighten until the foot is snug; the TPU only needs light compression.
Measure before printing
The dimensions come from the 20L203DA12 datasheet. Your board is a DA5, so check these against yours and change the values at the top of vfd-case.scad if needed:
disp_hole_inset,disp_w,disp_h: the display's mounting holes, 182 × 56 mm apart.glass_x0,glass_y0,glass_w,glass_h,glass_depth: the glass position and the distance from its front face to the PCB.usb_pos: where the micro-USB port is along the D1's back edge (38 mm from the jack side is a guess based on the UNO layout). Also checkjack_pos.disp_rotated: the glass is off-centre on the display's PCB, so the bezel depends on which way up the display is mounted.true(the default) is the orientation the display reads correctly in: turned 180° from the datasheet's front view, with the jumper header on the left seen from the front.
If only the display is off, it's enough to reprint the bezel.
Changing the design
Open vfd-case.scad in OpenSCAD. Every dimension is a variable at the top, including the tilt, wall thickness and clearances. Export a part with:
openscad -D 'part="body"' --export-format binstl -o stl/body.stl vfd-case.scad
openscad -D 'part="bezel"' --export-format binstl -o stl/bezel.stl vfd-case.scad
openscad -D 'part="base"' --export-format binstl -o stl/base.stl vfd-case.scad
openscad -D 'part="feet"' --export-format binstl -o stl/feet.stl vfd-case.scad
part="assembly" shows everything with dummy display and board models, and
part="section" shows a cut-away. The check_* parts are collision checks;
each one must render as an empty object:
check_body_bezel,check_body_display,check_bezel_displaycheck_body_base,check_bezel_base,check_display_base,check_feet_basecheck_boardcheck_insertion: sweeps the bezel and display along their slide-in path through the body.
Faces that only touch can show up as a zero-volume result, which is fine.

