Peppermint is a square inch blinky memento for my family to count down the 2 years I'll spend away from home. It uses 24 charlieplexed LEDs in the 3 colors of the national flag of where I'll stay to display the remaining months (and possibly other time units), and a capacitive touch sensor to trigger the animation. I'm hoping to get it to last the full 2 years of normal use on one coin cell battery.
PCBs arrived from OSHPark a bit earlier than expected (past the challenge deadline, but that's my own doing)! Just a bit of cleanup, and they'll be ready for soldering (once the DigiKey order arrives).
I decided to do a negative raster on the top acrylic layer, such that everywhere my text and images weren't were engraved, to allow more diffuse area for the LEDs to shine through:
The image is of the Angel Moroni (an important symbol of missionary work in my church), and the text is a translation of "God Be with You 'Til We Meet Again".
I plan on programming my boards using ArduinoISP from my Arduino UNO, so I thought I would get a jump-start on firmware development and testing an ISP setup by building a breadboard prototype of my circuit (as I've always programmed over UART in the past).
I soldered together a little SIP ISP programming header, and set the fuses of a DIP ATmega328P with Optiboot I had laying around to run with the 8MHz internal oscillator (since I didn't have a 16MHz crystal on hand, Nick Gammon's wonderful Arduino tools helped me out with an alternate clock source). On the actual board, I plan on using the 8MHz oscillator for the CPU, and running a Timer2 RTC with an external 32KHz crystal. After laying things out (including a button to simulate the touch sensor), a simple test program (blinking one of the Charlieplexed LEDs) worked great:
Early on the PCB layout process, I used an "0603" footprint for most of my passives and my LEDs, and finished what I thought was a great component layout. Everything was fitting a little too well, with lots of extra room... Upon further inspection, I found that the footprints were really 0603 metric, or 0201 imperial, and I was further taught that almost all hobby PCB design and SMD parts are referenced in internet parlance in imperial. There goes my "bigger than a grain of rice" requirement...
After reworking my component sizes up to 0603 imperial, I was finally able to get a good component layout, connected up traces, placed ground planes, and finished my first PCB design!
In addition to the LEDs, regulator, ATmega, and cap sense chip, I added a jumper to a pad that could allow an external capacitive touch pad if the 6mm one under the OSHW logo isn't sensitive enough. I also made the footprint for CS1, the capacitive touch sensitivity adjustment cap, 1206, so I could get a few values to experiment with and hand-solder them. Time to whip up a BOM and design an enclosure!
I've wanted to build something for the square inch project since the original challenge announcement, but most of my ideas have involved the ESP8266 or ESP32, and were a bit too grandiose for my first foray into PCB design. So with a few weeks left, I thought I'd build a blinky memento for my upcoming mission trip. The basic idea is a square inch flag-themed LED grid with 1 LED for each month I'll be gone.
My wish list after that includes:
Lasting the full 2 years (preferably without recharging, and on a coin cell for assembly convenience)
General robustness, so that these can be carried/worn if desired - Leads me to think of a wooden/acrylic case and a capacitive touch sensor to trigger an MCU wake and the animation
Keeping track of time accurately enough for at least to-the-month granularity over the 2 year runtime (without resets or other functionality-breakers)
Relative ease of assembly and programming (time's running mighty thin!) - Arduino compatibility and parts bigger than grains of sand are preferable (though I'll likely be hot-plate reflowing)
I considered several options for how to achieve the functionality I was going for, including consolidating processing and low-power capacitive touch interrupts with the ATmega328PB, but this didn't seem to be well-supported in the Arduino environment, and required a Windows-based proprietary tool to setup the touch sensing.
Instead, I decided to use a plain-old ATmega328P and an AT42QT1010 momentary capacitive touch sensor - the board was starting to look a little tight! For 3.3V power from a 3V CR2032 coin cell, I decided to use an MCP1625 boost regulator. Things look to be coming together!