Tap Light Focus Timer System

I’ve been procrastineering on a “sticky note timer” which would incorporate an e-ink display, be portable, updatable via WiFi, show me what I should be working on, and flash lights at me to give me a sense of movement / time passing / and urgency.  Sometimes I use the word “procrastineering” to refer to when I start to spiral on a project and end up in analysis paralysis.  But, I think it is more appropriately used when I’m doing a deep dive on a project when I really have something much more important / urgent I should be working on.

A long time ago I added a few components to an off the shelf dollar store tap light and turned it into a game buzzer.  While the sticky note timer project was marinating  / incubating1 in the back of my brain, I realized that maybe I don’t need or even want something that high-tech.  Maybe what I need is something dead simple?  As cool as the sticky note timer project is – and it really is neat – there’s a lot of pieces to the puzzle and a fair bit of maintenance that goes along with it once its finished.  You have to connect to it, upload a list, set up timers, etc.

I finally decided on something not so easily adjustable, but still flexible in it’s simplicity.  Rather than making the setup (adding / updating / uploading lists to a timer) something I have to do in order to start the timer, what if I made it part of the timing?

First, let’s look at what the setup.  A dollar store tap light which includes a lot of handy parts – a battery holder, a push button switch, several springs, and a simple and at attractive enclosure.

This slideshow requires JavaScript.

On the far left is a basic off the shelf dollar store tap light.  Next to it are two others I had previously modified to work as game / timer buzzers2  The last picture is the wiring diagram, except that I wired the ATTiny chip to the positive wire coming from the button switch.  Whenever I hit the button, it will toggle the circuit on and off.

Using some parts from my electronics bin3, I cobbled together a prototype on a breadboard that would do the following when the button was hit:

  • Turn orange for 1 minute and beep 3 times in the last 3 seconds
  • Beep once more and turn green for 12 minutes, then fade from yellow through orange over the last 3 minutes
  • Flash red and beep three times after 15 minutes had lapsed (12 minutes of green and 3 minutes of color fading)
  • Turn off, go to a low power mode, and then wake up long enough to flash blue every 8 seconds
  • After 5 minutes, it would flash green and beep twice
  • Then keep doing this 8 second blue flash and green light plus beep every 5 minutes
Animation of LED timer button

You’re probably wondering – what’s with all these timers and lights and beeps?  Here’s how I use them:

  • Place and slap the button to get going
    • I put my phone on my desk and the timer right on top of my phone.  It’s a big 4″ diameter timer and covers the phone pretty well.  I can’t pick up my phone without seeing this timer ticking down.  This is a huge difference between a phone app and a physical thing standing between me and my phone.  There are some web browser based apps – but these don’t really work for me.  Either I have to keep that window open and on top or … I’ll forget it exists.  This timer is right there, front and center, on my desk and lit up no matter where my desktop might take me.
    • Plus, it’s actually a little therapeutic to slap the tap light.  Pushbutton switches like this are built to take a bit of abuse and the physical action of hitting the light is a lot of fun.
  • Orange for 1 minute
    • This is the replacement for the “maintain / update a list.”  Instead of having to fuss with a list, I’ve dumped myself directly into work.  I’m suddenly racing the clock for 60 seconds to write all the things I want to try and accomplish in the next 15 minutes.  Maybe it’s a few emails, make some phone calls, or write / edit a document.  After 57 seconds, the buzzer will beep three times to let me know that the 15 minute timer is about to start.
    • Or, if you already have a particular task to work on, you could use this time to follow a process like Steven Kotler’s suggestions on tactical transitions to a a flow state4.  His three step process is:
      • Anchor your body
        • Practice box breathing.5  You could box breathe 3 times in one minute and have a few second left over to psych yourself up.
      • Focus your mind
        • Write down one clear goal.
      • Trigger your ritual
        • Recite a mantra, perform a gesture, start a “work” playlist
  • Green for 15 minutes
    • It’s go time!  Whatever I wrote down, now I’m in a race to work on those things – and those things only.  I can’t let new emails, calls, etc, distract me – that buzzer is going off in 15 minutes.  As the timer closes in on 15 minutes, with just 3 minutes to go, it turns yellow and fades to orange.  If I look up / down and see this, I know I’m in the home stretch and I’ve got to start moving fast to wrap things up.
  • Red alert!
    • Once the 15 minutes is up the light flashes red and beeps to let me know I’m off the hook.  Now, if I’ve already hit peak productivity, I could keep going.  If I got sidetracked, it’s an alert for me to restart the timer and get back to it.
  • Blue flashes, 5 minute green flash and beeps
    • These blue flashes happen once every 8 seconds6 just to keep the timer present in my vision so it doesn’t just appear into the mess on my desk.
    • If I finished out the 15 minute block of work time and I don’t stop the timer, the 5 minute timer is my reminder to return to my desk, reset the timer, and get going again.
    • If I ended up working past my 15 minute block of work time, the 5 minute beeps still give me a sense of how much time has passed.7
    • Importantly – if I get distracted by a sidequest, one of the beeps every 5 minutes is bound to catch my attention and remind me I’m supposed to restart the timer and get back to work.

