Monthly Archives: January 2026

FoxScope 2m – 144 MHz ARDF Receiver – Part 3 – The Processor Board

By Per Magnusson, SA5BYZ

This is the third part in the article series about the FoxScope 2m ARDF receiver.

The processor board contains (surprise) the processor, the audio codec, the LiPo charging circuit, voltage regulators and various external interfaces.

The following files are available for download:

  • Schematics PDF
  • Assembly drawing PDF
  • Layout PDF
  • Layout as gerbers
  • Pick-and-place file
  • Normal BOM (Bill of materials)
  • BOM adapted for JLCPCB

Link to a zip-file with the files:


[ZIP]

Software

The software is available in the following Github repo:

https://github.com/per-magnusson/FoxScope2m

The software can be compiled in the Arduino environment with the Teensyduino extension. The processor is the Teensy MicroMod and the software is uploaded via USB. A number of libraries are required. If you do not have them installed already, the error messages should guide you to what needs to be installed.

Processor

The processor is a Teensy MicroMod, made by Sparkfun. This is a module (a small PCB) which contains a 600 MHz ARM Cortex-M7 (IMXRT1062) processor, 16 MB of flash, and 1024 kB of RAM. It plugs into a 75-pin M.2 connector. Using a module like this instead of the processor directly has some advantages. Primarily that it simplifies layout and allows usage of only four layers, whereas six or eight would have been necessary if the BGA package of the processor were to be put directly on the PCB. It also reduces the component count. A drawback is that the layout of the module is not ideal from an EMC perspective and it probably radiates more EMI than what would be possible with a good custom layout and board stackup.

The IMXRT1062 is mighty powerful in terms of processing power and only a fraction of its processing capability is currently utilized in this receiver. So there is plenty of room to add more sophisticated signal processing if that is desired.

The schematics with the connections to the processor module is shown below.

A supply voltage of 3.1 V is used instead of the more common 3.3 V as this is within the allowed range of the processer and has the benefits of:

  • Reducing the power consumption slightly
  • Allowing the supply voltage to be stable down to a lower battery voltage

The processor has a real-time-clock, which is always powered. This allows the receiver to keep time and know which fox should be transmitting. The PROG# button rarely needs to be pushed, but is good to have if the processor gets stuck, e.g. as a result of software bugs. This button is not externally accessible, so disassembly is required if it is to be pushed.

USB _N and USB_P are of course the USB signals through which the processor can be programmed. It is also useful for debugging.

The I2S signals comprise a standard bus (not to be confused with I2C) for digital audio. It connects to the audio codec, so digital audio samples are sent from and to the codec via this interface.

The main I2C bus (I2C.SCL and I2C.SDA) connects to the codec and the Si5351 local oscillator. There is also a separate I2C bus talking to the LCD.

VBAT_MON is an analog input to the processor that allows the battery voltage to be sensed.

The rest of the signals connect to buttons, the rotary encoder and various control inputs of other circuitry.

Audio codec

The schematics of the audio codec circuitry is shown below.

The codec is an AK4619, which has dual 24-bit stereo audio channels, i.e. four ADCs and four DACs. Here we only use one stereo channel, so half of the analog inputs and outputs are unused. It is capable of sampling at 192 kHz, but it is currently being used at only 44.1 kHz. Maybe the software could be rewritten to take advantage of the higher sampling rate, which might potentially provide benefits like improved suppression of undesired signals that may otherwise be aliased into the received band. The load on the processor would naturally increase with a higher sampling rate, but it is most likely more than powerful enough to handle it.

IF_I/IF_Q are the IF signals from the RF board. The inputs are configured in the “pseudo-differential” mode where the P-pin is fed with the (AC-coupled) signal while the N-pin receives an (AC-coupled) ground reference. This provides the noise immunity of differential signals, without having to go through the trouble of creating differential IF signals on the RF board. A minor drawback of pseudo-differential to true differential signals is about 2 dB of reduced signal-to-noise ratio (according to the codec datasheet), but the combined gain of the RF and IF amplifiers is sufficient to make the input referred noise of the codec irrelevant from a systems perspective.

The I2S bus transports the digital audio samples to and from the processor. The analog audio outputs are amplified by an LM4808 to drive the headphone amplifiers. This amplifier might not even be necessary as the headphones require so little power. For safety, the outputs of the LM4808 are limited by 100-ohm series resistors and clipping diodes to prevent hearing damage in extreme cases. The maximum volume is still more than enough despite this limiting.

