Custom Laser-Cut Panel for pi-topCEED

I love my pi-topCEED, but the acrylic panel wasn’t meeting my needs: I had to remove it to get a good look at my pi-topPULSE, there wasn’t a speaker grille (making all the sound come out the USB port side), and I felt like I had to press too hard on the arrow thing to move the panel. Surely someone has posted a customizable acrylic panel design so I can make a custom one! No? Oh… OK then…

So here we are! I’m going to post the design so anyone can make their own and/or customize it. Post a picture if you do!


  • Matches the original outline and it has the locking notch, so it should fit perfectly (minor tweaks might be necessary depending on your laser).
  • Laser-cut it in any color or material you want!
  • Speaker grille is for pi-topPULSE, but it wouldn’t be hard to customize for the normal speaker.
  • Convenient finger holes make it easier to slide the panel out, and as a bonus provide extra ventilation for your Pi’s CPU!

Questions and comments are welcome!

/* Custom Acrylic Panel for pi-topCEED

Custom panel with pi-topPULSE speaker opening, and finger holes/CPU vent

Paste this script into OpenSCAD and export as DXF for your laser cutter!

Created 11/10/2020 by Andrew Thiel

$fn = 25; //Resolution of round features

CorneRound = .220*25.4; //Radius of rounded corners. That’s RADIUS, not diameter.

Width = 325.47; //Left-to-right
Height = 99.67; //Top-to-bottom (as in when it’s installed in the slot)

speakerleft = 148; //Speaker edge locations as measured from the lefthand side
speakeright = 169;
speakertall = 70; //Vertical dimension of the center speaker slot
slots = 3; //Number of speaker slots (in either direction)
slottaper = 5; //Speaker slots shorten by this much as they get further from the center
slotspace = 5; //Center-to-center distance between slots

heatsink = 266; //Location of CPU heatsink as measured from lefthand side
holes = 5; //Quantity of CPU vent/finger holes
holespace = 15; //Vertical distance between CPU vent/finger holes

//This is the main body of the panel…
translate([CorneRound,CorneRound]) circle(r=CorneRound); //Construct a rectangle between four round corners
translate([CorneRound,Height-CorneRound]) circle(r=CorneRound);
translate([Width-CorneRound,CorneRound]) circle(r=CorneRound);
translate([Width-CorneRound,Height-CorneRound]) circle(r=CorneRound);
//Everything else is holes we’re taking out of the panel…
translate([11, Height]) circle(d=4); //Notch

for(i=[0:1:slots-1]){ //Speaker grille (left)
hull(){ //Left-side slots
translate([(speakerleft+speakeright)/2-slotspacei, Height/2-speakertall/2+slottaperi]) circle(d=2);
translate([(speakerleft+speakeright)/2-slotspacei, Height/2+speakertall/2-slottaperi]) circle(d=2);

hull(){ //Right-side slots
  translate([(speakerleft+speakeright)/2+slotspace*i, Height/2-speakertall/2+slottaper*i]) circle(d=2);
  translate([(speakerleft+speakeright)/2+slotspace*i, Height/2+speakertall/2-slottaper*i]) circle(d=2);


for(i=[0:1:holes-1]){ //Holes for CPU cooling and panel removal
translate([heatsink,Height/2+iholespace-(holespace(holes-1))/2]) circle(d=10);

1 Like