Implementing a Bluetooth Speaker Using the ESP32

I have made several nixie clocks built around the ESP32. They incorporate a speaker, and I thought it would be nice if I could also stream music to them. The ESP32 has built-in Bluetooth support, so I figured I should try and use that first – essentially turn the clocks into a Bluetooth speaker.

I set about looking for examples and rapidly discovered that this was a little-used feature. Almost all the coding examples on the internet focus on Bluetooth BLE. I needed to use Bluetooth A2DP. Furthermore, I needed to implement an A2DP sink – that is something that audio data is sent to rather than from.

All of the code I could find was very low level and hard to understand – it would have been hard to incorporate it into an existing code base. It was all written in C, had zero encapsulation and seemed to be littered with code that was unnecessary for what I was trying to achieve.

To cut a long story short I wrapped it all in to some C++ classes. There are four main classes:

  • Audio
  • DataSink
  • EventSink
  • Out

Audio

This class just initializes the bluetooth protocol stack.

DataSink

This class listens for audio data and writes it to a ring buffer.

EventSink

This class listens for A2DP lifecycle events such as connected, suspended, configure etc. and publishes the events to any objects that subscribed to them.

Out

This class reads the audio data from the ring buffer and streams it out to an external DAC connected to the I2S ports.

The code is here. It can be used with or without the ESP32 Arduino framework. There is an example that uses the Arduino framework in the repo.

In the end I’m not using it with my clocks. All the code together blows the heap allocation and requires me to use a different memory layout. I might look in to sorting that out later.

Nixie Clock With Vacuum-tube Power Supply – Part 5

This is the fifth post about a nixie clock project that is powered by a vacuum tube power supply, rather than the more common 12V or 5V wall wart.

After part 3, I took a brief detour to talk about the controller hardware, and I had left off talking about the lack of a 5V supply. I had originally hoped to power everything from the mains transformer, but my choice of vacuum tubes made that impossible, because they pulled the 5V and 6V3 supplies up to a high potential, and my circuitry needs to share a 0V rail with the HV supply.

The other aspect of all of this, that I hadn’t managed to resolve, was that I wanted to be able to turn off the HV from the control circuitry. I had mulled over just severing the input the rectifiers (because I wanted to keep the 6V3 winding alive for the 5V DC rail), but now that I couldn’t use that anyway, the problem was solved. I would just use a separate 5V supply and use a SSR (Solid State Relay) to control the mains input to the transformer. I went with a fully enclosed chassis mount 5V supply from CUI.

CUI PSK-S6C-5-T

One final thing I added was a varistor across the input to protect against voltage spikes. One thing I wish I had added, but didn’t, was an inrush current suppressor.

So anyway, this is the final final circuit:

Final Final Power Supply

You’ll notice that this circuit includes a voltmeter and an ammeter. I had originally intended to add a voltage/current display using CD13 nixie tubes, which are very small, but I decided this was a step too far. In the end I went for a couple of analog meters because I could put them in the high side, unlike digital meters. I felt that they also matched the aesthetics better than digital meters would. They aren’t just for show. I wanted a simple way of monitoring the voltage and current over time so it would be more obvious if things were starting to drift.

Voltage and Current Meters

You might notice that the voltmeter is for AC (the ~ symbol under the V). I took one of these apart to see what was inside, and it is just a diode to rectify the voltage, so it would be fine with DC too, but I would have to add a resistor in series to re-calibrate it for DC.

These were the smallest, old-style meters I could find, and they included the internal illumination. I drove the bulbs off the 6V3 circuit, so they are a little dim, but that is OK by me.

Nixie Clock With Vacuum-tube Power Supply – Part 4

This is the fourth post about a nixie clock project that is powered by a vacuum tube power supply, rather than the more common 12V or 5V wall wart. The previous part can be found here. I’m going to take a break from talking about the power supply and veer off into talking about the controller hardware.

One of the features I had wanted to add to a nixie clock for some time was to simulate the ticking noise of a mechanical clock. To that end, I had previously bought an ESP32 Pico dev kit (because it support I2S), but then done nothing with it. It was time to resurrect that idea. By the way, the reason for choosing the Pico was that the chip itself requires the minimum of additional hardware to build my own PCB using the chip.