The software could send different audio to the left and right channels if one could come up with some use for that, but currently, the same audio is sent to both channels.

The codec is powered by its own LDO to minimize the noise on its power rail. Like for the processor, 3.1 V is used instead of the more common 3.3 V, as this is still within the allowable range of the codec and allows sufficient drop over the LDO to provide good noise rejection down to lower battery voltages.

Connector to RF Board

As mentioned, when describing the RF board, the processor board connects to it via a small 32-pin board-to-board connector, P2:

This is the only component on the bottom side of the processor board and as described in the article about the RF board, it is very difficult to solder manually.

LCD Connector

The alphanumeric LCD has an I2C interface and is mounted on a separate board. It connects to the processor board via a miniature pin-header with 1.27 mm pin spacing:

Front Panel Connector

The front panel with its buttons, encoder and LEDs are connected via a 0.5 mm pitch FPC connector:

None of these signals need to be fast, so to prevent EMI they can therefore be low-pass filtered (with 1 nF capacitors) before they leave the shielding neighborhood of the ground plane of the PCB. Whether this is really necessary has not been thoroughly evaluated.

Connector to USB/Headphone Board

An identical FPC connector (but with a different pinout) is used for the interface to the board with the USB- and headphone connectors and power switch.

USB_SPARE is not used. HP_DETECT# can be used to detect whether headphones are plugged in (but is currently ignored by the software). PROG# is the programming button/signal to the processor to bring it into programming mode. It might be easier to access a button on the USB board than in the main board and future versions could make the button available externally. LEFT_HP and RIGHT_HP are the signals to the headphones. USB_N/P are of course the USB data lines while VUSB is the power from the USB connector, used to charge the LiPo battery. SIG_GEN is unused in this receiver (but it is used in an 80 m receiver with the same USB board). +3V1 is made available in this interface, but is not really needed currently. The receiver powers on when POWER_SW# is pulled low by the power switch.

Having a power switch rather than using the plugging-in of the headphones as the signal to enable power to the receiver may be a bit unconventional for ARDF receivers. There may however be a relatively simple way of changing to headphone-controlled power if that should be desired: Leave R39 and R15 unpopulated and solder a wire between HP_DETECT# and POWER_SW# (C13 to C15). I think this should work, but I have not tested it. The scheme is illustrated in the figures below:

Power Circuitry

The schematic below show the battery charging circuit and a few other power related components.

An MCP73833, U2, is used as the LiPo charging controller. The charging current is set by R22. 2.2 kohms gives about 450 mA, which is low enough to not cause overheating in U2 and within the allowed range of the USB 2 standard. The LiPo battery has a capacity of 1500 mAh, so it takes a little more than 3 hours to charge if it is completely empty (which it should never be).

P1 is the battery connector. U3 provides the low-current supply to the real-time clock. This regulator received power as long as the battery is present and reasonably charged. It consumes about 14 µA of quiescent current, so much less than the maximum current the RTC may draw (250 µA). In practice, the RTC seems to draw significantly less than its worst-case maximum, so for me, the battery has not lost very much of its charge after a few months of being turned off. It should probably be able to keep the RTC running for more than a year without needing a recharge.

The PMOS Q1 connects the battery to the +3V8 rail that powers the rest of the receiver. Q1 is turned on when POWER_SW# is pulled low, which is normally handled by the power switch (or the headphones if the modification described previously is implemented).

R19 is a series resistor for the front panel power LED. The voltage divider R17/R20 allows the processor to measure the battery voltage.

U1 is the LDO that creates +3V1 to power the processor and some other circuitry. It is shown in the figure below together with most of the decoupling capacitors.

It is stable with output capacitances between 0.7 and 10 µF, so one has to be a little careful with adding too many high-value decoupling capacitors. This is the reason mostly 100 nF is used rather than e.g. 1 µF.

The PCB

The processor board, like the RF board, had four layers. It is 79 x 52 mm in size. All components, except for the connector P2, are on the top side. See assembly drawings below.

Signal routing is limited to the top and bottom layers, while the internal layers are used for ground and power planes.

The assembled board (with the processor module fitted) looks like this:

Like with the RF board, I let JLCPCB assembled the top side while I left P2 on the bottom to do myself. This was equally difficult as for J2 on the RF boards and in hindsight I should have let JLC solder also the bottom.

Board Manufacturing Details

