Contents

political action committee sticker

Project Archive

This is a living archive of projects that I have done, and it is intended to serve mostly as a repository for all of the images that I have saved in various places that I will undoubtedly lose at some point. Every image on this page is my own, and unless otherwise noted all PCBs are my own designs.

Diagnostic MRR - Github Page

A ~$20 instrument that will be capable of diagnosing malaria as shown in Micromagnetic resonance relaxometry for rapid label-free malaria diagnosis. First pass MRR PCB The probe-magnet assembly My version of the instrument uses a movable magnet assembly so that the larmor frequency of the sample can be tuned to 20MHz. This allows the clock signal to be generated by a cheap crystal. The first draft probe PCB The first iteration of the probe PCB was milled on a $200 CNC machine. High Q microcoil Output of the amplifier I'm currently delivering about 1W using an IRF510 based amplifier.

C-Band Interferometer for the DSES - Github Page

I built control electronics for a four-dish interferometer being constructed out at the DSES site in Haswell, Colorado. Part of this was creating two custom 14 bit absolute encoders to hit cost targets. Dish Controller Waterproofed Dish Controller DIY Magnetic Encoder IMU Based Encoder

Remote Monitoring Hardware for Well Pumps - Github Page

I built this for the San Francisco professional chapter of Engineers Without Borders (check them out: ewb-sft.org). The assembled well depth monitor mechanical CAD for the well monitor Well depth sensor mockup Well depth sensor PCB

Ground Penetrating SAR for Finding Lunar Lava Tubes

This is my writeup of the work I've done developing a ground penetrating synthetic aperture radar for the Husky Satellite Lab at UW.

Background

I joined the Husky Satellite Lab (HSL) in 2019, just in time to see the years of hard work the group had put into Huskysat-1 culminate in a successful deployment from the ISS. After operating the satellite for several months, we transferred control to Amsat and all of the older members of the club who had stuck around to see the project through moved on. After my first year, virtually all of the older members had left, leaving only a handful of us to choose a new project for the group. Professor Robert Winglee (who sadly passed away that winter) was our PI at the time, and he strongly encouraged us to develop technologies that targeted a lunar mission.

I proposed the Ground Penetrating Radar to the group after reading a few articles about lunar lava tubes. The first is The structural stability of lunar lava tubes by David M. Blair et al., which uses FEA to suggest that lava tubes on the moon could be kilometers wide and hundreds of meters tall - large enough to fit a small city. A second article ( Evidence of large empty lava tubes on the Moon using GRAIL gravity by Loic Chappaz et al.) found supporting evidence for these large subsurface voids in GRAIL gravimetric data. Finally, A multi-frequency radar sounder for lava tubes detection on the Moon: Design, performance assessment and simulations by Leonardo Carrer, Christopher Gerekos, and Lorenzo Bruzzone" presented simulations of a radar sounder instrument that would be able to detect most of the possible lava tube geometries described by Blair's paper. After speaking with both David Blair and Cristopher Gerekos (who designed the simulator used in the third paper), I thought it would be reasonable to try to build the instrument that they had described.

Originally, this project had no budget, and I paid for a lot of the equipment out of pocket. After I was able to demonstrate a working radar, we were granted $2000 by the Washington NASA Space Grant Consortium, which was presided over by Professor Winglee. These funds covered the hardware cost of both the GPR itself, as well as the DDS-AWG that we built to test it.

Instrument Principles

Several physical properties of the moon constrain the radar parameters. Lower center frequencies yield greater penetration depths, and larger bandwidths yield finer resolution. There is, however, a tradeoff between a lower center frequency and higher bandwidth, because as the fractional bandwidth of the chirp becomes very large, the whole system becomes harder to match/tune. Because it is not possible to deploy a large, wideband antenna from a small satellite, other orbital synthetic aperture radars (SAR) like the LRS, SHARAD, and ALSE use isotropic dipoles for their low frequency experiments; since we would have to do this as well, we were very concerned about how well we could match the antenna.

