본문 바로가기

아이폰/앱 만들기

[Object-c] 4. 가속도센서 이용하기

반응형






 

안녕하세요 이번 포스팅은 가속도 센서 이용하기 입니다. 시뮬레이터가 아닌 디바이스의 가속도센서를 이용해 모션을 인식하도록 만들어보려고 합니다. 

아래 사진과 같이 가속도 센서는  x,y,z의 세방향에 대한 가속도 크기를 측정할 수 있습니다.

예를 들어 사진상 왼쪽으로 힘이 가해지면 x는 음수를 나타낼것 입니다.  


 



디바이스 상태별 변화 

아래 그림과 같이 디바이스 상태에 따라서 각 값이 변동됩니다. 그에 따라 핸드폰이 뒤집어 있는지 아닌지도 z값으로 확인 할 수 있습니다.

 



해당 포스팅은 x-code 9.2 로 작업되었습니다.



프로젝트 설정


Framework  추가하기

가속도 센서를 사용하려면 'CoreMotion.framework'를 추가해야합니다.

프로젝트 루트 디렉토리 - > Build Phases - > Link Binary With Libraries -> + - > 'CoreMotion.framework' 추가  , 다음 과 같은 화면이 나옵니다.

 



소스작업 


헤더파일 임포트

프레임 워크를 사용하기 위해서 소스 파일에 헤더파일을 임포트 합니다. 

#import <CoreMotion/CoreMotion.h>


가속도계 센서 설정

모션매니저를 선언하고 초기화 하고 큐를 초기화합니다.


@interface PlayViewController (){

    CMMotionManager *motionManager; 

}

...

motionManager=[[CMMotionManager alloc]init];//모션관리자

NSOperationQueue* queue=[[NSOperationQueue alloc]init];//모션관리자가 작업을 쌓아둘 큐



센서값 출력 

아래 소스처럼 몇초 단위로 가속도 센서를 업데이트 할지 설정합니다. 0.1초 간격으로 정확하게 업데이트 되는게 아니라, 매 업데이트 시간이 0.1초가 안넘도록 하는 설정이라고 합니다.  즉 1초에 10번 이하로 업데이트가 됩니다.

    

    if(motionManager.accelerometerAvailable){

        //가속도계 사용 가능할 경우

        

        motionManager.accelerometerUpdateInterval=1.0/10.0;//0.1초 단위로 업데이트

        [motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData * accelerometer, NSError *error)

        

             if(error){

                 //에러인 경우 가속도계 센서 정지

                 [motionManager stopAccelerometerUpdates];

             }else{                 

                 NSLog(@"x=%.2f, y=%.2f,                                   z=%.2f",accelerometer.acceleration.x,accelerometer.acceleration.y,accelerometer.acceleration.z);

                 

            

         }

         ];

        

    }else{

        speedLabel.text=@"가속도 센서 사용 불가 ";

    }





다음과 같이 작성하면 로그를 확인 했을때 방향에 따라 값이 달라지는 것을 확인할 수 있습니다.

저는 테스트 결과 핸드폰을 눞힌 상태에서 앱을 사용하도록 유도 할 예정이기 때문에 x 값의 수치에 따라 앉았는지 아닌지를 인식하도록 했습니다.




추가적으로 각자 정밀한 테스트 후 원하시는 값으로 설정하시는걸 추천합니다. 제 코드는 참고용 입니다.



해당 포스팅은 지극히 주관적인 내용으로 저자의 복기 목적으로 작성된 것이고, 내용에대해 수정이나 추가 요청은 언제든 환영합니다. 



반응형