Now that I was seriously developing for the ESP32, I actually delved deeper into the software platform and discovered that it is running RTOS. This is a real time operating system with support for multiple prioritized tasks. In fact, the ESP32 arduino platform uses a single RTOS task to implement the loop() callback. My code for the ESP8266 basically split the work in the loop() method into multiple tasks, so I figured I could drop all the scaffolding I had written to do that, and just use one RTOS task on the ESP32 for each task that I wanted the ESP32 to complete (the clue is in the name!), rather than stuffing a bunch of calls into the loop() method.

The first thing I wanted to play with was playing sounds – that was the whole point of considering the ESP32 for the core processing. I started by looking around for libraries that I could use to play sounds and settled on ESP8266Audio which, despite the name, has good support for the ESP32. For it to be useful, I also needed to buy a SD Card reader module and an I2S amplifier module, both of which are available from Adafruit.

One advantage of the ESP8266Audio library is that it uses DMA to feed the data to the I2S pins of the ESP32. So theoretically, user code just has to keep the DMA buffer full, and then the data is pushed out of the pins via interrupts. It seemed like this would be the right thing to do as I was going to be loading up the processing to handle more and more tasks. I initially had trouble with the sound glitching. It was difficult to tell if this was because of the software or the breadboarding I was doing. As I added more tasks the glitching got worse. In the end it was easily fixed by increasing the DMA buffer count from 8 to 64!

The next task I wanted to add was driving neopixels. I had tried this before on the ESP32 with little success. It tended to be very glitchy. Looking around I discovered another library called NeoPixelBus which, like ESP8266Audio, could use DMA to feed data to the NeoPixels. Fortunately there are two DMA channels on the ESP32 and also fortunately, I could tell the libraries which one I wanted them to use. However, the neopixels would still occasionally glitch. At this point I wasn’t sure if this was because of my breadboarding or the software, so I chose to ignore it. It turns out that there is a bug in the ESP32 DMA firmware. NeoPixelBus changed their default support to use the IR remote support, but I still found that it glitched occasionally. Finally, when I upgraded the Arduino platform to v1.0.4, the glitching stopped.

Next I needed to drive the Nixie tubes. I implement fading and cross fading all in software, so I need better timer resolution than can be provided by the task manager. So I implemented this in an interrupt routine. I had already done this for the ESP8266, so I was familiar with the need to decorate all interrupt methods so that they would reside in IRAM. However it turns out that that wasn’t enough.

Firstly, my interrupt code is in C++ and uses virtual functions. It turns out that for the ESP32, the compiler is putting the v-tables in flash, so I had to resort to copy/paste and get rid of all of the virtual functions. BTW, the version of the ESP8266 platform I was using was storing the v-tables on the heap. Later versions allow you to specify where the v-tables are stored. It would be nice if the ESP32 platform did the same.

It still crashed, and I eventually discovered that g++ was generating function calls to do long division. That function is not in IRAM. The millis() function (which is in IRAM) uses long division. I guess no one had ever called it from an interrupt routine before? Thankfully the developers changed the default compiler flags to inline the code instead. So all was good.

Next I wanted to use a WiFi manager library to handle setting up the connection to a router. Thankfully, the one I prefer to use – ASyncWiFiManager was also the only one that had been ported to the ESP32. However, my iPhone simply would not connect to the access point – my laptop had no problem. Turns out that there was a bug in the ESP32 core which was fixed just after I discovered the issue. An aside: this is interesting, I am pretty sure the ESP8266 core has a similar problem, as connecting to the AP from an iPhone is patchy on the ESP8266.

So then I was implementing my Web GUI, which uses the SPIFFS library to store the assets. That’s when I discovered that the SPIFFs library on ESP32 was broken. So I fixed that and the fix was incorporated into the Arduino core.

So finally, everything that I needed (software wise) worked great and has, in fact, been extremely stable.

Electronics Workbench Tools

While I was developing hardware for Nixie clocks/fixing radios etc., I had a hard time finding some specific tools, so this is to save you the angst. I’m not going to cover the basics like oscilloscopes, isolated power supplies, variacs, heat guns and soldering irons. Most forums will recommend stuff. One thing: if you get an oscilloscope, don’t buy a new one of those small portable chinese jobs – get a good used one like an old Tektronix.

Missing from this list (because I haven’t bought them yet) is a signal generator (a FY6800) and a network analyzer (a NanoVNA).

Electronic Load

