I found a video on youtube where the author amplified a heartbeat and his cat purring (link).
We were able to replicate the circuit with some changes, but I made a mistake and got 8 ohm, 0.25 W speakers, and only found out now that the circuit is not designed to drive those.
Here's what I did:
I used +/- 6 V battery packs.
There is a 1k resistor in series with the microphone. After the capacitor that filters out the DC, I get 0.7 V for very loud singing right into the microphone, yet no detectable voltage for low amplitude sounds. And forget about the speaker, I don't even see a noticeable voltage from the output of the op amp unless the noise is loud. My microphone is from Jameco, claiming 50-16000 Hz response. I'd be open to getting a better microphone if that's a problem.
Not realizing at first that the 10k pot was because he was using earbuds, I replaced the pot by a resistor, dropping from 150 to 75 to 50 ohms. At 50 ohms you can start to hear some sound out of the speaker, but not much, and nothing for faint sounds.
The circuit as it stands is (with poor fidelity) replicating audio from the microphone to the speaker, but it isn't sensitive at all to the heartbeat.
Is there a reasonable way to redesign the circuit so we can drive a speaker with an LM324? What if I just want to read the waveform on the A/D of the Arduino? The amplifier is extremely sensitive to rubbing the surface or blowing on the microphone, yet it seems to have quite poor sensitivity to the heartbeat. I'm mystified at how his works. I realize he is using earbuds, but shouldn't I at least be able to see a heartbeat on the scope?
Another related question is that he has a highpass filter on the front end, and I would have thought that a heartbeat is pretty low-frequency as well as low amplitude. Yet in his video the heartbeat is quite loud and impressive.
Apologies on the schematic, I don't know how to enter a microphone into Orcad so I just substituted a resistor.