스마트폰 가속도 센서로 움직임 측정하기|3축 데이터부터 걸음·충격 분석까지

스마트폰 가속도 센서는 단순히 휴대폰 화면을 자동으로 회전시키는 부품이 아니다. 스마트폰 내부에 탑재된 MEMS(Micro Electro Mechanical Systems) 기반 가속도계는 기기의 움직임을 X·Y·Z 세 방향의 수치 데이터로 측정하고, 이 데이터를 이용해 걸음 수 측정, 기울기 감지, 충격 감지, 게임 조작 등 다양한 기능을 구현한다.

특히 가속도계는 미세한 관성 질량체와 전극 사이의 변화를 전기적 신호로 변환하는 방식으로 작동한다. 스마트폰이 움직이면 내부의 질량체가 관성에 의해 상대적으로 이동하고, 이때 발생하는 정전용량 변화를 이용해 가속도를 계산한다.

여기서 중요한 점은 가속도 센서가 단순히 ‘움직인 거리’를 측정하는 센서가 아니라는 것이다. 센서가 측정하는 값에는 지구의 중력에 해당하는 약 1g(약 9.81m/s²)의 성분과 실제 기기의 움직임에 따른 동적 가속도 성분이 함께 포함될 수 있다. 따라서 실제 움직임을 분석하려면 중력 성분과 운동 성분을 구분하는 과정이 필요하다.


스마트폰 가속도 센서의 MEMS 작동 원리

스마트폰 가속도 센서의 핵심은 관성(Inertia)이다.

스마트폰이 정지해 있어도 센서가 항상 0이라는 의미는 아니다. 책상 위에 스마트폰을 가만히 놓았을 때에도 지구의 중력 방향에 따라 약 1g에 해당하는 값이 특정 축에 나타날 수 있다.

스마트폰 내부의 MEMS 가속도계에서는 미세한 질량체가 스프링과 유사한 구조로 지지되어 있다.

스마트폰이 특정 방향으로 가속되면 질량체가 관성에 의해 미세하게 이동한다. 이때 주변 전극과의 거리가 변하면서 정전용량이 변화하고, 센서는 이러한 변화를 전기 신호로 변환한다.

결과적으로 다음과 같은 3축 데이터가 만들어진다.

  • X축: 좌우 방향의 가속도
  • Y축: 위아래 또는 전후 방향의 가속도
  • Z축: 기기 전후 또는 수직 방향의 가속도

단, 축의 실제 방향은 스마트폰 제조사와 운영체제의 좌표계 정의에 따라 달라질 수 있다.

따라서 센서 데이터를 분석할 때는 단순히 X가 ‘좌우’라고 가정하기보다 현재 스마트폰의 좌표계와 화면 방향을 먼저 확인하는 것이 중요하다.


스마트폰 가속도 센서와 다른 모바일 센서 비교

스마트폰에는 가속도계 외에도 자이로스코프와 지자기 센서가 함께 사용된다.

세 센서는 비슷해 보이지만 측정하는 물리량이 다르다.

센서주요측정값대표적인활용
가속도계선형 가속도 + 중력 성분걸음 수, 움직임, 기울기
자이로스코프각속도회전, VR, 화면 방향
지자기센서지구 자기장나침반, 방향 측정
가속도계 + 자이로움직임과 회전자세 추정, 게임, AR

예를 들어 스마트폰을 책상 위에서 오른쪽으로 밀면 가속도계는 이동 과정에서 발생하는 가속도를 감지한다.

반면 스마트폰을 제자리에서 회전시키면 자이로스코프가 각속도 변화를 보다 직접적으로 측정한다.

실제 스마트폰의 자세 추정에서는 하나의 센서만 사용하는 것이 아니라 여러 센서의 데이터를 결합하는 센서 퓨전(Sensor Fusion) 방식이 사용된다.

센서 측정 IOT 기구 예시 사진

스마트폰 가속도 센서 데이터 직접 측정하기

스마트폰 가속도 센서를 직접 체험하려면 별도의 개발 환경을 처음부터 구축하지 않아도 된다.

대표적인 방법 중 하나가 Phyphox와 같은 센서 측정 애플리케이션을 활용하는 것이다.

Phyphox는 스마트폰에 내장된 여러 센서의 데이터를 실시간으로 확인하고 기록할 수 있어 초등 고학년부터 중·고등학생의 과학 및 피지컬 컴퓨팅 활동에도 활용하기 좋다.

Phyphox 공식 사이트

1단계: 센서 데이터 확인

스마트폰에 센서 측정 앱을 설치한 뒤 가속도계 항목을 선택한다.

스마트폰을 책상 위에 정지시킨 상태에서 X, Y, Z 값을 확인한다.

이때 세 축 중 특정 축에 약 9.8m/s²에 가까운 값이 나타날 수 있다.

이는 센서가 고장 난 것이 아니다.

스마트폰의 방향에 따라 중력 벡터가 특정 축에 투영되고 있기 때문이다.

2단계: 스마트폰을 움직여 데이터 변화 확인

