Browse Source

Agrega control para transistor en arduino y boton en python, además de actualización de interfaz

master
parent
commit
1b23a30621
3 changed files with 55 additions and 47 deletions
  1. +44
    -24
      GUI.py
  2. +0
    -20
      lecturaArduino.ino
  3. +11
    -3
      lecturaArduino/lecturaArduino.ino

+ 44
- 24
GUI.py View File

@ -16,12 +16,15 @@ import tkinter as tk #Para la interfaz
#Variables a utilizar
global isRun #Valor booleano de programa corriendo
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 a leer desde Arduino
serialPort = 'COM3' #Puerto al que está conectado el Arduino
dato1 = 0.0 #Variable del dato convertido a float
serialPort = 'COM6' #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
#Función de lectura de datos en Arduino
def leer_datos():
@ -32,10 +35,13 @@ def leer_datos():
global isReceiving #valor booleano de recibiendo datos
global dato1 #dato a recibir desde Arduino
print("RECIBIENDO...")
dato1 = float(arduino.readline().decode("utf-8").strip()) #Lectura del dato y conversión a float
print(dato1)
var.set("TEMPERATURA: " + str(dato1) + " °C") #impresión del dato numérico en la interfaz
isReceiving = True #Confirmación de que se ha recibido el dato
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
isReceiving = True #Confirmación de que se ha recibido el dato
#Función para iniciar la gráfica
def iniciarGrafica(self, muestras,lines):
@ -48,11 +54,12 @@ 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.5 #Tiempo a esperar para que haya datos disponibles en el puerto serie
arduino.timeout = 0.1 #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")
btnConectar.config(state = "disabled")
btnManual.config(state = "normal")
except:
print("Error de conexión")
@ -68,19 +75,28 @@ def iniciar_hilo():
def guardarGrafica():
plt.savefig('miFigura.png')
#Ventana de control Manual (ON/OFF controlado por el usuario)
#Función de control Manual (ON/OFF controlado por el usuario)
def control1():
window2 = tk.Toplevel()
window2.resizable(width = 0, height = 0)
window2.title('Control Manual')
window2.geometry('500x300')
global on
global estado
global arduino
if on == False: #Cuando el transistor está apagado
on = True #Cambia la variable de condición
btnManual.config(bg = "#55DE1E", text = "ON") #Cambia color y texto del botón
estado = "on" #cambia la variable de estado
arduino.write(estado.encode()) #Se envía encender al serial de Arduino
else: #Cuando el transistor está encendido
on = False #Cambia la variable de condición
btnManual.config(bg = "red", text = "OFF") #Cambia color y texto del botón
estado = "off" #Cambia la variable de estado
arduino.write(estado.encode()) #Se envía apagar al serial de Arduino
#Ventana para control según una temperatura dada (Automático)
def control2():
window3 = tk.Toplevel()
window3.resizable(width = 0, height = 0)
window3.title('Control ON/OFF')
window3.geometry('500x300')
#def control2():
# window3 = tk.Toplevel()
# window3.resizable(width = 0, height = 0)
# window3.title('Control ON/OFF')
# window3.geometry('500x300')
#Función para pausar la gráfica
def pausar():
@ -137,10 +153,14 @@ root.rowconfigure(3, weigh=5)
canvas = FigureCanvasTkAgg(fig, master=frame)
canvas.get_tk_widget().pack(padx=0, pady=0, expand=True, fill='both')
btnManual = tk.Button(frame2, text = "Manual", command = control1)
btnManual.grid(row=0, column=0, pady=2, padx=10)
btnOnOff = tk.Button(frame2, text = "ON/OFF", command = control2)
btnOnOff.grid(row=0, column=1, pady=2, padx=10)
labelBlank = tk.Label(frame1, text="")
labelBlank.grid(row=0, column=4, pady=2, padx=155)
btnManual = tk.Button(frame1, text = "OFF", command = control1, bg = "red", state = "disabled")
btnManual.grid(row=0, column=6, pady=2, padx=10)
labelState = tk.Label(frame1, text="Transistor State:")
labelState.grid(row=0, column=5, pady=2, padx=5)
#btnOnOff = tk.Button(frame2, text = "ON/OFF", command = control2)
#btnOnOff.grid(row=0, column=1, pady=2, padx=10)
btnConectar = tk.Button(frame1, text = "Connect", command = conectar_serial, bg="#00F1FC")
btnConectar.grid(row=0, column=0, pady=2, padx=10)
btnStart = tk.Button(frame1, text = "Start", command = iniciar_hilo, bg="#008C17", state="disabled")
@ -150,7 +170,7 @@ btnPause.grid(row=0, column=2, pady=2, padx=10)
btnResume = tk.Button(frame1, text = "Resume", command = reanudar, bg="#00F428", state="disabled")
btnResume.grid(row=0, column=3, pady=2, padx=10)
btnDesconectar = tk.Button(frame2, text='Disconnect', command = desconectar_serial, bg="#FE5E5E")
btnDesconectar.grid(row=0, column=3, pady=2, padx=10)
btnDesconectar.grid(row=0, column=0, pady=2, padx=10)
labelData = tk.Label(frame2, textvariable=var)
labelData.grid(row=0, column=4, pady=2, padx=500)
@ -161,7 +181,7 @@ barraMenu.add_cascade(label="Archivo", menu=barra1)
root.config(menu=barraMenu)
#Animación de la gráfica (figura, función que grafica la línea, argumentos para graficar, rango de la figura)
anim = animation.FuncAnimation(fig, iniciarGrafica, fargs=(muestras, lines), interval = tiempoMuestreo)
anim = animation.FuncAnimation(fig, iniciarGrafica, fargs=(muestras, lines), interval = tiempoMuestreo, cache_frame_data=False)
root.geometry('1000x600')
root.mainloop()


+ 0
- 20
lecturaArduino.ino View File

@ -1,20 +0,0 @@
#define in1 A0
float temp1, lectura1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(in1, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
lectura1 = analogRead(in1);
temp1 = (lectura1 * 5000 / 1023 / 10) - 40;
Serial.print(temp1);
delay(800);
}

+ 11
- 3
lecturaArduino/lecturaArduino.ino View File

@ -1,6 +1,7 @@
#define in1 A0
#define out1 6
float temp1, lectura1;
String estado;
void setup() {
// put your setup code here, to run once:
@ -13,8 +14,15 @@ void loop() {
lectura1 = analogRead(in1);
temp1 = (lectura1 * 5000 / 1023 / 10) - 40;
Serial.print(temp1);
if(Serial.available()>0){
estado = Serial.readString();
if(estado == "on"){
digitalWrite(out1, HIGH);
}
else if(estado == "off"){
digitalWrite(out1, LOW);
}
}
delay(800);
}

Loading…
Cancel
Save