|
|
@ -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") |
|
|
|