So… does it work?  For me, yes!  Here’s why:

  • The hardest part of getting started is getting started.  My tendency is to want to collect all the stuff I’d need, get real comfy, make a list, look up some documents, etc.  This system short circuits all that.  I just need to be able to slap the big button sitting on top of my phone.  If I can manage that, I get 60 seconds to collect myself and then it’s time to rock and roll.  That’s enough time to take some deep breaths, start a playlist, or just sit quietly before I get started.
  • It covers up my biggest distraction.  Unlike an app on the phone or my desktop computer, I can literally cover up my phone with this big damn button.  I won’t see any notifications and if I want to pick up my phone, I have to actually look at and ouch the button – which is itself a reminder to get back to work.
  • It plays into a sense of play, urgency, and my own overdeveloped sense of competitiveness.  I enjoy hitting the timer to turn it on – and I want to beat that 15 minute timer.
  • The 5 minute timer acts like a built in break timer.  If I can get through 15 minutes of work, I can goof off, write a blog post, and without doing anything else that 5 minute timer can bring me back.
  • It includes a “failsafe” to bring me back to the timer if I get distracted by a sidequest.  If I miss the 15 minute timer, there’s another 5 minute timer around the corner.  Even between timers, there’s an intermittent flash of blue light to grab my attention.

The only meaningful “downside” to this timer button for me is there’s no pause button.  However, this isn’t exactly bad.  It helps me really hone in on what’s important and what’s interesting.  If a family member asks me for something or a call comes in, I just need to weigh the benefit of addressing the intrusion against having to restart the timer.  And realistically, if I pause the timer, I’m going to need some time to drop back into “flow” anyhow.

Sticky Note Timer
  1. Ah, just what I need! A new project!
  2. Sticky Note Timer, parts arrived!
  3. Seeed Studio XIAO ESP32C3 and a small sticky note display
  4. Brainstorming More E-Ink Stuff
  5. Smol Fonts for E-Ink Displays
  6. Tap Light Focus Timer System
  1. Fermenting?  Festering? []
  2. The older ones would flash orange a few times to alert you the game was going to start, turn green, fade from yellow to red, then flash red and buzz after 15 seconds. []
  3. I used an ATTiny45 because I had one, but it’s not much more expensive to use an Adafruit Trinket, a buzzer, a RGB/neopixel LED, and some wire.  In a subsequent version, I also used a small prototyping board like the Adafruit Perma Proto Boards []
  4. It’s the second slide []
  5. TLDR:  Breathe in slowly through the nose for 4 seconds, hold for 4 seconds, breathe out slowly through the mouth for 4 seconds, hold for 4 seconds, repeat []
  6. Because that’s the longest the little microchip can do between “deep sleep” to conserve battery life []
  7. I may adjust the program so the first five minutes is 1 beep, second five minutes is two beeps, etc []

Prusa Lack Stack, LED Lighting, CircuitPython Tweaks

Much like those recipes on the internet where the author tells you their life story or inspiration, I’ve got a lot to share before I get to the punchline of this blog post (a bunch of CircuitPython tweaks).  Edit:  On second thought:

  • Keep the lines of code <250
  • Try using mpy-cross.exe to compress the *.py to a *.mpy file

This is a bit of a winding road, so buckle up.

Admission time – I bought a Prusa1 about three years ago, but never powered it on until about a month ago.  It was just classic analysis paralysis / procrastineering.  I wanted to set up the Prusa Lack enclosure – but most of the parts couldn’t be printed on my MonoPrice Mini Delta, which meant I had to set up the Prusa first and find a place to set it up.  But, I also wanted to install the Pi Zero W upgrade so I could connect to it wirelessly – but there was a Pi shortage and it was hard to find the little headers too.  Plus, that also meant printing a new plate to go over where the Pi Zero was installed, a plate that I could only print on the Prusa, but I didn’t have a place to set it up…

ANYHOW, we’ve since moved, I set up the Prusa (without the Pi Zero installed yet), printed a Prusa Lack stack connector to house/organize my printers.  Unlike the official version, I didn’t have to drill any pilot holes or screw anything into the legs of the Lack tables.

Once the Lack tables were put together, I set about putting in some addressable LEDs off Amazon. I found a strip that had the voltage (5V for USB power), density (60 LED’s per meter), and the length (5 meters) I wanted at a pretty good price <$14, shipped.  I did find one LED with a badly soldered SMD component which caused a problem, but I cut the strip to either side of the it, then soldered it back together.  Faster and less wasteful than a return at the cost of a single pixel and bit of solder.

The Lack stack is three tables tall, keeps extra filament under the bottom of the first table, my trusty Brother laser printer on top of the first table, my trusty Monoprice Mini Delta (Roberto) on top of the second table, and the Prusa (as yet unnamed Futurama robot reference… Crushinator?) on top.  Since I don’t need to illuminate the laser printer, I didn’t run any LED’s above it.  I did run a bunch of LED’s around the bottom of the third printer…  this is difficult to explain, so I should just show a picture.

When Adafruit launched their QtPy board about four years ago, I picked up several of them.  I found CircuitPython was a million times easier for me to code than Adafruit, not least of which because it meant I didn’t have to compile, upload, then run – I could just hit “save” in Mu and see whether the code worked.  I also started buying their 2MB flash chips solder onto the backs of the QtPy’s to a ton of extra space.  Whenever I put a QtPy into a project, I would just buy another one (or two) to replace them.  There’s one in my Cloud-E robot and my wife’s octopus robot.  Now, there’s one powering the LED’s in my Lack Stack too.

