[UPDATE] Evolution of my VGO Leak Detector: From School Eraser Prototype to 3D Printed PETGIoT
Hi u/Stone_Age_Sculptor and u/Bitter_Extension333!
Following your advice, I rewritten the script to follow the "Outside-In" approach and cleaned up the parameters to English. Here is the video showing my first version. As you can see, I was using a simple school eraser for the needle valve, which was good for a low-pressure test.
The new code (2.0) focuses on professional specs for high-pressure (70 mca) IoT testing:
PETG/ABS heat-insert and bolt pass for a proper M5 needle valve.
Designed a dedicated O-Ring Seat (6.3mm dia) with proper clearance (0.6mm compression reliefs).
Correct Venturi angle (21mm to 1.5mm throat) and overlaps (3mm) for strength.
I would love your thoughts on the O-ring Dynamic Seal geometry before printing!
``` openscad
$fn = 120;
// ============================================
// PARAMETERS
// ============================================
throat_dia = 1.5;
total_len = 95;
body_dia = 38;
thread_h = 22;
// O-RING PARAMETERS (PROFESSIONAL)
oring_dia = 6.3; // compression (adjustable)
oring_width = 2.2; // channel width
// ============================================
// MODULE: CUSTOM THREAD
// ============================================
module vgo_thread(d_ext, h, male=true) {
pitch = 1.814;
height = 1.2;
turns = h/pitch;
union() {
cylinder(d = male ? d_ext - 2 : d_ext + 2, h = h);
linear_extrude(height = h, twist = -360 * turns, slices = 400, convexity = 10)
translate([d_ext/2 - (male ? 0.6 : -0.6), 0, 0])
polygon([
[0, 0],
[height, pitch/2],
[0, pitch]
]);
}
}
// ============================================
// MAIN ASSEMBLY
// ============================================
difference() {
// =========================
// EXTERNAL BODY
// =========================
union() {
// MALE INPUT THREAD
translate([0,0,-3])
vgo_thread(20.95, thread_h + 6, true);
// MAIN BODY
translate([0,0,thread_h - 3])
cylinder(h = total_len - (thread_h * 2) + 6, d = body_dia);
// TOP OUTPUT
translate([0,0,total_len - thread_h - 1])
cylinder(h = thread_h + 2, d = body_dia);
}
// =========================
// INTERNAL VENTURI
// =========================
translate([0,0,-4])
cylinder(h=50, d1=21, d2=throat_dia);
translate([0,0,46])
cylinder(h=25, d=throat_dia);
translate([0,0,71])
cylinder(h=28, d1=throat_dia, d2=19.5);
// =========================
// FEMALE THREAD (WITH CLEARANCE)
// =========================
translate([0,0,total_len - thread_h - 2])
vgo_thread(19.0, thread_h + 4, false);
// =========================
// LATERAL SYSTEM (M5)
// =========================
translate([0,0,58.5])
rotate([0,90,0]) {
// BOLT PASSAGE
cylinder(h=body_dia + 20, d=5, center=true);
// M5 HEAT INSERT (6.7mm)
translate([0,0,body_dia/2 - 7])
cylinder(h=10, d=6.7);
// O-RING SEAT
translate([0,0,-(body_dia/2 - 2)]) {
cylinder(h=oring_width, d=oring_dia);
translate([0,0,oring_width])
cylinder(h=1, d=oring_dia + 0.6);
translate([0,0,-1])
cylinder(h=1, d=oring_dia + 0.6);
}
}
} ```

