What I aim to do: To measure the frequency of an AC analog signal generated by an electrodynamic shaker, which has a peak voltage of 10V-- using an Arduino Uno.
What I have tried:
Tried using a circuit similar to an optocoupler (using a 2N2222) transistor to take pulse input, using the pulsein()
function. However the duration is always returning as 0.
My questions:
- Is this method an acceptable way of measuring frequency?
- What could I be doing wrong such that the time duration is always returning 0?
- Is there an easier way of carrying out this work?
Will put up the code if asked for. However it is basically just defining a few variables (for pins, duration etc), and then using the pulsein
function.
Here is the image of the circuit diagram
2 Answers 2
This project includes a frequency counter.
https://www.instructables.com/id/Oscilloscope-in-a-Matchbox-Arduino/
From the project page: This oscilloscope costs the price of an Arduino Nano (2ドル and a display (3ドル) plus a few pence for resistors, etc. It's specification is:
- max 1M samples/second, min 1000sps
- 8-bits per sample
- DC 0-5V; AC +/- 550mV, AC +/- 117mV, AC +/- 25mV
- USB "PC scope" or built-in display
- could be battery-powered
- optional logic display
- optional frequency meter
- optional voltmeter
- optional signal generator
My comment: I build it, it's a nice little project and the author is an expert programmer.
-
1Answers should be more selfcontaining. A link-only answer would get completely useless, when the link dies eventually. Please include the key points directly in the answer text.chrisl– chrisl2019年05月12日 12:29:55 +00:00Commented May 12, 2019 at 12:29
Is this method an acceptable way of measuring frequency?
Nope, not at all.
What could I be doing wrong such that the time duration is always returning 0?
You are misusing pulsein(), it doesn't work like that; look up the documentation for it!
Is there an easier way of carrying out this work?
Yes; there are many ways, you can research many of them. One thing you can do is make a peak detector, either in hardware or software, and then design a way to get a counts/time, which should correlate to the frequency!
pulseIn()
measures the length of a pulse, i.e. the time between a rising edge and the following falling edge (or vice-versa). For measuring a frequency, you need the time between two consecutive rising (or falling) edges. 3. What is the range of frequencies you want to measure? What kind of accuracy do you need? There are many methods to measure a frequency, and the "right" one for you depends on your requirements.