We also had to choose an architecture for the radar, with low cost and rapid development taking priority over long mission duration or even instrument performance - the goal was a technology demonstration and possible lave tube detection, not a detailed characterization or mapping of any lunar lava tubes. We chose to use a DDS-based architecture because a DDS gives us unmatched flexibility for our waveform, and because it allowed us to keep our analog frontend as small as possible (we only obtained access to a VNA halfway through the project). The GPR is based on the LRS - the DDS generates a windowed chirp that is transmitted, a T/R switch is flipped, and the echo is amplified and mixed with a second, identical chirp with a known time offset. This "de-chirp" method allows us to significantly reduce the required analog bandwidth and sample rate for the receiver, since we can trade vertical coverage (the range of our resulting radargrams in the nadir direction) for a lower beat frequency from the mixer. This way, we can use chirped signals with center frequencies above 100MHz, and sample the beat frequency at 100Mhz or less without approaching the Nyquist rate. It is worth noting that the pulse duration is also traded here - long pulses give lower beat frequencies, but since the radar is half-duplex, the pulses must be short enough that consecutive pulses do not overlap. A diagram of the GPR We choose to use the AD9910 from Analog Devices as the DDS core for the GPR. At $63, we couldn't beat it for price given the level of integration, and it has a number of very useful features that make it perfect for our application. First, it has an internal "ramp generator" which can be programmed to sweep amplitude, frequency or phase while the DDS operates. This gives us a very easy way to generate the variable length chirps with the desired start and stop frequencies. Additionally, the AD9910 has an internal RAM that can be read out in order to modulate frequency, phase, or amplitude. By programming the RAM with a Hann window and targeting amplitude, we can window the chirp while it is generated. Finally, because the Hann window is completely arbitrary, we can tweak the amplitudes to predistort the chirp, in order to account for the transfer function of the hardware on the DDS output.

Test Plan and the DDS-AWG

As we made progress toward specifying the radar parameters, specifically the chirp bandwidth (30MHz) and center frequency (80MHz), we realized that evaluating the instrument on Earth would be extremely difficult. The first challenge is that there are very few places in Washington or even on Earth that are as dry as the moon, with targets that look like lave tubes. Terrestrial lava tubes are too small to be detectable with our system, and there was always going to be the challenge of moving the instrument 50-100km away from the target to simulate the altitude of a lunar orbit. These challenges, of course, are not insurmountable, and we put together detailed plans for overcoming them: we could test with higher frequencies and bandwidths on Earth to resolve smaller features, use high altitude balloons to check our instrument at altitude, and run as many lab tests as possible to confirm that the radar was behaving as expected. The second problem is that the low center frequency and high bandwidth of the radar means that the chirp it generates spans an enormous chunk of the VHF spectrum. Professor Winglee was very against obtaining an experimental license from the FCC, and although he allowed us to try, the presence of a few military frequency allocations in the band we were interested in stalled the process almost immediately.

In liu of real-world testing at the system level, I proposed that, in addition to the real-world tests we had already described, we could use the radar simulator that Chris Gerekos had built for his lava tube paper to simulate reflections from the moon. This simulator starts with a chirped waveform, and computes the echo by summing the reflected signals from millions of triangles imported from a user supplied DEM of the lunar surface. We could generate a chirp with our instrument and record it with a DSO, and then feed this signal into the simulator. We'd allow the simulator to calculate the reflected chirp, and then we would synthesize it, attenuate it, and feed it back into the radar after the appropriate delay. Then, we could take the output from the radar and perform SAR processing on a collection of these rangelines to recover the radargram, which we would compare to the simulated radargrams in Gerekos' paper.

This idea garnered the support of Professor Winglee and the rest of the satellite lab, but it required us to obtain or design/build a DDS capable of simulating the rangelines returned by Gerekos' simulator. I spoke to an engineer at Siglent, and their highest performance AWG could only generate some of the waveforms we are interested in. We would not be able to afford the kind of instrument that we needed, so I started working on a design built around the DAC5687 from Texas Instruments. This chip can use an onboard NCO to upconvert input data at a lower sample rate to a full 500MSps. The rest of the AWG consists only of a CPLD which allows a user to program a high speed SRAM with waveform data, and a USB-Serial converter from Microchip. The design files and HDL for this DDS are open source and available on Github.

Bringup