First up is an electronic load for testing HV power supplies. Most affordable electronic loads are built to test battery chargers, so although they will go to a high current, they can’t handle the voltages. You need a 3710A – pick one up on eBay.

Bench Power Supply

Again, affordable units can’t provide the kind of voltages needed by Nixie tubes, let alone Dekatrons. Get a HSI PS500XT. Fare warning, this is a lot of power – use at your own risk! This will power every Nixie tube you own at the same time. Or one of these IN-28 displays (that’s 250V, 237mA):

You will need a regular bench power supply too – one with a bit more finesse!

LRC Tester

So you’ve got a bunch of discretes lying around – resistors, capacitors, inductors, transformers, transistors etc. etc. What do you test them with? Get a MK-328. A truly remarkable device at a ridiculously low price.

Nixie Clock With Vacuum-tube Power Supply – Part 3

So I had a functioning prototype (see the end of Part 2), but at about this time I bought an old oscilloscope:

Old Oscilloscope

So I started looking around for oscilloscope clock kits and eventually I hit this site (which is an overall fascinating site). That site had a page that introduced me to voltage regulator (VR) tubes. He was using two tubes called 150C2 (aka 0A2) to provide +150V and +300V.  Now the great thing about VR tubes (for me) is that they are also cold-cathode tubes – i.e. they contain some mixture of noble gasses, and they glow. It looked like I could easily produce a regulated power supply using these tubes, but of course there was a catch – or several in fact:

  1. These are like nixies or any other neon tube – they need to be current-limited. The 0A2 will take a maximum current of 30mA. The way that Grahame was using them was to tap off the required voltage after the current-limiting resistor. So that resistor had to be sized to allow the minimum required current for the VR tube (5mA in the case of the 0A2) + the maximum current for the nixie tubes. I was planning on drawing around 50mA, so I would need a resistor that limited the current to 55mA. However when all the nixie tubes are off, that would mean the 55mA would be flowing through the VR tube, which exceeds its maximum by 25mA. I suppose I could have used several in parallel, perhaps even one VR tube for each nixie tube! However there is the second issue:
  2. The regulated voltage that they establish is, at the most, 150V (different VR models have different maintenance voltages). Again, I could use two in series, but now we are getting a little ridiculous.

It was time to do some more research. The solution is to use the VR tube to produce a reference voltage and then construct a feedback loop that measures the difference between this voltage and the desired output voltage and adjusts the output to stay at the desired level. At a high level, it looks like this:

Regulator block diagram

Together, the system tries to keep Vc equal to Vr, and therefore Vout constant, no matter what happens to Vin. Though there are limits to how much variation it can handle. In this system

Vc=VoutR2R1+R2

And since Vc = Vr

Vout=VrR1+R2R2

We have the reference voltage – it is a VR tube. What about the other three? The comparator and error amplifier are one device – in this case a triode. The controller (usually called the series pass tube, or just the pass tube, in this toplogy) could also be a triode. This diagram, from a 1947 issue of Radio magazine, illustrates the components nicely, leaving out various supporting resistors and capacitors:

High-level regulated power supply design

However, I will use a pentode for the pass tube, because I’m going to use a single tube that contains both a triode and a pentode – the ECL85 (aka 6GV8). The VR tube will be a 0C3, because it is a 108V VR tube and it looks nice!

As it turns out, the ECL85 also has a 6V3 heater, but it needs it to be at a potential that is within 100V of either cathode. That means I can’t use the same 6V3 transformer winding for both the ECL85 and the rectifier tube. In addition, there is significant voltage drop across the pentode and the whole thing will need more current to drive it, so it was time to look for both a new transformer and a new rectifier tube. I ended up going with the 5W4G, which still has a reasonable forward voltage drop and can handle the additional voltage and current. In addition it has a 5V heater which works well in this setup, because transformers that have one 5V and one 6V3 winding are more common than transformers that have two 6V3 windings. For the transformer, I settled on another Hammond, the 270EX.

The 5W4G has a directly heated cathode, unlike the 6CA4, which means that it is at the same potential as the cathode. So now I have a problem. Both the 5V and the 6V3 windings are at different potentials than the main secondary winding, which means I can’t use either of them for my 5V supply, at least directly, as my 5V supply needs to share a 0V rail with the main secondary. I’ll come back to this later – I want to talk about the control circuitry first. I’ll finish this post with the final circuit diagram of the power supply:

Final Regulated Tube Power Supply

