made mSensor App ready for recording session at manfreds house

This commit is contained in:
toni
2018-07-20 19:14:38 +02:00
parent 2883dd8060
commit b8f20ec8d9
5 changed files with 73 additions and 10 deletions

View File

@@ -51,7 +51,7 @@ public class MainActivity extends FragmentActivity implements PopupMenu.OnMenuIt
//textview to show the bpm estimation
mBpmTextView = (TextView) findViewById(R.id.bpmText);
mEstimator = new Estimator();
mEstimator = new Estimator(this);
mEstimator.addListener(this);
// ensures the connection to the bt sensor board

View File

@@ -1,5 +1,6 @@
package de.tonifetzer.conductorssensor.estimation;
import android.content.Context;
import android.util.Log;
import java.util.LinkedList;
@@ -9,6 +10,7 @@ import java.util.TimerTask;
import java.util.concurrent.CopyOnWriteArrayList;
import de.tonifetzer.conductorssensor.sensor.SensorBoard;
import de.tonifetzer.conductorssensor.utilities.SensorDataFileWriter;
import de.tonifetzer.conductorssensor.utilities.Utils;
public class Estimator implements SensorBoard.OnSensorBoardDataListener {
@@ -18,18 +20,25 @@ public class Estimator implements SensorBoard.OnSensorBoardDataListener {
private BpmEstimator mBpmEstimator;
private Timer mTimer = new Timer();
private SensorDataFileWriter mFileWriter;
private Context mContext;
public Estimator(){
public Estimator(Context context){
mAccelerometerWindowBuffer = new AccelerometerWindowBuffer(6000, 750);
mBpmEstimator = new BpmEstimator(mAccelerometerWindowBuffer, 0, 5000);
mContext = context;
}
public void start(SensorBoard sensorBoard){
if(sensorBoard != null){
mSensorBoard = sensorBoard;
mSensorBoard.addListener(this);
mSensorBoard.startAccelerometer();
//mSensorBoard.startAccelerometer();
mSensorBoard.startLinearAccelerometer();
mFileWriter = new SensorDataFileWriter(mContext);
startWorker();
@@ -41,11 +50,14 @@ public class Estimator implements SensorBoard.OnSensorBoardDataListener {
public void stop(){
if(mSensorBoard != null){
mSensorBoard.removeListener(this);
mSensorBoard.stopAccelerometer();
//mSensorBoard.stopAccelerometer();
mSensorBoard.stopLinearAccelerometer();
mAccelerometerWindowBuffer.clear();
mBpmEstimator.reset();
mFileWriter.toDisk();
} else {
Log.i("Estimator","Cant stop estimator. SensorBoard is null.");
}
@@ -55,8 +67,11 @@ public class Estimator implements SensorBoard.OnSensorBoardDataListener {
public void onAccelerometerChanged(AccelerometerData data) {
mAccelerometerWindowBuffer.add(data);
//Log.d("Acc: ", "x: " + data.x + " y: " + data.y + " z: " + data.z);
//todo: save data into stream and write on disk
mFileWriter.writeVector3D(data.ts, 2, data.x, data.y, data.z);
}
private void startWorker() {

View File

@@ -9,8 +9,6 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.mbientlab.metawear.Data;
@@ -22,6 +20,8 @@ import com.mbientlab.metawear.builder.RouteBuilder;
import com.mbientlab.metawear.builder.RouteComponent;
import com.mbientlab.metawear.data.Acceleration;
import com.mbientlab.metawear.module.Accelerometer;
import com.mbientlab.metawear.module.SensorFusionBosch;
import com.mbientlab.metawear.module.SensorFusionBosch.*;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -36,7 +36,9 @@ public class SensorBoard implements ServiceConnection {
private BtleService.LocalBinder serviceBinder;
private MetaWearBoard mMetaBoard;
private BluetoothDevice mBluetoothDevice;
private Accelerometer mAccelerometer;
private SensorFusionBosch mSensorFusion;
private boolean mBoardConnected = false;
@@ -203,6 +205,7 @@ public class SensorBoard implements ServiceConnection {
mAccelerometer.configure()
.odr(75f) // 75hz
.range(4f)
.commit();
mAccelerometer.acceleration().addRouteAsync(new RouteBuilder() {
@@ -243,6 +246,51 @@ public class SensorBoard implements ServiceConnection {
}
public void startLinearAccelerometer(){
if(mMetaBoard.isConnected()){
mSensorFusion = mMetaBoard.getModule(SensorFusionBosch.class);
mSensorFusion.configure()
.mode(Mode.NDOF)
.accRange(AccRange.AR_16G)
.gyroRange(GyroRange.GR_2000DPS)
.commit();
mSensorFusion.linearAcceleration().addRouteAsync(new RouteBuilder() {
@Override
public void configure(RouteComponent source) {
source.stream(new Subscriber() {
@Override
public void apply(Data data, Object... env) {
for(OnSensorBoardDataListener listener : mDataListeners){
listener.onAccelerometerChanged(new AccelerometerData(
System.currentTimeMillis(),
data.value(Acceleration.class).x(),
data.value(Acceleration.class).y(),
data.value(Acceleration.class).z()));
}
}
});
}
}).continueWith(new Continuation<Route, Void>() {
@Override
public Void then(Task<Route> task) throws Exception {
mSensorFusion.linearAcceleration().start();
mSensorFusion.start();
return null;
}
});
}
}
public void stopLinearAccelerometer(){
if(mMetaBoard.isConnected()){
mSensorFusion.stop();
}
}
/**
* Interface for callback onConnectionInfos

View File

@@ -47,5 +47,5 @@ dependencies {
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support:wear:26.1.0'
compileOnly 'com.google.android.wearable:wearable:2.2.0'
compile 'com.github.wendykierp:JTransforms:3.1'
api 'com.github.wendykierp:JTransforms:3.1'
}

View File

@@ -40,8 +40,8 @@
%measurements = dlmread('../measurements/wearR/recording_180bpm_4-4_177011641.csv', ';'); *
%measurements = dlmread('../measurements/wearR/recording_180bpm_4-4_177064915.csv', ';'); *
files = dir(fullfile('../../measurements/lgWear/', '*.csv'));
files = dir(fullfile('../../measurements/mSensor/', '*.csv'));
%files = dir(fullfile('../../measurements/lgWear/', '*.csv'));
%files = dir(fullfile('../../measurements/wearR/', '*.csv'));
%files = dir(fullfile('../../measurements/peter_failed/', '*.csv'));
@@ -52,7 +52,7 @@ for file = files'
%draw the raw acc data
m_idx = [];
m_idx = (measurements(:,2)==2); %Android App: 10, Normal Data: 2
m_idx = (measurements(:,2)==3); %Android App: 10, Normal Data: 2
m = measurements(m_idx, :);
%Interpolate to generate a constant sample rate to 250hz (4ms per sample)