What is The Bar and Why Raise It?

A Pi Zero with 0.96 inch OLED display.
Such a fun little guy. Just makes me smile.

It is what it is, and it pleases me.

It is such a simple thing. It's not fancy. It does not evoke cool. It does not perform any singluar significant function that improves my quality of life. But still, it pleases me. What is it? It's a Pi Zero W with a DROK buck converter power supply and a 0.96" OLED display.

What does it do? Anything I want that a Pi Zero can handle. Today it's a clock. Tomorrow maybe it'll be monitoring the voltage on some battery pack. Next week, who knows? That really doesn't matter. I like it. That matters.

That really is all that matters.

I've been a daily reader of hackaday.com for several years now. It's part of my morning routine most mornings. The capable staff there cull through droves of techie projects and present a curated collection of things that they find interesting. I think they do a great job. I find quite a number of the articles worth reading.

I have to admit that I sometimes fall into a common trap. It's "the raising of the bar". Each new thing has to be just a little cooler to really grab my interest. Is it sleeker? Smoother? Shinier? Is it impressively powerful? Fast? Loud? Explosive? . . . Dangerous? I'm not the only one. If you venture into the comments you can see it. Sad.

We make jokes about men compensating by driving huge dualie trucks. But we all are trying to one-up those around us in a constant effort to make us feel better about ourselves. A result is we can lose our ability to enjoy anything. Nothing measures up. Nothing's good enough. You may not see the problem. I do.

So when I put this little Pi Zero package together I made it as simple and utilitarian as I could. Then I sat back and smiled. Something that makes it even better is it's done in OpenSCAD. Human readable code that I can share with you right here in this post. Doesn't cost you a dime. How much more simple can it get? Not much, I think.

The DROK base:

// zero_drok-buck-pwr_mount.scad
// Mount for a Pi Zero and a DROK buck converter
// Gregory A Sanders - Feb, 2025
//
// bs = base
bsx = 72;
bsy = 48;
bsz = 3;
// ps = power supply
psx = 63.6;
psy = 27.2;
psz = 1.8;
// mh = Pi mount hole spacing
mhx = 58;
mhy = 23;
// op = opening in base
opx = 52;
opy = 15;
opz = 10;

$fn=64;
module base(){
    difference(){
        cube([bsx,bsy,bsz]);
        translate([bsx/2,bsy/2,-1])
        cube([opx,opy,opz],true);
    }
}

module ps(){
    difference(){
        cube([psx+2,psy+3,10]);
        translate([-1,3,0])
        difference(){
            union(){
                translate([0,-.5,-0.5])
                cube([psx+4,psy-2,12]);
                translate([3,-1.5,7])
                cube([psx+2,psy,psz]);
            }
        }
    }
}

module picoscrew(){
    union(){
        cylinder(20,1.5);
        // cylinder(2.5,r=3);
    }
}

module pico(){
    picoscrew();
    translate([0,mhy,0])
    picoscrew();
    translate([mhx,mhy,0])
    picoscrew();
    translate([mhx,0,0])
    picoscrew();
}

difference(){
    union(){
        base();
        translate([4,8,0])
        ps();
    }
    union(){
        translate([bsx/2-mhx/2,4,-.5])
        pico();
        translate([bsx/2-mhx/2,18,-.5])
        pico();
    }
}
// The End.

Upper and Lower OLED parts:

// oled_ssd-1306_0.96in_mount.scad
// Mount for a 128x64 0.96" SSD-1306 OLED module
// intended to mount above Pi Zero.
// Gregory A Sanders - Feb, 2025
//
// CENTER ALL CUBES
//
// fa = face
fax = 27;
fay = 27;
faz = 2;
// fo = face opening
fox = 24;
foy = 14;
foz = 8;
// fh = face hole spacing
fhx = 20;
fhy = 23;
fhz = 10;
// mh = Pi mount hole spacing
mhx = 58;
mhy = 23;


$fn=64;

module face(){
    difference(){
        cube([fax+2,fay+2,faz],true);
        translate([0,1,0])
        cube([fox,foy,foz],true);
    }
}
module side(){
    difference(){
        linear_extrude(2)
        hull(){
            square([29,8]);
            translate([(27/2),12,0])
            circle(8);
        }
        translate([27/2,14,-1])
        cylinder(20,2);
    }
}
module zeroscrew(){
        cylinder(20,r=1.5);
}
module oledscrew(){
        cylinder(20,2);
}
module zeroholes(){
    zeroscrew();
    translate([0,mhy,0])
    zeroscrew();
    translate([mhx,mhy,0])
    zeroscrew();
    translate([mhx,0,0])
    zeroscrew();
}
module oledholes(){
    oledscrew();
    translate([0,fhy,0])
    oledscrew();
    translate([fhx,fhy,0])
    oledscrew();
    translate([fhx,0,0])
    oledscrew();
}

module oledassy(){
    translate([-3-(fax/2),-1-fay/2,-1])
    rotate([90,0,90])
    side();

    translate([1+(fax/2),-1-fay/2,-1])
    rotate([90,0,90])
    side();

    difference(){
        face();
        translate([-fhx/2,-fhy/2,-10])
        oledholes();
    }
}

module zeroframe(){
    difference(){
        cube([mhx+8,mhy+8,3]);
        union(){
            translate([4,4,-2])
            zeroholes();
            translate([6,6,-2])
            cube([mhx-4,mhy-4,6]);
        }
    }
    translate([((mhx+8)/2)+(33/2),1,0])
    // translate([0,0.0])
    rotate([90,0,90])
    side();
    // 33
    translate([((mhx+8)/2)-((33/2)+2),1,0])
    rotate([90,0,90])
    side();
}

//zeroframe(); // uncomment for frame
oledassy();  // uncomment for upper mount
// The End.

Construction Note:

The cheap little display boards came with crooked displays. I took an Xacto knife and gently removed the adhesive holding the glass to the PCB. It was simple enough to lay both pieces in the mount and get the screws started. No adhesive required. And no more crooked display.

A little Python stolen from the Luma.oled Github examples folder, and a little home brew systemd .service file, and we're done.

So there you go. Get you some M2.5 stainless hardware, and some nylon M2.5 standoffs from Amazon (or your favorite goodie shop) and enjoy!

This is a thing that works.

More Pics:

link to home page

Prev: Andrauthentic

links

social

--> -->