Nixie Clock With Vacuum-tube Power Supply – Part 2

In Part 1 I covered the genesis of this project and my first stab at a vacuum tube power supply.

One of the things I wanted to do was provide all of the power for the clock from the transformer. My regular clock circuit only needs 5V, so I figured I could get this from the 6V3 filament winding using a bridge rectifier and a 5V voltage regulator. This is only really possible because the 6CA4 rectifier tube uses an indirectly heated cathode. That is to say, the heater is not connected to the output pins, so it can be at any potential with respect to the output voltage. In particular, it means we can tie one side of the heater to the common ‘ground’ or 0V rail. The HV ‘ground’ is the center tap of the secondary:

Circuit, showing heater

Some of you may have figured that that is cutting it a bit too fine. A bridge rectifier using regular diodes could drop around 1.4V to 2V depending on the current draw. The voltage regulator would drop another 2V, so it needs a steady 7V in. So if the smoothing were perfectly efficient, we would go from 8.9V (6.3*1.414) to possibly less than 7V. Simulation with LTSpice shows this is optimistic.

Another alternative would be to use Schottky diodes for the bridge, and simulation show this would probably work. However, I decided to use a simple voltage multiplier on the 6V3 AC which gives me better smoothing for fewer components. So the whole circuit now looks like this:

Circuit with 5V section

You’ll note that this diagram is slightly different. I have cut the direct connection between pin 4 of T1 and the 0V rail of the HV section. Instead I have explicitly shown each section (the voltage doubler, HV and 5V sections) with a separate connection to ground. This is because, as it is, I am only using one half of the voltage doubler. This is just one diode drop, rather than two (as with the a full-wave bridge), so the voltage is enough for the 7805 regulator. If I wanted to use the full doubled voltage, I could just move the voltage-doubler ground to the point labelled A instead.

This is all very well, but it turns out to have a couple of draw-backs, as will become apparent later.

Current Limiter

The HV power supply is unregulated – which is to say, as you draw more current, the voltage starts to sag. This is because the forward voltage drop of a rectifier tube increases as the current increases. To get around this I decided I would use a small constant-current circuit to drive my Nixie tubes, in place of the usual current-limiting resistor. This basically works by connecting the source of a PMOS transistor to HV via a resistor (Rset) and then biasing the gate a fixed voltage below HV (Vgs) like so:

This is the equation for the resistor, given the desired current (Id):

Rset=VgsVgs(on)Id

Where Vgs(on) is the voltage drop between the source and the gate, which you can get from the transfer characteristics chart of the data sheet. A rough estimate would the typical gate threshold voltage.

Of course, the trick is to keep Vgs constant, even though HV is varying. To this end, I used a small isolated DC-DC converter to boost 5V to 12V and then attach it to the circuit as shown above. The gate takes virtually no current, so the boost converter can be very small. Using a voltage divider let’s us get to 10V and using a small potentiometer in one leg of the voltage divider allows us to adjust the voltage to get precisely the current we want.

Following some advice I received on the Neonixie google group, the actual circuit is a little more complicated, to provide some protection to the MOSFET. I designed some boards to act as sockets for the nixie tubes that included all this circuitry:

At this point I had decided I would ultimately want to use all of this to build a clock that would feature the large NL7037 tubes I had been collecting. I had been meaning to build a clock with an industrial feel to it to match the look of these tubes, and I felt that this would be the one. Finally here is a shot of a test I made using one of the tubes and adapters:

Nixie Clock With Vacuum-tube Power Supply – Part 1

About 7 months ago, I watched a video by glasslinger about adding a nixie tube display to a vintage radio. This was something I had wanted to do for a while, but I didn’t know how to read the tuned frequency from the radio. There were many interesting parts to the video (I recommend you watch it), but one of the things I learned was that vacuum tube radios that had tranformers, actually generated voltages with those transformers that were high enough to drive Nixies.

I spent a little while trying to find a radio with an input transformer like that, and in the meantime, I started researching vacuum tube power-supply design. That was when I finally realized that these things were still being made for guitar (and HiFi, but especially guitar) amplifiers. So you could actually buy new transformers and new vacuum tubes and new chokes that you could use in a new power supply. That is when I got really serious about this.

