One big wish for CircuitPython in 2022

I thought I could add my voice to the folks sharing their wishes for CircuitPython in 2022.

Boards I like
I was really pleased with how many boards came out last year that run CicruitPython, particularly those built on ESP32-S2 and RP2040.

For this year, the tease at the start of 2021 for a ESP32-TFT combo has finally turned into reality. Want. No, I have no idea what I am going to do with it. But it’s bonkers. That’s gotta be good, no?

And the recent Adafruit brain wave of different QtPys, especially those built on ESP32 (catching a theme?) have my head abuzz. Especially with the LiPo BFF-Sprinkle-Topping. I like smol, wireless, and battery-powered for lots of the things I mess with. But I’ve been usually going to a Feather S2 or TinyPICO, devices WAY overpowered and expensive for the things I usually do. Usually if I go for those, I want to GO BIG.

In any case, a QTPy ESP32 with LiPo feels like it changes these calculations. Let’s see.

Coding I love
As for CircuitPython itself, I’m impressed with how many new features have showed up in the past year, such as deep sleeping and asyncio (so new!). For sure I will be exploring asyncio, as most of my projects have various things going on in parallel and I have to manually manage all that.

Looking forward
There are a few areas that I struggled with CircuitPython, wanting it to do something and then having to turn to Arduino to do it.

UDP – alas, I had a project that used UDP that I just couldn’t get to work on CircuitPython. UDP is common in connected devices to send data to an endpoint without the chattiness of TCP. Alas, this isn’t a biggie for me in 2022, as I don’t think I’ll have a project with that.

So sleepy – this wish might have already been answered, but I want to see deep sleep spread to all the CircuitPython chips. In the small boards I use, they don’t have deep sleep (last I checked), only the hefty chips do. Tho, with the ESP32 line spreading to other formats, perhaps I won’t care the M0s are left out.

AudioIn – this one is the biggest for me at the moment. I have had many rounds using sound with various CircuitPython boards. Oh, CircuitPython might be great for MIDI, or for generating or mixing waveforms (yay, Winterbloom), or for playing snippets stored in memory or an SD card. But (and maybe it’s me) CircuitPython really isn’t designed for AudioIn, say, for recording someone and then doing something with it. Well, at least I’ve not had any luck trying to do that.

CircuitPython Audio Mixer – with that in mind, I would really be happy if we could design audio systems for CircuitPython like Teensy folks can do with the Audio System Design Tool. I’m trying really hard not to spring for a Teensy. But something like this could be really powerful, even if it were for the RasPi and a voice bonnet.

This AudioIn issue has been plaguing me in general, so it’s not a fault of CircuitPython. But, since we are making wishes, my biggest wish for 2022 is more AudioIN tools for CircuitPython.

Ok, so maybe part of the list above is just indicative of my skillz (or lack thereof). So, do let me know if you agree the list above needs to be added to CircuitPython, or if I just need to up my skills. 😁

Image shamelessly snagged from MasterTheHandpan (don’t judge, it’s the image I was looking for)

Pocket Universe

This is a chapter from a book I wrote during NanoWriMo 2011. The story was about folks who ‘shepherded’ marine mammals and fish (with the aid of dolphins, hence the dolphin reference below). Interspersed in the story were short chapters, interludes of unspecified origin – dreams? digressions? thoughts? This is one of them, pertinent to a recent, previous, post on technology, hence why I am sharing this now.


Pocket Universe

I was amazed by how fast nothing happened. 

The sun hung for hours in the same spot, smiling from the clear blue sky, causing the raft to hum with vivid orangeness. The water gently lapped and rocked the raft, and the mild breeze took me in a direction I only had a vague idea might have been where I wanted to go. 

I didn’t think of my dolphins, but I did, and wondered where they were. I’d been here so long, I no longer remembered why. All I could remember was that the sun hadn’t moved in a long time and my life vest chafed at my neck. And the overalls were hot too, their dark fabric absorbing the sun’s heat, almost burning. 

I kept counting the seconds to 60 but kept forgetting to count how many times I’d gone around. I think time had run out of minutes, and I was stuck with just seconds. Each time I hit 60, I started back at 1, instead of marching on to 61 or 6001. 

It must have something to do with the sun not wanting to budge from her spot. 

I shifted a bit and I felt something in my pocket. 

A pencil. Yellow. The standard hexagonal American kind with metal collar holding a red rubber eraser. The pencil was nice and factory sharp, with a bit of fine saw dust still around the grey graphite tip. 

It was an amazing graphite tip. 

I could almost see the atoms dancing on the tippy tip. 

A pencil is made of many parts, and each part has its origin story. There’s the paint, print, metal ring, rubber eraser, wood case, and lead. Each one has its origin and use, and this simple yellow pencil is the product of complex material manipulations, chemistry, extrusions, cutting, mixing, rolling, sanding, painting, handling, wrapping, shipping, and moving until it’s an object to be fondled under a stationary sun in the middle of the Pacific. 

ISN’T THAT JUST MIND-BLOWING? Never mind worrying if anyone will find me in the middle of nowhere, I have a PENCIL that is more amazing, Alyosha, than all of your philosophies. It’s the manifestation of the Universe all wrapped up and ready for a wee kid to doodle with. It’s the Universe hidden in the mundane. It’s the bloomin’ magical Universe, styoopid, and it’s right under your fat nose. And no need to invoke any higher power, neither. It’s a pencil. You and I can make one. 

