Introduction: Arduino Ghost (EMF) Detector
This is a project I made for the HKU (University of the Arts, Utrecht).
I got the idea of making a ghost detector from the TV series Supernatural, in which they use an EMF detector.
Step 1: Step 1: Things You'll Need
1. Arduino
2. Antenna or Probe
3. 3.3M Ohm Resistor (I used a 4.7M Ohm one, which worked just fine)
4. 330 Ohm Resistors
5. 100 Ohm Resistor
6. LEDs
7. Small Piezo Buzzer
8. Wire
9. Soldering iron and PCB ór a bread board.
Step 2: Step 2: the Setup
This is the way I set up my bread board before I soldered it to a print plate. I attached the probe (which was a solid core wire) to analog pin 5, together with the 4.7M Ohm resistor.
In the code, which I will put in the next step, I made it so that if the blue LED lights up, the Piezo Buzzer makes some noise.
Step 3: Step 3: the Code
I used this code by Collin Cunningham:
http://makezine.com/2009/05/15/making-the-arduino-...
I modified it, so it would work with my LEDs and the Piezo Buzzer.
___________________________________
#define NUMREADINGS 15
int senseLimit = 15; int probePin = int val = 0;
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
int LED6 = 7;
int LED7 = 8;
int buzzer = 13;
int buzzerTone = 0;
unsigned long previousMillis = 0; const long interval = 1000;
int readings[NUMREADINGS];
int index = 0;
int total = 0;
int average = 0;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
for (int i = 0; i < NUMREADINGS; i++) readings[i] = 0;
}
void loop() {
val = analogRead(probePin);
if(val >= 1){
val = constrain(val, 1, senseLimit); val = map(val, 1, senseLimit, 1, 1023);
total -= readings[index]; readings[index] = val; total += readings[index]; index = (index + 1);
if (index >= NUMREADINGS) index = 0;
average = total / NUMREADINGS;
if (average > 100) {digitalWrite(LED1, HIGH);} else {digitalWrite(LED1, LOW);}
if (average > 200) {digitalWrite(LED2, HIGH);} else {digitalWrite(LED2, LOW);}
if (average > 300) {digitalWrite(LED3, HIGH);} else {digitalWrite(LED3, LOW);}
if (average > 400) {digitalWrite(LED4, HIGH);} else {digitalWrite(LED4, LOW);}
if (average > 500) {digitalWrite(LED5, HIGH);} else {digitalWrite(LED5, LOW);}
if (average > 600) {digitalWrite(LED6, HIGH);} else {digitalWrite(LED6, LOW);}
if (average > 700) {digitalWrite(LED7, HIGH); tone(buzzer, 1000);} else {digitalWrite(LED7, LOW); noTone(buzzer);}
Serial.println(val); // use output to aid in calibrating }
}