Sujet capteur (1) - introduction connexe


1. Introduction aux capteurs :

En parlant de capteurs, je pense que tout le monde les connaît. Par exemple, le shake de WeChat utilise un capteur d'accélération ;

<🎜 >Définition. de capteur : Un appareil physique ou un organe biologique capable de détecter et de ressentir des signaux externes, des conditions physiques (telles que la lumière, la chaleur, Modéré) ou composition chimique (comme la fumée), et transmettre les informations détectées à d'autres appareils ou organes !

Types de capteurs : Les capteurs peuvent être divisés sous différents angles, et le principe de conversion (physique de base ou chimie du fonctionnement du capteur Effet) ; objectif ; signal de sortie et matériaux et processus de production, etc. Généralement, ils sont répartis selon leur travail : capteurs physiques et capteurs chimiques. Deux catégories ! Les téléphones portables sont essentiellement équipés de capteurs physiques. Les capteurs installés sur les téléphones mobiles sont les suivants :

  • Capteur d'orientation (Capteur d'orientation)
  • Accélération. Capteur (Capteur accéléromètre)
  • Capteur gyroscope (Capteur gyroscope)
  • Capteur de champ magnétique (Capteur de champ magnétique)
  • Capteur de proximité
  • Capteur de lumière
  • Capteur de pression
  • Capteur de température
  • Capteur de gravité (introduit dans Android 2.3)
  • Capteur d'accélération linéaire (Capteur d'accélération linéaire, introduit dans Android 2.3)
  • Capteur vectoriel de rotation (Capteur vectoriel de rotation, Android 2.3)
  • Capteur d'humidité relative (Capteur d'humidité relative, Android 4.0)
  • Capteur de communication en champ proche (NFC) (introduit dans Android 2.3), NFC est différent des autres et possède des fonctions de lecture et d'écriture.
Bien sûr, en plus de ceux-ci, il en existe d'autres comme les capteurs de fréquence cardiaque, les capteurs de pas, les capteurs d'empreintes digitales, etc. Concernant les types de capteurs pris en charge par les appareils Android, veuillez consulter la documentation officielle :

Capteur Section Résumé~


2. Comment vérifier quels capteurs sont pris en charge par votre téléphone ?

Les types de capteurs mentionnés ci-dessus ne sont certainement pas disponibles sur tous les téléphones mobiles. Les types de capteurs installés sur chaque téléphone mobile. Et le nombre peut être différent. Par exemple, les types de capteurs pris en charge par le Nexus 5 que je possède sont : Gravité, lumière, distance, pression atmosphérique et gyroscope ! Étonnamment, la deuxième génération de moto x est dotée de la gravité, de la lumière, Capteur de distance et IR ! Concernant les types de capteurs supportés par votre téléphone mobile, vous pouvez vous rendre sur les avis correspondants Sites Web tels que : Zhongguancun Mobile Online, Pacific, etc. Recherchez votre propre modèle pour afficher les paramètres pertinents ! Bien sûr, nous pouvons également écrire notre propre code pour voir quels types de capteurs notre téléphone prend en charge ~

Exemple de code :

Exécution de rendus :

1.gif

Mise en œuvre du code :

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/txt_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </ScrollView></RelativeLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private TextView txt_show;
    private SensorManager sm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        txt_show = (TextView) findViewById(R.id.txt_show);

        List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
        StringBuilder sb = new StringBuilder();

        sb.append("此手机有" + allSensors.size() + "个传感器,分别有:\n\n");
        for(Sensor s:allSensors){
            switch (s.getType()){
                case Sensor.TYPE_ACCELEROMETER:
                    sb.append(s.getType() + " 加速度传感器(Accelerometer sensor)" + "\n");
                    break;
                case Sensor.TYPE_GYROSCOPE:
                    sb.append(s.getType() + " 陀螺仪传感器(Gyroscope sensor)" + "\n");
                    break;
                case Sensor.TYPE_LIGHT:
                    sb.append(s.getType() + " 光线传感器(Light sensor)" + "\n");
                    break;
                case Sensor.TYPE_MAGNETIC_FIELD:
                    sb.append(s.getType() + " 磁场传感器(Magnetic field sensor)" + "\n");
                    break;
                case Sensor.TYPE_ORIENTATION:
                    sb.append(s.getType() + " 方向传感器(Orientation sensor)" + "\n");
                    break;
                case Sensor.TYPE_PRESSURE:
                    sb.append(s.getType() + " 气压传感器(Pressure sensor)" + "\n");
                    break;
                case Sensor.TYPE_PROXIMITY:
                    sb.append(s.getType() + " 距离传感器(Proximity sensor)" + "\n");
                    break;
                case Sensor.TYPE_TEMPERATURE:
                    sb.append(s.getType() + " 温度传感器(Temperature sensor)" + "\n");
                    break;
                default:
                    sb.append(s.getType() + " 其他传感器" + "\n");
                    break;
            }
            sb.append("设备名称:" + s.getName() + "\n 设备版本:" + s.getVersion() + "\n 供应商:"
                    + s.getVendor() + "\n\n");
        }
        txt_show.setText(sb.toString());
    }
}