이번에는 스마트폰을 천천히 좌우로 움직인다.

센서 그래프에서 움직임이 발생한 순간 값이 크게 변하는 것을 확인할 수 있다.

빠르게 흔들면 더욱 큰 진폭의 데이터가 나타날 수 있다.

이 과정에서 학생들은 ‘움직였다’라는 추상적인 개념이 실제로는 시간에 따른 숫자의 변화로 표현될 수 있다는 것을 확인할 수 있다.

3단계: 반복 측정

동일한 동작을 여러 번 반복한다.

예를 들어 스마트폰을 다음과 같이 움직일 수 있다.

정지 → 오른쪽 이동 → 정지 → 왼쪽 이동 → 정지

각 동작에서 발생하는 센서 패턴을 비교하면 움직임과 센서 데이터 사이의 관계를 확인할 수 있다.


중력 가속도와 실제 움직임 데이터 분리하기

스마트폰 가속도 센서를 사용할 때 가장 중요한 개념 중 하나가 중력 성분 제거다.

센서 데이터에 중력 성분이 포함된 상태에서 단순히 움직임을 판단하면 정지 상태에서도 약 1g의 값이 존재하기 때문에 정확한 판단이 어렵다.

개념적으로는 다음과 같이 생각할 수 있다.

전체 가속도 = 중력 성분 + 동적 가속도 성분

따라서 실제 움직임을 분석하려면 중력 성분을 추정한 뒤 이를 제거하는 방법을 사용할 수 있다.

간단한 경우에는 이동 평균과 같은 저주파 필터를 이용해 중력 성분을 추정할 수 있다.

반대로 빠르게 발생하는 움직임을 추출하려면 고주파 성분을 강조하는 High-pass Filter를 사용할 수 있다.

이 방법은 걸음 수나 충격 감지처럼 상대적으로 빠르게 변화하는 신호를 분석할 때 유용하다.


이동 평균 필터로 스마트폰 가속도 센서 노이즈 제거하기

실제 센서 데이터는 완벽하게 매끄럽지 않다.

스마트폰을 책상 위에 놓아도 데이터에는 미세한 흔들림이나 전기적 노이즈가 포함될 수 있다.

이때 대표적으로 사용할 수 있는 방법이 이동 평균(Moving Average)이다.

예를 들어 최근 5개의 센서 데이터를 평균 내면 다음과 같은 형태가 된다.

# 최근 측정된 가속도 데이터 5개를 저장한다

data = [1.2, 1.4, 1.3, 1.5, 1.1]

# 최근 데이터의 평균을 계산한다

average = sum(data) / len(data)

# 계산된 평균값을 출력한다

print(average)

이 방식은 갑작스럽게 튀는 값을 어느 정도 완화할 수 있다.

다만 이동 평균은 모든 노이즈를 해결하는 만능 방법은 아니다.

윈도 크기를 너무 크게 설정하면 데이터가 지나치게 부드러워져 실제 움직임의 시작과 끝을 놓칠 수 있다.

반대로 윈도 크기가 너무 작으면 노이즈 제거 효과가 부족하다.

따라서 실제 프로젝트에서는 센서 샘플링 주기와 움직임의 속도에 맞춰 필터 크기를 조절하는 것이 중요하다.


스마트폰 가속도 센서로 걸음 수 감지하기

스마트폰 만보기 기능은 대표적인 가속도 센서 활용 사례다.

사람이 걸을 때 스마트폰에는 일정한 주기의 움직임 패턴이 발생한다.

이를 단순화하면 다음과 같은 방식으로 구현할 수 있다.

// 현재 측정된 X축 가속도 값을 가져온다

let x = accelerationX;

// 현재 측정된 Y축 가속도 값을 가져온다

let y = accelerationY;

// 현재 측정된 Z축 가속도 값을 가져온다

let z = accelerationZ;

// 3축 가속도의 크기를 계산한다

let magnitude = Math.sqrt(x * x + y * y + z * z);

// 걸음으로 판단할 임계값을 설정한다

let threshold = 12;

// 가속도 크기가 임계값을 넘었는지 확인한다

if (magnitude > threshold) {

  // 임계값을 넘으면 걸음 후보로 판단한다

  console.log(“움직임 감지”);

}

여기서 중요한 부분은 단순히 threshold를 넘었다고 바로 한 걸음으로 판단하면 안 된다는 점이다.

걸음마다 발생하는 충격이 연속적으로 임계값을 넘어갈 수 있기 때문이다.

실제 만보기 알고리즘에서는 일정 시간 동안의 피크를 찾거나, 연속 감지 사이에 최소 시간 간격을 두는 등의 방법을 추가한다.

예를 들어 다음과 같은 조건을 적용할 수 있다.

임계값 초과 → 피크 확인 → 일정 시간 이내 중복 제거 → 1걸음 증가

이렇게 하면 센서 노이즈나 손떨림 때문에 걸음 수가 과도하게 증가하는 문제를 줄일 수 있다.


충격 감지는 어떻게 구현할까?

