venerdì 28 marzo 2014

Creare un' Applicazione Android Rivolta all 'Acquisizione Di Dati Sensoriali in Tempo Reale


SENSORI : TIPOLOGIE




INIZIARE A PROGRAMMARE ANDROID

Se si vuole implementare un qualunque sensore sul proprio dispositivo, si utilizzata il SENSOR FRAMEWORK che identifica i sensori già presenti sul dispositivo, le capacità sul sensore, la velocità minima con quale i sensori acquistano i dati.
Per accedere ai sensori, si utilizza la classe sensorMenager che viene richiamata all'interno di una qualche classe (es: Gestione Sensori), attraverso il seguente codice:

public class GestoreSensori implements SensorEventListener{
private SensorManager sm;
                      .............
   
              public GestoreSensori(MainActivity activity) {
                    this.sm = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE);

 }

Si implementa il metodo istanzaSensori che contiene l'elenco dei sensori che si voglio monitorare:

private void istanziaSensori() {
Sensor accellerometro=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (accellerometro!=null) {elenco.put(Sensor.TYPE_ACCELEROMETER, accellerometro);caratteristiche.add(new SensoreInfo(accellerometro));}
Sensor giroscopio=sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
if (giroscopio!=null) {elenco.put(Sensor.TYPE_GYROSCOPE, giroscopio);caratteristiche.add(new SensoreInfo(giroscopio));}
Sensor campoMagnetico=sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
if (campoMagnetico!=null) {elenco.put(Sensor.TYPE_MAGNETIC_FIELD, campoMagnetico);caratteristiche.add(new SensoreInfo(campoMagnetico));}
Sensor prossimita=sm.getDefaultSensor(Sensor.TYPE_PROXIMITY);
if (prossimita!=null) {elenco.put(Sensor.TYPE_PROXIMITY, prossimita);caratteristiche.add(new SensoreInfo(prossimita));}
Sensor orientazione=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
if (orientazione!=null) {elenco.put(Sensor.TYPE_ORIENTATION, orientazione);caratteristiche.add(new SensoreInfo(orientazione));}
Sensor gravita=sm.getDefaultSensor(Sensor.TYPE_GRAVITY);
if (gravita!=null) {elenco.put(Sensor.TYPE_GRAVITY, gravita);caratteristiche.add(new SensoreInfo(gravita));}
Sensor accelerazioneLineare=sm.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
if (accelerazioneLineare!=null) {elenco.put(Sensor.TYPE_LINEAR_ACCELERATION, accelerazioneLineare);caratteristiche.add(new SensoreInfo(accelerazioneLineare));}
Sensor vettoreDiRotazione=sm.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
if (vettoreDiRotazione!=null) {elenco.put(Sensor.TYPE_ROTATION_VECTOR, vettoreDiRotazione);caratteristiche.add(new SensoreInfo(vettoreDiRotazione));}
Sensor temperaturaAmbiente=sm.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
if (temperaturaAmbiente!=null) {elenco.put(Sensor.TYPE_AMBIENT_TEMPERATURE, temperaturaAmbiente);caratteristiche.add(new SensoreInfo(temperaturaAmbiente));}
Sensor temperaturaDispositivo=sm.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
if (temperaturaDispositivo!=null) {elenco.put(Sensor.TYPE_TEMPERATURE, temperaturaDispositivo);caratteristiche.add(new SensoreInfo(temperaturaDispositivo));}
Sensor luminosita=sm.getDefaultSensor(Sensor.TYPE_LIGHT);
if (luminosita!=null) {elenco.put(Sensor.TYPE_LIGHT, luminosita);caratteristiche.add(new SensoreInfo(luminosita));}
Sensor pressione=sm.getDefaultSensor(Sensor.TYPE_PRESSURE);
if (pressione!=null) {elenco.put(Sensor.TYPE_PRESSURE, pressione);caratteristiche.add(new SensoreInfo(pressione));}
Sensor umidita=sm.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY);
if (umidita!=null) {elenco.put(Sensor.TYPE_RELATIVE_HUMIDITY, umidita);caratteristiche.add(new SensoreInfo(umidita));}
}
Naturalmente si crea anche la classe principale chiamata MainActivity nella quale si vanno a gestire i vari sensori:
public class MainActivity extends Activity {
private LinearLayout layout;
private GestoreSensori gs;
private HashMap<Integer, TextView> textSensori;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.layout=new LinearLayout(this);
this.gs=new GestoreSensori(this);
this.textSensori=new HashMap<Integer, TextView>();
layout.setOrientation(LinearLayout.VERTICAL);
layout.setGravity(Gravity.LEFT);
ScrollView sv=new ScrollView(this);
sv.addView(layout);
setContentView(sv);
creaGraficaSensori();
}
void rilevaUrto() {}
@Override
public boolean onCreateOptionsMenu(Menu menu) {return true;}
@Override
protected void onResume() {super.onResume();gs.registraSensori();}
@Override
protected void onPause() {
super.onPause();
gs.cancellaSensori();
}
void aggiornaSensori(int sensore, String valore) {textSensori.get(sensore).setText(Sensore.getNomeTipo(sensore)+"= "+valore);}
@SuppressWarnings("rawtypes")
private void creaGraficaSensori() {
boolean flag=true;
LinkedList<SensoreInfo> ll=gs.elencoSensori();
for (SensoreInfo sensoreInfo : ll) {
TextView sVal=new TextView(this);
sVal.setGravity(Gravity.LEFT);
sVal.setBackgroundColor(Color.TRANSPARENT);
sVal.setText(sensoreInfo.getNomeTipo()+"= ");
textSensori.put(sensoreInfo.getTipo(), sVal);
layout.addView(sVal);
}
creaSeparatore();
for (SensoreInfo sensoreInfo : ll) {
TextView sInfo=new TextView(this);
sInfo.setGravity(Gravity.LEFT);
sInfo.setText(sensoreInfo.toString());
if (flag) {sInfo.setBackgroundColor(Color.WHITE);flag=false;}
else {sInfo.setBackgroundColor(Color.LTGRAY);flag=true;}
layout.addView(sInfo);
creaSeparatore();
}
}
private void creaSeparatore() {
TextView separatore=new TextView(this);
separatore.setBackgroundColor(Color.DKGRAY);
separatore.setHeight(2);
layout.addView(separatore);
}
}

A questo punto, si creano tutte le classi dei sensori che si vogliono gestire e che si sono elencati nel metodo istanzaSensori. 
Ad esempio, supponiamo di andare a gestire il SensoreUmidità si avrà:

import android.hardware.SensorEvent;
import com.example.dispositivimobili.sensori.SensoreMonovalore;
public class SensoreUmidita extends SensoreMonovalore{
public SensoreUmidita(int tipo) {super(tipo);}
public SensoreUmidita(SensorEvent se, Float temperatura) {
super(se.sensor.getType());
if (temperatura==null) {
setValore(new java.lang.Float(se.values[0]));
} else {
float umiditaAssoluta=(float) (216.7*((se.values[0]*100)*6.112*Math.exp((17.62*temperatura)/(243.12+temperatura)))/(273.15+temperatura));
setValore(new java.lang.Float(umiditaAssoluta));
}
}
}


SISTEMI DI RIFERIMENTO SENSORI



0 commenti:

Posta un commento

 
Segnala a Zazoom - Blog Directory Pubblicità gratis per il mio sito