Faux WWVB: The
waterfall image was captured around mid-morning of the summer
solstice, at a distance of more than 1500 miles from WWVB. Not a bad
signal! The reason is that the signal is not WWVB. It is Faux WWVB, a
milliwatt transmitter that encodes GPS time to simulate WWVB.1
The transmitter has no antenna, so Faux WWVB cannot be
heard in the next room. However, when a receive antenna wire from the
SDR is draped
over or alongside the transmitter, the signal is strong enough
to decode time and other
data by eye, as
annotated above.
The
thought that led to this project was a question. I had wondered
whether the tone() function, which is part of Arduino core, could
produce frequencies above the
human hearing range—up to about 20 KHz for young people. The answer is
that it can. The
transmitter consists of a single program command: tone(TONE_PIN,
FREQ_HZ). As the
pictorial diagram shows, the microcontroller is a Teensy 3.5. However,
I believe that an
Arduino Uno would work the same. Replace hardware serial
with software serial for
connection
to the GPS, and modify the sketch accordingly.
The
microcontroller PWM pin
output is a square-wave. To obtain a sine
wave I added a filter. The calculator at https://www.omnicalculator.com/physics/rc-circuit
was used to compute and select RC values. Except for these component
values the circuit
is the same as this one. The filter also
attenuates the wave, reducing the 5 volt P-P input to a few hundred
millivolts. Filtered output
makes a nice display on the oscilloscope screen, but may or may not
affect the
circuit’s functioning in the application context.

For the
image at the top of this page,
the SDR’s antenna wire
(short length of insulated hookup wire) was draped over the filter. In
tests of setting a radio clock, the clock’s ferrite loop antenna was
placed on the filter side of the transmitter at no more than about 10 cm.
distance. Neither antenna would pick up the signal if moved one meter
away from the source. Out of curiosity I coupled the output of the
filter to an LM386N-4 and with that boost (approximately 15
mW) the signal could be received a few meters away. For this test the
amplifier (photo right)
had
no antenna, just a 20 ohm resistor (dummy load).
A couple of years ago I described a WWVB
radio clock based on this receiver module
and an
Arduino
Nano. Since then I have experimented with variants of the original
project including integration with a DS3231 real time clock,
substituting an Arduino
Uno for the Nano, using a different WWVB receiver, and adding an
LCD or OLED display. The OLED screen in the photo above records a
sync with the Faux WWVB transmitter signal at 9:23 AM EDT on Jun 23,
2020. (From then to the displayed time the Arduino was disconnected
from the receiver.) The clock program has been modified so that
these
faux
syncs are not saved to EEPROM. On recycling power, the OLED displays
the last real WWVB sync, but that is unimportant. The fact is that GPS
time
is indistinguishable to casual observation from WWVB time or NTP
(computer) time. Various official time sources are within a second
of one-another.
All data displayed on the OLED screen are
computed in the transmitter sketch (day of
week, day
number, DST, etc.)
except
UT1, which was entered as a constant. As far as I know
the
only way to obtain the current UT1 value is from WWVB. If there is a
service for this datum I’d like to know about it.
Gating the carrier: WWVB distinguishes so-called
‘weighted’ and ‘unweighted’ code digits (1’s
and 0’s) by reducing the
carrier to 20% of full value and restoring it to full strength after a
code-specific interval, 0.5 second for weighted and 0.2 second for unweighted.2 Instead of reducing the carrier, the faux
transmitter keys the carrier either
completely on or completely off, i.e. tone or no tone. —I did also experiment
with leaving
it on continuously and gating it. Doing that produces bright
blips on a dimmer line in
the SDR waterfall. This dim line must represent the ungated square
wave, which is still generated, but not passed through to the filter. The
salience of blips (or
signal-to-noise ratio) depends somewhat on antenna placement when
gating the
carrier. A Boolean constant PTT_MODE near the top of the sketch enables
or disables the gating experiment. However, this method did not work as well as
the carrier on-off method
(fewer syncs or longer time to sync).
Success and failure: The WWVB radio clock syncs to the Faux WWVB transmitter within a couple of minutes. I have tested two
receiver chips, the SYM-RFT-60 and the Canaduino module from Universal
Solder. Both work. However, I have not been able to set my MFJ watch
with the simulator. At first I thought the watch was 5 seconds slow, as
is shown
in the comparison above. However, the problem was not that the watch
was slow, rather the second hand was misaligned. I should have read the
instruction leaflet!
On carrying out the status check
procedure described above, the second hand always pauses at 11 o’clock,
not 12 o’clock, and never at 6 o’clock. My interpretation is that
reception was successful (whatever that means) but the second hand is
not aligned properly. That is where I hit an impasse. Another
instruction explains how to re-align a misaligned second hand. I
carried out the ‘Synchronize Watch Hands’ procedure several times, but
no matter what, the second hand always went back to 11 o’clock.
Either the instructions are wrong or I am wrong—or the watch is broken.
Annoying though it is I will have to be content with mentally adding 5
seconds to MFJ watch time.
Demo
video: Faux WWVB
1. The idea of using a very
low-powered transmitter to simulate WWVB and set a radio clock or watch
is not new. See, for example, this attractive project: https://www.anishathalye.com/2016/12/26/micro-wwvb/
or this ATTiny85 project that is similar to
mine: https://sites.google.com/site/wayneholder/controlling-time.
2. The 'WWVB Time Code Format' illlustration is reproduced from NIST Special Publication 432, 2002 Edition (page 19).
Project descriptions
on this page are intended for entertainment only.
The author makes no claim as to the accuracy or completeness of the
information presented. In no event will the author be liable for any
damages, lost effort, inability to carry out a similar project, or
to reproduce a claimed result, or anything else relating to a decision
to
use the information on this page.