From what I see in your scope picture, your signal spans a range from
roughly −4 V to about +2.5 V. The main issue with this signal
is not its negative part, it's the fact that the positive voltage does
not go high enough. Most Arduinos are powered at 5 V and have
Schmitt triggers on their digital inputs. The voltage threshold for the
pin switching to HIGH
is typically about 2.6 V, but this is only
a typical value. The only thing the datasheet guarantees is that the
pin will read HIGH
if its potential is at least
0.6 VCC, i.e. 3 V on a 5 V Arduino.
One option would be to use an Arduino powered at 3.3 V, like the
3.3 V version of the Pro Mini. With this, the digital pins are
guaranteed to read HIGH
at 2 V. This is, however, borderline for
your signal. Your picture shows that some of the oscillations barely
reach 2 V at their maximum. Thus I would avoid this option.
The other option is to add a DC offset to the signal in order to have it
oscillate around VCC/2 = 2.5 V. This way you
have a shifted sine wave that goes roughly from −0.75 to +5.75 V.
Then you are guaranteed to hit both the threshold for reading LOW
, which
is no lower than 0.3 VCC = 1.5 V, and the
threshold for reading HIGH
. I would use a circuit like this:

simulate this circuit – Schematic created using CircuitLab
The voltage divider creates a DC offset of VCC/2. The
capacitor on the left allows the AC waveform in. Together, the capacitor
and the voltage divider make a high-pass filter with a cutoff frequency
of 1/(πRC). If you choose, say, R = 100 kΩ and
C = 1 µF, then you have a cutoff at 3.18 Hz. Your
signal is about 300 Hz, thus you should be able to measure a signal
up to 100 times slower than the one pictured.
As for the negative part of the signal, the Arduino inputs have
protection diodes that take care of it. You just have to make sure that
the current through those diodes does not exceed 1 mA. This is
why the above filter has a current limiting resistor after the voltage
divider. A 10 kΩ resistor ensures you can safely overshoot
the normal input voltage range by as much as 10 V, i.e. you are
safe as long as the shifted sine wave stays between −10 V and
+15 V.
Edit: As pointed out by Dmitry Grigoryev's comment, when the car
speed is zero this circuit will let the noise through. Having some noise
on a digital input is often not an issue, as it is cancelled by the
input Schmitt triggers. Your noise amplitude, however seems quite large,
and is probably larger that the ~ 0.5 V of hysteresis you have
on the Arduino inputs. Then you may detect spurious transitions that
will be seen as a finite speed.
If this happens, a simple fix is to change the DC offset in order to
move it away from the transition thresholds. For example, a 47 kΩ
pull-down combined with a 100 kΩ pull-up will set the DC bias to
1.6 V. You can use more asymmetric resistors if you need to make
the DC bias still lower. Note that changing the resistors will also
change the cutoff frequency. The 47 kΩ/100 kΩ resistors
combined with a 1 µF capacitor will have a cutoff of about
5 Hz.