I soldered headers and the 2MB chip into one of the QtPy’s, which now basically lives in a breadboard so I can experiment with it before I commit those changes to a final project.  After I got some decent code to animate the 300 or so pixels, I soldered an LED connector directly into a brand new QtPy and uploaded the code – and it worked!

Or, so I thought.  The code ran – which is good.  But, it ran slowly, really slowly – which was bad.  The extra flash memory shouldn’t have impacted the little MCU’s processor or the onboard RAM – just given it more space to store files.  The only other difference I could think of was that the QtPy + SOIC chip required a different bootloader from the stock QtPy bootloader to recognize the chip.  I tried flashing the alternate “Haxpress” bootloader to the new QtPy, but that didn’t help either.  Having exhausted my limited abilities, I turned to the Adafruit discord.

I’ll save you from my blind thrashing about and cut to the chase:

  • Two very kind people, Neradoc and anecdata, figured out the reason the unmodified QtPy was running slower was because the QtPy + 2MB chip running Haxpress “puts the CIRCUITPY drive onto the flash chip, freeing a lot of space in the internal flash to put more things.”
    • This bit of code shows how to test how quickly the QtPy was able to update the LED strip.
      • from supervisor import ticks_ms
      • t0 = ticks_ms()
      • pixels.fill(0xFF0000)
      • t1 = ticks_ms()
      • print(t1 – t0, “ms”)
    • It turns out the stock QtPy needed 192ms to update 300 LED’s.  This doesn’t seem like a lot, until you realize that’s 1/5th of a second, or 5 frames a second.  For animation to appear fluid, you need at least 24 frames per second.  If you watched a cartoon at 5 frames per second, it would look incredibly choppy.
    • The Haxpress QtPy with the 2MB chip could update 300 LED’s at just 2ms or 500 frames per second.  This was more than enough for an incredibly fluid looking animation.
    • Solution 1:  Just solder in my last 2MB chip.  Adafruit has been out of these chips for several months now.  My guess is they’re going to come out with a new version of the QtPy which has a lot more space on board.
      • Even so, I’ve got several QtPy’s and they could all use the speed/space boost.  I’m not great at reading/interpreting a component’s data sheet, but using the one on Adafruit, it looks like these on Digikey would be a good match.
  • The second item was a kept running into a “memory allocation” error while writing animations for these LED’s.  This seemed pretty strange since just adding a single very innocuous line of code could send the QtPy into “memory allocation” errors.
    • Then I remembered that there’s a limit of about 250 lines of code.  Just removing vestigial code and removing some comments helped tremendously.
    • The next thing that I could do would be to compress some of the animations from python (*.py) code into *.mpy files which use less memory.  I found a copy of the necessary compression/compiler program on my computer (mpy-cross.exe), but it appeared to be out of date.  I didn’t save the location where I found the file, so I had to search for it all over again.  Only after giving up and moving on to search for “how many lines of code for circuitpython on a microcontroller” did I find the location again by accident..  Adafruit, of course.  :)
    • I’m pretty confident I will need to find the link to the latest mpy-cross.exe again in the future.  On that day, when I google for a solution I’ve already solved, I hope this post is the first result.  :)

The animations for the Lack table are coming along.  I’ve got a nice “pulse” going, a rainbow pattern, color chases, color wipes, and a “matrix rain” / sparkle effect that mostly works.

Animated GIF

I started this blog post roughly 7 months ago2 by the time I finally hit publish.  After all that fuss, ended up switching from CircuitPython (which I find easy to read, write, maintain, update) to Arduino because it was able to hold more code and run more animations.  Besides the pulse animations, rainbow patterns, color chases, color wipes, and a matrix rain, it’s also got this halo animation, some Nyan cat inspired chases, and plays the animations at a lower brightness for 12 hours a day (which is intended to be less harsh at night).  I could probably add a light sensor, but I don’t really want to take everything apart to add one component.

  1. The i3 MK3S+! []
  2. January 7, 2025 []

OpenSCAD Render Times

Thanks to @raster, I’m going to do a side-by-side taste test of several different flavors of OpenSCAD.1 To give each one a similar test, I’m trying out my D-Pad design from … uh, earlier this morning.2

Version Release F5 Preview F6 Render Notes
2021.01 Stable 09:50.220 2.302 Best place to start
2024.01.13 Current 04:37.763 0.948 I’ve been running this one for a while
2025.04.04 Latest 04:36.593 0.483 Latest snapshot

Obviously, the good folks working on OpenSCAD have dramatically improved preview/render times over the last four years.  The speed boost in using a later snapshot is pretty significant if you’re doing any kind of complex designs.  They must be using some kind of cache system to make the render times so fast.

The speed differential between 2024.01.13 and the latest snapshot is so slight, I’m not going to switch things up unless I bump into a design that struggles with rendering some complex feature.

