Showing posts with label build123d. Show all posts
Showing posts with label build123d. Show all posts

2026-06-16

prototype case print 5.5

for this print i wanted to add more chamfer everywhere so the edges of the case are easier on the grip.
i'm recycling old print pieces where possible so this is definitely not color coordinated. but i do think a red (for accidentals), white (for naturals), and blue version (for the case) would look really nice.

on the bottom, i was morally obligated to make it look cool by transitioning from a larger chamfer in the front to a smaller chamfer in the back (where the shoulder buttons are). this was a lot more finicky than i thought, and even once i had a good looking build123d file, it was having issues turning it into a 3mf mesh. (for some reason i need to not generate the top parts of the case when building the bottom part of the case, even though they should get sliced apart at some stage.)
i'll have to move the case-split z-offset down a bit because it's hard to snap the front/back together due to the keyboard crossbar right above the shoulder buttons. i also spent a little time centering the joystick properly and adding the correct number of pins on the pico.
i want to make a button on the back of the case to access the bootsel button without opening the case. this may be tricky with the battery that i want to stick in there.

some other name ideas...
  • portano (portable piano)
  • octano (octave piano)
  • pp (pianissimo, or portable piano)

2026-06-01

bolting in the keyboard

been wanting to come up with a solution to keep the keyboard in place so i borrowed some inspiration from the Oskitone Scout and put in a square nut and bolt.
i'm experimenting with a few things, including speaker grills on the left, as well as bringing back the joystick.
here's the same view from the first pic, but upside down, so that's the way you'd be screwing the bolt in. you can see the staggered accidental and natural tactile switches here.

inside the case: key switches

i've been procrastinating on working on the inside of the case, mostly because it's dealing with stuff i've never done before (circuits and soldering, etc.), but it's time to crack the nut open. naturally the need for space for everything will dictate what i can put in and where. in particular, i think i won't have enough space for potentiometers on the front of the case, at least not with how countersunk i'd like them to be. (well there may be pots with shorter knobs, i may revisit.) i may stick a potentiometer on the back instead (!). and i may go back to having a joystick on the front, but one with a lower height profile so i can squeeze it in.
i've been starting the inside work by adding switches for the keyboard. i offset them by the center of the attachment point near the back, and they turned out to be pretty evenly aligned. while i could make them perfectly aligned, i don't think it's necessary. i would like roughly the same force required to push the naturals and accidentals, so i'm thinking i may need to move the natural switches down compared to the accidentals; this may also help with making it easier to solder (??). here's a view from the back, so you can see how well aligned they are!
you'll notice i'm also experimenting with countersinking the keyboard in for "dimension". this will do a few things. it will make it easy to add in a nut and bolt to clamp the keyboard to the top of the case. it will increase the thickness of the device but potentially make it more pocketable -- i.e., less friction with accidentals popping out. (i'm currently keeping a little bit of accidental height outside of the enclosure, though -- we'll see how it changes over time!)

2026-05-21

case iterating

i'm going to be trying a few things; i want to see if i can get the volume/slide knobs in the back for easy movement with the fingers. this will require building out the innards of the case more, which i've been putting off. it looks pretty sleek without anything in the front!
at some point i'll put a logo or name there. another notable change; i've filleted the edges of the natural keys because i think that might help with glissando...

i'm also probably going to be moving the keys down (or inwards) for "protection" against putting them in the pocket (i.e., for the accidentals), and i've increased the size of the keys again because in a loose grip the thumb concerns from some of the previous posts aren't as important. it's also important to have decent size targets for the thumbs anyway.

i've also added some chamfer to the bottom which should help with pinkie comfort.

2026-05-14

shoulders that pivot the other way

ok so i did want to try out hinging from the other side for shoulder buttons. i had fun designing this as the intersection (or difference) of a bunch of circle slices, plus fillets:
the other improvement is for ease of putting it together. i've added some pedestals inside the shoulder button that the columns slot onto, so they aren't loose or hard to line up (ideally). here's a cross section.
the columns have a large flat top so they can "support" the keyboard crossbar, which isn't pictured (or really needed) for the shoulder tester.

printing it now, will return with observations. [edit] and now we have it printed.
i think this is better but of course i'll want to test the full case. i'll want to make the button longer; the old version had a little more surface area.

[edit2] started another prototype print on the full case, i'll share that in a new post soon but wanted to show the shoulders in action here.
i think i do like them this way, you're not able to push into the pivot accidentally like you were on the previous model; i.e., there's always a lever arm.

2026-05-12

prototype case print 2