You’ll need a casing – fragrant cedar is my favorite – cut into slats from blocks and blocks of the finest wood, down to a small bed with a groove to intimately sandwich, hold, and enfold the pencil lead like a precious woman in her lover’s arms. And the lovers – casing and lead – are shot through a planning process that adds multiple facets to their relationship, in the case of the yellow object in my hand, six facets (Hm, what might those facets represent? – family, children, society, friends, work, death, money – no, that’s seven, are there seven-sided pencils? I digress.) 

And then the polished and burnished pencil casing is painted and lacquered multiple times (sure would be less times if it weren’t mechanized) for children everywhere to ingest chips of while chewing, holding, handling these blessed, Universe-on-a-Stick, pencils. 

Regarding pencil lead: There’s no lead in pencil lead. Pencil lead is made of graphite, made of the same stuff diamonds are, and fullerene, if you’re particular. Therefore, you didn’t get poisoned in school when you aggravated your friend and she poked you in anger and broke the lead tip in the palm of your hand. (OK, I, I didn’t get poisoned.) 

The folks who are to blame for this misconception were, presumably, pre-Chemistry, when it was thought that graphite chunks looked a lot like lead. Though, I have more respect for ancient chemists than most and am pretty sure they could tell the difference – c’mon, lead is HEAVY.  

But the pencil lead, I mean, pencil graphite is not pure graphite, but mixed with clay for different hardness and darkness. The mixture itself is ground and pressed into long cylinders and then kiln dried, carefully so as not to damage the lead. So next time a svelte boho artiste designer-type asks you if she makes you BBB or HHH, give her a knowing grin. 

But we’re not done, you need to let the world know you made the pencil, and so with the lightest foil and hardest punch, you imprint whatever you darn well please on the side of that pencil, around it if you wish (it is you making the pencil, after all), and then send it off to get it’s crown of rubber and metal. 

I looked up and the sun still had not moved. In protest, I tilted myself, just so that my shadow would take on a different angle. If the sun won’t move my shadow, then I will take full responsibility. 

The sad thing is that this pencil is mass produced. Also, most of us only think of the “How they make it” part. But it’s much deeper than that. 

Graphite is not just some soft carbon material used for steelmaking, brake linings, lubricants, or, of course, pencils. It’s a hexagonal crystal of dihexagonal dipyramidal symmetry. Crystalline symmetry! And it’s the most stable form of carbon, to boot (or is that, “to soot”?) 

If I look closely at the pencil point, I see the mixing of the clay and graphite. Getting closer, I can see the phyllosilicates of the clay next to the dihexagonal dipyramidal of the graphite. And getting closer still I see – well, it’s really interesting what I see. 

We’re so trained in the balls and stick model of atoms and molecules, but when I get down to this level, it’s really not the same. Each atom is a force field, filled with electrons (Carbon has six in three different orbitals – and no, I don’t mean electrons spinning around the nucleus like planets, but electrons spinning about on their axes moving about in a defined area, captured – argh, it’s really hard to explain sub-atomic wonders via macro-atomic imagery; that will make more sense as I push closer) 

As I push farther, into all the shells, the orbitals, I can see the nucleus, a dense knot of protons and neutrons. These two defy explanation, as, to me, they are just bundles of energy. But I am not going to stop there; I’ll plow into a proton where there are even smaller tangles of energy – two up quarks and one down quark. 

At this level, I find it meaningless to talk about elemental particles. They are just fluctuations in the fabric of the Universe, braille bumps that somehow are stable, join up into higher order structures, and higher, and higher – oh, I’m back at my pencil lead tip. 

I look up. The sun still hasn’t moved. I’ve traversed the whole of Creation on a pencil and the sun doesn’t have the courtesy to move. This day will never end. 

I can hear the photons taking their eight and a half minute journey from the surface of the sun, through space, to slam into my face, tripping photo sensors, causing a cascade of genes to produce melanin, making me feel happy, and setting my sleeping clock. 

I can taste the blue of the sky, full of wispy water, neutral nitrogen, obnoxious oxygen, and a smattering of argon and carbon dioxide and a few other gasses. Mmm. 

I am buoyed on the orangeness of my raft, its brightness a hand lifting me up, caressing me, protecting me from the water, gently rocking me to sleep. 

Damn, that sun hasn’t moved. The nothing is happening faster than I can keep up with it. 


Image from Wikipedia

Riffing off a rant about technology

I stumbled upon a brief rant on technology by Ursula LeGuin via The Prepared. Great stuff. Alas, I required a bit more than a tweet for me to riff off of it.

“Technology is the active human interface with the material world.”
What I like about this rant is that it echoes my own view of what folks call ‘technology’. I often point out to tech-worshippers that a frakkin’ pencil is ‘technology.’ Indeed, you could write a while book on the pencil and cover so much about science and engineering and, yes, technology (well, I know I could (well, I did, sort of in a NaNoWriMo chapter)).

As LeGuin sorta says, it doesn’t have to be some LIDAR-carrying mobile phone with scratch-proof glass and precision machining and connects to dozen of satellites and can receive push messages from your Roomba when it rolls over your cat.

Clothing, dishes, toothpicks – they are all ‘technology’ – things we make to interact with our physical world.

