Autore Topic: scelta di sensore  (Letto 1438 volte)

Offline nirvana91

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 7, Ubuntu 12.10
scelta di sensore
« il: 23 Giugno 2011, 18:50:07 CEST »
0
Ciao a tutti! se volessi rilevare dei movimenti bruschi tramite lo smartphone, quale sensore devo usare?
per fare un esempio chiaro di movimenti bruschi possiamo considerare una frenata o una sterzata brusca dell'auto...

grazie in anticipo...

Offline nirvana91

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 7, Ubuntu 12.10
Re:scelta di sensore
« Risposta #1 il: 24 Giugno 2011, 09:36:04 CEST »
0
piccolo up per non far finire il topic nel dimenticatoio...

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:scelta di sensore
« Risposta #2 il: 24 Giugno 2011, 11:14:31 CEST »
0
usa l'accelerometro. C'è una guida sul sito android developers
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline nirvana91

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 7, Ubuntu 12.10
Re:scelta di sensore
« Risposta #3 il: 24 Giugno 2011, 12:27:12 CEST »
0
io avevo fatto una prova di accelerometro usando un tutorial e il codice è questo:
Codice (Java): [Seleziona]
public class AccelerometroActivity extends Activity implements SensorEventListener {
         
         // Accelerometer X, Y, and Z values
         private TextView accelXValue;
         private TextView accelYValue;
         private TextView accelZValue;
         
         // Orientation X, Y, and Z values
         private TextView orientXValue;
         private TextView orientYValue;
         private TextView orientZValue;
         
         private SensorManager sensorManager = null;
         
            /** Called when the activity is first created. */
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                // Get a reference to a SensorManager
                sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
                setContentView(R.layout.main);
               
                // Capture accelerometer related view elements
                accelXValue = (TextView) findViewById(R.id.accel_x_value);
                accelYValue = (TextView) findViewById(R.id.accel_y_value);
                accelZValue = (TextView) findViewById(R.id.accel_z_value);
               
                // Capture orientation related view elements
                orientXValue = (TextView) findViewById(R.id.orient_x_value);
                orientYValue = (TextView) findViewById(R.id.orient_y_value);
                orientZValue = (TextView) findViewById(R.id.orient_z_value);
               
                // Initialize accelerometer related view elements
                accelXValue.setText("0.00");
                accelYValue.setText("0.00");
                accelZValue.setText("0.00");
               
                // Initialize orientation related view elements
                orientXValue.setText("0.00");
                orientYValue.setText("0.00");
                orientZValue.setText("0.00");      
            }
           
            // This method will update the UI on new sensor events
            public void onSensorChanged(SensorEvent sensorEvent) {
             synchronized (this) {
              if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
               accelXValue.setText(Float.toString(sensorEvent.values[0]));
               accelYValue.setText(Float.toString(sensorEvent.values[1]));
               accelZValue.setText(Float.toString(sensorEvent.values[2]));      
              }
             
              if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
               orientXValue.setText(Float.toString(sensorEvent.values[0]));
               orientYValue.setText(Float.toString(sensorEvent.values[1]));
               orientZValue.setText(Float.toString(sensorEvent.values[2]));      
              }
             }
            }
           
            // I've chosen to not implement this method
            public void onAccuracyChanged(Sensor arg0, int arg1) {
          // TODO Auto-generated method stub
         
         }
           
            @Override
            protected void onResume() {
             super.onResume();
             // Register this class as a listener for the accelerometer sensor
             sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
             // ...and the orientation sensor
             sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);
            }
           
            @Override
            protected void onStop() {
             // Unregister the listener
             sensorManager.unregisterListener(this);
             super.onStop();
            }
         
        }

solo che non capisco come interpretare i valori di ritorno al fine di rilevare i famosi movimenti bruschi...

Offline bovello

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • Mostra profilo
    • Bovello
  • Dispositivo Android:
    San Francisco
  • Play Store ID:
    Bovello
  • Sistema operativo:
    Windows 7, Mac OS Snow Leopard
Re:scelta di sensore
« Risposta #4 il: 17 Luglio 2011, 17:19:03 CEST »
0
è passato un po' di tempo e non so se interessa ancora...
..ad ogni modo può essere di beneficio per altri.

Dai un occhio qui SensorEvent | Android Developers

Come puoi vedere i valori del sensorevent sono le accelerazioni riscontrate lungo i tre assi. accelerazione, quindi m/s^2. un movimento brusco avrà una forte (decidi tu il significato di forte) accelerazione in un tempo ridotto.
ho letto velocemente la guida e non so se dice se c'è una frequenza preimpostata per scatenare l'evento onSensorChange. Ad ogni modo a logica direi che sarebbe opportuno memorizzare i valori riscontrati dai sensori in accoppiata al loro tempo di cattura, in modo da poter capire il cambiamento di accelerazione sul tempo, che è quello che determina il "movimento brusco".

Una nota importante che leggo nella guida è che i sensori in stato di quiete riportano l'accelerazione di gravità (9,8m/s^2), che devi eliminare (e ti suggerisce anche come fare) per avere valori neutri in situazioni di calma.