1 / 13

Android sensors

Android sensors. List of sensors. Make new app. In onCreate add SensorManager sensorManager = ( SensorManager ) getSystemService ( Context.SENSOR_SERVICE ); List<Sensor> list = sensorManager.getSensorList ( Sensor.TYPE_ALL ); for (Sensor s : list) {

bmassey
Download Presentation

Android sensors

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Android sensors

  2. List of sensors • Make new app. • In onCreate add • SensorManagersensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); • List<Sensor> list = sensorManager.getSensorList(Sensor.TYPE_ALL); • for (Sensor s : list) { • Log.e("SENSORS","name: "+s.getName()); • } • Nexus One Sensors • BMA150 3-axis Accelerometer • AK8973 3-axis Magnetic field sensor • AK8973 Orientation sensor • CM3602 Proximity sensor • CM3602 Light sensor • Linear Acceleration Sensor • Rotation Vector Sensor • Nexus S Sensors • KR3DM 3-axis Accelerometer • AK8973 3-axis Magnetic field sensor • AK8973 Orientation sensor • GP2A Proximity sensor • GP2A Light sensor • Linear Acceleration Sensor • Rotation Vector Sensor • K3G Gyroscope sensor • Gravity Sensor • API also supports • pressure sensor (to help determine altitude)

  3. compass • New app: Compass • Add member variables • SensorManagersensorManager; • Sensor compassSensor; • MyCompassListenermyCompassListener = new MyCompassListener(); // we need to make this

  4. MyCompassListener • Make class • class MyCompassListener implements SensorEventListener{}; • Let eclipse add unimplemented functions • In onSensorChanged(SensorEventevent), add • Log.e("compass","x: "+event.values[0]+"y: "+event.values[1]);

  5. Register our sensor listener • In onCreate, get sensor and register listener • sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); • List<Sensor> list = sensorManager.getSensorList(Sensor.TYPE_ALL); • for (Sensor s : list) { • Log.e("SENSORS","name: "+s.getName()+" tpye: "+s.getType()); • if (s.getType()==Sensor.TYPE_MAGNETIC_FIELD) { • Log.e("debuginfo","registeringlinaccel"); • compassSensor = s; • sensorManager.registerListener(myCompassListener, s, sensorManager.SENSOR_DELAY_FASTEST); • } • } • Run and see compass values

  6. unregister and reregister • Sensors will keep on creating events, so we must stop the events when the app is not active • In main activity • @Override • public void onPause() { • super.onPause(); • sensorManager.unregisterListener(myCompassListener); • } • @Override • public void onResume() { • super.onResume(); • sensorManager.registerListener(myCompassListener, compassSensor, sensorManager.SENSOR_DELAY_FASTEST); • }

  7. Draw compass • Recall simple drawing on a canvas lecture • In graphical editor, add “view” object. • Save • Go to xml and make the just made entry be of type edu.udel.eleg454.MyView instead of View • This requires replacing view and /view • Make new class • MyView that extends view • Add • public MyView(Context context, AttributeSetattrs) { • super(context, attrs); • } • public MyView(Context context) { • super(context); • }

  8. In MyView, add member variables • public float x=0; • public float y=1; • float scale; • In onDraw, add • Paint paint = new Paint(); • paint.setDither(true); • paint.setColor(Color.RED); • paint.setStyle(Paint.Style.FILL_AND_STROKE); • paint.setStrokeJoin(Paint.Join.ROUND); • paint.setStrokeCap(Paint.Cap.ROUND); • paint.setStrokeWidth(2); • Now draw the compass • scale = (float) Math.sqrt(x*x+y*y); // normalize • x = x/scale*50; • y = y/scale*50; • canvas.drawLine(100,100,100+y,100+x, paint);

  9. In Compass (our main activity class) • In onCreate, get the view • view = (MyView)findViewById(R.id.View01); • In onSensorChanged(SensorEvent event), add • view.x = event.values[0]; • view.y = event.values[1]; • view.invalidate(); // forces redraw • run

  10. More sensors - Proximity • Make new app (or maybe canalized Compass) • Add member variables • SensorManagersensorManager; • Sensor sensor; • MySensorListenermySensorListener = new MySensorListener (); // we need to make this • In onCreate() add, • if (s.getType()==Sensor.TYPE_PROXIMITY) { • Log.e("debuginfo","registeringlinaccel"); • compassSensor= s; • sensorManager.registerListener(myCompassListener, s, sensorManager.SENSOR_DELAY_FASTEST); • } • Make MySensorListener as we made MyCompassListener • In onSensorChangedadd • if (event.sensor.getType()==Sensor.TYPE_PROXIMITY) { • Log.e("Proximity ","x: "+event.values[0]); • } • Run • Try with light sensor • Sensor.TYPE_LIGHT

  11. Linear Accelerometer • Make a linear accelerometer listener • Register listener • Add member variable • MyLinearAccelerationListenermyLinearAccelerationListener = new MyLinearAccelerationListener(); • Add local class • class MyLinearAccelerationListener implements SensorEventListener { }; • Let eclipse add unimplemented methods • Add class member variables • double[] linear_acceleration = new double[3]; • double[] location = new double[3]; • double[] velocity = new double[3]; • long lastTimeStamp = 0; • double timeDif; • In onSensorChanged(SensorEvent event) // make sure arg is called event • if (event.sensor.getType()==10) { • if (lastTimeStamp>0) { • // to do: add a jetPlayer-based sounds • timeDif = ((double)(event.timestamp - lastTimeStamp))/1e9; • velocity[0] = velocity[0] + timeDif*event.values[0]; • velocity[1] = velocity[1] + timeDif*event.values[1]; • velocity[2] = velocity[2] + timeDif*event.values[2]; • location[0] = location[0] + timeDif*velocity[0]; • location[1] = location[1] + timeDif*velocity[1]; • location[2] = location[2] + timeDif*velocity[2]; • locationView.setText("location x: "+((double)((int)(location[0]*10.0)))/10.0+ " y: "+ ((double)((int)(location[1]*10.0)))/10.0+" z: "+((double)((int)(location[2]*10.0)))/10.0); • velocityView.setText("velocity x: "+((double)((int)(velocity[0]*10.0)))/10.0+ " y: "+ ((double)((int)(velocity[1]*10.0)))/10.0+" z: "+((double)((int)(velocity[2]*10.0)))/10.0); • } • lastTimeStamp = event.timestamp; • }

  12. accelerometer • Challenge: remove gravity from measurement • gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; • gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; • gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; • scale = Math.sqrt(gravity[0]*gravity[0] + gravity[1]*gravity[1] + gravity[2]*gravity[2])/SensorManager.GRAVITY_EARTH; • gravity[0] = gravity[0]/scale; • gravity[1] = gravity[1]/scale; • gravity[2] = gravity[2]/scale; • linear_acceleration[0] = event.values[0] - gravity[0]; • linear_acceleration[1] = event.values[1] - gravity[1]; • linear_acceleration[2] = event.values[2] - gravity[2]; • SAME as linear accelerometer

  13. todo • Rotation sensor or gyroscope • Show opengl image that rotates as phone rotates • E.g., see navigator • Allow phone to work as joystick • Gesture recognition • Hidden markov models • Location tracking • Keep history • Gryoscope (to track gravity) • Statistical signal processing

More Related