EMF Dectector 라고 검색하면 나오는 동영상을 보면서 나도 이런 측정기가 있으면 좋겠다고 생각했는데, 이번에 함 만들어보았다.
https://www.youtube.com/watch?v=y1Bke3750WE


아두이노를 가지고, 아주 간단하게 만든 전자파(전자기파) 측정기(emf detector)를 만들었고,
내가 속한 환경에서 전자파가 얼마나 나오는지를 알고 싶었다. 결과는 상당히 충격적이었다.

모니터, pc, 선풍기, 전화기, 핸드폰(iphone), 갤탭 7인치에서는 검출되지 않았다.
일부 충전중인 아이폰에서는 전자파가 나왔다.

충전하는 노트북과 전원 연결, 어댑터에서는 조금 전자파가 나오는지 확인할 수 있었다. 1/10~3/10 정도였다. 또한, 휴텍스의 이온파크 송풍기에서 검출되었다. 
 
충전하는 노트북을 이 전자파 측정기로 살펴보았더니, 델, HP, 애플 최신 노트북, acer/eeepc 구형 노트북에서 발생되는 것을 확인했다. 특히 애플은 알루미늄때문에 그런지 아주 잘 잡힌다.

구형 소니 바이오 노트북, 신형 레노보 노트북, 신형 삼성, 신형  LG 노트북에서는 전자파가 발생되지 않았다.
(노트북이 진열된 곳에서 검사해봤다. 정확한 모델명은 잘 모르겠음..ㅎ )


전자기파를 0~1023까지의 숫자로 표현한다면 10~20% 정도가 근처에서 나왔다고 보면 된다.
애기와 산모등은 최대한 전원 어댑터와 노트북으로부터 피하는 것이 좋은 것 같다는 생각을 하게 되었다. 


실제로 만든 간단한 detetor이다.




아이폰 동영상을 반대로 해서 찍었지만, 대충. 이렇게 쓰일 수 있다는 의미로 보면 될 것이다.





소스를 공유한다.

fritzing 소스는 (아두이노 설계 프로그램 정도로 보면 된다. http://fritzing.org/ 참조 )
설계 파일은 아래 링크에서 다운받으면 된다.



 




아두이노 소스는 다음과 같다.

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

int senseLimit = 10; // 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;

byte seven_seg_digits[10][7] = { { 0,0,0,0,0,0,1 },  // = 0
                                 { 1,0,0,1,1,1,1 },  // = 1
                                { 0,0,1,0,0,1,0 },  // = 2
                                { 0,0,0,0,1,1,0 },  // = 3
                                 { 1,0,0,1,1,0,0 },  // = 4
                                 { 0,1,0,0,1,0,0 },  // = 5
                                 { 0,1,0,0,0,0,0 },  // = 6
                                 { 0,0,0,1,1,1,1 },  // = 7
                                 { 0,0,0,0,0,0,0 },  // = 8
                                 { 0,0,0,1,1,0,0 }   // = 9
 };

void setup() {               
  pinMode(2, OUTPUT);  
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  writeDot(0);  // start with the "dot" off
//  intro();
   Serial.begin(9600); 


}

void writeDot(byte dot) {
  digitalWrite(9, dot);
}
   
void sevenSegWrite(byte digit) {
  byte pin = 2;
  for (byte segCount = 0; segCount < 7; ++segCount) {
    digitalWrite(pin, seven_seg_digits[digit][segCount]);
    ++pin;
  }
}

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
    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 > 950){
        sevenSegWrite(0);
    } else if (average > 850){
        sevenSegWrite(1);
    } else if (average > 750){
         sevenSegWrite(2);
    } else  if (average > 650){
         sevenSegWrite(3);
    } else if (average > 550){
         sevenSegWrite(4);
    } else if (average > 450){
        sevenSegWrite(5);
    } else if (average > 350){
          sevenSegWrite(6);
    } else if (average > 250){
        sevenSegWrite(7);
    } else if (average > 150){             
         sevenSegWrite(8);  
    } else if (average > 50){
         sevenSegWrite(9);
    }
   
    Serial.println(average);
    delay(updateTime);
  }

  
}

void intro() {
   for (byte count = 10; count > 0; --count) {
   delay(1000);
   sevenSegWrite(count - 1);
  }
  delay(100);
}





아래 싸이트에서 일부 내용을 참조하여 사용했다. `

http://arduino-projects-here.blogspot.com/2010/10/arduino-emf-electromagnetic-field.html

Posted by 김용환 '김용환'