#OpenSCADClub
  1. OpenSCAD 3D Printed Spring
  2. OpenSCADClub Week 2: Directional Pad
  3. OpenSCAD Render Times
  4. One Simple Trick Can Save You 30 Minutes…
  5. OpenSCAD Club Cookies

 

 

  1. *I’m not avoiding work!* YOU’RE avoiding work! []
  2. Like, way earlier…  midnight or so… []

Combining Multiple Video Files

Rather than send me a single set of video files, my client’s vendor sent me… 149 separate MP4 files, ranging from a few seconds to about 11 minutes long.  I have no interest in sorting through dozens of video files, cataloging them individually, and then trying to review them in order.

While I would have thought VLC would have been a good drag-n’-drop way to stitch them all together, the version I had and the newest version available both weren’t letting me save multiple files into a single file.

A bit of googling and I stumbled across an old friend – ffmpeg!  I hadn’t used this program to transcode video since the early days of DIVX, backing up DVD’s back in the late 1990’s / early aughts.

Here’s the process I settled on for my Windows machine:

  • Created a batch file to create a list of the video files (which included spaces, commas, and all kinds of nonsense command line tools hate).  The entire contents of the batch file was:
    • dir *.mp4 /b > list.txt
  • Since I’m using Notepad++, I used the find/replace function to search / replace on “list.txt”:
    • /r/n
    • ‘/r/nfile ‘
  • Even using some find/replace magic, I still needed to adjust the first and last lines, but that wasn’t so bad.
  • Then, the videos which had been named in semi-logical pattern, were not in strictly alphanumeric order.  I re-ordered them in the text list to the order I’d wanted to view them in.
  • I dropped the FFMPEG executable, downloaded from this mirror, into the folder with the video files and list.txt, then made a new batchfile which contained the following:
    • ffmpeg -f concat -safe 0 -i list.txt -c copy combinedfilename.mp4
  • Now, I could have typed this into the command line, but since I wanted to batch certain files together, it was just easier for my purposes to have the batch file.  Plus, now I have the executable and the batch file for future use.

Anyhow, I hope this helps save someone, perhaps even myself, a few minutes of hair pulling and searching.  :)

Adventures with a (Cheap) Vinyl Cutter

I don’t have any affiliate links to shill, but I really like Monoprice.  They sold cheap re-branded 3D printers, decent office equipment, and sometimes they will have an absolutely ridiculous deal on one of their products.  I’d say, overall, the quality is “pretty good” across the board and when you can find a deal on something, it’s an easy decision.  I picked up an extra Monoprice Mini Delta 3D printer because it was so cheap, I could use it for parts and not feel bad.1  I’ve been happy with their egg cooker, USB hubs, HDMI cables, various random testers.  The other day I saw they had a sale on their “MakerCraft Mini Craft Cutter” for $80, when it’s normally $230, with free shipping and had to buy it.  If you missed out, I’d highly recommend signing up for their newsletter.  About twice a year they have some deal that’s just bananas.

It’s been sitting off in a corner for nearly two months while I’ve been distracted by Maker Faire preparations and work, but tonight I gave it a shot.  I’d say, like most other MonoPrice things, it’s “pretty good.”  The included software “Sure Cuts A Lot Pro 5” is not very intuitive, the documentation on the machine and software is pretty lacking, and the tutorials aren’t very helpful either.

Even so, with some futzing around I was able to run a test cut and mostly get another design cut out.  Pictures later.

Here are some of the things I learned:

  • After you drop the blade into the machine, be sure the carriage and move all the way back and forth.  It’s very easy to have it protrude upwards very slightly, causing a horrible clacking / grinding noise.
  • I’m not sure if it’s me, the way I loaded the sticky back cutting mat, or some combination, but the large design I cut out was  off the piece of vinyl by about 1″.  I would recommend making sure your piece of vinyl is about as big as the 8×10 cutting mat.  I am not sure, but I suspect the “vertical” direction has a lot more variability than the “horizontal” direction.

I tried to cut things several times without success.  I tried a lot of different ways to get it going, so I don’t know what got me cutting.  At first the machine would beep at be intermittently, and then regularly.  I have no idea what caused that to happen – or why it stopped.

After the machine registration / cutting mat homing procedure, which sounded about as much as you would expect a small plotter to sound, it was surprisingly quiet.  I’ve never used a craft or vinyl cutter before, so I guess I had just built it up in my head.

I’m going to try cutting some more things tomorrow and look forward to posting some more progress.

I’ve cut several medium complexity designs out of HTV and it was incredibly tedious.  I tossed a very complicated design into this craft cutter and it quietly ripped it out like a champ.  For $80 shipped, I would easily recommend this device to anyone who wanted to experiment with a craft cutter and wasn’t afraid to spend some time tinkering with software and settings.

  1. And, later, I had to! []

Review of DriveThruCards.com

TLDR:  The cards from DriveThruCards.com (DTC) arrived yesterday and I couldn’t be happier with the result.  Great customer service, product, and value.

