/////////////////////////////////////////////////////////////////////////// // disc-shaped Qi charger stand // Copyright © 2023 Jonathan Dowland // // This model available from https://jmtd.net/3dprinting/ // // This is made available under the terms of the Creative Commons // Attribution-ShareAlike 4.0 International license (CC BY-SA 4.0). // // In Summary you are free to: // // • Share — copy and redistribute the material in any medium or format // • Adapt — remix, transform, and build upon the material for any purpose, // even commercially. // // Info: // Full license: /////////////////////////////////////////////////////////////////////////// ikea_r = 90.7/2; ikea_d = 10.2; // Anker phone stand stand_angle = 45; // guesswork upright_depth = 8; upright_width = 68; upright_height = 138/2; lip = 13; base_l = 66/4*3; // Modelled after an iPhone 11 Pro phone_width = 73; phone_height = 145; phone_depth = 9.8; // render for printing or viewing printmode = true; // ikea disc-shaped QR charger module ikea_charger() { // translate([ikea_r/4*3, ikea_r, ikea_d*0]) color("#eeeeee", 0.8) cylinder(ikea_d, ikea_r, ikea_r); } module phone_stand() { color("#aaaaaa") cube([upright_width, upright_height, upright_depth]); // lip that supports the Qi charger difference() { color("#aaaaaa") union() { // lip that supports the Qi charger translate([0,phone_height/2 - ikea_r,0]) translate([0,0,upright_depth]) cube([upright_width, upright_depth, ikea_d]); // lip that supports the phone translate([0,0,upright_depth]) cube([upright_width, upright_depth, lip*2]); }; // cutout for power color("#ff0000") translate([upright_width/3, -1, upright_depth - 1]) cube([upright_width/3 + 1, upright_depth + (phone_height/2), lip*2 + 2]); } // flat base color("#aaaaaa") rotate([-stand_angle, 0, 0]) cube([upright_width, base_l, upright_depth]); } module phone() { color("#101010", 0.7) cube([phone_width,phone_height,phone_depth]); } module nudged_charger() { translate([upright_width/2, ikea_r + // centre based on radius upright_depth/3 + // lift away from lip (still slightly occludes) phone_height/2 - ikea_r, // centre on phone centre for charging upright_depth+0.1]) // clear the surfaces ikea_charger(); } rotate([stand_angle,0,0]) union() { if(printmode) { difference() { phone_stand(); nudged_charger(); translate([0,upright_depth -4,upright_depth+ikea_d]) phone(); } } else { phone_stand(); nudged_charger(); translate([0,upright_depth,upright_depth+ikea_d]) phone(); } }