// Slide-on wall mount for Samsung Galaxy Tab S6 (SM-T860/T865/T867), landscape. // Three parts. Render each with: openscad -D 'part="plate"' -o plate.stl mount.scad // Units: mm. Coordinate system for the plate: x = across the wall (0 = tablet centreline), // y = up the wall (0 = the tablet's bottom edge when seated), z = out from the wall toward the room. // Tablet: 244.5 x 159.5 x 5.7, four charging pads centred on its bottom edge, ~3.3 mm pitch. part = "plate"; // "plate" | "block" | "frame" | "assembly" $fn = 64; // ---------- shared numbers ---------- tab_w = 244.5; tab_h = 159.5; tab_t = 5.7; plate_t = 3; // plate body thickness plate_w = 120; plate_h = 110; plate_y0 = 25; // plate bottom edge, above the tablet's bottom edge tongue_h = 70; tongue_w_base = 78; tongue_w_top = 84; tongue_t = 3; tongue_y0 = plate_y0 + 20; // tongue bottom edge (its top edge is 20 below the plate top) stem_w = 70; // stem from plate bottom down to the tablet edge hole_d = 16; // cable hole, big enough to pass the buck converter hole_y = 35; screw_d = 4.5; csk_d = 9; // #8 wood screw, countersunk clear = 0.3; // per-side sliding clearance (FDM: outer walls run oversize, openings undersize) standoff = plate_t + tongue_t + 0.5; // wall to tablet back, ~6.5 // pin block pins = 4; pin_pitch = 3.3; pin_hole_d = 2.4; // drill to 2.5 for the Treedix pins blk_w = 20; blk_depth = 8; blk_z0 = 0.5; blk_top = 12.0; // body below the tablet edge: from 0.5 off the wall to 0.2 inside the glass plane chan_w = 3.5; chan_d = 1.5; // wire channel on the wall-side faces (block back, plate back) blk_gap = 1.0; // shoulder sits this far below the edge = pin working compression pocket_d = 1.0; // solder pocket depth; pin (9 mm) seats on its floor -> tip = 9-(8-1) = 2 mm proud pin_z = standoff + tab_t/2; // pin axis at mid-thickness of the tablet edge slot_len = 60; slot_y = 8; slot_w_face = 5; slot_w_deep = 7; slot_depth = 2; // dovetail slot in the stem bridge_t = 2; // U-frame (glued to the tablet's back). It occupies z = standoff-fr_t .. standoff, i.e. shifted fr_off above the tongue's base, // so its dovetail opening is cut for the tongue's width at those heights (flanks are 45 deg: width grows 2 mm per mm of height). fr_w = 110; fr_h = 100; fr_t = 3; fr_bar = 15; fr_arm = 15; fr_off = standoff - (plate_t + tongue_t); // 0.5 fr_open_wall = tongue_w_base + 2*fr_off + 2*clear; // opening at the frame's wall-side face fr_open_tab = fr_open_wall + 2*fr_t; // opening at the glue face (45 deg) // ---------- helpers ---------- module dovetail_prism(w_bottom, w_top, len, height, y0=0, z0=0) { // trapezoid in x-z, extruded along y from y0 for len hull() { translate([-w_bottom/2, y0, z0]) cube([w_bottom, len, 0.01]); translate([-w_top/2, y0, z0+height]) cube([w_top, len, 0.01]); } } module dovetail_x(len, w_face, w_deep, z_face, depth, yc) { // groove/rail running along x, centred on y=yc; width w_face at z_face, w_deep at z_face-depth hull() { translate([-len/2, yc - w_face/2, z_face - 0.01]) cube([len, w_face, 0.01]); translate([-len/2, yc - w_deep/2, z_face - depth]) cube([len, w_deep, 0.01]); } } module csk_hole(x, y) { translate([x, y, -1]) cylinder(d=screw_d, h=plate_t+2); translate([x, y, plate_t - (csk_d-screw_d)/2]) cylinder(d1=screw_d, d2=csk_d, h=(csk_d-screw_d)/2 + 0.01); } // ---------- PART A: wall plate ---------- module plate() { difference() { union() { // body translate([-plate_w/2, plate_y0, 0]) cube([plate_w, plate_h, plate_t]); // stem down to the tablet edge translate([-stem_w/2, 0, 0]) cube([stem_w, plate_y0 + 0.01, plate_t]); // tongue: dovetail, wider at the top (room side) than at its base dovetail_prism(tongue_w_base, tongue_w_top, tongue_h, tongue_t, y0=tongue_y0, z0=plate_t); } // screw holes, countersunk from the room side for (sx=[-1,1], sy=[0,1]) csk_hole(sx*50, sy==0 ? plate_y0+8 : plate_y0+plate_h-8); // cable hole translate([0, hole_y, -1]) cylinder(d=hole_d, h=plate_t+2); // dovetail slot for the pin block, cut into the room-side face of the stem, along x translate([0,0,0.02]) dovetail_x(slot_len, slot_w_face, slot_w_deep, plate_t, slot_depth, slot_y + slot_w_deep/2); // wire groove on the wall side, routed around the slot: behind the block along the stem bottom (y 1..4.5), // over to the stem's right edge, up past the slot, then across to the cable hole translate([-chan_w/2, -0.01, -0.01]) cube([35 + chan_w/2, 4.5, chan_d]); translate([35 - chan_w, 1, -0.01]) cube([chan_w, 36, chan_d]); translate([6, 37 - chan_w, -0.01]) cube([29, chan_w, chan_d]); } } // ---------- PART B: pin block ---------- module block() { difference() { union() { // rail that rides in the stem's slot (dovetail, wider at the bottom) dovetail_x(blk_w, slot_w_face - 2*clear, slot_w_deep - 2*clear, plate_t, slot_depth, slot_y + slot_w_deep/2); // bridge over the stem face, from the rail down to the block body translate([-blk_w/2, -blk_depth - blk_gap, plate_t]) cube([blk_w, blk_depth + blk_gap + slot_y + slot_w_deep + 1, bridge_t]); // body below the tablet edge, reaching back to (almost) the wall so nothing shows behind it translate([-blk_w/2, -blk_depth - blk_gap, blk_z0]) cube([blk_w, blk_depth, blk_top - blk_z0]); } // four pin holes, axis along y, from the shoulder down through the body for (i=[0:pins-1]) { x = (i - (pins-1)/2) * pin_pitch; translate([x, -blk_depth - blk_gap - 1, pin_z]) rotate([-90,0,0]) cylinder(d=pin_hole_d, h=blk_depth + 2); } // solder pocket on the bottom face for the pin tails and wires translate([-blk_w/2 + 2, -blk_depth - blk_gap - 0.01, pin_z - 2.5]) cube([blk_w - 4, pocket_d + 0.01, 5]); // wire channel: from the pocket, across the bottom face to the wall side, then up the back face to the stem translate([-chan_w/2, -blk_depth - blk_gap - 0.01, blk_z0 - 0.01]) cube([chan_w, pocket_d + 0.02, pin_z - blk_z0]); translate([-chan_w/2, -blk_depth - blk_gap - 0.01, blk_z0 - 0.01]) cube([chan_w, blk_depth + blk_gap + 0.02, chan_d + 0.01]); } } // ---------- PART C: U-frame, glued to the tablet's back ---------- // Frame coords: z=0 is the face glued to the tablet, z=fr_t faces the wall. // The opening is a dovetail matching the tongue: wide at the tablet face, narrow at the wall face, // so the arms hook under the tongue's flanks. module frame() { difference() { translate([-fr_w/2, 0, 0]) cube([fr_w, fr_h, fr_t]); // opening: open at the bottom (y<0), closed by the top bar at y = fr_h - fr_bar hull() { translate([-fr_open_tab/2, -1, -0.01]) cube([fr_open_tab, fr_h - fr_bar + 1, 0.01]); translate([-fr_open_wall/2, -1, fr_t - 0.005]) cube([fr_open_wall, fr_h - fr_bar + 1, 0.01]); } } } // ---------- assembly preview (not for printing) ---------- module assembly() { color("slategray") plate(); color("peru") block(); // frame sits in the same layer as the tongue, hanging with its top bar on the tongue's top edge color("steelblue") translate([0, tongue_y0 + tongue_h + clear - (fr_h - fr_bar), standoff]) mirror([0,0,1]) frame(); // tablet, translucent color("black", 0.25) translate([-tab_w/2, 0, standoff]) cube([tab_w, tab_h, tab_t]); } if (part == "plate") plate(); else if (part == "block") translate([0,0,blk_depth+blk_gap]) rotate([90,0,0]) block(); // stood on its bottom face for printing else if (part == "frame") frame(); else assembly();