Extremely Low Frequency Electro Magnetic Field Sensing (Part 1)

Part 1234

Since almost all modern houses are fitted with AC current we are surrounded by electro magnetic fields. For those who are used to oscilloscopes, you know that the simplest way to illustrate this phenomenom is to approach your finger from the tip of the probe.

Thanks to the fast signal sampling functions and to some very simple hardware (We will talk about that later), we can achieve the same type of signal plot.

Next plot relates to the signal which is sensed by a distant Arduino from AC electro-magnetic field:

Here is the related code:

	/* Acquire data */
	/* Cast data in a doubles vector */
	_vReal = reinterpret_cast(_vBuffer);
	/* Print data (optional) */
	PrintVector(_vReal, _samples, SCL_TIME);

The following plot relates to the signal which is sensed by a closer Arduino. Check the signal amplitude which has now grown up:

The data acquisition code is obviously the same.

After sampling the signal, we need to subtract the offset, using the following code

	/* Suppress data offset */
	FFT.SuppressOffset(_vReal, _samples);
	/* Print data (optional) */
	PrintVector(_vReal, _samples, SCL_TIME);

Which results in:

Next step consists in weighing the signal in order to cancel the sides effects. This is done by

	/* Window data*/
	FFT.Windowing(_vReal, _samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);	
	/* Print data (optional) */
	PrintVector(_vReal, _samples, SCL_TIME);

and results in:

Finally we can run an FFT other this signal, using the now familiar code:

	/* Compute FFT */
	FFT.Compute(_vReal, _vImag, _samples, FFT_FORWARD);	
	/* Compute magnitudes */
	FFT.ComplexToReal(_vReal, _vImag, _samples, FFT_SCL_TYP_AMPLITUDE);
	/* Print FFT data (optional) */
	PrintVector(_vReal, _samples, SCL_FREQUENCY);

which gives the resulting frequecny spectrum plot:

Starting from there, multiple applications can be forseen, from pratical (e.g. motion sensing) to fun (e.g. proximity dependant tone generator) through scientific (e.g. EMF sensing).

Next video illustrates the implementation of the code which displays the results on a Graphic Liquid Cristal Display.

Next post on same subject


  1. […] equipment. For more information, descriptions and the Arduino sketch, visit Didier’s blog. To get started with your own measurements, consider ourFreetronics LeoStick – one of the […]

  2. pratikbhatt says:

    Hello sir,

    I went through the entire post and found it very intereseting.

    I needed a code to compute fft and find the fundamental frequency present in normal condition which is 50Hz due to A/C

    I have few doubts so it will be very helpful if you cna solve them:

    1)You have used the lib PlainADC.h and PlainFFT.h. I have found the second one but I am not sure if its the same you have used and the library PlainADC.h I couldnt find it.

    So it will be very helful if you can email me these libraries on pratik-bhatt@hotmail.com

    2) I want just the value of fundamental frequency directly on my serial windows. So how can I do that?

    Kindly reply sir, I will be waiting.

Leave a Reply

You must be logged in to post a comment.