Arduino audio frequency reader
If you can properly bias your signal, say with a cap and a pot, you
could read it with a digital input. You can then time the rising edges
with micros(), either by polling the pin or using an interrupt. You
could achieve greater accuracy by using the “input capture” feature of a
16-bit timer, if you are using an AVR-based Arduino and are not afraid
of getting your hands dirty with low-level programming.

You need to get the right voltage range for this to work though. On an
Arduino Uno, for example, the thresholds for the input switching from
HIGH to LOW and back are typically around 2.1 and 2.6&nbsp;V
respectively, so you must make sure that your signal amply covers this
range. If you can get 1&nbsp;V peak to peak, that should be enough, and
you can then use the pot to tune the offset.