After Professor Winglee passed away, I laid out hardware for the radar and we purchased the boards and components. This is what it looked like after 8 hours of assembly: The assembled radar PCB This PCB is designed for development only, so it would not fit in a cubesat form factor and it makes extensive use of jumper cables.

Progress stalled after I graduated and turned the hardware over to my peers at the Husky Satellite Lab - as I understand it, the lab was restructured and nobody was available to pick it up. In August 2021, I reached out and asked if I could have the hardware sent to me so that I could keep working on it, and I mounted the radar, the DDS, and an STM32 eval board to a sheet of prepreg I had laying around. I wrote a driver for the AD9910 (open source, on Github) that allows the instrument to generate Hann windowed chirps that match the expected waveform: A DSO capture of a Hann Windowed Chirp The radar setup with a chirp in the background

Radar Simulator Testing

The first test of the system involves measuring the length of a spool of coaxial cable from Home Depot. Because we cannot legally transit at the frequencies that the radar is designed to use, an end-to-end test is only possible if the signal is confined to a cable. I connect the output which would normally feed the PA to one length of coaxial cable, and I connect the other end of the cable to the antenna connector. The transmit/receive switch is set to receive, and a switch on the PCB feeds the output of the DDS into a power divider. This way, half the signal goes through the coaxial cable, and the other half goes directly into the mixer. The radar generates a chirp from 65 to 95MHz that lasts for 1 millisecond. The raw output of the mixer is shown below, along with the theoretical result: A graph of the theoretical and experimental dechirped signals The Hann windows are not perfectly congruent - this is something we are investigating. It is likely that this is an error in the programmed Hann window, but it can be fixed with predistortion in an case. The measured tie delay can be calculated by taking an FFT, and dividing by the frequency rate of change. The distance is then just the time delay times the speed of light, taking the velocity factor of the coaxial cable (0.83 for cheap RG6) into account: Radar results, showing agreement between theoretical and calculated results Radar results, zoomed in I've zoomed in on the second image to make the length of the coax more obvious. The system's measured length is within 5m (the range resolution) of the true 152m (500ft) length of the coaxial cable. In these images, the real system seems to outperform the theoretical calculations, which was bizarre to me. After checking for errors, I realized that this was due to the filtering that the real signal had. After digitally filtering the theoretical IF, it outperforms the real system: Radar IF, with filtered theoretical data Radar results, with filtered theoretical data

Polkadot Mesh Network

I did this project for the embedded systems capstone at UW. I had been toying with the idea of building a LoRa mesh network for radio stations, and I took the opportunity to build the hardware I was picturing and to learn a lot about mesh networking by implementing AODV in embedded C. In our group, I was responsible for the hardware and the mesh networking firmware, while my group members built a Raspberry Pi based server that allowed a user to interact with the mesh in real time. All of the hardware and the software that I've created is free to share and use, and it can be found on Github. The ten polkadot boards The back of the polkadot boards The polkadot board, front side with shield The ten polkadot board in its case The last photo shows a polkadot board in a 3D printed case with a solar panel. I designed the case to bolt to a metal post from the hardware store (the ones used to hold trees upright).

Airplane Datalogger

One of my friends was interested in building and flying remote control aircraft, so I made a device that "hides" between the receiver and the servo motor connectors. The device saves the PWM duty cycle of each of the six receiver channels to an SD card, so that the position of each of the control surfaces could be logged over the course of a flight. Additionally, the datalogger was equipped with a triaxial magnetometer and a six axis IMU. A picture of the datalogger A picture of the datalogger A picture of the datalogger As of this writing, I am still waiting for them to conduct a successful flight, but I have faith that they will pull it off, and I'll post any data we get here.

Small Radiosonde