3. Méthodes et routines d'utilisation liées au capteur du capteur.

À partir de l'exemple en 2, nous pouvons résumer grossièrement comment obtenir le capteur Sensor et obtenir quelques informations liées au capteur. Le processus est le suivant :

1) Méthodes liées au capteur capteur

Étape 1 : Obtenir le gestionnaire de capteur :

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
  • Étape 2 : Obtenir la liste des objets capteurs de l'appareil :
List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
  • Étape 3 : Obtenir de manière itérative l'objet Capteur, puis appeler l'objet Capteur correspondant méthode pour obtenir des informations relatives au capteur :
for(Sensor s:allSensors){
    sensor.getName();   //获得传感器名称
    sensor.getType();     //获得传感器种类
    sensor.getVendor();    //获得传感器供应商
    sensor.getVersion();    //获得传感器版本
    sensor.getResolution();  //获得精度值
    sensor.getMaximumRange(); //获得最大范围
    sensor.getPower();        //传感器使用时的耗电量 
}

2) Routines d'utilisation du capteur

Généralement, nous disons rarement d'obtenir directement le capteur puis d'obtenir les informations ci-dessus ! Parce que ce n'est rien Le plus important est d'obtenir les données collectées par le capteur, comme l'obtention de la pression atmosphérique actuelle. Ou les valeurs des trois angles du capteur de direction, ou la valeur du gyroscope, et la plupart de la collecte de données du capteur est La routine suivante :

~Étape 1 : Obtenir le gestionnaire de capteurs :

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);

~Étape 2 : Appeler une méthode spécifique pour obtenir le capteur requis :

Par exemple, ce que vous obtenez ici est le capteur de direction. Si vous souhaitez obtenir le capteur, vérifiez vous-même l'API~ :

Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);

~Étape 3 : implémentez le. Interface SensorEventListener et réécrivez les méthodes onSensorChanged et onAccuracyChanged !

onSensorChanged : Sera rappelé lorsque la valeur du capteur change

onAccuracyChanged : Sera rappelé lorsque la progression de le capteur change

@Override
public void onSensorChanged(SensorEvent event) {
    final float[] _Data = event.values;
   this.mService.onSensorChanged(_Data[0],_Data[1],_Data[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

Nous obtenons généralement les données du capteur à partir de ce SensorEvent. Il y a une variable de valeurs dans cette classe. Le type est Float[]. La variable a au plus trois éléments , et différents capteurs ont des significations différentes représentées par les éléments correspondants. Par exemple, le premier élément du capteur de direction est la valeur de l'angle d'azimut, tandis que la première valeur du capteur de pression atmosphérique est la valeur de la pression atmosphérique !

~Étape 4 : L'objet SensorManager appelle registerListener pour enregistrer l'écouteur :

ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

La méthode est également très simple, et les paramètres correspondants sont : Contexte objet,Objet capteur capteur, Et Densité de précision du temps de retard du capteur, il y a quatre valeurs facultatives :

  • SENSOR_DELAY_FASTEST - Délai : 0 ms
  • SENSOR_DELAY_GAME——Délai : 20 ms
  • SENSOR_DELAY_UI——Délai : 60 ms
  • SENSOR_DELAY_NORMAL——Délai : 200 ms

Bien sûr, un faible délai signifie des inspections plus fréquentes du véhicule Plus de consommation d'énergie, s'il n'est pas recommandé d'en exiger beaucoup ; haute précision N'en utilisez pas un qui est trop précis. Généralement, utilisez davantage le troisième~Mesurez-le vous-même~

~Étape 5 : Désinscrire l'auditeur :

Utiliser Il suffit de le dire, c'est une bonne habitude, généralement on peut l'écrire dans la méthode de destruction d'Activité ou de Service :

ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

D'accord, la routine est très simple~


4. Téléchargez l'exemple de code pour cette section :

SensorDemo1.zip


Résumé de cette section :

D'accord, cette section vous présentera les capteurs sous Android et comment comprendre les capteurs pris en charge par votre téléphone. En plus de la recherche en ligne, vous pouvez également écrire votre propre code pour tester. Ensuite, il explique également la méthode et le processus d'obtention des informations relatives au capteur. Il explique également les routines de collecte des données des capteurs. Plus tard, nous analyserons l'utilisation de certains capteurs couramment utilisés, alors restez à l'écoute ~2.jpg