Ich habe das NXP-Board FRDM-KL25Z verwendet. Ein 3-Achsen-Beschleunigungssensor MMA8451Q wurde veröffentlicht, daher habe ich Informationen von hier durch serielle Kommunikation aufgenommen und sie in Echtzeit mit Python aufgezeichnet. Sah.
(Beschleunigungssensor) FRDM-KL25Z --- (seriell) ---> PC (Echtzeitdiagramm)
FRDM-KL25Z hat die unten gezeigte Konfiguration.
Ich habe [mbed] verwendet (https://www.mbed.com). Um nun die Datei MMA8451Q.h
einzuschließen, gehen Sie zu hier, um die Bibliothek MMA8451Q zum mbed-Compiler hinzuzufügen. Importieren.
accel_serial.cpp
#include "mbed.h"
#include "MMA8451Q.h"
#define MMA8451_I2C_ADDRESS (0x1d<<1)
DigitalOut myled(LED_GREEN);
Serial pc(USBTX, USBRX);
MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
PwmOut rled(LED_RED);
PwmOut gled(LED_GREEN);
PwmOut bled(LED_BLUE);
int main()
{
pc.printf("Hello World!\n");
while (true) {
pc.printf("%f,", acc.getAccX());
pc.printf("%f,", acc.getAccY());
pc.printf("%f\n", acc.getAccZ());
rled = 1.0 - abs(acc.getAccX());
gled = 1.0 - abs(acc.getAccY());
bled = 1.0 - abs(acc.getAccZ());
wait(0.2);
}
}
Nachdem ich das Programm geschrieben hatte, kompilierte ich es, lud die Binärdatei herunter und schrieb den FRDM-KL25Z durch Ziehen und Ablegen in den von USB erkannten Ordner.
Ich habe Python benutzt. Installieren Sie die Bibliothek mit pip
$ pip install numpy matplotlib seaborn pyserial
Verbinden Sie anschließend FRDM-KL25Z mit USB und überprüfen Sie das Zuordnungsziel.
$ ls /dev/tty*
In meiner Umgebung wurde es / dev / ttyACM1
zugewiesen.
Wenn sie unterschiedlich sind, schreiben Sie den Teil / dev / ttyACM1
im Programm neu.
Erstellen Sie die folgende Python-Datei und führen Sie sie aus, um den Vorgang abzuschließen. (Bitte mit sudo Autorität ausführen)
Wenn der FRDM-KL25Z gekippt wird, werden die Beschleunigungsinformationen in der Grafik wiedergegeben.
plot_accel.py
from __future__ import unicode_literals, print_function
import numpy as np
import matplotlib.pyplot as plt
import serial
import seaborn as sns
sns.set(font_scale=2)
s = serial.Serial('/dev/ttyACM1')
fig, ax = plt.subplots(3, 1)
t = np.arange(0,10,0.1)
list_x = np.zeros(100).tolist()
list_y = np.zeros(100).tolist()
list_z = np.zeros(100).tolist()
lines_x, = ax[0].plot(t, list_x)
lines_y, = ax[1].plot(t, list_y)
lines_z, = ax[2].plot(t, list_z)
ax[0].set_ylim((-90,90))
ax[1].set_ylim((-90,90))
ax[2].set_ylim((-1,1))
ax[0].set_ylabel("Rot_X", size=30)
ax[1].set_ylabel("Rot_Y", size=30)
ax[2].set_ylabel("Z", size=30)
acc = s.readline().split(",") # just for warming up
while True:
t += 0.1
acc = s.readline().split(",")
acc_x = float(acc[0])*90
acc_y = float(acc[1])*90
acc_z = float(acc[2])
list_x.pop(0)
list_x.append(acc_x)
list_y.pop(0)
list_y.append(acc_y)
list_z.pop(0)
list_z.append(acc_z)
plt.draw()
lines_x.set_data(t, list_x)
lines_y.set_data(t, list_y)
lines_z.set_data(t, list_z)
ax[0].set_xlim((t.min(), t.max()))
ax[1].set_xlim((t.min(), t.max()))
ax[2].set_xlim((t.min(), t.max()))
plt.pause(.0001)
Ergänzender Kommentar
Das Abrufen des seriellen Signals ist der folgende Teil:
s = serial.Serial('/dev/ttyACM1')
acc = s.readline().split(",")
Echtzeit-Plotaktualisierungen können mithilfe der folgenden Optionen anstelle von "plt.show ()" erzielt werden:
plt.draw()
# ... matplotlib.Linienelement aktualisieren...
plt.pause(.0001)
Referenz: http://qiita.com/hausen6/items/b1b54f7325745ae43e47
Recommended Posts