I had just one weekend to build a professional-quality video controller.
Did I manage to finish on time? Stay tuned to find out!
I did. I edit a LOT of video in Premiere Pro, and
I've noticed that I need to make a lot of cuts. I... completely forgot my line!
They do make special video-editing controllers with these big ass-iPod wheels, like the LoupeDeck
and DaVinci, but just look at these prices! I ain't paying no two hundred dollars for no 11%
of a keyboard with a knob on it! I'll make my own damn controller! I'll put four knobs on it!
MUAHAHA--- [cuts out] Voidstar Lab exists because
I want YOU to finish more projects. This week, there's no beating around the bush - I'm about
to teach you how to build a weekend project from idea to item by Sunday night. Tally-ho!
Here's the project: I needed a custom keyboard controller with a big wheel to
precisely navigate my footage. It also needed hotkeys for the most important commands,
so I could cut video with one hand and leave the other hand free to drink white Russians.
I decided that I would hand-wire a few mechanical keyboard keys and rotary encoders to a Teensy
microcontroller, and I'd use my 3D printer and the Fab Lab's laser to build the body.
First tip for a weekend project: cheat. The goal was to bang the project out in a weekend,
but I came up with the idea two or three weeks ago. During spare minutes here and there, I looked
into how that $200 version worked, I sketched some layouts, and I also went shopping for parts in my
newly-reorganized parts organizers. I didn't start the project until I
had all the components together, I had a good idea of what I was building,
and I had an entire weekend to myself. Here's the prototype developer protip:
nearly every project that dies, dies when you run out of time, and the number one way to run
out of time is to gamble with it. There are two ways to win here:
you can architect your project so you're not rolling the devil's dice, and you can carve
your project down so that when things do go wrong, you still have enough time to finish the project.
I think I actually made a lot of mistakes in this project, and it was more likely to fail
than to succeed, but let's start with some stuff I did right, some clever 3D modeling.
So by the time the clock struck booze o'clock on Friday, I had already locked down my plan.
I fiddled with some household objects to figure out the approximate size of the wheel. I listed
the commands that I wanted to put on hotkeys. I sketched out some button configurations, and then
I made sure that the Teensy had enough GPIO pins that I could actually wire all those buttons up.
Don't let yourself think that you can "almost" finish the project during the weekend and pick
up the slack on Monday. This will make you subconsciously move slower, because you know you
can get away with it. I told myself that Sunday night, the project would either be on my desk
or in the trash. It might have some rough edges, but that's fine - a project that's really rough
is better than a project that's sitting in a box in your back room that you'll finish "someday".
Modeling time! I fired up Fusion 360 and I made some footprints for the encoder and for the key
switches. I pulled up datasheets for the controls to get their measurements, and then I replicated
the geometry to create the pattern. This is sort of like copying and pasting, except you
can adjust the original and it changes all of them simultaneously. You need to aggressively
cut out all tedious tasks like manually changing dimensions, or you'll fall further and further
behind any time you change anything. Here's where I made a mistake. I should
have stopped here and done a size check, but I trusted the data sheets and I got punished
for it. Because I got those dimensions wrong, the switches are a little less
stable and they can pull out when I replace the keycaps. Learn from my laziness; ALWAYS make
test prints for your critical dimensions, even if you think you know what they are.
While my printer extruded hot, sticky plastic all over my bed, I drew up a wiring diagram. I looked
up schematics for a mechanical keyboard and I drew a few different configurations
before I found one that I was confident I could solder perfectly on the first try. It's worth
putting in more work to reduce your rework. While the top part printed, I modeled the
baseplate. These encoders and switches are designed to solder into a circuit board,
and without some kind of backstop, they'll wiggle around and maybe even get mashed right
in when I press on them. I modeled a support for the keyswitch and another for an encoder,
and then I used the same pattern I used earlier to replicate them out to the other buttons and dials.
I did something pretty smart here. The obvious move was to fuse these onto a base plate,
but large and flat prints like that tend to curl up off the bed. Instead, I added a grid
to hold the supports in position and I sketched a base plate that I could laser-cut. Not only
was it guaranteed to lie perfectly flat, but it would carve an hour off the fabrication time,
and if I had to reprint any of those supports, I wouldn't have to redo that base plate as well.
I actually made another mistake here - see how there are just four screw holes? I seriously
overestimated the stiffness of 3mm acrylic. I really should have added extra screw bosses in the
middle. It's always a good idea to add redundant fasteners. If you don't need them down the line,
you just don't need to install them. Now I gotta drill a hole through this thing, try not to hit
any wires, and install a screw myself. I also added rails to slot the Teensy
into position, and there I made another lazy mistake. See, I've used like a hundred Teensies
in projects, and I have modeled them over and over again, so I thought I didn't have to test-fit.
If I had test-fit it, I would have realized that these rails are too tight and the Teensy is held
waaaay too close to the baseplate. I had to whip out the Dremel and cut a whole bunch
of the baseplate away just to make some room, and the wires and USB port still barely fit.
If those rails were half a millimeter tighter, that Teensy would be permanently stuck.
Test prints are not optional, people! But I did a smart too - see, I attached
all the components to the top piece. There aren't any parts attached to the baseplate, just the top.
That means I can program and test the device while it's disassembled,
which saves a bunch of debugging time. This also makes the device a lot easier to reassemble,
because if you have to tuck the wires back into place whenever you close the shell,
you will waste hours and hours, and eventually those wires will start breaking from the strain.
Friday night was over and the main 3D printing was done.
Next day: electronics. I woke up Saturday at the crack of noon,
I bagged up the prints, and I went to the Lab. First, I test fit everything and I saw those fit
and finish problems. I thought, reprinting everything will take like two hours,
but I doubt it'll have any effect on whether the project works by Sunday night.
This meant that there was nothing to consider - the mistakes were gonna stay.
Next up was the wiring. I made sure to quadruple-check every solder joint
against the diagram and I left lots of loose wire. Because the wires would be stacked up, desoldering
anything would be crrrazy time-consuming, so this thing had to work on the first try.
I got in the zone and I completely forgot to test as I went. This was a game-breaking
mistake. If I had made a single boo-boo in my diagram or I'd assembled a bad circuit,
I wouldn't have had time to rip up all this wiring and start over. The project just wouldn't have
completed. When you're under the gun, this is not optional. You have to test as you go. It would
have added an hour or so, but this was an untested freehanded circuit. The odds I made a mistake were
astronomical. I was playing Russian roulette with the project, and I didn't even realize it.
The only reason I'm even making this video now is because I got lucky and
I happened to nail it on the first shot. Note how I left lots of empty space inside
the thing. It's tempting to try to make the project as compact as possible, but you have
to leave room for wires. Wires take up room - they take up lots of room if you don't plan your
exact path in advance and the wires criss-cross and they stack up. You also need to leave some
slack if you need to repair or maintain this, which is likely in, like, a hastily-built mini-project.
You're going to need that slack to move parts out of the way, and you'll need spare wire to strip.
It turns out I actually didn't leave enough room - look how tightly the wires are bundled between the
keys and how hard they're smooshed against the baseplate. If I had left a little more headroom
and some wider gaps, I could've just shoved the wires in place instead of having to painstakingly route
each and every one of them.
[Drops project]
Everything's fine.
Most of the project's time
was spent soldering and routing wires, but I had just enough time to add the
keycaps and knobs before I went home for the day. Sunday was here. The home stretch: fit, finish,
and code. I started by modeling the big wheel and getting it printing. Remember, you gotta start
your prints rolling ASAP, because waiting on a print to finish can torpedo your schedule and give
you fewer do-overs. And remember, if you start a print and you realize you made a mistake, just...
just cancel it. It's worth the 25 cents of plastic. So I fired up the IDE,
I tested the knobs. They worked. Woo-hoo! Then I moved on to the buttons. They did not.
I was smart enough to just be testing one row at a time, so I could easily
fiddle with the configuration, but nothing worked. I made the base plate transparent
so I could easily peek inside and see that I had SOLDERED THE GODDAMN DIODES BACKWARDS!
[Facepalm] [Facepalm]
[Facepalm facepalm]
See, I got lazy with the wiring diagram and I didn't add the diode polarities!
Luckily, I could fix this by just reversing the logic from low to high, but if I wasn't so lucky,
I would've had to rip out all the wiring, project never would have finished. I dodged
a bullet and I succeeded in spite of myself. All right, we're reading all the controls. I wrote
some basic business logic to map those controls onto hotkeys and shortcuts, and project done!
Wait what? It's only like 2PM on Sunday! This is exactly where we should be. Remember that
our timeline is NOT the amount of work it takes to build the project. It's all of the tasks, plus all
of the most likely setbacks. We haven't had any setbacks, so of course we're ahead of schedule.
Luckily, projects expand to fit the time available to them, so we can improve
some stuff. Modifying working hardware is risky. If you mess something up, you might not have
enough time left to dig yourself out of the hole. The best way to spend bonus time is... software.
As long as you have some kind of versioning system like Git, Dropbox, Time Machine, or even
just backing up some known-working files, adding new features is basically risk-free. Worst-case
scenario, you blow up an input GPIO pin by setting it as an output, which is like, dude, c'mon. C'mon dude.
Pretty much anything else is zero risk. It doesn't matter how thoroughly your
dumb-sh[REDACTED] allegedly ostrich-[REDACTED]ing [REDACTED] ass [REDACTED]s your
[REDACTED]sucking code right in its puckered [REDACTED], just roll it back. [REDAAAAAAACTED]
As a bonus, you'll get quality time actually using your project! More practice means higher odds of
uncovering hidden bugs, but it also hints at improvements to make. When I used this,
I noticed that it sucked to spin the wheel at high speed to move quickly through video,
so I added some code to detect when I was spinning quickly and switch to just
playing the video at double or triple speed instead of going through frame by frame.
Finally, I decided to be a bro and package everything up to share with the internet. It is
INFINITELY easier to comment your code while it's still fresh in your mind, and you never know - you
might be making someone else's weekend project. If you're interested, [Bad Australian accent] g'day
mate, links are down under! So let's recap. I designed and
researched this project ahead of time. I made diagrams of the confusing parts.
I got printing right away, and even though I made some boo-boos, I finished the project
and I still had time left to comment my code. The prime directive for any project,
especially a weekend project, is you have to keep the estimated time to finish the project,
plus the amount of time you'll waste on the most likely setbacks,
below the amount of time you have left. Everything past this point is just specific ways to do that.
#1: Pick a focused project that taps skills you already have. Estimate your timeline and assume
the most likely setbacks are going to happen. #2: Rigorously diagram anything remotely
confusing and everything with easy mix-ups bleargebleargh [Trips over his own words]
Easy mix-ups like backwards diodes. #3: Make test-fit models for literally
every critical dimension. Use parametric design and patterns to replicate that geometry instead
of doing things by hand. Test as you assemble, too - no circuit is too simple to fail.
Finally, #4: Finish your project by Sunday night. Don't plan on letting it spill over into the week,
because something will happen and your project will never get done.
If this helped you get unstuck and fired up to build something, let me know! I always want to
hear what you're making. Be sure to subscribe for more prototyping proto-tips to help you finish
more projects. Are you stuck for ideas? Next week, I uncover 10 of the BEST 3D prints that
every single hobbyist should make. Thanks a lot for watching, and I will see you in the future.
Wait, don't scroll back! I gotta get to the future!
Noooooooooooo!!
[Rewinding noises]
[Record scratching noises]