I’ve had a few people ask me how to produce low frequencies on an arbitrary Arduino/Wiring pin. They have found that the tone() function (the same applies to the Tone library) can not produce frequencies below ~30 Hz.
The thing is that when you’re toggling a pin at that frequency, it is essentially an eon between pin toggles (from the microcontroller’s perspective).
So my suggestion is to add non-blocking code in your main loop to handle the flips, just as long as you don’t tie up the main loop with too much other time-consuming code.
Here is a capture of the frequency output from a Wiring S: