2014년 11월 17일 월요일

적외선 감지 센서와 zFrog IoT Thing Board(CR-IOT-AT100) 이용한 침입 감지 시스템



l 적외선 감지센서 감지 거리 10M
l Zigbee 통신 거리 최소 20M
l 동작 감지 시 지그비 통신 송신/수신
l AA 건전지 장착



2014년 11월 11일 화요일

(AT100, AIB100) ZigBee 통신 Test Guide

  1. ZigBee firmware Fusing



STM32 Firmware를 굽기 전에 ZigBee Firmware를 먼저 굽는다.


    1. CC Debugger 연결 확인





CC Debugger가 연결된 상태에서 버튼을 누를 경우 LED가 녹색 불이 들어와야 한다.
만약 붉은 색 불이 들어오면 적절한 조치를 취해야 한다.


    1. ZigBee Firmware 다운로드



SmartRF Flash Programmer를 이용해서 펌웨어를 굽는다.


at100_coordinator_115200.hex
at100_device_115200.hex


at100_coordinator_115200.hex는 AIB100에 장착된 AT100에 다운로드 한다.
at100_device_115200.hex는 다른 AT100에 다운로드 한다.


  1. STM32 firmware Fusing



m32l1_iotk_at100_141106_1611_image.zip


위 압축 파일을 풀면 Project.hex 파일이 생성된다.
이 바이너리 파일을 STM32에 다운로드 한다.


  1. CC Debugger 인식 오류 시 방법



STM32 Firmware를 굽기 전에 ZigBee Firmware를 먼저 다운로드 한 후에 STM32를 다운로드 하면 크게 문제가 없지만, 만약 STM32 Firmware가 이미 다운로드 된 상태에서 ZigBee Firmware를 다운로드 하기 위해서 CC Debugger를 연결된 상태에서 버튼을 누를 경우 LED가 붉은 색 불이 들어오면서 연결이 되지 않게 된다.


AT100 부팅 시 화면에 나타나는 것은 아래와 같다.




Z를 입력하면 ZigBee Reset 핀을 Open하게 되고, 이 경우 CC Debugger 연결에 문제가 없게 된다.


  1. 시험 시료 전원 Off/On



모든 Firmware 다운로드를 마친 후에는 전원을 Off한 후 다시 전원을 인가한다.


  1. LED Bar 시험





AIB100 부분에서는 7> Actuator Test - ZigBee Comm RX 를 선택한다.


7> Actuator Test - ZigBee Comm RX


다른 AT100 부분에서는 6> Actuator Test - ZigBee Comm TX 를 선택한다.


6> Actuator Test - ZigBee Comm TX


다른 AT100 부분에서 아래 명령을 수행한다.


0> Read port State
1> Output port 0 On
2> Output port 0 Off
3> Output port 0 Blink

1번을 누르면 LED Bar가 켜지고, 2번은 꺼지고, 3번은 깜빡이게 된다.

[Mango-M32,9-Axis ]NT-ARS 센서의 온도계수(Temperature Coefficient) 찾기

[출처] http://m.blog.daum.net/pg365/290


MEMS 기반의 가속도 센서와 자이로 센서는 온도 변화에 따라 출력 값이 변화합니다. 자이로 센서와 가속도 센서를 고정한 상태로 온도를 변화시키면서 AD 변환된 raw 데이터를 받아보면 다음에서와 같이 센서의 출력 데이터가 온도에 영향을 받아 변하는 현상을 볼 수 있습니다.

