Personnellement, je voulais les valeurs du capteur d'accélération 3 axes dans le fichier csv. Je pense que chaque membre de Qiita a ce genre d'expérience.
J'avais donc Xperia à portée de main, alors j'ai immédiatement cherché sur Google Play et installé l'enregistreur du capteur d'accélération à une extrémité.
Alors quoi! La fréquence d'échantillonnage ne peut pas être réglée arbitrairement. .. ..
Cependant, il y avait une application qui pouvait être définie sur iOS, c'était donc une histoire que j'avais du mal à faire sur Android également.
(Attention) Ce chapitre sera écrit comme un journal d'étude, pas comme un journal de travail, veuillez donc le regarder comme un journal.
Comme toutes les applications (6 ou 7 échantillons), l'intervalle d'échantillonnage ne pouvait être ajusté que grossièrement.
En étudiant cela, il semble que le capteur d'accélération ne puisse pas ajuster le taux d'échantillonnage spécifique contrairement aux autres capteurs terminaux. Jetons un coup d'œil à registerListener de SensorManager Reference Ensuite, donnez essentiellement les quatre variables suivantes à ce troisième argument, int d'échantillonnage PeriodUs.
Ceux-ci sont définis dans la classe SensorEvent (SensorEvent Reference)
Cependant, vous vous demandez ce qui se passe si vous entrez un entier spécifique dans ce troisième argument. Alors! Le site suivant l'a spécifiquement vérifié ← https://akira-watson.com/android/accelerometer.html
Au fait, dans la configuration réelle, je n'ai pas mené l'enquête préliminaire avec autant de soin et je me suis retrouvé coincé dans un marais que cela ne fonctionnait pas bien même si j'entrais un entier, et je suis arrivé ici (sueur)
Excusez-moi depuis longtemps, mais comme je l'ai dit plus tôt, lorsque ce fait est devenu clair, j'avais déjà commencé à le mettre en œuvre. J'ajusterai de force l'intervalle d'échantillonnage en filtrant ou quoi que ce soit, je veux bien
windows 10 home Android Studio 3.6.3 Android Smartphone Xperia SO-01K API: 28 AVD :Nexus 5X API: 24
Comme vous pouvez le voir dans la version, installez-la et vous toucherez Android Studio pour la première fois En tant que connaissance préalable, je sais que les boutons sont faciles à faire
Fin du temps d'assurance, passez à la conception
L'API a été définie sur 16 dans l'espoir qu'elle puisse être utilisée sur n'importe quel appareil.
De la conclusion, il ressemble à ce sukusho
C’est une méthode d’implémentation que j’ai proposée.
-Utilisez quelque chose comme une fonction de veille pour réduire la fréquence d'images pour chaque terminal -Utilisez le filtrage passe-bas / haut pour générer un seuil qui donne à l'utilisateur la fréquence d'échantillonnage souhaitée. -Mise en œuvre en éclaircissant le tableau à intervalles égaux et en élargissant l'intervalle d'échantillonnage ・ Ecrire dans le fichier csv chaque image
J'ai pu en parler beaucoup
Eh bien, c'est l'ordre que j'ai approché lors de la production En conséquence, le troisième était bon, donc je ne l'ai pas fait à chaque image.
Le premier est l'exemple de code lors de l'utilisation du capteur d'accélération
MainActivity.java
private SensorManager mManager;
private TextView mX,mY,mZ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get an instance of the SensorManager
mManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mX = (TextView)this.findViewById(R.id.textViewX);
mY = (TextView)this.findViewById(R.id.textViewY);
mZ = (TextView)this.findViewById(R.id.textViewZ);
}
@Override
protected void onResume() {
super.onResume();
//Inscription de l'auditeur
Sensor accSensor= sensorManager.getDefaultSensor(
Sensor.TYPE_ACCELEROMETER);
this.mManager.registerListener((SensorEventListener) this, this.accSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
super.onPause();
//Libérer l’écouteur
this.mManager.unregisterListener((SensorEventListener)this, this.accSensor);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
mX.setText("Capteur d'accélération X:" + String.valueOf(sensorEvent.values[0]));
mY.setText("Capteur d'accélération Y:" + String.valueOf(sensorEvent.values[1]));
mZ.setText("Capteur d'accélération Z:" + String.valueOf(sensorEvent.values[2]));
}
public void onAccuracyChanged(Sensor sensor, int n) {
}
}
Cela fonctionne pour le moment, si vous souhaitez prendre en charge plusieurs capteurs, dans la fonction onSensorChanged
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){}
Branche conditionnelle
Comme vous pouvez le voir dans la méthode onSensorChanged, les valeurs [0] à [2] de la classe sensorEvent contiennent des accélérations de x, y, z [(voir Référence SensorEvent)](https: // developer. android.com/reference/android/hardware/SensorEvent.html#values)
Par conséquent, si vous ajoutez la date et l'heure de la mesure à cela et que vous la transmettez au format csv, vous pouvez obtenir un fichier csv avec la fréquence d'échantillonnage maximale.
Il existe deux méthodes pour détecter la fréquence d'échantillonnage (également décrites dans le dernier document de référence). https://qiita.com/taittide/items/2f6a70eae22117266a66 https://akihito104.hatenablog.com/entry/2013/07/22/013000
La sortie csv n'est pas le cœur de cette application, je vais donc l'omettre.
Le flux global de cette application est
① Le bouton START est enfoncé ↓ ② Enregistrer l'accélération x, y, z dans une nouvelle liste ↓ ③ Le bouton STOP / SAVE est enfoncé ↓ ④ Copiez l'accélération enregistrée en csv dans la liste de sortie ↓ ⑤ Sortie vers csv à partir de la liste pour la sortie csv ↓ ⑥ Supprimez toutes les données de la liste. Attendez ①
Par conséquent, la fréquence d'échantillonnage peut être ajustée en diminuant à une taille appropriée à l'étape (4).
Le premier est l'exemple de code
MainActivity.java
public void changeandcopy_information() {
accX_w = new ArrayList();
accY_w = new ArrayList();
accZ_w = new ArrayList();
timeStamp_Time_forAcc_w = new ArrayList(timeStamp_Time_forAcc);
int temp_size = timeStamp_Time_forAcc_w.size();
boolean once = false;
//Variables pour éclaircir la matrice à la fréquence d'échantillonnage souhaitée
int AdjustI = (int)(input_sampling_rate/wantConverting_sampling_rate);
for (int i = 0; AdjustI*i < temp_size; i++) {
if(!once){
timeStamp_Time_forAcc_w.clear();
once=true;
}
accX_w.add(accX.get(AdjustI*i));
accY_w.add(accY.get(AdjustI*i));
accZ_w.add(accZ.get(AdjustI*i));
timeStamp_Time_forAcc_w.add(timeStamp_Time_forAcc.get(AdjustI*i));
}
}
Description des nouvelles variables de caractères L'accélération est stockée dans accX, axxY, accZ, et elle est définie en premier pour la copier dans accX_w, axxY_w, accZ_w pour la sortie csv. timeStamp_Time_forAcc_w stocke la date et l'heure de la mesure de la trame La fréquence d'échantillonnage maximale du terminal de l'utilisateur est stockée dans input_sampling_rate, et la fréquence d'échantillonnage souhaitée par l'utilisateur est stockée dans wantConverting_sampling_rate en tant que type entier. Ajustez I et une fois que vous voyez le code
Si vous donnez un exemple concret et expliquez ce que vous faites Supposons que la fréquence d'échantillonnage maximale du terminal soit de 400 (Hz) et que la fréquence d'échantillonnage souhaitée par l'utilisateur soit de 100 (Hz). Ici, si vous le copiez purement tel quel, la taille du tableau des variables _w augmentera de 400 par seconde. Par conséquent, si la valeur de 400/100 (fréquence d'échantillonnage maximale (Hz) du terminal de l'utilisateur / fréquence d'échantillonnage (Hz) souhaitée par l'utilisateur) est multipliée par i dans l'instruction for, i est 0,1 * 400/100, 2 * 400/100, .., et la taille de la matrice par seconde est de 100, soit 1/4.
Réglage réussi de la fréquence d'échantillonnage! !! !! Quand ce n'est pas divisible? Cela ne peut pas être aidé. Les erreurs sont inhérentes
Il s'agit de la sortie lorsque la fréquence d'échantillonnage de la machine réelle est de 423 (Hz) et la fréquence d'échantillonnage que vous souhaitez convertir est de 10 (Hz).
La différence par rapport à la valeur théorique de 0,1 seconde était de -0,001 et 0,000, et l'erreur maximale était de ± 0,001 dans son ensemble.
Je me demande pourquoi il n'y a pas d'erreur jusqu'à présent, mais c'est quand même une fin heureuse.
Je l'ai posté sur github. L'utilisation est un peu compliquée, veuillez donc vous référer à READ ME.txt. https://github.com/miwazawa/accelerator-logger Il a été confirmé qu'il fonctionne avec Xperia et Nexus mentionnés dans l'environnement.
Merci d'être resté avec nous pendant si longtemps.
À partir de l'implémentation, j'ai senti que je devais le donner à github, et je l'ai écrit en sentant que c'était une mauvaise phrase (rires)
En ce qui concerne le code source, je reçois un excellent avertissement concernant activity_main.xml, mais cela fonctionne donc je ne vais probablement pas le réparer!
Le matériel de référence répertorie probablement tous les sites que j'ai utilisés cette fois, donc je pense que vous pouvez l'implémenter simplement en le regardant.
C'était presque la première fois pour moi d'écrire un programme approprié en java, donc j'espère que les débutants pourront s'y référer comme une façon d'étudier.
Du milieu, j'ai réalisé qu'il est plus rapide de le faire depuis VBA si vous voulez jouer avec l'arrangement, ce qui est une autre histoire
Méthode de conversion de type https://eng-entrance.com/java-var-change https://www.sejuku.net/blog/14531 Jugement entier de la chaîne https://techacademy.jp/magazine/19075 Comment utiliser Thread.sleep https://engineer-club.jp/java-sleep À propos de la sortie CSV https://tech.pjin.jp/blog/2017/10/17/%E3%80%90java%E3%80%91csv%E5%87%BA%E5%8A%9B%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89/ https://teratail.com/questions/25005?link=qa_related_pc_sidebar https://teratail.com/questions/49794 list / autour du tableau https://www.javadrive.jp/start/linkedlist/index2.html
Montage du capteur d'accélération https://akira-watson.com/android/accelerometer.html Méthode de détection de la fréquence d'échantillonnage http://akihito104.hatenablog.com/entry/2013/07/22/013000 https://qiita.com/taittide/items/2f6a70eae22117266a66
De l'installation d'Android Studio à Hello World https://akira-watson.com/android/helloworld.html layout https://qiita.com/mii-chang/items/ee965c1e8826d4e59414 jugement d'entrée edittext https://qiita.com/HALU5071/items/640652de9e31d4bbdbeb Créer une zone de texte http://mitoavadn.hatenablog.com/entry/2017/03/11/224529 Disposition des boutons https://teratail.com/questions/19171 SharedPreferences https://akira-watson.com/android/sharedpreferences.html Méthode de demande de stockage externe https://qiita.com/folivora/items/f17a125e0bc88c17a6d3
Cycle de vie de l'activité https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ja Comment utiliser l'écouteur de capteur https://techbooster.org/android/device/12524/ https://www.atmarkit.co.jp/ait/articles/1001/15/news119.html Comment passer d'Android Studio à Github https://blog.codecamp.jp/programming-androidstudio-github
Recommended Posts