This board uses the same layer stackup as the RF board, i.e., the 0.8 mm thick JLC04081H-7628. To comply with the EU RoHS directive, lead-free HASL should be selected as the surface plating (ENIG would also work, but is much more expensive).

FoxScope 2m – 144 MHz ARDF Receiver – Part 2 – The RF Board

By Per Magnusson, SA5BYZ

This is the second part in the article series about the FoxScope 2m ARDF receiver.

The RF board contains the RF-attenuator/amplifier, local oscillator, mixer, IF-filter and the IF amplifier. It has an SMA connector for connecting to the antenna and interfaces with the processor board via a 32-pin, 0.5 mm pitch connector on the back side of the board. Power and control signals are supplied to the RF-board via this connector while the analog IF signals go in the other direction.

The following files are available for download in a zip archive:

  • Schematics PDF
  • Assembly PDF
  • Layout PDF
  • Layout as gerbers
  • Pick-and-place file
  • Normal BOM (Bill of materials)
  • BOM adapted for JLCPCB
  • 3D-model (3mf file) for the shield former

Link to a zip-file with the files:


[ZIP]

Low-noise Amplifier

The schematics of the LNA is shown below (click to enlarge, or view it in the PDF).

D1 and D2 provide ESD protection, which is probably quite necessary as the input is connected to an antenna that can be touched or otherwise get in touch with charged objects. The parasitic capacitance of the protection is reduced by having two diodes in series in each direction.

L8 and C19-C22 form a pre-selecting low-pass filter. The antenna will be quite effective at picking up signals at some higher frequencies than the desired ones and unless they are suppressed, they may get mixed into the IF band by harmonics of the LO.

D3 is a PIN diode that will attenuate the input signal significantly (by about 16-20 dB) if a current is passed through it. This is very useful as it prevents the input from overloading when one is close to the transmitter and the signal therefore is really strong. The software takes care of deciding when to activate this attenuation step. The actual amount of attenuation can be entered into the software as it will be a little different from unit to unit and the attenuation must be taken into account when displaying the received signal strength. The bias current through the PIN diode is provided from Q1 via R7, which has a relatively large value to not load the signal significantly when the attenuation is not activated.

Q5, a BFU550W, forms a low-noise common-emitter amplifier with two gain settings. R5-C14 provides negative feedback, as does the emitter degeneration resistor R15 (and R14 if the PIN diode is activated). The ferrite bead L7 at the base and de-Q resistor R3 across the collector load L3 help ensure stability. The voltage divider R6-R13 at the base together with the emitter resistor R15 sets the bias.

The gain can be increased by activating the PIN diode D4 by turning on Q4. This boosts the gain by effectively reducing the emitter degeneration. The difference in gain is about 16 dB.

As of this writing (January 2026), NXP has changed the status of BFU550W to End-of-Life. It can still be bought from e.g., Digikey, but a suitable replacement may have to be found at some point.

The output of the common-emitter amplifier has a high impedance and is therefore buffered by two stages of emitter followers, Q2 and Q3 to provide a suitable impedance for driving the mixers. The dynamic range of the amplifier is primarily limited by the bias current of the final emitter follower Q3, so reducing R9 allows the amplifier to handle stronger signals with less distortion. Conversely, increasing R9 saves power while increasing distortion for strong signals.

The total gain from antenna port to the signal labeled “EMIT” is (according to simulations) between -19.5 dB (max attenuation, minimum gain) +17.3 dB (minimum attenuation and maximum gain).

To provide clean power to the LNA, several levels of filtering is used. +3V8 comes from the LiPo battery and is shared with many other circuits, so should be considered “dirty”. C1/L1/C2 provides some rudimentary rejection of high-frequency noise and creates +3V8_RF. The small low-drop linear regulator (LDO) U1 creates the +3V1_LNA rail while eliminating particularly low-frequency fluctuations. A further stage of low-pass filtering is provided by L2/C7. R1/C9 and R2/C10 provide decoupling so that the RF currents through the emitter followers do not pollute +3V8_RF.

Low-Pass Filter and Splitter

The output of the LNA is routed to a combined low-pass filter and splitter, L4-L6 and C15-C16, see below.

