Go Down

### Topic: EMF Detector - increasing sensitivity? (Read 8407 times)previous topic - next topic

#### arduinokov

##### Dec 17, 2012, 04:44 amLast Edit: Dec 17, 2012, 05:24 am by arduinokov Reason: 1
Hi,

I have built a simple EMF detector using this tutorial: http://blog.makezine.com/2009/05/15/making-the-arduino-emf-detector/. My daughter is crazy about the TV show "Supernatural" and I am trying to build a simple one for her for Christmas so she can go "demon hunting". If you have seen the show, you'll know what I mean.

It is working well, but I was wondering if there is a simple way to increase it's sensitivity?

I am using 330 Ohm resistors from the pins to the LEDs and a 3.9 M Ohm resistor to the antenna (the code, provided with the tutorial is attached).

Code: [Select]
`// EMF Detector for LED Bargraph v1.0// 5.12.2009// original code/project by Aaron ALAI - aaronalai1@gmail.com// modified for use w/ LED bargraph by Collin Cunningham - collin@makezine.com#define NUMREADINGS 15 // raise this number to increase data smoothingint senseLimit = 15; // raise this number to decrease sensitivity (up to 1023 max)int probePin = 5; // analog 5int val = 0; // reading from probePinint LED1 = 11;  // connectionsint LED2 = 10;  // toint LED3 = 9;   // LEDint LED4 = 8;   // bargraphint LED5 = 7;   // anodesint LED6 = 6;   // withint LED7 = 5;   // resistorsint LED8 = 4;   // inint LED9 = 3;   // seriesint LED10 = 2;  // // variables for smoothingint readings[NUMREADINGS];                // the readings from the analog inputint index = 0;                            // the index of the current readingint total = 0;                            // the running totalint average = 0;                          // final average of the probe readingvoid setup() {  pinMode(2, OUTPUT);  // specify LED bargraph outputs  pinMode(3, OUTPUT);  pinMode(4, OUTPUT);  pinMode(5, OUTPUT);  pinMode(6, OUTPUT);  pinMode(7, OUTPUT);  pinMode(8, OUTPUT);  pinMode(9, OUTPUT);  pinMode(10, OUTPUT);  pinMode(11, OUTPUT);  Serial.begin(9600);  // initiate serial connection for debugging/etc  for (int i = 0; i < NUMREADINGS; i++)    readings[i] = 0;                      // initialize all the readings to 0}void loop() {  val = analogRead(probePin);  // take a reading from the probe  if(val >= 1){                // if the reading isn't zero, proceed    val = constrain(val, 1, senseLimit);  // turn any reading higher than the senseLimit value into the senseLimit value    val = map(val, 1, senseLimit, 1, 1023);  // remap the constrained value within a 1 to 1023 range    total -= readings[index];               // subtract the last reading    readings[index] = val; // read from the sensor    total += readings[index];               // add the reading to the total    index = (index + 1);                    // advance to the next index    if (index >= NUMREADINGS)               // if we're at the end of the array...      index = 0;                            // ...wrap around to the beginning    average = total / NUMREADINGS;          // calculate the average    if (average > 50){                // if the average is over 50 ...      digitalWrite(LED1, HIGH);   // light the first LED    }    else{                         // and if it's not ...      digitalWrite(LED1, LOW);    // turn that LED off    }    if (average > 150){               // and so on ...      digitalWrite(LED2, HIGH);    }    else{      digitalWrite(LED2, LOW);    }    if (average > 250){      digitalWrite(LED3, HIGH);    }    else{      digitalWrite(LED3, LOW);    }    if (average > 350){      digitalWrite(LED4, HIGH);    }    else{      digitalWrite(LED4, LOW);    }    if (average > 450){      digitalWrite(LED5, HIGH);    }    else{      digitalWrite(LED5, LOW);    }    if (average > 550){      digitalWrite(LED6, HIGH);    }    else{      digitalWrite(LED6, LOW);    }    if (average > 650){      digitalWrite(LED7, HIGH);    }    else{      digitalWrite(LED7, LOW);    }    if (average > 750){      digitalWrite(LED8, HIGH);    }    else{      digitalWrite(LED8, LOW);    }    if (average > 850){      digitalWrite(LED9, HIGH);    }    else{      digitalWrite(LED9, LOW);    }    if (average > 950){      digitalWrite(LED10, HIGH);    }    else{      digitalWrite(LED10, LOW);    }    Serial.println(val); // use output to aid in calibrating  }}`

I am strictly a basic hobbyist with Arduinos so any help would be greatly appreciated  XD

#### arduinokov

#2
##### Dec 17, 2012, 06:35 am
Hi,

Thanks for your reply. Could you or someone be more specific please? What kind of amplifier part? Where would it go in the schematic?

Thanks

#### Magician

#3
##### Dec 17, 2012, 10:52 am
Simpler version: http://electroschematics.com/622/field-strength-meter-2/
Negative terminal of the milliampermeter goes to arduino analog input, R3 and R4 are not necessary. I'd add a cap 0.1 uF in parallel to arduino input and ground.

#### arduinokov

#4
##### Dec 17, 2012, 06:08 pm
Hi,

I know this is a lot to ask, but I am trying to put this together before Christmas. Could someone diagram the addition of the milliampermeter? Sorry, I am a real noob. Here is the initial diagram:

emf_detector_led_bargraph2 by kovalik, on Flickr

You would have my undying gratitude  XD  If it is not possible, I totally understand. I'll keep trying myself.

#### oric_dan

#5
##### Dec 17, 2012, 07:22 pmLast Edit: Dec 17, 2012, 10:07 pm by oric_dan(333) Reason: 1
OP, it's debatable whether you'll find any ghosts in the house using that probe, :-). What
it's really doing is using the probe wire to pick up the magnetic field given off by alternating
current in the power mains. See the part where it says "a magnetic field circulates around
a current-carrying wire" in this link, except in the AC mains, it's alternating.

The first FSM schematic circuit was tuned for 100-300 Mhz, which is useless for you, the
2nd was more general - just a basic amplifier. In your diagram, the Leds are just the display
device, and you would want to insert an amplifier between the probe and Arduino A/D
converter pin. Basically that "probe" is just a big antenna.

The following ckt would probably work, using an MPF102 FET bought at Radio Shack.

http://www.sciencelobby.com/field-effect-transistor/junction-fet-as-an-amplifier.html

Use the 3.3M where it shows 1M, use the probe instead of the 0.1 uF input capacitor,
forget about the 22 uF cap, and use a short to the A/D converter where it shows the 0.1
uF output cap. Supply power from the Arduino 5V pin. So, just MPF102 and 3 resistors.

#### arduinokov

#6
##### Dec 17, 2012, 10:00 pm
Thanks for your reply. So "the ghost" has to be plugged in to the wall for the "probe" to pick it up. I understand. I will read the rest and try to understand.

Cheers  XD

#### oric_dan

#7
##### Dec 17, 2012, 10:10 pm
Also, in the video, it looked like the probe had a bare wire tip. Bad idea, as someone
can stick that into a 120VAC outlet. So, insulate the probe tip with tape, etc.

#### arduinokov

#8
##### Dec 17, 2012, 11:36 pm
Hi,

I have a working breadboard version and I replaced the "probe" with an old telescoping antenna. It works great and is safer.

#### dc42

#9
##### Dec 18, 2012, 12:48 am
You could increase the 3.3Mohm resistor to 10Mohm, that will increase the sensitivity somewhat. To increase it further, add an amplifier, as has already been suggested.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

Go Up