Buen día a todos,
Estoy trabajando en un proyecto de Biomédica, estoy trabajando con dos Arduino nano y 2 sensores MPU6050, un arduino va con un sensor mpu y se comunica por bluetooth al otro arduino y sensor mpu. Estoy leyendo ángulos (X1, Y1; X2, Y2) como resultado de la aplicación de un filtro complemento a los datos que se obtienen de los acelerómetros y giroscopios. Necesito realizar graficas de estos 4 ángulos, pero en el código de Python (version 3.8.5) para realizar la lectura de datos y gráfica no obtengo ningún error, salen las gráficas pero no plotea ningún dato.
Este es un ejemplo de cómo se estan leyendo los datos del Arduino en el Python:
[-0.48, -0.02, 1.49, -9.29]
<class 'float'>
[-0.48, -0.03, 1.49, -9.31]
<class 'float'>
[-0.49, -0.02, 1.49, -9.32]
<class 'float'>
[-0.49, 0.0, 1.5, -9.31]
<class 'float'>
[2.0, 2.0, 1.5, -9.31]
<class 'float'>
[-0.49, -0.02, 1.5, -9.33]
<class 'float'>
[-0.49, -0.02, 1.51, -9.32]
<class 'float'>
[-0.5, -0.01, 1.5, -9.31]
<class 'float'>
Este es mi código de Python:
import serial
import time
import collections
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.lines import Line2D
import numpy as np
Samples = 100 #Muestras / Samples
sampleTime = 100 #Tiempo de muestreo / Sample Time
numData = 4
serialPort = 'COM8' # Puerto serial arduino / Arduino serial port
baudRate = 9600 # Baudios
serial.Serial()
def getSerialData(self,Samples,numData,serialConnection, lines):
while True:
with serial.Serial('COM8',9600) as ser:
while True:
lista =str(ser.readline()).strip("b'")
lista = lista.strip("\\r\\n'")
data = lista.split()
for i in range(numData):
data[i].encode("utf-8").decode("unicode-escape").encode("latin1")
value = float(data[i]) #array con datos tipo float
data[i].append(value) #Guarda lectura en la ultima posicion / #Save reading in the end position
lines[i].set_data(range(Samples),data[i]) # Dibujar nueva linea / Drawn new line
try:
serialConnection = serial.Serial(serialPort, baudRate) # Instanciar objeto Serial / Instance Serial Object
except:
print('Cannot conect to the port')
# Limites de los ejes / Axis limit
xmin = 0
xmax = Samples
ymin = [-100, -100 , -100 , -100]
ymax = [100, 100 , 100 , 100]
lines = []
data = []
for i in range(numData):
data.append(collections.deque([0] * Samples, maxlen=Samples)) #Lista donde se almacena las variables del sensor
lines.append(Line2D([], [], color='blue')) #Lineas en 2D para graficar los datos
fig = plt.figure()# Crea una nueva figura #Create a new figure.
ax1 = fig.add_subplot(2, 2, 1,xlim=(xmin, xmax), ylim=(ymin[0] , ymax[0]))
ax1.title.set_text('Sensor 1 - X')
ax1.set_xlabel("Samples")
ax1.set_ylabel("Degrees")
ax1.add_line(lines[0])
ax2 = fig.add_subplot(2, 2, 2,xlim=(xmin, xmax), ylim=(ymin[1] , ymax[1]))
ax2.title.set_text('Sensor 1 - Y')
ax2.set_xlabel("Samples")
ax2.set_ylabel("Degrees")
ax2.add_line(lines[1])
ax3 = fig.add_subplot(2, 2, 3,xlim=(xmin, xmax), ylim=(ymin[2] , ymax[2]))
ax3.title.set_text('Sensor 2 - X')
ax3.set_xlabel("Samples")
ax3.set_ylabel("Degrees")
ax3.add_line(lines[2])
ax4 = fig.add_subplot(2, 2, 4,xlim=(xmin, xmax), ylim=(ymin[3] , ymax[3]))
ax4.title.set_text('Sensor 2 - Y')
ax4.set_xlabel("Samples")
ax4.set_ylabel("Degrees")
ax4.add_line(lines[3])
anim = animation.FuncAnimation(fig,getSerialData, fargs=(Samples,numData,serialConnection,lines), interval=sampleTime)
plt.show()
serialConnection.close() # cerrar puerto serial/ close serial port
La gráfica sale, pero no plotea ningún dato de los que lee, no se cuál sea el problema. Soy nuevo en el manejo de Arduino y Python y llevo ya algunas semanas haciendo este proyecto desde cero y aprendiendo al mismo tiempo. Si alguien me puede ayudar se lo agradeceré eternamente ya que la gráfica en tiempo real es lo último que necesito hacer.
Muchas gracias por su atención.