Humans are inveterate technoweenies
Usually the next thing I say after the pencil comment is, heck, even a chipped flint stone is technology. And humans have been making things (*cough* technology) for evah – IT DEFINES US. I have visions of cavehumans hanging around the fire in a deep discussion on the latest flint techniques and what Harg in the next village over did with that wicked deerhorn to chip the stone just right – just like we all hang around talking about hi-fi (d’oh, dating myself) mobile phones.

To hark back to LeGuin’s rant, it’s stupid to say her stories don’t have technology when technology is everywhere for any civilization (or even non-civilizations – go google about animal tool use).

Technology
Finally, one related secret about my writing: I try not to use the word ‘technology’ at all (ok, so this post is messing up my score). This writing choice was inspired about 15 or more years ago by Ben Hammersly who was taking over some editorial duties at Wired and was going to ban ‘technology’ from everyone’s writing. Well, that’s how I remember it,* and how I was affected by it. And I’ve cut out a gazillion instances of the word ‘technology’ from my writing (and I’ve written a krapload in the past 15+ years).

Rant-triggered rant
So, when I read LeGuin’s rant, I needed to riff off of hers and add mine – she’s so right, a damn pencil is technology; we have always been technoweenies; and don’t don’t don’t ever use THAT WORD again.

I feel better.

*One other item that stands out from that conversation with Ben: matte black magazine covers. I can’t unsee that. Thank you, Ben.

Image from Blick, purveyors of all sorts of fine pencils (and other stuff, too)

Pause for station identification

I’ve been posting these pauses for almost 17 years. They are meant to give folks a quick overview of where I am at, but when I look at them, they serve a good reminder of where I have been. And, wow, krazy how much change one can go through in 17 years.

Me
Who am I? I’m Charlie Schick. I’m passionate about exploring how the intersection of bits and atoms help us tell stories of our physical-digital-sublime world. Indeed, one story I’ve lately been trying hard to explore is how we use physical constructs to connect to the sublime. 

I also advise companies on product design, client engagement strategies, and new market opportunities. I’m a recovering PhD, too, and proudly ex-IBM, -Boston Children’s, -Nokia.

By day
I just started (December 2021) a new role as VP of Marketing for Quartic.ai, helping the small startup grow into the leader in industrial AI we know we are. I am excited to be back into the world of AI and pharma and know that 2022 and beyond will be kick-ass.

By night
A most amazing development in the past few years is my journey into embedded electronics, 3D printing, and making in general. I know I will be doing more in 2022 and that the modest superpowers I have gained in the past year will be dwarfed by the superpowers I expect to gain in the coming one. Oh, the places we’ll go.

Because I can’t stop
For a very long time, I’ve been sharing my experience, insights, and exploits, especially through writing for and speaking to large audiences and engaging with others in stimulating conversations, including the office of CxOs. With my new role, I expect things kick up again in this space. Let me know how I can help in this capacity.

And of course, my standard disclaimer
(my usual riff off of an ancient Cringely disclaimer)
Everything I write here on this site is an expression of my own opinions, NOT of any of my clients or anyone I work for, especially Quartic. If these were the opinions of my clients or Quartic, the site would be under their name and, for sure, the writing and design would be much more professional. Likewise, I am an intensely trained professional writer 😛, so don’t expect to find any confidential secret corporate mumbo-jumbo being revealed here.

If you have ideas or projects that you think I might be interested in, please contact me, Charlie Schick, at firstname.lastname@molecularist.com or via my profile on LinkedIn.

Yes, you can find me on Twitter. I use it more to follow an amazing community of makers, to be marveled by their creativity, commentary, and caring; though, do say ‘hi’ if you swing by.

Image from a project of mine using a microcontroller to explore death and deathlessness

Building this gyro watch winder was like jazz

Isn’t making one big jam session?

Many decades ago, my mother bought my father a Tissot Seastar Seven. A very simple watch, which also has its own pendulum to keep it wound as the wearer moves about. I used to use it a lot. And it had an activity tracker sort of vibe: if I spent most of the day sitting around, the watch would eventually stop.

Alas, the crown was damaged and I didn’t use it for many years. But after my father passed away, late last year, I thought I’d get it fixed, in his honor. I knew the watch would have to compete with my daily wearing of my Apple Watch, so I knew I’d want to get some sort of watch winder, so that it would keep time and be ready to wear when needed.

This wouldn’t be my first watch winder, nor the last. I had built a watch winder for my For All Time project. And my father left another, fancy, watch, also a self-winder, for my kids, so I felt that there would be yet another watch that would need a watch winder.

Spinning in a fancy way
I didn’t want some boring spinner like I had to use in my For All Time project. I had seen some gyro watch winders that were really cool. After some research, I found this one by Bruno Esgulian. And I’d seen many versions to get some thoughts on the color pattern.

So I bought the model from Bruno and the parts on the list that I didn’t have and got printing the whole set up in black and transparent blue PETG.

No so fast
The buttons I got didn’t fit into the hole in the original model, leading to some funny attempts by me to fit it and ruining one of the two buttons that came (I had bought a 2-pack because I eventually was going to build a second winder, right?).

I had to modify the model to enlarge the hole a tad and print it again. And that worked.

An aside: I don’t know about you, but I regularly do test prints of specific sections of my models so I don’t print a whole model and potentially waste time and materials. On the right, I printed just the section of the base that had the modified button hole.

The second modification was the code. I wasn’t too enthused with the code that the maker was offering, so I made my own from scratch (well, not from scratch, I was reusing some code from the For All Time project, so I knew what I wanted and what to do).

A third modification was the power cable. I wanted to be able to power it, switch it off from the button on front for when I’m using the watch, and still be able to program the winder in case I had to change a parameter.

For that, I did some careful surgery on a USB cable, breaking out the power to be controlled by the button and keeping the data wires intact. Worked really well.

Drifting
One thing with winders is that you need to find the right amount of rotations so as to not overwind or underwind, which show up as the watch getting ahead or behind the time, respectively.

But as I was tweaking how many rotations per hour, I noticed that the stepper, not so accurate (there’s a reason the library is call “Cheap Stepper”), was slowly drifting out of true at the end of the rotations (that is, not returning to home, off by a bit each rotation).

Not aesthetically pleasing. So I needed to design a homing mechanism.

I made a modified spinning arm with a place for a magnet (image right), and used a reed switch to sense homing (and borrowed the homing code from my For All Time project). Worked like a charm, and the gyro is now always spot on.

With that, I was able to tweak the rotations, and now the watch is always wound and keeping time, ready for me to wear.

In the end, what I thought was going to be a straightforward build, turned out to require a bit of ingenuity and modification to get it to work just how I wanted.

The image to the right shows lots of the parts that went into the base. The heart is an Arduino Nano. Then there’s a cheap stepper motor and driver, you can see the blue wires of the reed switch go between the button and the motor. And there’s a nifty power button that is on-off and glows blue when on. One other thing: as the blue covers were translucent, I pointed the Nano and the stepper driver downwards, so as not to shine their LEDs up through the top cover.

[BTW, the sharp-eyed might notice that I have the USB cable coming out the top of the base instead of the bottom. Yes, for some reason, I usually end up assembling things backwards or having to repeatedly disassemble for some stupid reason. Rest assured, all is good in the final version.]

All that jazz
One of the great things about making is not just all the projects out there that you can download and build. The great thing is that there is always room for tweaking, re-purposing, or modifying to fit your needs. Indeed, many of my projects are exactly that – just look at some of the projects from this challenge.

The process feels like one big jazz jam session – everyone riffing off others, weaving in their own voice, making something new and surprising.

You don’t need to follow the project to the letter, nor do you have to do it all yourself. Just go out there, find something you like, build from there, and join the jam.

You think you know how EEPROMs fail? Think again.

The Death and Deathlessness* project was my exploration of life, death, and immortality. EEPROMs, the permanent memory in some chips, have finite life for writing. I had seen examples of folks killing EEPROMs, basically repeatedly reading and writing until they encountered an error, a failure for the address in the EEPROM to correctly take a write. I therefore thought running down an EERPOM to the last failure would be the equivalent of death. And recording it for playback would be like immortality – or would that still be life?

As I was building the project, I realized there were a few questions I could not find answers for. For sure, folks had shown that ATmega or ATtiny EERPOMs actually can be faithfully read and written way more than the 100k cycles the manufacturer guarantees. But everyone stopped their experiments at first failure.

I wanted to know if when an address failed, was it the whole address or was it the whole EEPROM? It felt like it was the whole address, as I’ve heard that folks would stop using that failed address. Though, if an address failed, did it stay failed? And if it stayed failed, would other addresses also start failing until the whole EEPROM had failed? And because I was writing then immediately reading, would the fail be harder to find? That is, my failure test required failure right after a write. What if failure after 100k cycles really was related to long-term stability of the address, which I’d never see, or which is why folks could hit 1M or 2M quick read-write cycles before seeing a failure?

Well, since I was going to run this EEPROM down, I realized that I would be able to answer some of these questions.

When the whole thing started

Some parameters
I was using an ATtiny45, which has 256 bytes of EEPROM. I was only using the first 128 addresses (because my readout was an LED matrix with 128 pixels). For each byte I alternated writing 240 (binary 11110000) and 15 (binary 00001111), meaning all the bits alternated each cycle. I read the value after every write to see if it retained the expected written byte.

My first try blew past 2M cycles with no errors showing, so, in disbelief, I stopped to check my code. It was good. So I got a fresh chip and started another experiment, and with extreme self-control, let the damn thing run for what felt like forever, without watching it.

Errors! Addresses 25, 33 and 115.
Image from day 28.

And then I saw an error. And some interesting behavior. After a few days, and some more interesting behavior, I stopped the experiment.

There was a challenge handling a CSV file with 4.9M rows, but I was able to see that the experiment did about 3.7M cycles, throwing about 1.2M errors.

And now for something completely different
The addresses that failed would only show a failure every other cycle. That’s the first insight: failure is at the BIT level, not the BYTE level, such that when it wrote and read a number, it would fail, and when it wrote and read the next one (all different bits), it would read fine. For example, address 33 always failed on the odd cycles, while address 41 only failed on the even cycles.

Bit-level failure
(morning of day 29)

Crazier still, while a failed address would fail consistently for a long stretch, it would then NOT fail for a long stretch, too. Indeed, I saw other failed addresses, also showing the alternating of fail and succeed, pop up and then not show up for a long time. For example, 33 is first to fail at cycle 666,517; and it fails 263,318 times in the subsequent 3,004,848 cycles.

I did a histogram and saw that only 29 addresses had ever failed. Address 33 was the address with the most failures. But address 34 fails 3 times (adjacent odd cycles 3,440,911; -913; -915) and then never again (that’s for the remaining 231k cycles before I turned it off).

Long stretches no errors
(evening of day 29)

