A spinning ring of DotStar LEDs creates a programmable globe.

I’ve been working on this project for the last few months, and finally got to the point where I can finally declare it done. Mercator is a spherical persistence-of-vision display based on a ring of DotStar programmable LEDs and the Adafruit HUZZAH32 ESP32 dev board. As the LEDs spin around, the pattern changes to display pretty much anything:

Image for post
Image for post

The whole project is open source and the source code and design files can be found here. In this post I’ll walk through the design and explain it in some detail.

Do a Google search for “persistence of vision globe” and you’ll come up with a bunch of similar projects on the Internet, including some impressive YouTube videos. I wanted to build something based on my favorite dev board (the AdaFruit HUZZAH32), and using primarily 3D printed and/or lasercut physical components (rather than, say, CNC milled aluminum). …

How I built a robotic Etch-a-Sketch that can be controlled from anywhere.

For the last year, I’ve been working on a side project at home which I call Escher. It’s a robotic Etch-a-Sketch that can be controlled over the Internet from anywhere in the world. It’s made possible by the Adafruit Feather HUZZAH32 development board, and Google Firebase to provide the control between the Etch-a-Sketch and a web client. Here it is in all its glory:

Image for post
Image for post

It also sports an easy web interface that lets you upload images to draw, or even draw with your finger directly on the virtual Etch-a-Sketch screen, which will then get drawn on the real Etch-a-Sketch. …

Joining a startup after years in Big Tech has been a breath of fresh air.

A little more than three months ago, I left a long-time position at Google (as head of the Chrome Mobile teams in Seattle and Kirkland) to join Xnor.ai, an early-stage startup developing AI for embedded devices. In an earlier post, I wrote about my reasons for jumping ship for a startup: the TL;DR was that I was ready for a big career change, and I was very excited about the technology and the team at Xnor.

Image for post
Image for post
A day in the life at Xnor. Pretty much the whole company fits in one room.

I have made an amazing discovery: working at a startup is not at all like working at a Big Tech company. …

Building a camera-based person counter using Xnor’s AI2GO platform

My new employer, Xnor.ai, develops deep learning AI models that run efficiently on low-power CPUs and microcontrollers, including the Cortex ARM processor on the Raspberry Pi. No GPU or TPU needed!

Image for post
Image for post
A Raspberry Pi 3B+ with a camera and Unicorn Hat HD display makes for a standalone person detector using Xnor’s embedded AI2GO library.

In this post, I’m going to walk though how to use Xnor’s AI2GO platform to build a Raspberry Pi-based person counter: an app that periodically counts people in images from the Pi camera, and displays counts and statistics on a beautiful LED matrix display. …

A few strategies from a long-time Google engineer and manager.

Image for post
Image for post
I watched a lot of Super Friends on Saturday mornings as a kid. Whether this has influenced my management philosophy is up to you to decide.

Over my eight-plus years at Google, leading a fairly large and successful team, I’ve developed a set of principles that are core to my own approach to management. Since I’m about to leave Google for a startup, I thought now would be a good time to capture and share these ideas more broadly. The following notes are a slightly modified version of a doc that I shared within Google a while back.

(For context, I was the founding member and engineering director for the Chrome Mobile teams in Seattle and Kirkland, spanning four sub-teams in Chrome, with an emphasis on making the web great for the next billion users. The team consists of around 40 engineers, in addition to a number of PMs, test engineers, UX designers, researchers, and others. …

A long-time Googler jumps out of the frying pan and into the fire.

After more than eight and a half years as an engineer and manager at Google, I’ve decided to tackle a new challenge by joining XNOR.ai, an early-stage startup developing AI for embedded devices. I’m equal parts excited and scared — it feels a bit like I’m playing the Bird Box Challenge with my career.

Image for post
Image for post
Although taking a new job usually does not involve protecting your children from unseen sky demons while rowing a boat blindfolded. I hope.

Ironically, it was also after about eight years at Harvard that I left my faculty position there to join Google. So the timing seems right to make another big career change.

A quick recap on the story so…

In which we support multiple firmware versions.

If you’re like me, you are incredibly lazy. This means not wanting to run around plugging cables into your Internet-connected Arduino devices when they should be able to pull new firmware over the air. For the cloud-controlled LED light display on my house, I have six Arduino boards on my front porch, and I’ll be damned if I’m going to go outside in the rain and plug my laptop into each of them whenever I want to push a firmware update.

Image for post
Image for post
This could be you … pushing new firmware to your Arduino devices.

This is Part 2 of a series of articles on how to use Google Firebase to support over-the-air firmware updates for an Internet-connected Arduino project. In Part 1 (which I highly recommend you read first), I provided a basic setup for storing Arduino binaries using Firebase Cloud Storage, and sample Arduino code to update the firmware over the Internet. …

We don’t need no stinking cables!

Image for post
Image for post
I mean, one cable is usually enough, but you get the idea.

In my last post, I talked about how you can use Google Firebase to control an Internet-connect Arduino project without running any servers at all — all of the data is hosted by Firebase. In this article, I’ll talk about how you can use Firebase to enable over-the-air updating of your Arduino firmware, allowing your devices to magically download new firmware and reflash themselves without plugging them into a laptop. This is a great party trick and is sure to impress all your friends. (Well, if your friends are anything like mine.)

Here’s the idea. Your Arduino code periodically calls home to Firebase over the Internet and asks it whether the firmware version it is currently running is the version it should be running. If it is, there’s nothing more to do (except re-poll sometime later). If not, it downloads a new firmware image, stores it to local flash, and once the download is complete (and verified) reboots into the new program.

I have seen the light, and it is Firebase.

Here at Team Sidney Enterprises, we wanted to develop a programmable light display for our house for the holidays — consisting of Arduino-controlled RGB LED strips that can be programmed to display arbitrary patterns (rainbows, sparkles, seizure-inducing strobes, you name it). Check out the final result:

Image for post
Image for post
Oooh! Sparkly!

I wanted to make it possible to control the light display not just from my phone, but ideally any web-capable device anywhere in the world. And I wanted to avoid writing a custom native app to control it — a web browser should be all that I need. …


Matt Welsh

Distinguished Engineer at OctoML.ai, building compilers for fast AI. Ex-Apple, ex-Xnor.ai, ex-Google engineering director. Systems hacker and drinker of beer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store