This slideshow requires JavaScript.

  1. Shipping:  Great
    1. 3/19/2024:  I ordered 120 cards around 2 AM PST in California.
    2. 3/19/2024:  The DTC website was updated with the following statuses:  Pending Payment Approval, Paid For, Sent to printer, Confirmed.
    3. 3/24/2024:  I received a shipping confirmation email from DTC in Overland Park, Kansas with a USPS tracking number at about 4:32 PM PST.
    4. 03/25/2024:  The date on the “External Packing Slip” included with the box.
    5. 3/28/2024:  USPS sent me a notification the package arrived around 8:29 AM PST.
    6. This was basically exactly as long as my Reddit lurking had suggested (about 10 days) it would take.

      Order confirmation and status screen
      Order confirmation and status screen
  2. Packaging:  Great
    1. The cards arrived wrapped in a cellophane band, within packing paper, inside a small box (about 5″x5″x3.5″ cube).  This was perfectly fine for these cards.  They have options for tuck boxes and other containers, but I didn’t need or want these for this project.
  3. Card Quality:  Great
    1. Text and images were sharp, legible, and colors rich but slightly darker than what I saw on my computer screen.  By tinkering with Inkscape, I would guesstimate the final card was about 5-10% less bright than what I saw on my screen.  Without comparing the cards directly against a large bright monitor, I don’t think I would have noticed this difference.
    2. When I set the deck down on a flat surface and run my finger over the side of the stack of cards, there’s a very slight variation over a few cards.  It’s barely perceptible and probably totally fine for any kind of card usage or card game except a super precise cut for casino playing cards.
    3. When the cards are viewed edge-on in a stack, you can tell see a faint bit of the card’s edge color.  I grabbed some “Magic: the Gathering” cards and looked at a mix of black and white bordered cards and noticed that even the black border cards seem to look white-ish when viewed edge on.  The slight bit of color here doesn’t bother me at all and for most purposes would be totally irrelevant.
    4. The cards were 2.503″ or 63.57 mm wide and 3.506″ or 89.05 mm tall, or about 0.2% large.  Some variation is to be expected in any order and this miniscule variation would be completely unnoticeable except I used digital calipers to measure them.
    5. The cards, printed on DTC’s “premium stock,” advertised as 11.4 pt (0.0114″) were 0.0115″ or 0.29 mm thick.  Flicking the cards against a table, right next to an actual casino poker card, they felt identical.  (The casino card has a slightly raised texture, but the flex, bounce, and flick of the card stock felt identical).
    6. Card Cut.  This is the one aspect that didn’t come out exactly as I had planned.  Ten of the cards I printed had borders, but they were visibly different widths at each end.  These cards were Premium U.S. Poker sized (2.5″ x 3.5″), the PDF itself was 2.75″ x 3.75″ (to account for the 1/8″ bleed area at each edge).  Unfortunately, I didn’t notice this until after I had used the cards a bit, so I don’t know whether top or the bottom was slightly thinner.  Since these cards are basically dividers, this isn’t a huge deal for me.  However, I’d prefer being able to get them back with an even border all the way around.

      This slideshow requires JavaScript.

  4. Customer Service:  I discussed the responsiveness of the DTC customer service team in the prior post.  They went out of their way to help me with my project – and it really smoothed things for me.

I simply could not be happier with these cards.  I will absolutely be trying them again.

Print On Demand Custom Cards
  1. Custom Cards with DriveThruCards.com
  2. Review of DriveThruCards.com
  3. Designing Custom TCG Cards and Proxies

Custom Cards with DriveThruCards.com

