22 Jun 2022
tags: 3dp circuit-python i2c rp2040 stemma
Recently my partner bought an LCD resin 3D printer. That was kind of the last
straw for a risk that has been growing in the last few months. I already had a
filament 3D printer (so far just for PLA, but who knows!), and several weeks ago
I hooked up a kegerator with a carbonation system. Oh, and all of these share
the same airspace as my office.
The risk we’re concerned about is a buildup of VOCs, carbon dioxide and carbon
monoxide. To mitigate this, I wanted to build a device that can sense these
things, display their levels on a readout, and potentially make a loud
noise if they go over a certain threshold.
Are there consumer devices that also do this? possibly. Are there even fancy
filter fans that can show you what’s in the air on your smartphone?
also yes. But this
sounded simple enough to prototype that I could spend a little extra money on
the parts and then have fun putting them together. (Also, I couldn’t find a
consumer-grade device that would measure carbon dioxide, so I wanted to start
The main board I chose for this is the
Adafruit Trinkey QT2040
(guide). I didn’t
have a lot of criteria to match. I mostly wanted it to be easy to get running,
and use I2C for the connections. Trinkey is easier than easy.
Anything Adafruit makes that works with their
Circuit Python libraries is very approachable,
code-wise. And this board is based on the RP2040 chip, which is more than
powerful enough to run the code I need.
It also happens that Adafruit maintains a hardware spec called “Stemma QT” that
transmits I2C signals over premade JST PH wires
(youtube intro). Trinkey has
Stemma QT (hence “QT2040”), and a lot of the sensor breakout boards that
Adafruit makes also use Stemma QT.
The star of the show is the CO2 sensor: that’s an
“true” CO2 sensor. It measures temperature, relative humidity, and
CO2 (in parts-per-million). It transmits all of this over
I2C, using Stemma, once every few seconds.
For an interface, I’m using a monochrome 0.96" I2C OLED Display
(guide) with 128 x 64
pixels. Later I may switch to something like a SHARP Memory display, for low-power use.
I had a Pi-Fan laying around from a past project, and figured the sensor
wouldn’t do much good without a continuous supply of new air.
Finally, I 3d-printed a frame for all these parts to screw (or hot-glue) onto.
The first attempt is always a little kludgy, but I really like it! Without
further ado, here’s my first take of a CO2 sensor:
The code and 3d-printing files are available at https://github.com/spilliams/canary
Final Bill of Materials:
Next time I come back to this, maybe I’ll add a speaker and “hush” button, or CO
and VOC sensors, or a battery for portable use!
25 May 2022
tags: 3dp dactyl ergodox glove80
Since December 2020 I’ve been using an Ergodox EZ as my main keyboard, both for
work and games. I have my own QMK firmware flashed on it, and I’m nothing but
pleased with it.
Seasons change though, and in January 2021 I found myself backing the Glove80
Kickstarter. I’ve been curious about a curved (“manuform”) keyboard, and this
one looked really slick.
Up to that point I’d put together keyboard kits with PCBs, and hadn’t yet
3d-printed any enclosures or plates. I kept seeing peoples' cool creations on
reddit though, and eventually I started down that path myself.
Today I’m writing this on my first 3d-printed, handwired keyboard! It’s the
“Dactyl Manuform Open”, available from source code
For my first attempt I didn’t want to change anything from the stock model, but
I did frankenstein it with some parts from a similar build,
I had noticed in my first print of the Dactyl Manuform that the legs wanted to
adjust themselves a little too much.
I was stymied temporarily by my available tools at the time: I only had an FDM
printer, which didn’t have the right resolution for some of the smaller parts.
My partner recently got an LCD resin printer though, so I’ve completed the
Dactyl Manuform build.
Handwiring was fun! A little frustrating. My only loose connections were in some
crimps in rectangular cable connectors (my build eschewed the standard 3.5mm
cable between the halves, because one fewer microcontroller is 50% easier to
debug). I ended up cutting out the cable connector and replacing it with
soldered wire connection: it’s not as if I’m going to use either of the halves
I’ve come up with
my own firmware
for it (cribbed from qmk’s). It’s technically Via-compatible, but I don’t know
yet how to set the vendor/product/keymap to make the tool show an accurate
representation of the layout and key mappings. A work in progress, perhaps.
Last night, after typing on it for an afternoon, I started
hacking around in the
to see if I could get one with the key layout I’ve grown accustomed to with the
Ergodox. I was able to generate something that seems like it’ll fit my needs
better, and then I took another look at one of the Dactyl Manuform’s ancestors:
the Dactyl Keyboard.
With the exception of the inner row, this matches the key layout of the Ergodox.
I like the 6-key thumb cluster. I’m not sure how comfortable the shape will be,
but aesthetically I think it’s a great board. As I write this, my FDM printer is
making a bottom shell, and my partner’s resin printer is making a top shell (in
As with my first attempt at Dactyl Manuform, I haven’t tweaked any of the source
code. That may come later, if I really find the shape or lack of an inner column
uncomfortable. Next up: wiring this half, playing with it, and iterating!
18 Jun 2021
categories: Lander Module
tags: 3dp fdm
I printed out the “space shuttle toggle switch guard”.
In plating I selected the single guard then did “Add Part” to expand it to a row
of 5. Then, in print settings I made sure to go into Expert > Infill and set
“Solid infill threshold area” to 16mm^2. This ensures there’s a solid infill for
the upright portions of the guard, extending just below the joint with the side
Overall, quality was pretty low, probably due to all the jumping around, and
For the next attempt, I may want to re-model the holes for the switches, since
the switches I bought are nowhere near fitting the holes as-is.
I might also want to try a build in a different orientation? or with different
infill options (was it really necessary to use solid, or to use infill at all?)
Anyway, good first attempt!
Oh, for the second iteration I could avoid the 12-hour time by just printing
squares with holes in, and inset the squares to the guard I have! CA glue will
be a key part of the build anyway.
In other news, first Digi-Key order arrived and it is great! Lots of buttons to
push and the joysticks live up to their name (especially the ball-top one).
For the next round of orders I want to try to get a large square button or two,
for a “main alarm” function. These can be pricey, but with only 1 on the board I
think it’s worth it.
I also want to try out some “standard round” toggle switches, because I can
print out the cover to make it look more spacey.