Embedded Systems and IoT

I have had an interest in building electronic devices since I began playing with electronics kits as a child (thanks, Dad!). As a result, despite my focus on software as an undergraduate at UC Berkeley, I still took what hardware classes I could. I have fond memories of a digital design course, where we were tasked with building a Tetris-like game using a Xilinx FPGA (pre-Verilog, just using schematics!) controlled by a Nintendo 64 controller. Someone had already reverse-engineered the basic line protocol for these controllers, but the protocol for the Rumble Pak, which makes the controller vibrate, was still a bit of a mystery (at least at the time). Professor Katz was offering extra credit for anyone who got it to work. My project partner Jeffrey Pang and I decided to give it a try. We hadn't thought much of it other than being a fun way to get some extra credit, but it turned out we were the only group in the class that managed to get it working!

Though I continued to toy with electronics design through the years, I finally undertook a serious effort to build a project from start to finish in 2017, during some time off between full-time jobs. I used a toy project as a way to teach myself about PCB design, machining, microprocessor firmware, and refreshing my basic electronics knowledge.

My 2017 toy electronics project

In 2020, I joined Swarm (now part of SpaceX), a startup building tiny satellites for affordable IoT connectivity. Though I did not work on hardware or firmware at Swarm, by the time I left, I had learned much from my colleagues and our customers about the IoT industry and how embedded systems are designed.

I have continued to use and refine this knowledge as a hobbyist, artist, and instructor. I helped to create an Arduino-driven player piano for a Burning Man art project and a lighting system for an art installation at Gray Area in San Francisco. I have also been teaching the week on advanced Arduino techniques at Gray Area’s Creative Code Immersive since spring 2020.