자기장 센서란 / 지자계란 / 자기장 / 리드 스위치

메이커 2018-09-16 (일) 23:36 5년전 3709  

자기장이란


중학교/고등학교 물리 시간에 등장하는 유명인사들 중에는 테슬라 (왼쪽), 가우스 (오른쪽)라는 사람들이 있습니다. 이들은 전자기학의 발전에 큰 공헌을 한 학자들로, 우리가 배우는 자기장에서 그들의 이름을 따서 단위(unit)까지 만들어졌습니다. 


4eb8db95a0a4ce915caee4aba559ad37_1537107

자기장을 생각하면 떠오르는 이미지는 자석 주변의 철가루와 이들이 표현하는 자기장의 세기와 벡터값인 "자기력선"입니다. 자기장을 이용한 센서들에는 리드 스위치/센서와 지자계가 있습니다. 영구 자석에 반응하는 리드 스위치와 


리드스위치란


리드 스위치는 자기적으로 활성화되는 기계식 스위치입니다. 작은 캡슐안에 두 개의 금속이 자성을 가지고 있는데, 영구 자석 같은 자성을 띈 물질이 가까이 가면 스위칭을 하는 방식입니다. 

 

초소형 리드 스위치: http://mechasolution.com/shop/goods/goods_view.php?goodsno=1207&category= 

모듈형 리드 스위치 A: http://mechasolution.com/shop/goods/goods_view.php?goodsno=543502&category=

모듈형 리드 스위치 B: http://mechasolution.com/shop/goods/goods_view.php?goodsno=539761&category=

4eb8db95a0a4ce915caee4aba559ad37_1537107


주로, 접촉하지는 않지만 근첩해서 스위칭을 하는 애플리케이션에 사용됩니다. 

예) 문이나 창문의 경보 시스템, 


4eb8db95a0a4ce915caee4aba559ad37_1537108
#아두이노 소스코드

 

 int Reed = 7;

 

   
  


 

     
  
    
  
  
  
    
  
  



이러한 리드 스위치는 대부분 SPST로 하나의 스위칭을 합니다. 


자기장 센서

 

자기장 센서는 쉽게 말하면 전자식으로 되어 있는 나침반입니다. 지구의 자전축이 실제로 N극과 S극을 나타내기 때문에 이에 따른 센서를 사용합니다. 가장 많이 사용하는 센서는 HMC5883L인데, 가성비가 좋아서 많이 사용되고 있습니다. 

이러한 자기장 센서는 자동차의 기울기가 아닌 절대적인 방향을 감지하기 위해서도 사용될 수 있습니다. 자이로센서를 사용하여 수평에서의 방향을 측정하려는 시도가 있지만, 적분 오차로 인해서 사용하기 어렵습니다. 이럴 때는 상대적으로 절대적 기준 (지구의 자성)을 가지고 있는 자기장 센서를 사용하거나 자기장 센서와 융합하여 적분 오차를 보정하는 것이 합리적입니다. 

 

자기장 센서: https://goo.gl/9LqXQ3

 

4eb8db95a0a4ce915caee4aba559ad37_1537108
 

 

4eb8db95a0a4ce915caee4aba559ad37_1537108
 

HMC5883L의 대체버전인 QMC5883L은 라이브러리가 없기 때문에 메카솔루션에서 자체적으로 라이브러리를 만들어서 공유했습니다. 

라이브러리: https://github.com/mechasolution/Mecha_QMC5883L.git

 

#아두이노 소스코드

 

#include <Wire.h>

#include <MechaQMC5883.h>

 

MechaQMC5883 qmc;

 

void setup() {

  Wire.begin();

  Serial.begin(9600);

  qmc.init();

  //qmc.setMode(Mode_Continuous,ODR_200Hz,RNG_2G,OSR_256);

}

 

void loop() {

  int x, y, z;

  int azimuth;

  //float azimuth; //is supporting float too

  qmc.read(&x, &y, &z,&azimuth);

  //azimuth = qmc.azimuth(&y,&x);//you can get custom azimuth

  Serial.print("x: ");

  Serial.print(x);

  Serial.print(" y: ");

  Serial.print(y);

  Serial.print(" z: ");

  Serial.print(z);

  Serial.print(" a: ");

  Serial.print(azimuth);

  Serial.println();

  delay(100);

}

 

결과 화면

 

4eb8db95a0a4ce915caee4aba559ad37_1537108
 

메카리워즈 Image Map


모바일 버전으로 보기