가속도 센서는 낙하나 충돌과 같은 급격한 움직임을 감지하는 데에도 활용할 수 있다.

스마트폰이 갑자기 떨어지거나 물체와 충돌하면 짧은 시간 동안 가속도 값이 크게 변할 수 있다.

예를 들어 특정 상황에서 가속도 벡터 크기가 평소보다 크게 증가하면 이벤트 후보로 지정할 수 있다.

다만 단순 임계값 하나만으로 실제 낙하나 사고를 확정해서는 안 된다.

사람이 스마트폰을 강하게 흔드는 상황에서도 비슷한 값이 나타날 수 있기 때문이다.

실제 안전 시스템에서는 가속도계뿐 아니라 자이로스코프, 시간 정보, 기기 상태 등을 함께 분석하는 방식이 더 적합하다.


스마트폰 가속도 센서를 적분하면 이동 거리를 구할 수 있을까?

이론적으로 가속도를 시간에 대해 적분하면 속도를 얻을 수 있고, 다시 적분하면 위치 변화를 계산할 수 있다.

하지만 실제 스마트폰 센서에서는 Drift(누적 오차)가 발생한다.

아주 작은 센서 오차라도 시간이 지나면서 계속 누적되기 때문이다.

예를 들어 실제 가속도가 0인데 센서가 0.05m/s²의 작은 오차를 계속 측정한다고 가정해 보자.

이 값을 계속 적분하면 계산된 속도가 점점 증가하게 된다.

다시 적분하면 위치 오차는 더욱 커진다.

따라서 스마트폰만으로 장시간 정확한 위치 이동을 계산하는 것은 쉽지 않다.

실제 모바일 시스템에서는 자이로스코프, GPS, 지자기 센서 등을 함께 사용하는 센서 퓨전이나 보정 알고리즘을 활용한다.


스마트폰 가속도 센서의 실제 활용 분야

① 헬스케어와 운동 측정

가장 친숙한 활용 분야는 걸음 수 측정이다.

걷거나 뛰는 동안 발생하는 반복적인 가속도 패턴을 분석하여 활동량을 추정할 수 있다.

스마트워치 역시 이러한 원리를 확장해 심박수, GPS, 자이로스코프 등의 데이터를 결합한다.

② 안전 및 충격 감지

스마트폰이나 웨어러블 기기에서 갑작스러운 충격을 감지하는 데 활용할 수 있다.

특히 어린이용 웨어러블이나 IoT 교육 프로젝트에서는 ‘특정 크기 이상의 가속도가 발생하면 알림을 발생시킨다’와 같은 간단한 조건문부터 시작해 센서 기반 안전 시스템을 구현할 수 있다.

③ 게임과 인터랙티브 콘텐츠

스마트폰을 기울여 캐릭터를 움직이거나, 흔들어서 특정 동작을 실행하는 모바일 게임도 가속도 센서를 활용한다.

초등학생 피지컬 컴퓨팅 교육에서도 스마트폰을 센서 입력 장치로 사용하면 별도의 센서 모듈 없이 움직임 데이터를 활용한 프로젝트를 구성할 수 있다.

예를 들어 스마트폰을 오른쪽으로 기울이면 캐릭터가 오른쪽으로 이동하고, 일정 수준 이상 흔들면 게임 이벤트가 발생하도록 만들 수 있다.


스마트폰 가속도 센서를 키즈테크 교육에 활용하는 방법

스마트폰 가속도 센서는 단순한 IT 기능을 넘어 센서 → 데이터 → 알고리즘 → 결과라는 컴퓨팅 사고 과정을 설명하기 좋은 교육 소재다.

초등학생에게는 복잡한 수학 공식부터 가르치기보다 다음 순서로 접근하는 것이 효과적이다.

단계실습 과정핵심 학습 내용
1단계스마트폰을 움직이고 센서값이 어떻게 변하는지 관찰움직임에 따라 가속도 데이터가 실시간으로 변화한다는 원리 이해
2단계X·Y·Z 세 축의 센서값을 비교스마트폰의 방향과 움직임에 따라 각 축의 값이 다르게 나타나는 현상 확인
3단계특정 값 이상이면 ‘움직임’으로 판단하는 조건 설정임계값(Threshold)을 이용한 기본적인 센서 판단 알고리즘 이해
4단계같은 동작을 여러 번 반복하며 오인식 상황 확인센서의 노이즈와 측정 오차가 결과에 미치는 영향 분석
5단계 임계값과 필터 조건을 수정하여 정확도 개선데이터 필터링 및 알고리즘 튜닝을 통해 센서 측정 정확도 향상

이 과정을 거치면 학생은 단순히 센서를 사용하는 것을 넘어 측정값에는 노이즈가 존재하고, 알고리즘에는 오차가 발생하며, 데이터를 정제해야 원하는 결과를 얻을 수 있다는 핵심적인 데이터 리터러시까지 경험할 수 있다.


함께 보면 좋은 글

10분안에 해결하는 초등학생 NFC 자율 보관 설정법

댓글 남기기