After meeting someone who was studying meteorology, I was fascinated by how dependent weather prediction is on the tiny number of radiosondes launched by the NWS and other services around the world twice each day. I wanted to try building a much smaller version, so I did: A picture of the radiosonde\ A picture of the radiosonde next to an RS92 The lower photo shows one of the radiosonde PCBs next to a Vaisala RS92 for comparison. This radiosonde is tracked using multilateration, and can measure pressure, temperature, and humidity with accuracy comparable to a Vaisala radiosonde. It uses a little transceiver IC to communicate at 433 or 407MHz, and it uses a custom Brokaw bandgap reference temperature sensor to give high accuracy temperature readings from -100 to 50 degrees centigrade, at a very low cost. I tried to reach someone at the NWS to talk about it, but our meeting fell through and in the meantime I convinced myself that this type of radiosonde wasn't the solution - the balloon still has to carry itself, so a large balloon is still required even for a tiny radiosonde. Additionally, this radiosonde is not that much cheaper than a Vaisala radiosonde. If I ever get the chance, I really want to integrate all of the circuitry onto a single IC, which I think would allow the NWS to launch thousands of them per day at only a few cents per launch.

500 Msps DDS-AWG for Radar Simulation

This project grew out of a need to test a design for an orbital ground penetrating radar sounder for detecting lava tubes that I designed for the Husky Satellite Lab at the University of Washington. We are not licensed to transmit on the frequencies used by the radar sounder, and there are no terrestrial targets with predicted radar signatures similar to those of lava tubes on the moon. I proposed that we build a system to synthesize radar returns generated by Chris Gerekos' Coherent Multilayer simulator, and this is what I built after that proposal was funded. the DDS PCB The DDS uses an Altera Max V CPLD to load an SRAM with data extracted from Gerekos' simulator. When the system receives a trigger signal, the CPLD reads out the data in the SRAM at 100Msps into a TI DAC5687 which does all the hard work of numerically upconverting and synthesizing the signal. The result is a complex 500Msps output with 100MHz of bandwidth which can be used as a test input for our radar setup. All of the IP that I created for this project is open source, and it can be found at the UW Cubesat Github Repository. The beginning of a sine wave pulse created by the DDS The beginning of a square wave pulse created by the DDS An example output from the DDS, synthesizing first a square wave and then a sine wave at baseband.

Radar Demo

This was part of my radar proposal to the NASA Washington Space Grant Consortium (which was funded!). I used an AD9910 demo board with a custom driver to synthesize chirps that could be transmitted or fed into a coax delay line. The received signal would be de-chirped, filtered and digitized by the sound card in my laptop. The radar receiver The radar response of a building on campus The image above shows the radar response to a building on campus at the predicted distance.

Alternative Dev Board

The illuminated dev board Finer detail on the dev board The digital design classes at the University of Washington use the DE1-SoC development kit from Terasic for all of the lab assignments. Unfortunately, the cost of this board means that we cannot keep the hardware after finishing the course, so I designed this very low cost alternative instead. I use the MAX V CPLD, which is fully compatible with the toolchain that we use in the courses, and all of my labs were able to synthesize and run on the custom hardware. Sadly, the department administrators explained that by reusing the kits, they only spent $5 per student per quarter, so my $14.70 alternative was too expensive. However, I still use the prototype that I built for testing other CPLD projects!

VU Meter/Spectrum Analyzer

An old friend of mine is a musician, so I made them an STM32 based VU Meter that would change colors depending on the frequencies of the received sound. After sketching out an implementation that used a lot of VCVS stages, I decided to use a digital implementation instead. A simple microphone amplifier circuit feeds the raw sound signal to the ADC of an STM32F4, which DMAs a few milliseconds worth of samples into a buffer and then uses the ARM CMSIS DSP library to take an FFT. The brightness of the RGB leds around the PCB is set in real time by the coefficients from the FFT. The Vu meter connected to the programmer The VU meter while sound is playing The VU Meter is powered by a Li-Ion coin cell mounted on the back, which is recharged using the USB-C port on the bottom. The wires in the photo are for the ST-Link Programmer.

PHAT-2