//  temp   accl_x accl_y accl_z  gyro_x  gyro_y gyro_z temp  
      53        8      437    -3733      -68       -2        0      612
      51        5      420    -3730      -68       -2        0      596
      52       -1      422    -3739      -68       -5        0      581
      51       -6      400    -3730      -69       -3        0      566
      50       -2      404    -3734      -70       -1        0      553
      50      -13      394    -3739      -70       -6        0      542
      49      -13      383    -3739      -71       -7        0      529
      49      -15      385    -3742      -72       -5        0      518
      48      -22      376    -3742      -72       -7        0      506
      48      -35      379    -3750      -72       -4        0      494
      47      -34      375    -3756      -73       -4        0      484
      47      -36      367    -3743      -72       -6        0      475
      46      -38      358    -3751      -74       -7        0      465
      45      -56      359    -3753      -74       -6        0      456
      46      -49      359    -3749      -74       -7        0      446
      45      -49      360    -3762      -75       -7        0      438
      43      -43      349    -3759      -75       -8        0      429
      43      -54      340    -3759      -77       -8        0      421
      43      -54      335    -3756      -77       -7        0      413
      43      -68      330    -3761      -77       -8        0      406
      42      -66      335    -3764      -77       -7        0      398
      42      -59      330    -3761      -77       -8        0      391
      43      -69      320    -3766      -76      -10        0      385
      42      -70      320    -3770      -78       -8        0      378
      41      -65      313    -3761      -76       -6        0      372

이러한 온도 변화에 따른 가속도 센서와 자이로 센서의 바이어스는 Kalman filter로 두 센서의 출력을 융합하여 Euler 각도를 계산하는데 에러를 발생시킵니다. 만일 온도 변화에 따른 센서의 출력 데이터 변화가 선형에 가깝다면 1차 방정식으로 쉽게 보상 가능할 것입니다.

NT-ARS 센서에 온도를 올리고 내리는 실험을 통해 온도 변화에 따른 출력 데이터를 모으고 이를 엑셀의 그래프로 그려 보았습니다. 데이터가 원점 근처에 모여있는것은, 온도에서 25도를 빼고 센서 출력 데이터에서도 평균을 빼서 그래프를 그렸기 때문입니다. 가속도 센서의 데이터(accl_x_c, accl_y_c, accl_z_c)가 각속도 센서의 데이터(gyro_x_c, gyro_y_c)보다 온도 변화에 영향을 더 크게 받는 것을 볼 수 있고 그래프의 모양도 대략 선형을 띄고 있습니다. 일이 아주 쉬워질 것 같습니다. ^^


온도에 의한 바이어스를 보정하기 위해서는 수집된 데이터들로부터 각 축에 대한 1차 함수의 기울기만 구하면 됩니다. 기울기를 안다면 온도에 따른 변위를 계산하여 실측에서 빼줌으로 온도가 변하더라도 값을 일정하게 유지할 수가 있습니다. 수집한 데이터로부터 1차함수의 계수를 구하는 방법은 LMS(Least Mean Square) 방법을 사용합니다. 다음 첨부 문서를 참고하기 바랍니다.


C 코드로는 다음과 같이 간단하게 구현할 수 있습니다.
 double a = 0;
 double b = 0;
 double c = 0;
 double d = 0;
 double e = 0;
 double f = 0;


 while (반복 조건) {
    double x = ReadTemperature();
    double y = ReadSensorRawData();
 
    a += x*x;
    b += x;
    c += x;
    d += 1;
    e += x*y;
    f += y;
 }

 float s = 1.f/(a*d - b*c);
 temp_coef = s*(d*e - b*f);

첨부 문서에서와 같은 방법으로 1차 함수의 기울기를 구하면, 기울기를 온도계수(Temperature Coefficient)로 사용하여 다음과 같이 보정하게 됩니다.

       보정된 값 = raw 값 - 온도계수 x 온도

이렇게 센서의 온도 변화에 따른 바이어스를 보정하게 되면 ARS센서가 계산한 Euler 각도가 온도 변화에 따라 틀어지는 현상을 막을 수 있으며, 또한 센서의 온도가 충분히 안정될 때까지 기다리는 워밍업 시간을 따로 둘 필요도 없어집니다.

다음에는 온도 변화를 실험한 장치를 간단히 소개드리겠습니다.