the big upgrades here are having a cutout for the palms and beveling (build123d filleting) all the outer edges. it makes it feel more premium to not have the edges attacking you. i've shrunk the length of the keys and case (y direction) as well so it now has adorable proportions. the strawberry mint ice cream color scheme doesn't hurt, either.
the knobs aren't connected to anything so they droop a bit.
under the hood, i've improved the keyboard a bit; accidentals are spaced a bit more like on a real piano (i.e., unevenly), which necessitated moving around the "key wiggle bridge" on the bottom of each key so each bridge was exactly the same width. this took me more time than i'd like to admit.
some notes:
  • i may try to bevel the case more; you get elephant's foot on the first layer so the top and bottom edges don't feel super smooth. however it's still a huge improvement on feel.
  • i'll probably want to bevel the tops of the accidentals.
  • i lied in the last post, you won't want a "relaxed grip" on this so the shoulder buttons should be fine pivoting around the top corners. i may want to try moving the pivot point down but keeping the buttons external profile in about the same spot, so there's a bit of a lever arm no matter where you press it.
  • the knobs coming off the bottom of the front look really fun, but the best location for these would be on the back so that your other fingers could adjust them during a performance. but they look really good here, and having them for visual feedback when adjusting isn't the worst. (i may not be leaving enough space for the actual potentiometers, hmm.) if i do move them to the back, there's room for a sick logo in front, or some waveform adjusting button(s), or both.
  • assembling this is a bit of a pain right now; i need to add more pedestals for my columns at the very least. i'm also probably overbuilding it, so there's a couple columns i could remove.

2026-05-07

design for constructability

the Oskitone Scout is a huge inspiration for this work, though i am reverse engineering the design into build123d without looking at Oskitone's openSCAD specifics. i printed a copy and am reading rough dimensions with a ruler, and adjusting for look/feel. still you can't argue with how good the Scout looks!
one of the things the Scout keyboard does is put nubs on the top and bottom of the natural keys. i assume these help with keeping the keys inside the case, but they also look kinda cool and mimic the look of a real piano key with its top lip. to get the keys in the Scout case you kinda have to shimmy them in diagonally (or force it a bit).

back to my design. i'm glad i looked closely at this cut away because if i copied the Scout's nubs i'd have a constructability problem:
my keys will have to slot in from the bottom, and will come in straight due to the shoulder columns. i could redesign the shoulders, or i could remove the key lip, and one of these is easier than the other. well, i should probably even add in a key taper, i haven't yet modelled how the keys depress to make sure i'm not running into the edge of the case.

2026-05-06

building inside a case

refactored my case code to be generated by a solid that most things should fit inside, which is parametric in the "wall size" so i can generate the outer solid, the inner solid, and an inner solid with some clearance so parts should fit without trouble. the case then simply becomes outer - inner, plus holes for buttons and keys. this allows me to build cross beams a bit more readily, like the keyboard back bar here:
side bar: it looks like the keyboard back bar lays on the shoulder buttons, but there will be another crossbeam in between to avoid the shoulder buttons infringing on the keys' ability to bend, see video below.

the idea is to share as much code between building parts individually and modeling how they fit together, so i have a get_keyboard_pos() function which is used as the first parameter here, and build_case_clearance_solid() is memoized so it only needs to be calculated once. the keyboard position isn't needed when printing so it gets added and subtracted in this method, but not before intersecting with the case's inner clearance.
  def fit_in_case(where, part):
    return where.inverse() * (
        build_case_clearance_solid().intersect(
            where * part
        )
    )
and here is the result with the crossbar.

2026-05-05

clip tool in build123d

build123d has a visualizer (ocp_vscode) that you can run in standalone mode (python -m ocp_vscode). it has a nice clip tool that you can use to see into parts, which is handy.
i was having trouble with small mouse movements glitching my ocp_vscode view, but restarting ocp_vscode helped.

2026-05-04

shoulder button tester

using build123d is fun because you can make things parametric, and it seemed obvious that of all the parts to this build, shoulder buttons would require the most fussing with parameters.

so i made a shoulder button tester that would be similar to the case in the upper right corner, but would allow faster iteration in case i needed to change the enclosure and button. here's a first pass on the design:
of course i couldn't help over building it, but i'll be able to use the crenelations for the real enclosure as well.
looks like i'll have to be careful with keyboard + shoulder button overlap. hmm

[edit] i think having an internal stopper will work better for our case, so we can minimize the number of things moving around inside the case where they might not be desired. this column (and where it can move in the negative space) will stop the shoulder button from exiting the device, but could also be engineered to reduce force on the internal button after a certain point.

building a gadget

i have too many interests and too little time for any of them, which is why i recently started a new project. heavily inspired by the Oskitone Scout, and for the purposes of having a handheld pitch generator (for an a cappella group i'm a part of), but also because i wanted a cool synth toy, i made this sketch:
the idea is to be able to change octaves by hitting the shoulder buttons, so you only "need" one octave of notes. it was intended to be played via thumbs.

a few days later, i wanted to lean into the game controller vibe, so it has a joystick, probably for changing pitch by aiming left/right and some other sound qualities like vibrato or duty by aiming up/down. i've been modeling it in build123d, one because i like python as a scripting language and two it feels pretty intuitive (in algebra mode at least).
i am building my 3d printing skills up (i should probably blog about the Catan-like board game i made pieces for), i already am confident in my ability to write code (i've even done low-level microcontroller audio code for the bitbox), but the but the one skill i don't yet have is wiring up circuits and microcontrollers. i'm terrified but also looking forward to trying to develop this.