The Platform for High Altitude Technology 2 (PHAT-2) was a balloon mission developed by the Husky Satellite Lab, and it was the first project that I was assigned after joining the club. Unfortunately, a number of factors meant that the structure and software aspects of the balloon were never finished, but I was able to build and test all of the electronics. The photos below show the cutdown detector, a langmuir probe controller, the power distribution board, and the ADCS/IMU board. The custom cutdown detector The langmuir probe controller The cutdown PCB, PDB, and ADCS boards for phat2 The PHAT-2 charger PCB The PHAT-2 igniter PCB The coolest part of the driver electronics is the Pulsed Plasma Thruster (PPT) charger and igniter. The Advanced Propulsion Laboratory at the University of Washington had a design for the charger and igniter circuits that required a 4 layer PCB, it required two separate high voltage flyback converters and it would produce huge surges when it fired. These surges killed the control electronics for PHAT-1, so I redesigned the charger to provide complete galvanic isolation between the PPT and the electrical subsystem during firing. I was also able to eliminate one of the flyback converters and use a 2 layer PCB. It could charge a 100uF bank of capacitors to 800V in a few hundred milliseconds, and generate 26kV arcs for ignition. A spark from the igniter circuitry For this project, I also build a langmuir probe controller and frontend, a power distribution board, and a very simple system for detecting when the flight was terminated by a nichrome wire cutdown using a single limit switch.

Buried Ice Detection with CPR

