I recently treated myself to a Creality K1C printer with the purpose of being able to print ABS bits for the Fury. It’s a fabulous printer, much more reliable than the Ender 3 Pro I have (and we won’t even mention the Vertex K8800 that has never worked properly)

Anyway, the current mount I have is down on the transmission tunnel, and not easy to glance at. The last time I was in the car, it occured to me I could probably put my phone on the dash behind the steering wheel without blocking the view of anything important.

First steps were to measure the curve of the binnacle. 3D Printer to the rescue! My phone is about 165mm tall so I wrote this OpenSCAD code

length = 165;
width = 20;
num_points = 7;
$fn = 180;
height = 2.5;
linear_extrude(height = height)
{
    difference()
    {
        hull()
        {
            circle(d = width);
            translate([ length, 0, 0 ]) circle(d = width);
        }
        {
            for (i = [0:1:num_points - 1])
            {
                translate([ i * (length / (num_points - 1)), 0, 0 ]) circle(d = 2.5);
            }
        }
    }
}
translate([0,5,0]) cube([length,height,height*2]);
translate([0,-7.5,0]) cube([length,height,height*2]);

to produce this thing.

A yellow flat bar with 7 holes along its length

I could then wind in 7 2.5mm bolts and measure the curve.

7 bolts wound through to different depths to mark a curve

The leftmost one is deep as I was using it to measure a bolt offset (more on that later). Unfortunately, the part warped a bit, so I placed it on my desk and wound the bolts back to measure the curve and then added those to the first measurements.

I then used those numbers in this code

distances = [ 1.75, 1.15, 0.6, 1.65, 4.1, 7.15, 9.75 ];
width = 165;
height = 75;
$fn = 180;
thickness = 3;
module dashInterface()
{
    difference()
    {
        linear_extrude(height = 50)
        {
            points = [for (i = [0:1:6])[(i * (width / 6)), distances[i] + 3]];
            poly = concat([[ 0, 0 ]], points, [[width, 0]]);
            polygon(points = poly);
        }
        translate([ 165 / 4, -10, 25 ]) rotate([ 270, 0, 0 ]) cylinder(d = 4, h = 50);
        translate([ 165 * 0.75, -10, 25 ]) rotate([ 270, 0, 0 ]) cylinder(d = 4, h = 50);
    }
    difference()
    {
        cube([ width, 25, 2.5 ]);

        translate([ width / 2, 3.6 + 15, -1 ]) cylinder(h = 10, r = 2);
    }
}
module phoneBack()
{
    difference()
    {
        linear_extrude(height = thickness * 2)
        {
            hull()
            {
                for (i = [
                         [ (thickness / 2), 0 ], [ width - (thickness / 2), 0 ], [ width - (thickness / 2), height ],
                         [ (thickness / 2), height ]
                     ])
                {
                    translate(i) circle(d = thickness);
                }
            }
        }
        #translate([ (165 - 37) + 20, height / 2, 1 ]) cylinder(d = 30, h = 30);
        #translate([ (165 - 37) - 20, height / 2, 1 ]) cylinder(d = 30, h = 30);
    }
}
translate([ 0, 1, 10 ]) rotate([ 170, 0, 0 ]) 
phoneBack();
dashInterface();

to produce this thing 3D render of phone mount 3D render of phone mount

The offset I mentioned earlier was to locate the single 4mm hole in the front face. This lets me use one of the bolts that holds the dash top down as a locator. Failing that, I’ve got two other bolt holes I can use, but I’d rather not drill any holes if I can avoid it. The two large depressions are for some 30mm magnets to hold the phone in place.

I printed it, and found it was laughably too large. I hadn’t realised how low the windscreen is over the dashboard, so on to version 2.

Version 2 was better, it dropped the phone lower over the front of the dash, but it was still too big (you can see where I hacked the corner off it with a pair of cutters), and the 4mm hole was too precise. It needed some wiggle room to get everything lined up.

The two failed versions

So on to version 3! I realised there was no need for the back to fully support the phone, so I cut that back and made the bolt hole 5mm.

distances = [ 1.75, 1.15, 0.6, 1.65, 4.1, 7.15, 9.75 ];
width = 165;
height = 55;
mag_height=37.5;
$fn = 180;
thickness = 3;
module dashInterface()
{
    difference()
    {
        linear_extrude(height = 50)
        {
            points = [for (i = [0:1:6])[(i * (width / 6)), distances[i] + 3]];
            poly = concat([[ 0, 0 ]], points, [[width, 0]]);
            polygon(points = poly);
        }
        translate([ 165 / 4, -10, 25 ]) rotate([ 270, 0, 0 ]) cylinder(d = 4, h = 50);
        translate([ 165 * 0.75, -10, 25 ]) rotate([ 270, 0, 0 ]) cylinder(d = 4, h = 50);
    }
    difference()
    {
        cube([ width, 25, 2.5 ]);
    }
}
module phoneBack()
{
    difference()
    {
        linear_extrude(height = thickness * 2)
        {
            hull()
            {
                for (i = [
                         [ (thickness / 2), 0 ], [ width - (thickness / 2), 0 ], [ width - (thickness / 2), height ],
                         [ (width - (thickness / 2))/2 +20, height ],[ (thickness / 2), height/2-3 ]
                     ])
                {
                    translate(i) circle(d = thickness);
                }
            }
        }
    }
    translate([ 0, -5, 0 ]) cube([ width, 4, 15 ]);
}

difference()
{
    union()
    {
        rotate([-5,0,0])dashInterface();
        translate([ 0, 25, 0 ]) rotate([ 170, 0, 0 ]) phoneBack();
    }

    translate([ 0, 25, 0 ]) rotate([ 170, 0, 0 ])
    {
        translate([ (165 - 37) + 16, mag_height, 1 ]) cylinder(d = 30, h = 30);
        translate([ (165 - 37) -16, mag_height, 1 ]) cylinder(d = 30, h = 30);
    }
    translate([ width / 2, 3.6 + 15, -10 ]) cylinder(h = 50, r = 3);
    translate([ width / 2, 3.6 + 15, -7 ]) cylinder(h = 5, r = 4);
}

Which produced this design. 3D render of new design

Which looks like this in the car. Just need the magnets to arrive and to re-route the USB cable from the ECU to use it effectively. Phone mount from inside the car

Phone mount from outside the car

All in all, a fun day of fiddling which exercised my brain a little. I am finding OpenSCAD a little limiting/hard work. Over on locostbuilders.co.uk there is a thread that recommends TinkerCAD so I may have a play with that.