This failing for stretches and then not failing suggests to me that this is a probabilistic fail rather than a catastrophic terminal fail. Think of it as the bit has an issue holding a charge (probabilistic) rather than no longer holds a charge (catastrophic fail). So it can go long stretches when its probability of holding a charge improves, until the probability gets bad again.

Of course, for the manufacturer and anyone looking to depend on the EEPROM, stepping into that probabilistic failure might as well be a terminal failure as it makes that whole address useless. As for me, who thought that perhaps the whole address would fail, or that at least when a bit failed, the address would stay failed, this probabilistic nature basically killed the nature of my project. 

Yup.

I could do a bit more statistical digging into the data, but I don’t really have that skill, or the right toolset. Nonetheless, what I can figure out is that the condition where EVERY address fails is likely impossible (or way longer than I am willing to wait – tho I am tempted).

Below is a link to the CSV is you’re interested in checking this out. The columns are Cycle, Address, Result (0 for failure). For my own logging and for the LED matrix output, I wrote out a row for every cycle. But, to save space and speed things up, I only wrote out Address and Result when there was a failure.

Please note, I share the original so I can avoid inadvertently introducing something in editing. There was some writing artefact that added a null row after every error (about 1.2M – sorry). And there’s some gibberish before the first cycle you need to delete. I suppose I could revisit the logging code. 

Summary
I had wondered a few things about how EERPOMs fail. I wondered if when one bit failed, the whole EEPROM failed. That’s not the case. Also, I couldn’t find anything that suggested if errors were at bit or byte level. I now know that they are at the bit level. I also wasn’t sure if a failure was terminal. Turns out failures are probabilistic, so an address can function properly after having failed numerous times. Also, that means that I likely would never be able to kill off a whole EEPROM, where ALL the addresses fail on EVERY read and write cycle.

In the end, what I thought would be an achievable and straightforward running down of an EEPROM, turned into an interesting revelation of resilience for the wee chip.

You’d think everything there is to know of ATtiny or ATmega EEPROM failure is known. Well, perhaps not (or maybe I just couldn’t find the answers to my questions). In any case, my Death and Deathlessness project did teach me many interesting things about EEPROM failure.

Do these finding jive with the EEPROM behavior you’ve seen?

 

*Deathlessness is a key concept in the Lord of the Rings. I even wrote a short story on it in college, as extra credit, that the prof read out in class, to my embarrassment. In any case, when the movies came out, I had a chance to teach my kids how deathlessness was a key thread throughout JRRT’s stories of Middle Earth.

Looking back at a challenging challenge year

Done

I recently completed the final project of my year-long challenge to make a project a month from 15jul20 to 15jul21. This marks the end of my second year of making, counted from when I had to do a project for work and resurrected a Arduino Uno I had in the closet for 10 years (I never figured it out the first time). And by making I mean chips, circuits, PCBs, 3D printing, and the like [I’ve always been creative making and designing things, but not the level of these past two years (sort of)]

Anyway, I chose the challenge as a constraint – both to hold me to making 12 projects, and to time constrain things so that things just had to get done.

Well, things were not that simple.

Life intrudes
Before I list the projects I did and provide some commentary, I will admit that I did not keep to the schedule of constraining the projects from the 15th of one month to the 15th of the next. Already with the second project, timelines slipped. And then a death in the family (my father) had me skip two months – yeah, I had other things to focus on – and was subsequently affecting the amount of time I had during the rest of challenge period. Some months I would go a week or two not touching a single project.

At the same time, the projects kept me going after my father passed, and also engaged my mother (she’s a long-time maker, very creative and totally grokking what I do, providing great advice on project design – really). So while on the one hand parts of our lives were up-ended, the projects also helped us move on after the up-ending.

But none of this is any excuse. The whole part of a challenge such as this one is to provide concrete achievable goals, constraints, and urgency. Arising from that, we learn about ourselves, our materials, and our limits.

Gaming life
For every project, I was trying to insert some meaning, or trying to make a concept tangible. Not sure I hit the mark each time, but the intent was there.

My first project was the Multi-mode Game of Life. This one was meant to show aspects of contagion (it was the Summer of Covid) and #BLM. As a bonus, I whipped up a Game of Life: Contagion Mode, Rose Garden Massacre Edition, inspired by the disastrous super-spreader event during the nomination of the last Supreme Court Justice.

Slowing down time
Next came Seeing Thru Time, inspired by the closeness of Jupiter, Saturn, and the 4th of July full Moon last summer (the three, including a full Moon, were up again last night, tho not as close). The goal was to show how long it takes for light to go from the Sun to these celestial bodies and then back to Earth. I thought it was cool, even if most people didn’t. For me at least, this was the first one to hint at the sublime – awakening a sense of fearsome wonder for the universe.

The funny thing is that I really don’t have anywhere to put it, so this project has inspired me to rearrange my workshop for more permanent installations.

Spooky
After that, I wanted to do something for Halloween, perhaps something scary that I could hang for trick-or-treaters. And being a bio-geek, I knew I wanted to do a virus.

For this project I knew I wanted to dodecahedron or icosahedron. And fed by a ton of LEDs and resistors I had lying around, I made a spiky model with animated LEDs (over 60!).

Quite fun.

Pausing
And then my dad died. There was only so much attention I could give while I dealt with the aftermath, I ended up skipping the next two months of projects. Indeed, those two months were actually planned to be a two-part project around book making. The first month was supposed to be print making, the second 3D printing a book. I had just started the test prints. But really, I could tell that my mind wasn’t up to working on the projects. There’s only so much attention one has, and my mother and family definitely took precedence.