The goal of this work was to develop a system that would allow future lunar landers to identify buried ice deposits with landing radar. I designed, simulated, and built cpol antennas for the 915 MHz ISM band and then used 400lbs of Concrete and a lot of ice to test the ability of the system to identify buried ice. Unfortunately, the sub wavelength roughness of the aggregate in the concrete caused really high CPR and all kinds of false positives (I can detect ice when it's not buried). At least I learned a lot about concrete. A system for CPR measurements with the LimeSDR Simulated RHCP Emission patter for the spiral antennas SWR measurements for the antenna SWR Measurements for the antennas, showing a good match at 915MHz despite being electrically small A buried ice target in the test setup The test targets for cpr detection I also built a system for automating the CPR measurements using an RF switch controlled by the FPGA GPIO pins on the LimeSDR. The baluns and the RF switch PCB are mine. Here are the (very inconclusive) results: Results of CPR testing Either the system was nonfunctional (although I did test every component and they performed as expected in isolation) or the setup was flawed. Concrete is a poor lunar simulant and I was using a very small box with unrealistically small targets in a very noisy environment.

Sous Vide Controller

I wanted to see how small I could make a controller for a sous vide. This PCB packs a capacitive power supply (eek!), an ATMega based PID controller and a giant solid state relay, all of which fits in a 2.5 by 1.25 by 0.5 inch box fit along the cord. Sous Vide Controller Sous Vide Controller, powered on

Outlet Energy Monitor

This completely analog PCB attaches to the back of a standard outlet and adjusts the color of an LED mounted in the switch plate so that you can see how much power the outlet is consuming in real time. I made the PCB myself with the CNC mills at the University of Washington, and I was in contact with a Chinese manufacturer of outlets for a while about it until they realized that I was not a real engineer and stopped responding. Outlet Power Monitor Outlet Power Monitor

Breadboard Power Supply

A lot of the introductory EE courses at the University of Washington require the use of two 9V batteries to power analog circuitry on a breadboard for labs, and the wires would always fall out of the breadboards. To pass the time during my first week back before courses started in my sophomore year, I designed a USB powered breadboard PSU that provides quiet dual supplies that can be adjusted from +-2V to +-15V and gave one to everyone on the electronics team in the Husky Satellite Lab: Outlet Power Monitor

Epaper Clock

Practice with low power modes on the STM32. I made a little clock that told the time in Chinese on an Epaper display. It is powered with a single CR2032 and I'm very proud of the PCB. A closeup of the Epaper Clock The clock connected to the display The finished clock, with the PCB covered by the display

LED Matrix

Lessons learned in high speed PCB layout. To burn some time with a friend, I built a 16 by 160 LED dot matrix from scratch with 2560 LEDs from LCSC (only $30!). This system is driven by a Raspberry Pi running some very lazy code which seems to run fine. The characters are read out of a file listing Shanghai metro stops, rendered in GNU Unifont, converted to numpy arrays and then shifted into the matrix. A rendering of each of the panels Sadly, I do not have any photos of the panels after they were assembled. There were 16 panels and one controller PCB that attached to one end and contained a power supply and the mosfets for controlling the anodes.

UV Mask Sterilizer

At the beginning of the pandemic, my father (who is a doctor) and his colleagues were placing used medical masks in paper bags and leaving them in a dry room for two days before reusing them. After the University of Nebraska published a study suggesting that UV light could be used to sterilize N95 Masks without damaging them, my father asked me if I could replicate the system quickly. The resulting device was constructed from a duct from Home Depot and two UVC fluorescent lamps from McMaster-Carr, and it would deliver the required dose to the mask in 7 seconds. The device is currently at my father's office, and I will add images if I can retrieve it after the pandemic.

Sprinkler Timer

My grandparents needed a system to water their planter boxes when they were away from their apartment, but without a hose on their balcony, they would need to use a bucket instead. I built a system that could turn on an aquarium pump for a user-specified amount of time once every 24 hours (my first HDL project!) and etched a PCB for it. The PCB is potted in 5 minute epoxy for waterproofing, and it used a Xilinx Coolrunner II CPLD. The sprinkler controller

LED Cube

My roommate wanted to make an LED cube for his girlfriend, so I built him a driver for it that he could connect directly to a raspberry pi. We went as far as building the cube, but after the pandemic started he wasn't able to give it to her. The LED Cube Controller

DAMIC Heater and Ramp Generator

In my first year at the University of Washington, I was an undergraduate research assistant for the DAMIC collaboration. There, I designed and built a 100 Watt linear (yes, linear) heater controller for keeping the dark matter detectors at the right temperature during testing. The system was incredibly sensitive to noise, so no switching components could be used. The DAMIC linear heater controller The DAMIC linear heater controller outside of the DAMIC vacuum chamber Later, I build a ramp generator which would allow a user to program the slew rate of the bias lines that powered the detector. The ramp generator had to consume absolutely no current when it was on or off, and the bias voltage had to be able to change between 40 and 200V.

Lamps

I can control my desk lamp with my phone. I also made a high power grow light using some industrial horticultural LEDs that turns on when the sun is out and turn off when the lights turn off. I also fixed all of the three way switches in my house. The grow lamp shining on a succulent

Crazyflie Deployment System

A tiny deployment mechanism for the Crazyflie drone. It worked very well until I added the deployables XD. Crazyflie deployment mechanism

Liquid Cooling for the Raspberry Pi

An excuse to put a raspberry pi in a box of mineral oil. The Raspberry Pi is overclocked and a close friend wrote a program to plot the CPU temperature over time. The liquid cooling actually worked! A raspberry pi submerged in mineral oil

Random/Miscellaneous

A lof of my projects weren't well documented enough to get their own section (and a lot of them are too ridiculous or useless to deserve one). I've put the rest of the photos that I have here. A diy Newtonian Reflector My DIY Newtonian reflector I gave a presentation about hacking the GPIO functionality of an RTL-SDR Dongle at the Society of Amateur Radio Astronomers (SARA) Conference 2019. The contacts used for a DIY touchscreen enabled wall I did some work on making a wall scale capacitive touchscreen at the Makerspace where I worked, before my boss cancelled the project. Paste Extruder in Action Disassembled paste extruder I made a paste extruder for a 3D printer at the makerspace where I worked. The upper photo shows it printing with royal icing. The entire mechanism is my design, I 3d printed most of the parts and laser cut the gears out of acrylic. My antenna tower I built an antenna tower and mounted it on my roof. In this photo, it has a 134MHz V dipole for receiving APT from NOAA weather satellites. I used the DE1-SoC for one of my digital design courses to build the glue logic and memories for a Z80 microprocessor. Evaluation board for DAC5687 I used this DIY breakout board for the DAC5687 for developing the DDS. A view of the temperature controller system A view of the peltier module and heatsink for the TC system A graph of temperature over time for the temp controller I was interested in making aluminum PCBs, so I designed one that fits on a heatsink and supports a single temperature sensor IC. When the device is sitting on my desk, I can see my air conditioning turning on and off, but when I set up a PID loop on an arduino with the peltier module, the PCB temperature is held relatively constant. My solar power system A custom latching relay driver on a breadboard I've designed solar power systems a few times, but none of the had even been built and I wanted to develop some intuition for how this stuff goes together. I bought the cheapest parts I could find, and I took the opportunity to have some fun building a completely analog latching relay driver for the UVLO on the load. A DIY emc probe I built an EMC probe using soe RG316 coax and a ferrite bead, using the EEVblog video as a guide. I printed an enclosure for mine.