mbed + Python으로 마이크로 컴퓨터 보드의 가속도 센서 정보를 실시간으로 시각화
16062 단어 마이크로 컴퓨터mbed파이썬matplotlibpyserial
(가속도 센서) FRDM-KL25Z --- (Serial) ---> PC (실시간 플롯)
FRDM-KL25Z는 아래 그림과 같은 구성입니다.
마이크로 컴퓨터 보드 측 농장 개발
mbed 을 사용했습니다. 여기서
MMA8451Q.h
의 파일을 포함하려면 여기 에서 mbed 컴파일러로 MMA8451Q 라이브러리를 가져옵니다.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);
}
}
프로그램을 쓸 수 있으면 컴파일해 바이너리 파일을 다운로드해, FRDM-KL25Z를 USB로 인식한 폴더에 대해서, 드래그&드롭으로 기입했습니다.
PC측의 시각화 어플리케이션 개발
파이썬을 사용했습니다. 라이브러리를 pip로 설치합니다.
$ pip install numpy matplotlib seaborn pyserial
그런 다음 FRDM-KL25Z를 USB로 연결하여 할당 대상을 확인합니다.
$ ls /dev/tty*
내 환경에서는
/dev/ttyACM1
에 할당되었습니다.다르면 프로그램의
/dev/ttyACM1
부분을 다시 씁니다.아래 파이썬 파일을 만들어 실행하면 완성됩니다. (sudo 권한을 붙여 실행해 주세요)
FRDM-KL25Z를 기울이면 연동하여 가속도 정보가 그래프에 반영됩니다.
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)
보충 코멘트
serial 신호의 취득은 이하의 부분입니다.
s = serial.Serial('/dev/ttyACM1')
acc = s.readline().split(",")
실시간 플롯 업데이트는
plt.show()
대신 다음을 사용하여 구현할 수 있었습니다.plt.draw()
# ... matplotlib.lines要素のアップデート ...
plt.pause(.0001)
참고 : ぃ tp // 이 m/하우센 6/이고 ms/b1b54f7325745
Reference
이 문제에 관하여(mbed + Python으로 마이크로 컴퓨터 보드의 가속도 센서 정보를 실시간으로 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/msrks/items/3e17fd400cf686fe294c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)