The signal needs to be split into two paths as there are two mixers. As this is obviously a narrow-band application, the splitting can be done by reactive components to not waste signal power, as a resistive splitter would have done. The reactive splitter can be viewed as L-networks that match 50 ohms at the mixer end to 100 ohms at the LNA end. Two such networks in parallel give 50 ohms. 56 nH together with 11 pF forms one such impedance transforming link. The remaining 56 nH (L5) and 22 pF (C15) form a simple low-pass filter. The output impedance of the emitter follower is much lower than 50 ohms and later simulations indicate that one would probably gain 2 dB or so by reducing L5 to 39 nH.

Mixers

Since this is a low-IF architecture, we need two mixers driven by LO-signals that are 90 degrees out of phase so that the SDR can later reject the unwanted side-band. The mixers used here are diode ring mixers of type ADE-1+ from Minicircuits. They require a 7 dBm LO-signal and has a conversion loss of about 5 dB.

Local Oscillator

The local oscillator is an Si5351, a circuit very popular in many radio amateur projects in recent years.

The documentation of some aspects of the Si5351 is unfortunately not ideal. I had hoped to be able to create two LO signals, 90 degrees out of phase, at ~144 MHz, but that turned out not to be possible (it works at some lower frequencies though). After trying many things, it turns out that the best one can do at these frequencies is to set the “multisynth dividers” to 6, which allows for a phase offset of 60 (or 120) degrees. This is obviously not nearly good enough to get any useful sideband suppression, so the extra 30 degrees of phase shift have to be accomplished by an LC-network, L11/C31.

The reference frequency to the Si5351 comes from an inexpensive, low-power, temperature compensated crystal oscillator (TCXO) U4. It provides a “clipped sinewave” output, which mostly means that the output has a high impedance and cannot be loaded much. This is perfectly OK in this application as the input of the Si5351 (which normally is connected to a crystal) is just a few mm away and has a high input impedance. The accuracy of the TCXO is pretty good and should be within about ±4 ppm even after soldering, aging and over temperature. This is much better than normal crystals and probably better than most fox transmitters.

The LO is powered via a separate LDO, U2, to reject low-frequency fluctuations. The supply is further decoupled via the LC-nets L9/C28 and L10/C29. The decoupling both helps creating clean supplies to the LO and prevents the LO from radiating.

Avoiding LO leakage is rather important, particularly in a direct conversion/low-IF receiver like this, as the LO is (almost) at the same frequency as others want to listen to. One of the very few international rules for ARDF receivers is that it must not interfere with other receivers that are at least 10 m away. There are many possible ways for the LO to leak and it is probably a good idea to pay attention to all of them. Another leakage possibility is back through the mixer and LNA to the antenna, but the mixer claims more than 50 dB of LO to RF isolation and the reverse path of the LNA (S12) has about 70 dB of additional attenuation according to simulations, so this path should be pretty well blocked.

The LO leakage path I think is the most problematic is caused by the mixers acting as antennas! They stick up a few mm from the PCB and since the LO signals are thus routed several mm away from the ground plane of the PCB, they have an opportunity to radiate. Maybe the transformers inside the mixers also have a significant field leakage. This radiation can easily be picked up by a simple E-field probe connected to a spectrum analyzer when one lets the probe sniff over the mixers. A sensitive receiver with a good antenna might pick it up from several meters away, so a good shield is necessary over the RF-board. How to construct this shield is described later in this article.

IF Amplifiers

Two identical IF amplifiers (one for I and one for Q) are used.

When receiving weak signals, the LNA has amplified the antenna signal significantly, but it has then been split to two mixers (3 dB loss) and then mixed (5 dB additional loss), so we cannot stop paying attention to noise figure of the amplifiers just yet, but have to use an IF/audio amplifier with very little input referred noise. There are some options, but here I decided to base the amplifier around a low-noise JFET, 2SK3557, Q7, which provides an input-referred noise of about 2 nV/√Hz and a voltage gain of about 3.7. R22 provides proper termination of the mixer output. The output of the JFET amplifier is buffered by an emitter follower to provide a low impedance driving the IF filter.

One objective of the IF section is to reject signals at undesired frequencies, i.e., frequencies higher than the 20 kHz or so the audio codec can digitize. The most important signals to reject are those that are at least 200 kHz away as that, according to the international rules, is the closest frequency spacing between simultaneously operating transmitters during a 2-m fox hunt.

Most of the low-pass filtering is taken care of by L13-L14/C40-C42. This is essentially a Butterworth filter with 200 ohms input impedance, infinite output impedance and a 3-dB cutoff frequency of 25 kHz. It provides more than 80 dB of attenuation at 200 kHz. Some filtering is also provided by L12 together with the input impedance of the JFET amplifier and C37 which bypasses part of the drain resistance of the JFET at higher frequencies.

