본문 바로가기
아두이노 응용

[응용/전자기장검출] 전자기장 감지기(EMF detector)를 만들어보자

by 작동미학 2015. 11. 11.
반응형

EMF(ElectroMagnetic Field)검출기를 만들어보자.

 

▶ 이 가이드를 따라하면

- 전기/자기 변화가 있는 곳을 감지할 수 있다.

 

▶ 먼저 읽으면 좋은 글

- Arduino 일반 : http://bbangpan.tistory.com/1

- EMF Detector 해외 사이트 : http://www.aaronalai.com/emf-detector

 

▶ 부품 설명 및 회로 구성

EMF Dectector를 해외 사이트 가이드에 따라 만들어 측정해보면 재미있다. 원리나 방식의 옳바름에 대해서는 이견이 많은데 여하튼 전기 장치에 가져다 대면 수치가 변동하는 것을 볼 수 있다. 특히 형광등에 아래에서는 격렬히 반응한다. 예상컨데 전자기 변화가 심한 곳에서 전선에 전자기 유도를 일으키면 그 변화를 측정하는 것으로 추정된다. 다만 코일이 아닌 긴 전선이어서 길이가 끼치는 영향력이 있을 것 같긴 한다.

(정확한 원리를 아시는 분은 제보를!)

각종 사이트의 가이드대로 만들어본 구성은 아래와 같다.

<EMF Detector / 3.3M옴저항(1M옴*3+300K옴*1)과 16cm 조금 두꺼운 전선을 활용했다. 실제 연결은 아래 그림을 참조한다.>

<인용한 Aaron ALAI 사이트의 EMF Detector 의 더 직관적인 구성도/발췌>

구성을 보면, GND와 Analog Read 핀 하나를 연결하는데 저항을 붙이고(3.3M옴) Analog Read 핀 쪽에 16cm전후의 좀 두꺼운 전선 한쪽을 납땜했다. Aaron ALAI 사이트에서는 신호값을 빛의 밝기로 변화시키기 위해 LED를 연결했는데(LED에 470옴정도 저항을 붙여서 회로를 보호할 필요는 있겠다), 필자는 간단하게 Serial로 출력해보았다.

참고로 Arduino에 저 회로 외의 것들을 연결하면(Arduino 보드의 소비 전력이 많아지면) 검출 회로가 제대로 작동하지 않는다. 아래 소스대로 우선 해보고 LED를 붙여 Aaron ALAI 사이트처럼 해보는 것도 방법이다. 붙이는 전선은 일반 전선보다 약간 두꺼운 것을 추천한다. 너무 얇은 전선을 쓰면 검출이 잘 되지 않는다.


▶ 소스 코드 입력 및 구동

 

//이 소스는 여기저기 짜집기한 코드인데 불행히도 정확한 출처는 기억나지 않고 Zac Bohon의 averaging code를 참조했다

//(Aaron ALAI사이트 샘플처럼 따로 잡음 제거를 위한 averaging하지 않아도 사실 변화량을 알 수 있기는 하다)

 

//emf detector averaging code by Zac Bohon

#define NUMREADINGS 10 // raise this number to increase data smoothing

 

int senseLimit = 1023; // raise this number to decrease sensitivity (up to 1023 max)

int probePin = 5;

int val = 0;

 

int readings[NUMREADINGS]; // the readings from the analog input

int index = 0; // the index of the current reading

int total = 0; // the running total

int average = 0; // final average of the probe reading

 

int updateTime = 50;

 

void setup(){

Serial.begin(9600);

 

}

 

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

 

Serial.println(average);

delay(updateTime);

}

}

 

상기 소스를 돌린 후 해당 EMF를 형광등이나 전자 장치에 가까이 가져다 대면, 수치가 변한다. 아래는 탁상 형광등에 가져다 대었을 때의 변화이다.

<시리얼 모니터로 감시하면 값이 엄청나게 올라간다>

 

강의 키워드

아두이노 전자기장 검출기, 전자기장 감지기, Arduino EMF detector

반응형