From b0b700a885d89cd60ae36af06571ad2c26a99840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Bail=C3=B3n=20Bustos?= Date: Mon, 24 Apr 2023 03:00:58 +0000 Subject: [PATCH] =?UTF-8?q?Actualizaci=C3=B3n=20de=20interfaz=20para=20gra?= =?UTF-8?q?ficar=202=20sensores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se agregar la segunda gráfica y se adapta el código para la recepción de los datos de ambos sensores de temperatura desde Arduino --- GUI.py | 56 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/GUI.py b/GUI.py index 259f008..3aeffdd 100644 --- a/GUI.py +++ b/GUI.py @@ -13,6 +13,7 @@ import time #Delays import serial #comunicación con el monitor serial de Arduino from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #Crear una figura para insertar en tkinter import tkinter as tk #Para la interfaz +from matplotlib.lines import Line2D #Para hacer las líneas de las gráficas #Variables a utilizar global isRun #Valor booleano de programa corriendo @@ -20,11 +21,12 @@ global on #Valor booleano del estatus del transistor on = False #Inicializa transistor apagado isReceiving = False #Valor booleano de recibiendo datos isRun = True -dato1 = 0.0 #Variable del dato convertido a float -serialPort = 'COM6' #Puerto al que está conectado el Arduino +dato = 0.0 #Variable del dato convertido a float +serialPort = 'COM3' #Puerto al que está conectado el Arduino baudRate = 9600 #Baudios configurados en Arduino datos = 0.0 #Variable de dato a leer desde Arduino estado = "off" #Variable de estado que se enviará al serial +numData = 2 #Número de datos a recibir de Arduino #Función de lectura de datos en Arduino def leer_datos(): @@ -33,28 +35,33 @@ def leer_datos(): print("leyendo") while(isRun): global isReceiving #valor booleano de recibiendo datos - global dato1 #dato a recibir desde Arduino - print("RECIBIENDO...") - datos = arduino.readline().decode("utf-8").strip() #Lectura del dato - print(datos) - if(datos != ''): #Asegurar que se haya leído un dato - dato1 = float(datos) #Conversión del dato en float - print(dato1) #Datos en float - var.set("TEMPERATURA: " + str(dato1) + " °C") #impresión del dato numérico en la interfaz + global dato #dato a recibir desde Arduino + global data #Colección de datos a graficar + for i in range(numData): + datos = arduino.readline().decode("utf-8").strip() #Lectura del dato + print(datos) + if(datos != ''): #Asegurar que se haya leído un dato + print("RECIBIENDO..." + str(i)) + dato = float(datos) #Conversión del dato en float + data[i].append(dato) #Agrega el dato a la colección + var.set("TEMPERATURA: " + str(dato) + " °C") #impresión del dato numérico en la interfaz + else: + break; isReceiving = True #Confirmación de que se ha recibido el dato #Función para iniciar la gráfica def iniciarGrafica(self, muestras,lines): - global dato1 - data.append(dato1) #Agrega el dato a la colección - lines.set_data(range(muestras), data) #Se grafica en la línea la colección de datos + global dato + if(datos != ''): + lines[0].set_data(range(muestras), data[0]) #Se grafica en la línea la colección de datos + lines[1].set_data(range(muestras), data[1]) #Establecer conexión con Arduino def conectar_serial(): global arduino #Variable que va aguardar la conexión try: arduino = serial.Serial(serialPort, baudRate) #Asignación del objeto a la variable - arduino.timeout = 0.1 #Tiempo a esperar para que haya datos disponibles en el puerto serie + arduino.timeout = 0.2 #Tiempo a esperar para que haya datos disponibles en el puerto serie time.sleep(0.5) #Tiempo muerto para permitir la conexión print("CONECTADO") btnStart.config(state = "normal") @@ -121,15 +128,24 @@ def desconectar_serial(): #Variables a graficar muestras = 100 #Número de datos a visualizar -data = collections.deque([0] * muestras, maxlen = muestras) #Rango de datos tiempoMuestreo = 100 +data = [] +lines = [] +for i in range(numData): + data.append(collections.deque([0] * muestras, maxlen = muestras)) #Rango de datos + lines.append(Line2D([], [], color = "blue")) fig = plt.figure(facecolor = '0.94') #creación de la gráfica (figura) -ax = plt.axes(xlim=(0,100), ylim=(-40, 150)) #Rango de ejes -plt.title("Sensor 1 - Arduino") -ax.set_xlabel("Muestras") -ax.set_ylabel("Voltaje") -lines = ax.plot([], [])[0] #Creación de la línea a graficar +ax1 = fig.add_subplot(2, 1, 1, xlim=(0,100), ylim=(0, 150)) #Rango de ejes +ax1.title.set_text("Sensor 1 - Arduino") +ax1.set_ylabel("Voltaje") +ax1.add_line(lines[0]) + +ax2 = fig.add_subplot(2, 1, 2, xlim=(0,100), ylim=(0, 150)) #Rango de ejes +ax2.title.set_text("Sensor 2 - Arduino") +ax2.set_xlabel("Muestras") +ax2.set_ylabel("Voltaje") +ax2.add_line(lines[1]) root= tk.Tk() root.title("Sistema de calentamiento")