The output of the filter goes to the opamp U5, which is configured as a non-inverting amplifier with three useful gain setting. If neither of Q12 and Q13 are turned on, the gain is 1 (0 dB). If Q12 is enabled, the gain is 11 (20.8 dB) and if Q13 is turned on, the gain is 101 (40 dB).

The input of the audio codec on the processor board is used in a “pseudo-differential mode” where a single-ended signal as well as an AC-coupled ground reference are needed, so to provide the best SNR and not introduce issues with ground shifts between the boards, both the output of the opamp and an AC-coupled version of the ground potential at the opamp are routed to the codec.

A little bit of low-pass filtering is also accomplished by C60 and R33/C56 to further reduce unwanted high-frequency components that may still be present in the signal, despite the low-pass filtering earlier in the signal path.

The supply of the JFET amplifier must have very little noise as the signal at the drain of the JFET is referred to the supply. This rail, +3VIF, is created by a capacitance multiplier based on Q14:

The supply to the opamp U5 is less critical, so here the battery voltage +3V8 is used directly.

Connector to Processor Board

The RF board receives power and control signals from the processor board and sends the IF signals to the codec via a small 32-pin board-to-board connector, J2:

The PCB

The RF board PCB has four layers and is 83.5 x 40 mm in size. All components, except for the connector J2, are on the top side. See assembly drawings below.

The top copper layer has most of the routing:

Layer 2 is a solid ground plane:

Layer 3 has some power a little routing while the rest is a ground plane.

Layer 4 is also almost completely ground, except around the connector:

An assembled board looks as follows:

I let JLCPCB assemble the top side and to save some cost, I soldered J2 on the bottom side myself. Trying to do this myself was a bit of a mistake as the 0.5 mm pitch connector turned out to have a bad habit of sucking up solder between its pins, forming bridges under the plastic body that were almost impossible to get rid of. The solution I ended up with was to cut out a piece of and old solder stencil with apertures for another 0.5 mm pitch component, masking off part of the apertures to reduce the amount of solder being deposited, and then using it to print a tiny amount of solder paste on each pad. Here is a photo of the stencil with some Kapton tape masking off parts of the apertures:

After placing the connector on the board, I then used a soldering iron with a very fine tip to solder pins at opposing ends of the connector to fix it in position and then carefully soldering the rest of the pins using only the printed solder paste. All of this was done under a stereo microscope. In hindsight it would have been better to let JLC also populate the bottom of the board. If I had planned for that, I might have put some of the other components on the bottom side as well and saved some space/weight.

In a previous version (from 2023) of the receiver, I used a 0.8 mm pitch connector to connect the two boards and that was enormously easier to solder by hand. Unfortunately, it had become obsolete when I updated the design and I was unable to find any other suitable 0.8 mm pitch connector.

As mentioned previously in the section about the LO, preventing LO leakage is rather important. This is largely accomplished by placing a shield over all components on the top side. Making a shield with tight tolerances out of sheet metal is difficult, so I came up with a better solution. I 3D-printed a shield form in PETG (PLA melts too easily and is therefore not particularly suitable) and covered it with a piece of wide copper tape:

After testing that the board works as intended, the shield can be soldered to the exposed ground plane around the circuitry of the board.

If I were to redo a design like this, I would make sure to not require the indents around the screws in the middle of the long sides of the shield. These add some additional complexity and assembly time.

Issues

I had some issues while building these boards. Some have already been mentioned, but here is a summary.

PIN diode polarity

Both PIN diodes on all of the assembled boards did somehow end up assembled with the wrong polarity. Either I gave the wrong instructions to JLC, or they screwed up. This means that the input attenuation (used when very close to a transmitter) was not effective and that the LNA had very little gain. This is incidentally the setting that is used most of the time during a race, so the receiver works pretty well regardless. I did not discover this problem until after I had built several receivers. A friend of mine even won the 2025 Swedish Championships using a receiver with this defect! The highest possible sensitivity is obviously not of utmost importance in all cases. Anyway, I had to take back all receivers, dismantle them, including desoldering the shields, and then rotating the PIN diodes.

BFU550W Obsolescence

The RF transistor BFU550W used in the LNA has become obsolete. It can still be bought (January 2026) at e.g. Digikey, but a replacement should ideally be found.

Soldering J2

