로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/08/18
첨부#2 Memsic2125.pdf (201KB) (Down:608)
Link#1 (Down:304)
ㆍ추천: 0  ㆍ조회: 4633   
  아듀이노 가속도센서
 

가속도 센서 MX2125는 Analog Device사의 2축 가속도 센서 ADXL202를 사용한 제품이다. 
가속도는 얼마나 빨리 움직이는가를 측정한다.
즉, 속도계는 움직이는 빠르기를 측정하며, 가속도계는 속도의 변화를 측정한다.
가속도계는 전자장치와 로봇의 설계에서 다양한 가속도를 측정하는 능력을 센서로 사용할 수 있다. 
용도 : 가속도, 기울기, 경사, 회전, 진동, 충돌, 중력,
 
가속도계는 이미 넓은 응용장치에 사용되고 있다.
• 자기중심 로봇
• 기울임 감지 게임
• 비행기의 자동운항
• 자동차 경보장치
• 충돌검출, 에어백 개발
• 인간동작 감시장치
• 측량도구
 
과거에, 가속도계는 크기가 크고, 무겁고 비싼 측정 장비로 그 자체로 부담이었다.
이것은 MEMS(매우작은-전자-기계-장치)가 출현하여 모두 변화되었다,  
MEMS 기술은 실리콘 칩에서 몇가지의 옛날 기계장치를 올바르게 설계하는 것이 확실하다.
당신은 미래에 활약할 Memsic 2125 양축 가속도계로 작업할 것이다.
 
가속도계의 작동원리
 
 
내부적으로 Memsic 2125는 작은 히터를 가지고 있다. 이 히터는 장치안의 공기 방울을 덥혀준다.
공기방울에 중력가속도의 힘이 가해져 움직이면, 4개의 매우 예민한 온도센서 thermopiles로 검출된다.
그리고 기판의 전자식 변환기에서 공기방울의 위치를, 상대값 g-forces로 X와 Y 펄스를 출력한다.
0 g에서 Memsic 2125의 펄스폭 출력은 50% 이다. 펄스폭은 가속도에 비례하여 바뀐다음 기판에서 바로 측정된다.
 
Memsic 2125의 출력 펄스폭과 중력 가속도 g를 측정하는 공식 
 
 
주기 T2는 25° C (실내온도)에서 10 ms으로 교정되어 있다.
다음과 같이 베이직으로 공식을 변환할 수 있다.
 
Read_X_Force:
PULSIN Xin, HiPulse, xRaw
xGForce = ((xRaw / 5) - 500) * 8
RETURN


Memsic 2125 출력 T1의 주기는 xRaw에 저장된다. T2는 교정된 주기로 10ms 이므로,
그 다음 베이직의 PULSIN 실행시간이 2ms 이므로 5로 나누어 진다.
이 값은 단위가 us 이므로, 1000 x 0.5 = 500 이되고, 계산된 xRaw에 500 을 뺀다.    
마지막으로, 1/0.125 = 8 이므로, 마지막으로 8을 곱한다.
이 값은 milli-g's (1/1000th g)으로 부호있는 값으로 중력가속도(g-force)를 제공한다.
 
가속도계 연결방법
 
 
Basic Stamp로 읽는방법
디지털 포트에서 Xout과 Yout의 PWM 펄스폭(HIGH 레벨)을 측정한다. 
직렬포트 통신 터미널에서 가속도계의 출력을 확인할 수 있다. 
x 와 y 의 변수에는 모두 약 2500 정도의 값이 저장된다.

 
' SimpleTilt.bs2
' Measure room temperature tilt.
'{$STAMP BS2}
'{$PBASIC 2.5}
x VAR Word
y VAR Word
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
DEBUG CLS, ? X, ? Y
PAUSE 100
LOOP

 
아듀이노에 Memsic 2125를 연결한 2축 가속도 검출기

  

어듀이노의 MX2125 소스
/* Accelerometer MX2125 Application */
#include <math.h>
int ledPin = 13;
int xaccPin = 3;
int yaccPin = 2;

float xRaw;
float yRaw;
float xmG;
float ymG;


// value to multiply pulse width by to convert to microseconds
// for particular chip, in this case the atmega168
int Scale = 18;

float disp;
int angle;
int xTilt;
int yTilt;


void setup()
{
Serial.begin(9600); // Sets the baud rate to 9600
pinMode(ledPin, OUTPUT);
pinMode(xaccPin, INPUT);
pinMode(yaccPin, INPUT);
Serial.println("Hello World");
}


void loop()
{

/* Read G Force on X and Y axis */
xRaw = pulseIn(xaccPin, HIGH);   //read the duration of a high pulse on the x pin
Serial.println(xRaw, DEC);
xRaw = xRaw * Scale;  //convert to microseconds. need to find conversion factor for arduino
Serial.println(xRaw, DEC);
xmG = ((xRaw / 10) - 500) * 8;  // calc milli-g's
Serial.println(xmG, DEC);
yRaw = pulseIn(yaccPin, HIGH);
Serial.println(yRaw, DEC);
yRaw = yRaw * Scale;
Serial.println(yRaw, DEC);
ymG = ((yRaw / 10) - 500) * 8;
Serial.println(ymG, DEC);
Serial.println("end of g force calc");


/* Convert G force to Tilt on X and Y axis */
Serial.println("begin tilt calc");
disp = constrain ((abs(xmG) / 10), 0, 99);
Serial.println(disp, DEC);
Arcsine(disp);
Serial.println(angle, DEC);
xTilt = angle * (-2 * xmG + 1);  //fix sign
disp = constrain ((abs(ymG) / 10), 0, 99);
Arcsine(disp);
yTilt = angle * (-2 * ymG + 1);


/* Print results to serial port */
printByte('X');
printInteger(xTilt);
printByte(10);
printByte('Y');
printInteger(yTilt);
printByte(10);

}
/* Arcsine function */
void Arcsine(float disp)
{
  disp = disp * 0.574 ; //normalize input to 127. value should be 0.574 or 3.84
  Serial.println("arcsine step 1");
  Serial.println(disp, DEC);
  angle = 63 - (disp / 2);  //approximate angle
  Serial.println("arcsine step 2");
  Serial.println(angle, DEC);
  do  //find angle
  {
    angle = angle + 1;
    Serial.println(angle, DEC);
  } while (cos(angle) <= disp); 
    // problem with program seems to occur here.  gets caught in loop.
    // seems to be a number prior to getting here that causes it, though.
  angle = angle / 360;  //is this right?
}