Picking up on the next measure
That pause took me to mid-December, ready to start what would have been the sixth project, but was now the fourth. This one came out of a zany idea that someone with one watch knows the time, but someone with, uh, five, is never sure. The idea (“For All Time”) was to set up different timepieces and watch the times deviate.

This was an elaborate project, forced me to up my skills in Fusion 360, work with stepper motors for the first time, and fill every single pin possible in my TinyPICO. I was also pleased to see the project get called out in the Adafruit Blog (*blush*).

Alas, everything worked well except the stepper motor. That is, the holder for the stepper motor failed, so the whole winding mechanism was useless (for the bottom middle watch). And then I ran out of time to make it better.

One thing I haven’t said until now is that one of the watches was my father’s (the one with the white face), that I took off him when they took him away. So, one thing I want to do, now that the challenge is over, is go back and fix the winding mechanism and get this contraption turned on again.

Being cheeky
The watch project was to show that time could seem arbitrary. Serious stuff. In contrast, the next project was all cheek.

Early this year, COVID vaccines were all the rage (not sure why they no longer are, considering). My extended family members were all getting their Fauci Ouchys. Therefore, I wanted to make a range of blinkybadges for them to proclaim their vaccinated state.

Alas, I only made one of the designs. Though I did learn heaps from the process – new chip, my own artwork, hot air gun soldering of SMT – among other things.

A quite interesting project
My father was old, and in those final years I was thinking a lot about death, dying, and immortality. I was also thinking how I could express such concepts in a tangible way. What I came up with was recording the life of an EEPROM as it dies.

The project was called “Death and Deathlessness“, a saying out of the Lord of the Rings (indeed, in college, I wrote a short story on the topic). Deathlessness, rather than immortality, was a key concept in the LotR.

The project, inspired by others who would take an EEPROM to first failure, was to take every address on the EERPOM to failure, record it on the way, and the replay it. My first question was if the replaying was life, or what, if it was the exact same as the life of the EEPROM.

Truth is stranger than fiction. The damned thing ran so long before the first failure that I kept verifying if the code was right (it was). I’m not going to say more here as I did some forensics I want to share in a separate post. Interesting stuff.

Pretty pictures
End of April, we were heading to graduation season. Me, in all my wisdom, decided to make something image-based for graduations in the family. I recalled lithophanes and found a really helpful website for me to create the files to use in 3D printing.

This project was really fun, the 3D printer working long hours every day. And this projects is one of the rare ones my family has asked for more. Tho, I realized when the lithophanes were done, that the graduates wouldn’t want a photo of themselves, so I gave the framed lithophanes to their mothers. Haha.

I have a few frames left over so will definitely get back to these to make more, especially to complete the one of my mom holding my dad’s hand, shown here.

Another unfinished project
The next one was one I had been pondering since I first thought of the challenge: “what does Dignity look like?” And throughout the year, I was nowhere near getting that answer, until one day it clicked. Alas, in the time I had, I was able to work on the electronics and the code, but got bogged down with the enclosure, which is instrumental to delivering the experience.

I’m not going to say more here, as I will be going back to this one, as this one is important to me.

Blinkenbugs
One other project that I was excited to get to, but that had to wait for the start of Summer, was around fireflies. The original project concept was some funky Boldport artsy freeform and PCB type creation that could simulate firefly flashes. But due to time, travels, and the chipocaplypse, I instead decided to use mostly what I had already.

Soon after I wrote the post on the project, I did manage to attract some fireflies. Quite thrilling. But more importantly, the project had me (and at times, other family members) out most nights, marveling at nature’s light show (that fearsome wonder of nature, again).

Tree of Life
After that, I reached the final project, the Tree of Life. Not to be just some lit up image, I decided to add a twist, a twist that I hope makes one think of what dementia looks like.

Also, it just is one wicked beautiful build. Which got me thinking: the 3D model was purchased and I riffed off of it (multi-color, mounted, animated). At first I felt awkward mentioning where I got the model (folks would go ‘wow’ and I quickly let them know it wasn’t me who did the model). But then I realized that remixing things is OK, kinda like with my COVID decoration (also a purchased and modified model).

Indeed, if there’s one big thread through my past year is that so much of what I made is based on the genius of others and I’m just a humble remixer, seeing new ways to bring all those bits and bobs together into something that means something to me, and hopefully to others. While the challenge forced me to go in and out of projects quickly, it also taught me a wide range of skills that I can now go more deeply into for fuller materialized ideas.

Yeah, that kinda suggests what the next year will be like, haha.

Onto year three.

Last challenge project: Tree of Life, with a twist

Here is my final project of my year-long challenge. I was on target to finish it on time, but life has a way and I ended up finishing it about a week late. But fluid timelines were common to this year-long challenge. Plus, I really didn’t start this last project on time.

Clear vision
As with some of my projects, I had a clear vision of the face of this project. Well, sort of. I knew I wanted a tree image and pixels for leaves going through the seasons. And part of my prep for a project, I think of a ton of things, such as, in this case, looking up tree lifecycles as reported by some service or some freeform sculpture.

If there’s one thing I learned in the past year doing these projects, though, is to mind the feature set and the time frame. I also wanted to keep in mind what I could do with minimal purchasing. An earlier project had exceeded my usual burn rate.