As mentioned above, it was a real pain to solder J2 manually. I normally do not have trouble manually soldering 0.5 mm pitch FPC connectors or TQFP ICs, but this connector has very tall (relatively speaking) pins between which solder apparently likes to get sucked in between. Most of each pin is also hidden by the plastic housing, so it gets very tricky to remove the stubborn solder bridges. It is almost not possible to not get too much solder when applying solder manually, so screen printing minute amounts of solder using a stencil was the only workable (although still difficult) solution I found for hand-assembling these.

Board Manufacturing Details

There are some traces on the board intended to have an impedance of 50 ohms. To make them end up close to this impedance, it is important to use the correct stackup. Also, the board needs to be 0.8 mm thick to fit the mechanics. Both of these requirements are met with the JLCPCB stackup called JLC04081H-7628. To comply with the EU RoHS directive, lead-free HASL should be selected as the surface plating (ENIG would also work, but is much more expensive). Asking that the impedance be checked/controlled by the manufacturer is not necessary and would cost extra.

FoxScope 2m – 144 MHz ARDF Receiver – Part 1 – Overview

By Per Magnusson, SA5BYZ

This is the first in a series of articles describing a 2 m (144 MHz) direction finding receiver for “fox hunting”. I have built a few of these for myself and for friends. The receivers have been used on events starting in 2025, including the ARDF World Championships in Lithuania. The antenna I have been using is a previously published tape measure Yagi. The antenna as well as the receiver uses many 3D-printed parts.

Article Parts

The receiver is described in the following articles:

Overview

The intention is to provide all the information and files necessary to understand and build the receiver, including schematics, PCB-files, BOM-lists, 3D-files and software. But be warned that the design is significantly more complex than most other published HAM DIY projects and requires advanced skills in soldering, assembly and perhaps debugging of hardware and software. If you build it and run into problems, there is no guarantee I am willing or have time to support you. Only try to build this if you are OK with this premise.

This receiver has a largely software defined radio architecture. The signal from the antenna is amplified or attenuated before being mixed down to a low IF (13 kHz) using an I/Q mixer. I and Q are then digitized with an audio codec. Suppression of the unwanted sideband as well as selection of IF bandwidth and AM detection is handled in software.

The software adds an audio RSSI tone to the signal which is helpful to more accurately find the direction in which the signal is strongest. A bonus with this scheme is that – in contrast to receivers that just demodulate the AM-signal – signal strength information is present also between the dits and dahs if the transmitter keeps the carrier on all the time during transmission. Some transmitters do this, while others do not.

The display shows the signal strength in (arbitrary) dB units, which helps estimating the distance to the transmitter. This reading is independent of the gain setting.

The local oscillator is an Si5351 PLL with a TCXO as reference, so frequency accuracy is very good. Several frequencies can be pre-programmed and quickly cycled between. Normally just one or two pre-programmed frequencies are required (foxes and beacon) at an event, but more may be useful at special events. The IF bandwidth can be selected between 21 kHz, 6 kHz and 3 kHz, which may be helpful when a transmitter is very weak or there is interference on nearby frequencies. Normally the 21 kHz bandwidth is used.

A 3.5 mm audio jack is provided to allow usage of standard headphones. A USB-C connector is used for charging the built-in LiPo battery as well as for firmware updates.

Overview of the electronics

The electronics is divided into several PCBs to make the design compact and light-weight:

  • A 4-layer RF board with attenuator/amplifier, local oscillator, mixer, IF-filter and the IF amplifiers
  • A 4-layer processor board with ADC, DAC, processor and interfaces to other boards
  • A display board with the LCD
  • A connector board with USB and headphone connectors
  • A front panel board with interfaces to buttons, LEDs and a rotary encoder
  • Possibly a little balun board at the antenna

The RF and processor boards contain many tiny surface-mount components that most people would find hard or impossible to assemble at home. I let JLCPCB take care of manufacturing of all the PCBs. I also let them assemble the (top sides) of the RF board and the processor board. The other boards contain much fewer components, but some are still tiny fine-pitch SMD parts, so you might want to let e.g. JLCPCB or PCBWay take care of those assemblies as well.

License

You may build this on a non-commercial basis for yourself and a few friends, up to five units in total. You are not allowed (without a further license agreement with me) to base commercially produced units on this design. The same disclaimers of warranty and limitations of liability as in sections 15 and 16 of the Gnu General Public License v3 applies. The software is covered by GPL v3.

I hope you find these articles informative and educational.