-
안드로이드: 내장 가속도계 센서 이용해서 충돌 감지하기안드로이드 스튜디오 2020. 12. 17. 22:52
안드로이드 내부의 삼축 가속도 센서를 이용해서 충돌을 감지한다.
충돌을 감지하는 방법은 가속도 센서의 변화량을 이용하며
변화량을 어떻게 이용하느냐에 따라 충돌 측정방법은 다르다.
가속도 센서에 대한 자세한 설명은 역시나 developer 참조
package org.techtown.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements SensorEventListener { private SensorManager sensorManager; private Sensor senAccelerometer; private long lastUpdate = 0; private float last_x, last_y, last_z; private int COLLISION_THRESHOLD = 20000; // 충돌 임계값 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE); senAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); // 센서 종류 설정 - 본인은 linear acceleration sensor 이용 sensorManager.registerListener(MainActivity.this, senAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); } @Override public void onSensorChanged(SensorEvent sensorEvent) { Sensor mySensor = sensorEvent.sensor; if(mySensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION){ float x = sensorEvent.values[0]; float y = sensorEvent.values[1]; float z = sensorEvent.values[2]; long curTime = System.currentTimeMillis(); // 현재시간 // 0.1초 간격으로 가속도값을 업데이트 if((curTime - lastUpdate) > 100) { long diffTime = (curTime - lastUpdate); lastUpdate = curTime; // 내가 마음대로 정한 충돌량 double collision_detect = Math.sqrt( Math.pow(z - last_z,2)*100 + Math.pow(x-last_x,2)*10+ Math.pow(y-last_y,2)*10)/ diffTime * 10000; if (collision_detect > COLLISION_THRESHOLD) { //지정된 수치이상 흔들림이 있으면 실행 Toast.makeText(this, "충돌!!", Toast.LENGTH_SHORT).show(); } else if (speed < 10) { } //갱신 last_x = x; last_y = y; last_z = z; } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }
반응형'안드로이드 스튜디오' 카테고리의 다른 글
안드로이드: 간단한 데이터를 저장하고 싶을 때(SharedPreferences 사용예제) (0) 2020.12.18 안드로이드: 비디오 갤러리(Video Gallery) 만들기 (0) 2020.12.17 안드로이드: callOnClick 메소드 (클릭없이 이벤트 호출) (0) 2020.10.09 안드로이드: 간단 그림판 만들기!(Canvas, Paint 클래스 사용하기) (0) 2020.09.23 안드로이드: xml파일 만들어서 사용하기 (대화상자, 토스트메시지 커스텀) (0) 2020.09.22