The tree
With a clear desire for a tree, I figured I could draw something or get a SVG online to convert into a 3D model. Though, remembering my COVID model, I dug a bit deeper to see if I could find a ready-made model

Unfortunately, so many were indeed just a flat conversion of an image into something for a CNC or a 3D printer. But then I found (and bought) a really intricate model, meant for a CNC, with precisely the aesthetics I was searching for (see below). And the model maker was kind enough to convert it for 3D printing.

I printed a small version to see what it looked like and it came out nice. Though, my 87-year old maker mom took one look and suggested I print it out in two colors. Which was a great idea.

I had originally thought of poking the neopixels through the model, but when she suggested two colors, I knew it had to be something translucent. So I then did a sample print with the red translucent filament I had. To which, of course, my mother suggested I try a different color.

I picked up a baby blue translucent filament and whipped up another test print. It looked great. Just the look.

Trouble in model-land
My next move was to modify the print. Initially, I was thinking of poking the neopixels through, but with the translucent part of the print, decided to modify it so that I could mount it on something.

Turns out this model was way complex and Fusion 360 (or at least the copy I had) was choking on it and requiring that I lower its resolution. I spent a few hours wrangling with it, but no luck. So I had to change my tactics – I decided to make a ring that I’d then glue to the model and then screw that to the backing that would hold all the electronics.

Getting on with the printing
After printing some test prints to make sure I was making the backing properly, I printed up all the parts – the ring, the backing, and the tree.

The full-size tree print was about 16 hours, including the filament change after the first few clear layers.

Came out so nice.

For the backing and ring, I made a simple model in Tinkercad (where I prefer to make my simple models).

The idea was to solder a string of neopixels and glue them and the microcontroller to the backing. But I had specific places to put the pixels, so I printed a paper copy of the tree, marked where I wanted the pixels, flipped it over, put down some two-sided tape, measured the wiring, and soldered the neopixels together stuck to the places I had marked. [If you wonder why flipped over, it’s because I had to solder the back of the pixels.]

To then transfer the neopixels to the backing, I then flipped it all over and put it in the backing, slowly gluing the pixels and removing the paper and tape.

The cutest microcontroller
The brains of the operation is an Adafruit QtPy, chosen for its size, simplicity, and that I really only needed two pins. Also, because I intended to run this off of the USB jack, didn’t really need much more (the neopixels are powered from the GND and 5V pads underneath the QtPy – giving 5V directly from the USB).

Of course, the other special reason is that the QtPy runs CircuitPython, with which I prefer to code my projects. This also helped in the prototyping of the build.

For prototyping, I used a Circuit Playground Express, also from Adafruit. The CPX has 10 neopixels, so I could prototype much of the code – setting up the pixels, the animation, the logic behind it (I’ll get to that). And then all I had to do was copy the code over to the QtPy when everything was hooked up.

About that code
The neopixels at the top are the leaves and the ones at the bottom are the roots lights. For the root lights, I just wanted some white twinkly thing. But for the leaves, I wanted them twinkling the seasons – yellow and white for flowers in the Spring, green twinkling in the Summer, orange and red twinkling in the Autumn, and then off in the Winter (see Summer to Autumn change in GIF above).

That was the easy part. But usually I like to insert something special in the projects I did during this challenge year, give them a wee more meaning. And for this one, I did: dementia.

When leaves forget
This past year I’ve had to spend some time caring for a family member who has dementia, and watch a friend grapple with it in her family. Dementia is a cruel disease, robbing brilliant folks of their memory, their understanding, their awareness. As with other events in my life in the past year, dementia has captured my thoughts of how I could express it in hardware.

Therefore, in my Tree of Life, as the leaves go through the seasons, there is a chance that they forget themselves – they either start wandering the seasons in the opposite direction (say, go from Summer to Spring) or change the length of their season (say, slowing down or speeding up).

The idea is that we would begin to see a single leaf get out of sync with the others. Eventually, all the leaves will fall out of sync as the whole tree gets dementia.

Indeed, testing the progression, indeed the whole set up gets out of sync. I’ve since tweaked the code to slow everything down and be more subtle with the dementia. I have no idea how long things will take, but that’s OK. I’m happy with how it turned out and it’s now hanging in my work space.

Build complete
Also, I’m happy that this was the last one I did. These monthly projects really consumed me whether working on them or not. And the past year was quite eventful for me that there was the added challenge of life (and death) getting in the way. I look forward to non-time-constrained projects. Though, I’ve pondered what my goals for the next year should be. Haha.

In any case, I owe you all a write up summarizing the year, another looking forward to my next year of making (those goals), and I really want to share news from this project that has now run a long time and yielded some interesting insights.

Until next time.

Project: Firefly

My latest challenge project was selected already last year when I set the challenge. As this had to do with fireflies, I knew I had to have it ready for early June, when they’d be all over the place, doing the flashing they’ve been doing for millions of years.

Needless to say, I’ve been waiting to do this for a long time.

Though, by the time I finally got to this project, I had wizened up in terms of what I can do in the one month I had, including all the logistical constraints due to some things going on in my life.

I had originally wanted to make a fancy PCB, inspired by Boldport bugs (tho with no expectation of being anywhere as brilliant haha). But I realized that I didn’t really have the unbroken time to do a design. And then there’s the crazy chipocalypse of parts shortages and price hikes. Also, a comment on being thoughtful when making physical devices, made me, well, be thoughtful regarding this project. And, lastly, a recent project spiked my component buying burn rate, so I’ve been trying to do my projects with as many components from my stash as possible (c’mon, constraints can be liberating for creativity).