I’ve been looking to get some playing sized cards for various purposes recently.  I’ve enjoyed making my own cards from blanks ordered off of Amazon, but for things that might get used a little more regularly, it would actually help to have these things pre-typed/printed.  And, as a long-time / returning enthusiast of a particular card card game, I was also looking to print up some proxy cards for casual play.  I don’t want counterfeit cards – just make some obviously unofficial stand-ins for real cards in casual play.

  1. Cost Breakdown
    1. If you do any kind of Googling about searching for a company to print up cards of various sizes, you’ll quickly end up at MakePlayingCards.com – or a company that has a website that looks nearly identical to MPC.  Getting a single deck of custom cards printed up through MPC is $26.15 for up to 108 cards (they offer incremental price breaks) plus $11.99 shipping (with tracking taking about 20 days) as the cheapest option, coming to $40.17 (including some tax).  This is roughly $0.37/card.
    2. Lurking in some Reddit forums, I found a few suggestions on different ways to create proxy Magic: the Gathering cards.  These forums renewed my interest in getting some cards printed up – and lead me to DriveThruCards.com.  I just placed an order for 120 cards,1 but I’ll describe the cost for 108 cards for an apples-to-apples comparison.  A single deck of custom cards printed through DTC is $12.42, plus $5.99 shipping (USPS Ground Advantage and anecdotal evidence from Reddit suggests ~10 days), plus  $1.00 in tax, comes to $19.41.  This is roughly $0.18/card.
  2. Benefits / Costs
    1. There’s no question the MPC website is cleaner and slicker, featuring drag and drop options, without a lot of technical jargon about printing, colors, etc.  They also seem to have many more options for card sizes, materials, and finishes.  They also have lots of templates in various formats to download and populate.  The obvious downsides are the length of shipping required and the cost, both estimated to be roughly twice that of DTC which is apparently in Overland, Kansas.
    2. The DTC website is… by their own admission, “challenging to learn.”  While I’m sure the interface permits a ton of customization, the dizzying array of options is daunting.  They have lots of guides on their website and knowledge base, as well as elsewhere, but it’s probably too much information.  I went with DTC for my first custom card order because I wanted to inexpensively try out some ideas and I figured that after the first order, I’d probably get the hang of their system.  However, one thing that really sets DTC apart is the responsiveness of their customer service.  I’d emailed them in the middle the day and middle of the night (aka goblin hours) and someone always back to me super fast.  Although DTC doesn’t have official PDF templates, Brian with DTC kindly whipped one up and emailed it to me which answered tons of my questions.
  3. Anatomy of a Printed Card
    1. Both MPC, DTC, and other print-on-demand (POD) websites have numerous descriptions, graphics, tutorials, and samples all using slightly different words, relating to the various sizes, printing zones, etc.  I found it incredibly confusing.  Now, I’m not certain I’ve gotten everything right, but here’s my best understanding…
      Annotated sample poker card
      Annotated sample poker card
      1. Cut Line / Trim Line / Bleed Line.
        1. The area described by the solid black line will be where the card is trimmed to the exact dimensions of the card.  The good thing about knowing what this line means is that if you know the final dimensions of your type of card, this is easy to look up and then design everything else around it.
        2. Importantly, you don’t want to include this line in your designs.  The purpose of the “safe” zone area is so the critical components of your design are certain to appear on the final product – even if it is perhaps slightly offcut.  The purpose of the “bleed” zone is to make sure a “full art” card doesn’t have bits of white or black at the edge if it is very slightly miscut.
      2. Safe Area Line / Border.  The important part to know here is that the distance from the “cut line” to the safe area is 1/8″ or 3.175 mm on all sides.  Thus, if you know the dimensions of the card you want, you just make sure your critical art and text don’t exceed this area.  All the area inside the safe area line is the “safe zone.”
      3. Bleed Box / Bleed Area / “Full Bleed” / Page Size.  As with the Safe Area Line, this is easy to figure out – it’s just 1/8″ or 3.175 mm outside the edges of the cut line.  This should be a rectangle.
  4. Software / Design Process
    1. I don’t have Adobe InDesign, Photoshop, Illustrator, or Affinity Publisher – and I wasn’t going to buy / subscribe to any of these just for this one project.  What I do have, however, is OpenSCAD and Inkscape.  Using OpenSCAD I started with a rectangle of the precise dimensions to match the exterior of the “US poker” card I wanted printed, then exported this to an SVG file.  I then did this for a rectangle of the “bleed box” size, safe line, and also the trim line.  I then imported all of these into Inkscape, layered them, and used them as guides while I designed my cards.  I made sure the critical areas were within the safe line, but made the safe line, trim line, etc all invisible.  Inkscape will allow you to export a file into a PDF file format which DTC accepts.  I created fronts and backs for cards, each exported as a separate PDF, then combined all of them using one of my favorite pieces of freeware, PDFTK.
  5. Potential Issues, Fixes
    1. Unembedded Fonts.  Apparently Inkscape did not embed all of the fonts used in the creation of the PDF.  When I tried to upload the PDF originally, DTC’s uploader balked at this and said I’d need to embed the fonts.  While I used a different PDF program (Foxit PDF is reasonably full featured and way less expensive than Adobe) to embed the fonts, I think I could have simply re-exported all the card faces as images instead of PDFs, then combined those into a new PDF which just had pictures (including pictures of the desired text).  It might have been possible to change the fonts as well to be more uniform, but given the number of cards I was creating, I didn’t want to do that.
    2. Currency.  I’m putting this here more for me than anyone else who might stop by.  At some point while using their website I accidentally did something which made all the prices and calculations appear in the Japanese Yen.  :/  I’d been through the account settings numerous times and even cleared my cookies and website cache trying to fix this problem.  After an embarrassingly long time, I gave up and emailed Brian to ask for help.  As so often happens to me… moments after hitting send I saw website footer had a drop down box to choose the currency and language.  Sorry Brian!

So, what’s next?  Well, after placing the order at roughly 2am PST on 3/19/2024, now it’s time to just wait and find out if the cards are going to get produced and arrive!  It’s now almost 6 pm PST, and their Order History page says “Sent to printer.”  Some Reddit posts suggest that it takes another 1-2 weeks to actually ship.

Print On Demand Custom Cards
  1. Custom Cards with DriveThruCards.com
  2. Review of DriveThruCards.com
  3. Designing Custom TCG Cards and Proxies
  1. $20.86, if you’re being nosy []

Gluing Polypropylene Corrugated Plastic (Coroplast)

Late at night, when I should be doing work or, better yet, sleeping, ideas spring to mind.  I’ve created a few small projects from big sheets of coroplast or polypropylene corrugated plastic.  This is the kind of material you see in use for yard signs.  They are big, cheap, sturdy (as long as you’re not bending it with the grain), and lightweight.  They can be bent or cut easily.  However, since it is polypropylene, it is fairly resistant to most glues, adhesives, and paints.

Duct tape and hot glue work well, but have their downsides.  The duct tape can be unsightly and not very good for “laminating” several layers together.  Hot glue works well for laminating layers, but it cools so fast that it’s hard to glue big sheets together.

Anyhow, all of this is to say I found a great website by Christine DeMerchant which provides a lot of information and insight on how to glue these materials together.

