As you may recall, my current hobby project involves a 12 x 12 array of ping pong balls, each containing a WS2812 tricolor LED (a.k.a. NeoPixel). Quite apart from anything else, I’m using this array as the basis for a series of Cool Beans columns that appear in Practical Electronics (PE) magazine. (Although PE originates in the UK, it’s available around the globe in both print and digital incarnations.)

In the September 2020 issue, which — paradoxically — will hit the streets in the first week of August, we end up with a sketch (program) that envisages random drips of virtual water landing on the display, lighting up pixels with random colors one at a time. You can see this in action in this video on YouTube.


Of course, this is just the beginning. My poor old noggin is bursting with ideas for future experiments, including implementing Conway’s Game of Life and a version of the classic Pong game (the latter was inspired by my observing our two cats engrossed by the DVD player’s standby display, which involves an elliptical shape wandering across the screen and changing color as it bounces off the edges).

I was quite happily experimenting away without a care in the world when my chum, Ted Fried, who is an FPGA designer at Apple, sent me a message saying, “What about having a competition? You could ask people to write sketches for your array and send them to you. Then you run these sketches on the array, take videos, post them on YouTube, and get everyone to vote to pick the best-of-the-best.”

Well, this certainly sounded interesting, but I know to my cost how hard it is to get even the simplest program up and running. There would have to be some way to test such a program before sending it to me, but I don’t think we can expect everyone to build their own 12 x 12 arrays. Furthermore, if they had such an array, they wouldn’t need to send their program to me — they could just take a video of it running on their own array.

Ted and I bounced various ideas back and forth, ranging from the sublime to the ridiculous. One of the more “interesting” suggestions, for example, was to have a local server set up in my office connected to the Seeeduino XIAO driving my array. Also, to have a livestreaming webcam pointing at the array. The idea would be to let folks remotely upload their programs to the Arduino IDE running on the server, and to then compile and load them into the XIAO and use the streaming webcam to watch the results on the array.

A screenshot of Ted’s simulator outputting to the serial monitor (Click image to see a larger version — Image source: Max Maxfield)

Sad to relate, I really don’t have the time (or energy) to set something like this up. Another suggestion was to create a small low-cost board with a 12 x 12 array of NeoPixels, and then sell them at cost to anyone who wanted to play. If I could have come up with a design we could build for $5, I might have been tempted, but they would cost much more than that, plus the user would need a pretty hairy power supply.

It was around this point that Ted came up with a really rather ingenious idea, which he refers to as a “LED Array Simulator.” The idea is to write a simplified version of the contents of the array to the serial monitor. If you happen to have an Arduino close to hand, take a look at this sketch.

All you have to do is compile the sketch and upload it to your Arduino. When you open the serial monitor, you will see a series of 12 x 12 displays being written to the screen. This happens so quickly that the scrolling screen almost makes it seem like you are watching an animated display.

Obviously, this is just a proof of concept. In this case, Ted has implemented a “Random walking LED” that ambles its way around the display, but it does open the door to a lot of possibilities.

In fact, I think I just had a brilliant idea (sometimes I just can’t help myself). I’ll discuss this more in my next blog. In the meantime, why don’t you take a look at Ted’s sketch, and then cogitate and ruminate on how we could use this to allow other users to simulate my 12 x 12 ping pong ball array.