At this point, two sites influenced my initial design. The first was ‘Fun With Tubes’, which had several simple designs. The second was ‘DIY Audio Projects’. which went in to much greater depth about tube selection and circuit calculations. In particular, the latter had a nice chart showing the voltage drop that different vacuum rectifier tubes had. Some of them were quite startling – for example the 5Y3, used by the first site, had a voltage drop of almost 45 volts for a plate current of 100mA, compared with only 15V for the 6CA4. What’s more, the 6CA4 is still in production.

The DIY Audio projects site showed a long series of manual calculations to determine properties of that simple un-regulated power supply. I entered these in a spreadsheet to make life easier, however, I later found a little application called psud2 (power supply designer 2) that did the same thing using a simulator and a few values from the data sheets. The important thing being that the maximum 6CA4 plate current (which is on a cold start) does not exceed the maximum allowed plate current on the data sheet.

Taking a hint from the DIY Audio Projects page, I decided to go with a one-stage choke filter to smooth the output of the rectifier tube. Confusingly (for me) everyone refers to this as the ‘input filter’. I guess because it is the input to whatever comes after this stage – usually an amplifier. So this is what I ended up with (from dsud2):

Unregulated vacuum tube power supply

Obviously(?) this is just the output stage. On the input side is 125V 60Hz, a 1A slow blow fuse in the hot line and a neon indicator across hot and neutral, so I could tell when it was on.

Something I omitted was a resistor to drain the capacitors when power was removed. Those capacitors can hold a charge for a long time. I soon added one. Experience is wonderful thing.

Here is a chart from psud2 showing the expected output:

Power supply simulation

The next stage was to select some actual components and bread-board it. I ended up going with a 269BX transformer from Hammond, a 156R choke (also from Hammond) and a new 6CA4 from JJ Electronics. All the rest are just suitably spec’d parts from DigiKey and a bunch of terminal strips, screws, fuses, switches, fuse holders etc. from my local electronics store.

I would show you a picture of the breadboard, but I will save that for part 2, when I discuss how to deal with the potential for voltage sag.

Divergence Meter Battery Mod

The divergence meter I built can be powered by an internal 9V battery. However, a regular 9V battery doesn’t last very long (between 10 and 45 minutes). LiPo 9V batteries last much longer – over 3 hours, though they aren’t really 9V as they are actually two regular LiPo batteries in series – so the actual voltage is at most 8V, dropping to 6V just before the power runs out.

However, that still means that you have to open the clock up to change the battery when it is out of power. A better alternative would be to include a power-sharing charger inside the case, so that the LiPo will charge up when the clock is plugged back into the power. A quick(ish) search of the internet turned up this 9V LiPo charger module, which is small enough to fit inside the case along with the battery. So that gave me the charger, but I needed to add the load-sharing part. A load-sharing charger will use some of the input power (input from the wall adapter) to charge up the battery, while the clock runs off the rest. It also needs to disconnect the battery from the clock as long as the clock is plugged in to the wall adapter, but instantly connect the battery to the clock as soon as it is unplugged from the wall adapter. This is actually pretty easy, and my circuit is basically the one described here.

Here is the basic circuit:

Load Sharing Charger

The load-sharing part is inside the dashed box. Here is what my implementation of this looks like. I used a surface-mount MOSFET, because I happened to have one already:

Load Sharer

This works as follows:

  1. As long as there is power on Vin, the P-channel MOSFET (Q1) will be turned off, preventing any power from being discharged from the battery and also preventing any power from Vin being directly applied to the positive terminal of the battery. Power from Vin will flow to V+ through the Schottky diode (D1).
  2. While there is power on Vin, the TP5100 module will also be able to charge the battery, if necessary.
  3. As soon as power is removed from Vin, the 100K resistor (R1) will pull Vin to ground, which will turn on the MOSFET allowing current to flow from the battery to V+.
  4. This is why the Schottky diode (D1) is needed. It stops the gate of the MOSFET being pulled high again by the battery, which would turn it off, etc. The only reason that D1 is a Schottky diode, is to minimize the voltage drop from Vin to V+.
  5. The LED (D2) shows when the battery is being charged.

I checked it all out before stuffing it into the case:

Load Sharing Charger

To integrate this with the clock, you have to cut the track from the Vin pin on the barrel connector (power in), then wire that to the Vin connector on the battery charger. Then wire V+ from the load-sharing board to the other side of the track that you cut – just find an easy place on the board to do that.

To re-use the existing switch, remove the optional diode (if you installed it) and just wire the switch up as shown in the circuit diagram above.