Heat Transfer Vinyl T-Shirts Without a Craft Cutter (2023)

Saturday, October 21
Zone 2 – Make: Demo Stage
2:30 pm – 3:00 pm
Let’s goooooooooooooooooooo!

Heat Transfer Vinyl T-Shirts (Without a Craft Cutter)
  1. Heat Transfer Vinyl T-Shirts – Without A Vinyl Cutter
  2. Heat Transfer Vinyl T-Shirts – Without A Vinyl Cutter, Part II
  3. Heat Transfer Vinyl T-Shirts Without a Craft Cutter (2023)

Companion Robots and Maker Faire Season!

I’m super excited for Maker Faire Bay Area / Mare Island and Mini Maker Faire Rocklin.1  I’m not just excited to see everything, but to show all the things I’ve been working on for a while now.  It’s also time to pick up all the little dev boards I’ve somehow accumulated and see if I can make anything with them to show off.

  1. Project Boards
    1. Wemos D1 Mini.  A small insanely cheap (~$3?!) WiFi enabled dev board2 , which has 4MB onboard and can run Arduino.  I think it can also run MicroPython, but I haven’t tested this yet.
    2. Wemos 600 Pico.  An even smaller, even cheaper (~$2 when ordered from China) WiFi enabled dev board that runs… MicroPython?  I think??  I’m saying “I think” because I haven’t been able to get it to do anything yet.
      1. Since starting this blog post, I found a guide on installing MicroPython on Wemos boards that seems promising.
        1. Flashing MicroPython on an ESP8266
        2. https://github.com/espressif/esptool/tree/master
        3. Arguing with Python to let me use “esptool.py”
          1. esptool -p COM13 -c esp8266 flash_id
      2. As promising as that series of blog posts looked, I eventually scrapped the Wemos because it was just too much of a pain to get going with MicroPython.  I think I could have made it work, but for $7 I could also just use the Adafruit QtPy I already have.  The advantages of simply uploading code over a USB cable into a virtual drive just can’t be overstated.
    3. Other Boards
      1. I have a bad habit of picking up dev boards.  I’ve got several Adafruit QtPy’s, several Adafruit Trinkets, an Adafruit FX Sound Board, Raspberry Pi Pico (non-WiFi), various Digispark boards, a small handful of ATTiny85’s, and an even weirder assortment of VERY small programmable circuit boards (ISD1806B-COB) designed to go in greeting cards (just 6 seconds), etc.
  2. Companion Robot
    1. Background.
      1. I started this post at least a month ago when I only had a vague idea of what I wanted to make and even fewer skills.  After seeing my kid’s companion robot take shape, I wanted to get in on the action and make my own.  I decided to make a really small companion robot with just some LED’s, piezo, and small microcontroller unit.  I’d taken a stab at making a companion robot a few years ago, but set it aside for a variety of reasons and never went back.
      2. The idea for this new robot would be something a little less ambitious, make more use of NeoPixels than in prior projects3, with a little more interactivity, trying out some CircuitPython, and… let’s be real… more pizzazz!
    2. Idea:  Friendly Cloud/Vapor/Flame
      1. I still really like the copper-toned PLA I’ve been using since it has something of a steampunk flair to it.  I settled on repurposing a small plastic enclosure with a clear dome as the “body” for the robot.  I wanted it to look something like a small entrapped / captive / domesticated4 sentient cloud of vapor or perhaps flame held within a steampunk enclosure.
      2. As a very small, inexpensive board that could run either Arduino or CircuitPython, I decided on the Adafruit QtPy M0.  It could run NeoPixels, there were lots of cool guides on it, plenty of pinouts, and could definitely fit within the confines of my enclosure.
    3. Enclosure:
      1. I started the enclosure by trying to design and 3D print a part to mate with the clear plastic dome.  It took a few tries.

        This slideshow requires JavaScript.

      2. Once I had that, I extended the base so it could hold more electronics.  I could definitely have shoehorned everything into the dome, especially if I took up some of the space inside the dome, but even with an “elevated base” it was still plenty small and could use a battery pack rather than a rechargeable lipo.
      3. Once I had a good design for the enclosure, I tried to make it work with an existing 3xAAA battery pack.  In the process I yanked off the connector and ended up soldering the battery pack leads directly into the circuits.
    4. Internal Electronics
      1. I’m just not a great electrical engineer and am still copy/pasting from various guides, tinkering, changing bits of code, swapping out parts, and using “close enough” resistors.  Wiring up some LEDs or a piezo to a project isn’t very difficult – it’s some of the more fiddly bits.
      2. Piezo Element Speaker
        1. I wanted to use a piezo buzzer/speaker because they’re large and incredibly thin.  They’re not without their downsides.  The crystal wafer is also thin and a little fragile.  The piezo buzzer without additional electronics has the potential to act as a knock sensor and can generate a high voltage spike which can fry a board.  And, without additional electronics, the piezo just isn’t very loud.  There are some libraries for the Arduino that basically double the volume of a piezo by connecting it to two pins and then running each opposite of the other, doubling the voltage difference, but they only work for Arduino chips.5
        2. After searching for various ways to increase the sound of the piezo elements, I settled on trying to use the Adafruit piezo amp.  I bought two – and tried desoldering the terminal blocks.  This completely ruined one.  The other one worked great, but for the modest volume gain it was just too big in an already cramped enclosure.
        3. After searching around, I found some amplifier circuits using a small number of common parts.6
        4. Then I tried building an amplifier circuit using an NPN transistor.  After reviewing the datasheets for my NPN transistors (and PNP transistors), and breadboarding the circuit with resistors, I sketched it a few times, laid it down with copper tape, soldered it in place with SMD resistors, then pulled it off and placed it onto a piece of Kapton tape and put another piece on top – “laminating” it in place.
      3. Capacitive Touch
        1. Buttons are great and all, but with a capacitive touch pad, I could add metallic elements to my robot rather than a much bulkier button.  I bought a few brass upholstery tacks because they looked great – but they just would not accept molten solder.  I ended up cutting the prongs short with wire cutters, wrapping the stub with copper tape, then soldering the wires to the tape.  I’d also added a little piece of heat shrink tubing over the connection to help keep it together.  It’s been working well so far.
      4. LED Animations
        1. As we know from Phillip Burgess‘ incredible “power sipping NeoPixel” guide, we can conserve power and increase the impact of the LED’s by reducing the number of LED’s, keeping max brightness ~20% for a disproportionately large impact, running fewer LED’s at a time, and even running fewer colors at a time.  Between Phillip’s work, Todbot’s guide, and the specialized QtPy NeoPixel guide by Kattni Rembor, I was able to put together a few neat animations.
      5. Piezo Sounds
        1. I had a heck of time getting the piezo buzzer to do anything interesting.  Fortunately, with my kid helped convert the piano music for “Paint It Black” into tones for me.  I haven’t gotten all the note timings right, but I’m working on it!
  3. Future Modifications
    1. More Accessible Enclosure.  Right now the “lid” with a hole for the LED ring just sits on the enclosure with a light friction fit.  One idea is a hinged lid, either with a conventional hinge or perhaps a hidden swivel hinge.  The problem with that, of course, is it requires even more internal space.  Other ideas include a ring on top that screws down, holding the top down and in place.  I’m crap at designing screw threads, so I’ve avoided this.

      Hinged lid for enclosure
      Hinged lid for enclosure
    2. Piezo Knocks.  Perhaps the next version will include some kind of tap / double tap / knock sensors using one or more piezo elements.
    3. Knobs.  There’s not a ton of room inside the enclosure, but by including a gear within a gear, I might be able to rotate part of the case and have it manipulate a potentiometer.

      Offset gear within gear, manipulating an off-center internal potentiometer
      Offset gear within gear, manipulating an off-center internal potentiometer
    4. Motors.  A robot that just flashes lights and makes a few beeps can still be pretty interesting.  However, I have some neat potential features that could be added with just one or two motors.  There are some interesting limitations with the current incarnation of this robot and using a QtPy.  I’ve only got 10 pinouts7 , 1 for NeoPixels, 1 for the piezo, 6 in use for the capacitive touch sensors, leaving 2 for other potential tasks.8  However, space is already tight so one or two micro servos would be a big space commitment.  I’ve seen some really tiny micro servos that might work, but I have no idea where to source them.  One silly idea is a “weapons system” using a spring loaded projectile activated by a very small servo.

      A small spring loaded projectile launcher, actuated by a small servo
      A small spring loaded projectile launcher, actuated by a small servo
    5. Creating Tone Library.  The basic piezo tones are easy enough to play, but including the entire list of tones and the frequencies associated with them seems eat up the poor little QtPy’s memory.  I think compressing them into a library might be the way around this issue.
    6. Playing WAV files.  WAV files are bulky, but that’s the only sound file format a QtPy M0 can play.  However, with the extra 2MB from the SPI chip installed, this shouldn’t be a huge problem.  I used Audacity to mix the sound clip down to mono then to 22 KHz sample rate.  My preliminary tests worked – but it was incredibly quiet.  I haven’t run it through the audio amplifier yet, but I’m planning to.
    7. Sleep / Deep Sleep.  Ever since I swapped out the tiny LiPo for a 3xAAA battery pack, I’ve had a lot more battery life, so adding sleep / deep sleep functions haven’t been a priority.  However, this inclusion just couldn’t hurt.
  4. Other QtPy and CircuitPython Resources
    1. Adafruit’s QtPy CircuitPython PWM resource
    2. TodBot’s CircuitPython tricks
Companion Robots: Building Robot Friends
  1. Cephalopod Robot Friend, the story so far
  2. Cephalopod Robot Friend Progress
  3. CuttleBot Body and OpenSCAD Design Tips
  4. An Assembled CuttleBot Body
  5. Building the Monocle Top Hat Cat for #MicrobitVirtualConcert
  6. Companion Robots and Maker Faire Season!
  1. I just got a notice they’re no longer a “Mini”! []
  2. pinouts for my future reference []
  3. LED goggles and a Marvel Universe inspired set of “Infinity Knuckles” []
  4. OMG dome-sticated?! []
  5. This is just my very basic understanding of how it works.  I’m entirely positive this is far too simplified. []
  6. And one very long article about using a lot of parts []
  7. 12 if you want to count the onboard NeoPixel []
  8. Or 4… []