Holiday Special 20

Enter Your Holiday Project for a chance to win a tool kit bundle, shopping cart, and gifts to give to other members!

Submit an EntrySubmit an Entry  Back to homepage
Project14 Home
Monthly Themes
Monthly Theme Poll

 

I was not going to do a Holiday project but there hasn't been a lot of joy and there has been a lot of stress this year, so I thought that it would be good to do something simple and colorful to lift our spirits.

 

I recently got an Adafruit QT Py and a NeoPixel LED ring that I thought I could use to make a simple lighted Christmas ornament.  I'm going to add a 128x64 OLED display and use the capacitive sensing built into the SAMD21 to select different color patterns for the NeoPixel ring.

 

Here's a sketch of the concept:

I'll also print a base to hold the QT Py.  I'm still in the proto stage so I'll use a breadboard initially.  I need to figure out what I'm going to use for the capacitive touch buttons.

 

Software

I planned to use CircuitPython to program the QT Py as Adafruit has some great python libraries available for display graphics and neopixels.  Unfortunately, I discovered that with the 32KB of SRAM on the SAMD21 that you can't load many complex libraries simultaneously.  I could run different functions individually (OLED, NeoPixel, CapSense), but when I tried to import all the libraries in the same program I ran into "out of memory" errors.  I made sure that I was using the smaller footprint "mpy" libraries and I tried different load order and even added garbage collection between imports.  I think the SSD1306(OLED) library is the worst offender because it also requires the bus_device and framebuf libraries.  I almost got it to work, but finally decided just to use the Arduino IDE.

 

Prototype Hardware

Here's my first pass.  Hopefully it will evolve over the next few weeks.  I still need to add the capacitive sense buttons and possibly a small speaker for sound.  And to clean up the wiring.

 

Demo Video

A short video that shows the OLED and NeoPixel ring working.