Finally, if you choose to use the charging indicator LED, you will have to drill a hole in the case somewhere to install it.

Here it is in the case:

Charger in the Case

View Showing LED Placement

I took a time-lapse video of the clock running off battery. As you can see, it lasts a little over three hours:

Complete Divergence Meter

I’ve been building a Divergence Meter, as featured in Steins;Gate, using Tom Titor’s excellent design.

Perfboard

If you’ve read any of my other posts about this project, you’ll know that I hit some obstacles. First I blew up the HV power supply and the PIC chip, then the perfboard I had, had logos printed on both sides. Well I replaced both the power supply and the PIC chip. As for the perfboard, I couldn’t find any that was the right size, the right color and logo-free. In the end I followed a suggestion and spray-painted it. Here’s a before and after shot:

Before and after spray painting

That particular piece wasn’t cut very well, so I used it for practice. To cut the perfboard, I used a technique recommended by a carpenter friend. If you use a saw it is hard to get a clean edge, so I used a router instead. Here is the setup I used:

Router Jig

Case

And that is pretty much where I stopped for a while – I still hadn’t figured out how I was going to build the case. I played around with prototypes made out styrene sheet, and while I was doing that I realized that the hex standoffs used to hold the top to the case screwed easily into the plastruct rod I was using to brace the corners – it has a round hollow core:

Plastruct rod test 1

And then it suddenly occurred to me that I could drill pilot holes in the rod, and use self-tapping screws to fix the sides of the case to the rod. I tested it on some aluminum sheet I had, and it worked really well. So now all I had to do was CAD it up and get it made by Big Blue Saw. Here is a shot of the end result:

Case from the back

Drilled plastruct and some of the case parts.

I had also decided that the PCBs inside the case needed some good support, so I used 11/16″ plastic standoffs to mount the main board to the case. It needs to be this length to accommodate a 9V battery. By my calculations that meant I also had to increase the height of the case slightly, so I did.

Construction

Now I knew everything would go together I could get on with the rest of the construction. Here are a few progress shots:

Gluing the dummy components

Soldering in the tubes

For some extra veracity, I used a busted 7441 chip and a busted К155ИД1 chip for the dummy ICs:

ITT 7441 dummy IC

К155ИД1 dummy IC

I discovered that the gloopy super glue I was using (aka CA Adhesive), really didn’t want to cure. Tom had mentioned that it would be useful to have some accelerant, and I guess it is. Googling CA glue accelerator shows it is just a mild alkaline solution that neutralizes the acid used in the glue, to slow down curing. I found this article about how to make your own, so I did and it worked great.

Software

The programmer in me couldn’t leave the code alone, so I modified it a little. There are two main changes:

  1. The wordline modes will automatically go on to the next wordline after about 9s, unless a button is pressed.
  2. In clock mode, it will display a random world line twice an hour.

I uploaded the source and a hex file to GitHub.

Finished Clock

Finally, here’s a shot of the finished clock:

World Line Display

Divergence Meter Setbacks

Firstly, I only ordered one push-button instead of two. Annoying, but not a big deal.

Secondly, the perfboard had logos printed all over it. No chemical would get them off. Sanding didn’t get them off. When I used a dremel, I discovered the pigment went deep into the substrate. I figured that maybe this was just the particular supplier that DigiKey was using, so I ordered some straight from the public BOM on Mouser. It is exactly the same. So I am down $34 on perfboard I can’t use.

Perfboard
Perfboard + Logos

I have ordered yet another perfboard for $23 from DigiKey from a different manufacturer. Hopefully this one won’t be covered in logos. So $57 on perfboard alone. So far!

Thirdly, I missed that the boards on OSH Park need an additional diode near the battery switch. Fortunately I had a suitable Schottky diode lying around.

Fourthly, when I was adjusting the HV it mysteriously stopped working, and the PIC started to get hot. I guess I shorted the HV to the PIC, though I don’t recall doing so. So I am down the HV and the PIC. The HV part is $14. The shipping is $10. So I am now down an extra $60 with little to show for it. Plus I had to unsolder the HV. Fun times!

Since there is little else I can do at this point, I built a prototype case with the styrene sheet. This is so I can test the positioning of the openings on the case before I get some metal ones fabbed.

Anyway, here are the boards, with a gaping hole where the power supply should be 🙁

Divergence Meter