With all that, I decided to build this with what I had on hand. I did eventually buy some parts: a super capacitor and a solar panel, tho they were well below my usual project budget (in other words, helped get my average monthly expenditure down).

The build
Since this is the ultimate blinky project, the key component is an LED (green). I wasn’t sure what the local blink pattern would be, so I programmed a trusty ATtiny45 (undervalued in an world of ATtiny85 snobbery) with multiple blink patterns (see image right), and connected a momentary button to switch between blink patterns (state remembered between power-downs via EEPROM).

For power, I realized that I didn’t want to use a CR2032, so I hopped on Amazon and purchased a 5V solar panel and some super capacitors.

An aside on buying components on Amazon
Normally, I try to support my favorite vendors or smaller vendors I encounter – anything to avoid Amazon. Not only that, when I go to other vendors, I buy the number of components I need. Usually, when buying at Amazon, even when the per part price is cheaper, you end up getting more of them than you need. I can’t count the number of times I got a ton of extra LEDs, LDRs, header pins, resistors I didn’t want, but that were shoved into the purchase.*

So, to get one solar panel and two caps, I got eight more caps, and nine more panels. Ok, I partly thought I’d be making a few copies, but stopped at one. Now I have even more extra components around.

Back to the build – many firsts
I had been wanting to make a project with solar panels and super capacitors for the longest time. As the project would be out on multiple nights, I figured it was perfect for a solar panel to charge some caps, which would then discharge during the night, to be recharged in the morning.

I had a Schottky diode to make sure the solar panels wouldn’t suck charge from the cap at night. I could not find a 5V-ish super cap, nor a super cap with significant charge (F). To get the voltage up, I put two 2.7V/3.3F super caps in series, which gave me 5.4V but 1.65F (that’s how it works out). The voltage of the super caps in series was actually what I needed, as you charge them 10-20% below their total V (or that’s what I read). I could put two pairs in parallel to get back up to 3.3F, but 1.65F was more than enough.

As I kinda wanted this to be off by day and blink by night, I wanted to make a light sensing circuit. To do this I used a CdS light detecting resistor and a PNP MOSFET as a high-side switch to power or not the ATtiny. I had just built a high-side MOSFET- and LDR-driven switch that also had an NPN transistor (off when dark), inspired by having to do the high-side switch for this build. Doing these high-side transistor switches was a first for me.

Another first for me, I didn’t program the blinks with the usual delay() nor with millis(), both which would keep the chip powered on. I wanted to stretch the power by sleeping the ATtiny as much as possible. I found a good article that set me on my way to using the watchdog timer to sleep the chip during the pauses in the blink. Also, the button press to select blink patterns was also an interrupt, so the sleep intervals were not holding the chip hostage, as using the delay() would have. In the end these techniques economize power (or so I think) by spending more time asleep than on.

That completes the circuit. I threw in a 0.1µF cap on the ATtiny. Because. And mounted the ATtiny in a DIP socket, so that I could pull it out to program.

Origami-ish
I sure wish I knew how to lay out a circuit for a protoboard in KiCAD. I’ve seen lots of hacks, but I’m surprised there isn’t any KiCAD plug-in for this.

In any case, I dove into the origami of twisting and connecting the components on the protoboard. Nerve-racking, but actually a fun chestnut to crack (a multi-meter helps).

There were some connections I bridged with lacquered winding wire (I so like using it for bodges, once I got the hang of it).

You can image how pleased I was when this assembly worked on the first try.

In the field
The whole point of the project was to put it out at night and attract fireflies.

The first night I finally saw fireflies, the blink pattern was NOT any of the ones I had. I had to then program the flash I saw (three quick pulses) and then put the contraption back out in the night.

OK, so it charged well by day. Blinked when the night came. But I think these particular fireflies prefer to be up in the trees, which is where they all were. I’m used to fireflies that hang out in the grass. So I suspect the hot-to-trot fireflies in the treetops were looking down and wondering why there was one in the wrong place missing all the action. Haha.

Alas, I really didn’t have luck attracting them. Though last night there were a few fireflies that came down near my contraption, flying around or down on the grass below the deck banister I had the contraption on.

Nonetheless, this was a fun build. Got me out at night to marvel at the fireflies and their biology.** And learn a few new things about electronics (especially that I need to learn the math around transistors).

Oh, and I happened to complete this challenge project on time!

 

*Well, extra LEDs actually led to this crazy thing
**In high school we actually did the chemical reaction for the bioluminescence – what a nerd!

Challenge update: entering the last month

This past year, I’ve challenged myself to do one meaningful project a month. While building embedded electronics and printing objects can be fun, I wanted to keep myself to a few constraints, such as each project needs to be around making a concept tangible, or that concepts should use microcontrollers (if using electronics) rather than more capable computers. OK, so I might not have cleaved to those constraints, but they were a good start.

In any case, I’ve done OK. I started to challenge on 15jul20 and because I mark the month from 15th to 15th (there’s a reason) on 15jun21 I’m about to start the last project of the challenge.

At the end of this last project, I’ll post a summary post with links to all the projects, and some commentary on what I’ve learned along the way.

In the mean time, I realized I have not posted the last two projects, not to mention an update on one that has been running for a while. Fear not, they will be coming. Watch this space.

Image by Lars Nissen