본문 바로가기

AVR 8BIT/3축가속도센서를 이용한 그래프

3축 가속도 센서를 이용한 그래프!!

 
안녕하세요 숭덕이 박제현 입니다. 또 오랜만에 이렇게 글을 쓰게 되네요!!
요즘 제품하나씩 사서 테스트하기가 힘드네요!!! 물가가 워낙에 비싸다 보니 일단 오늘은 3축 가속도센서를 이용하여
X,Y,Z 값의 데이터만 받아야겠습니다. 이 센서는 이동하는 물체의 가속도나 충격의 세기를 측정하는 센서입니다.
응용분야는 가속도 센서 측정이 필요한 모든 분야에서 사용이 가능하며, 로봇의 움직임, 기울어짐 측정가능, 예를 들어 네비게이션의 센서로 많이 활용됩니다. 요즘은 의학쪽으로  GPS를 통해 순간의 기울어짐을 보고 공공기간에 알라는 시스템이 몇가지 나온것으로 알고 있습니다. 또한 3축 가속도 센서를 가지고 계측기를 만들기에는 오차가 있기떄문에 무리가 있는 듯 합니다.
                 MMA7260Q  




2011년 8월 16일 새벽 1시 37분에 글을 올립니다.


출력방식  아날로그 
제품군  가속도계 
 X, Y, Z 
가속범위  1.5g, 2g, 4g, 6g 
감도  800mV/g, 600mV/g, 300mV/g, 200mV/g 
전압공급  2.2V ~ 3.6V 


g-Select1 g-Select2 가속범위   감도
 HIGH  HIGH 0~6g   200mV/g
HIGH  LOW 0~4g   300mV/g
 LOW  HIGH 0~2g  600mV/g
 LOW LOW  0~1.5g  800mV/g



계산 방식
1024단계로 10비트 샘플링 AVR128기준으로 설명드리겠습니다.
 Resolution = (Vout / 3.3) * 1024




        AVR128에 ADC 포트가 F포트이기때문에 ADC 0, 1, 2번 포트를 사용했습니다.


     
데이터값이 어떻게 나오는지 변화를 확인하기 위해 CP2102칩을 이용하여 USART로
통신해서 받아보겠습니다.


     
 /SLP는 저항이 PULL-UP이 되어 있어 다른신호를 인가하지 않을 경우 Normal Operation Mode로동작하고 g-Select1,2는 LOW,LOW로 줌으로써 1.5g 와 800mV/g를 사용했습니다.
기본적으로는 풀다운이 되어 있습니다.












X,Y,Z 축마다의 그래프입니다.



       




#include <mega128.h>
#include <delay.h>
#include <stdio.h>
 
char  str[50];
int ADC_I;
float ADC_X,ADC_Y,ADC_Z; 
int i=0;
//
void TX0_CHAR(char Sdata){ while ((UCSR0A&0x20)==0); UDR0=Sdata; }
 
void main(void){
    char i;       
    DDRA=0x03;
    UCSR0B=0x08; UCSR0C=6; UBRR0H=0; UBRR0L=103;  
    #asm("sei")
    
    while(1){    
       
        delay_us(104); 
       
        ADMUX=0; ADCSRA=0xE7; ADC_I=ADCW;
        ADC_X=(float)ADC_I * 3.3 / 1023.0;
        i=0; while(str[i])TX0_CHAR(str[i++]); // TXD1
//
        delay_us(104);
        ADMUX=1; ADCSRA=0xE7; ADC_I=ADCW;
        ADC_Y=(float)ADC_I * 3.3 / 1023.0;
        i=0; while(str[i])TX0_CHAR(str[i++]); // TXD1  
        
        delay_us(104);    
        
        ADMUX=2; ADCSRA=0xE7; ADC_I=ADCW;
        ADC_Z=(float)ADC_I * 3.3 / 1023.0;
        i=0; while(str[i])TX0_CHAR(str[i++]); // TXD1  
        
   sprintf(str,"%3.1f,%3.1f,%3.1f \n", ADC_X,ADC_Y,ADC_Z);
    }
}    
 


  • arnia 2011.08.22 19:51

    안녕하세요 혹시 이 센서가 무선으로 동작을 할까요?

  • 김병주 2011.09.19 23:47

    잘보고 갑니다~

  • 윤훈남 2012.03.06 21:10

    와이파이를 이용해서 무선으로 작동하고자 하는데요, 문제는 무선 센서의 소비 전력입니다. 최소 6개월 마다 충전기를 다시 교체할도록 설계할 수 있을까요?

    • 숭덕이 2012.03.06 21:57

      정확하게 해보지는 모르겠지만 태양전지를 이용해서 아침에는 태양전지를 사용하고 저녁에는 배터리로 사용하신다면 가능하리라 보이지만, 회로를 어떻게 설계하고 배터리선택이 중요하겠지요...

  • 안녕하세요 2012.03.26 21:19

    그래프 출력은 어떻게 하는 것인가요?

  • 고봉석 2012.05.12 16:26

    잘 봤습니다. ^-^ 마지막 그림 인상적이네요.

  • 박진혁 2012.12.02 22:37

    혹 이 제품이 아닌 다른 센서인 9축 자이로 센서로도 3축 에 대한 소스가 적용이 되나요?

  • 이지형 2013.01.16 15:45

    안녕하세요^^ 저는 일본에서 박사과정하는 학생입니다.
    좋은 자료와 정보의 공유에 감사합니다. 하지만 여기에서 잘못된 점이 있어서 글을 남김니다. 바로 "가속범위"라고 쓰여진 표의 부분입니다. MMA7260Q의 테이터시트를 잘 읽어보면 g-Range라고 1.5, 2, 4, 6이라고 제시되어 있습니다만 이것은 앞에 +-의 기호가 제시되어 있지 않은 것입니다.^^ 즉, 4g의 경우 -4g ~ 4g가 가속범위가 됩니다. 데이터시트를 보면 착각하기 쉽게 쓰여져 있습니다만 영문을 잘 읽어보시고 실험을 해보시면 바로 이해하실수 있습니다. 실험 결과 X축의 0g에서 1.65V정도가 출력이 됩니다. 그리고 감도를 800으로 설정하여 1g를 가하면 2.45V정도가 출력됩니다. 반대로 -1g를 가하면 0.85V정도가 출력이 됩니다. 즉 1.5g 범위는 +와 -의 양측을 의미합니다. 그럼 앞으로도 좋은 정보 공유를 부탁드립니다^^

  • 권씨 2013.02.18 15:53

    감사합니다. 잘보고 갑니다.

  • 꼬맹이 2013.03.07 03:47

    잘 보고 갑니다