/* Arccosine function */
//void Arccosine(int angle)
//{
//  angle = Arcsine(angle);
//  angle = 90 - angle;
//} 

 
제목 : Memsic 2125 Accelerometer
참조 : http://www.arduino.cc/en/Tutorial/AccelerometerMemsic2125

Memsic 2125는 가속도를 2g 까지 측정하는 2축 가속도 센서이다.
매우 정확한 측정을 할 때, Tout 출력을 계수하여 보상하면 오차를 보상할 수있다.
온도를 아날로그 입력으로 하는 동안,다른 핀들은 디지털 입력으로 직접 연결할 수 있으면,
아듀이노의 가속도의 측정이 이상적으로 된다.
 
가속도로 주어진 폭인 펄스의 파형으로 가속도 핀은 신호를 PC로 송신한다.   
다음의 예제는 Zaragoza 대학에서 아듀이노의 가속도 기술을 연구하는 동안,
Marcos Yarza가 응용소스를 만들고, Anders Gran가 설치한 가속도계를 보여준다, 
기판은  2축으로 최소한의 핀을 기판에 연결하였고, 온도핀은 연결하지 않았다, 
 
// 가속도계는 디지털 입력에 첨부된 2축의 가속도를 읽는다
// 그리고 그 값들은 직렬포트를 통해서 송신할 때 마다 LED를 점등한다.
// http://www.0j0.org
// 제작 : copyleft 2005 K3 - Malmo University - Sweden
// 저자 : Marcos Yarza, Marcos Yarza, SMEE

// 협찬 : Experiments in Art and Technology Sweden
 
int ledPin = 13;
int xaccPin = 7;
int yaccPin = 6;
int value = 0;
int accel = 0;
char sign = ' ';

int timer = 0;
int count = 0;


void setup()
{
  beginSerial(9600);                 // 직렬통신 포트를 9600으로 설정
  pinMode(ledPin, OUTPUT);    // ledPin을 출력으로
  pinMode(xaccPin, INPUT);    // xaccPin을 입력
  pinMode(yaccPin, INPUT);    // yaccPin을 입력
}


// 정수(2 바이트) 변수는 가속도 함수를 연산하여 저장한다
// 가속도 연산함수에 들어오는 변수는 time1, 결과는 정수(int)로 나간다.  
int operateAcceleration(int time1) 

{
  return abs(8 * (time1 / 10 - 500));
}


// (void) readAccelerometer는 센서를 읽고, 그 값을 제공한다
void readAcceleration(int axe)

{
   timer = 0;                             // 지역변수 타이머
   count = 0;                            // 지역변수 카운터
   value = digitalRead(axe);      // 최초로 입력핀을 읽어서 저장한다


  while(value == HIGH) value = digitalRead(axe);  // 입력핀이 low가 될때 까지 읽는다

  while(value == LOW) value = digitalRead(axe);  // 입력핀을 high가 될때까지 읽는다
  while(value == HIGH)             // low가 읽힐 때 까지 계수를 반복한다
 {
   value = digitalRead(axe);     // 입력핀을 읽어서 값에 저장
   count = count + 1;               // 계수값을 +1
  }
  timer = count * 18;                // ms의 몫을 계산


  if (timer > 5000) sign = '+';    // 부호연산
  if (timer < 5000) sign = '-';

  accel = operateAcceleration(timer);   // 가속도 값을 결정하여 가속도 값을 직렬포트로 제공한다
  if (axe == 7) printByte('X');   // axe가 7 이면 X 문자를 송신
  else printByte('Y');              // 아니면 Y 문자를 송신 
  printByte(sign);                   // 부호를 송신
  printInteger(accel);              // 가속도값을 송신
  printByte(' ');                      // 공문자를 송신

}

void loop()                            // 무한반복하는 주함수
{
  readAcceleration(xaccPin);   // 가속도 X를 읽고 출력한다
  readAcceleration(yaccPin);   // 가속도 Y를 읽고 출력한다


  digitalWrite(ledPin, HIGH);     // LED를 켠다
  delay(300);                         // 300ms을 대기한다 (외부 작동을 정지)
  digitalWrite(ledPin, LOW);     // LED를 끈다 
}
                                         

참조 : http://www.0j0.org 

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA

 AVRTOOLS™
   
윗글 가속도계 ADXL202 응용소스
아래글 아듀이노 RC서보 제어
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 487 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17510 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2653 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2749 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5490 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4592 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3143 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2815 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3173 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2798 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3043 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7631 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 3962 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3398 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 4996 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 3928 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3459 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3158 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6315 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3823 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5341 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 6940 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 7902 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4356 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4616 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5243 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9312 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16506 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6442 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5327 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4588 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 3939 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5814 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4421 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4469 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4652 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5178 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 3935 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13439 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9154 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5631 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6482 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 3973 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3282 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3091 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 4949 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 4910 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5593 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4026 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3319 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4533 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9564 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3395 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4825 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6201 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4688 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4633 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 4984 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4508 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7204 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6312 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0