Python con Arduino + Interfaz

  Controlar LED con Tkinter y Arduino



Objetivo: Crear una interfaz gráfica con Tkinter para controlar un LED conectado al Arduino.




1️⃣ Materiales Necesarios

  • Placa Arduino UNO (o compatible)
  • Cable USB para conectar el Arduino
  • Python 3 instalado
  • Tkinter (ya viene con Python por defecto)
  • PySerial instalado (pip install pyserial)

2️⃣ Código en Arduino (IDE de Arduino)

Antes de crear la interfaz gráfica en Python, debemos programar el Arduino para recibir comandos Seriales.

📌 Código para Arduino:

void setup() {
    Serial.begin(9600);  // Iniciar comunicación serial
    pinMode(13, OUTPUT); // Configurar LED en el pin 13 como salida
}

void loop() {
    if (Serial.available()) {  // Si hay datos en el puerto serie
        char comando = Serial.read();  // Leer el comando recibido
        if (comando == '1') {
            digitalWrite(13, HIGH);  // Encender LED
        }
        else if (comando == '0') {
            digitalWrite(13, LOW);   // Apagar LED
        }
    }
}

Sube este código al Arduino con el Arduino IDE.


3️⃣ Crear la Interfaz Gráfica con Tkinter en Python

Ahora vamos a crear la interfaz gráfica en Python usando Tkinter.

1️⃣ Crear un archivo Python y llamarlo control_led_tkinter.py.
2️⃣ Copiar este código:

import serial
import time
import tkinter as tk
from tkinter import messagebox

# Intenta conectar con el Arduino en el puerto correcto
try:
    arduino = serial.Serial('COM3', 9600)  # Cambia 'COM3' si es necesario
    time.sleep(2)  # Esperar que la conexión se establezca
except:
    messagebox.showerror("Error", "No se pudo conectar con Arduino. Verifica el puerto COM.")
    exit()

# Función para encender el LED
def encender_led():
    arduino.write(b'1')  # Enviar '1' al Arduino
    label_estado.config(text="LED ENCENDIDO", fg="green")

# Función para apagar el LED
def apagar_led():
    arduino.write(b'0')  # Enviar '0' al Arduino
    label_estado.config(text="LED APAGADO", fg="red")

# Crear la ventana de Tkinter
ventana = tk.Tk()
ventana.title("Control de LED con Tkinter")
ventana.geometry("300x200")  # Tamaño de la ventana

# Etiqueta de estado
label_estado = tk.Label(ventana, text="Estado: Desconocido", font=("Arial", 12))
label_estado.pack(pady=10)

# Botón para encender el LED
btn_encender = tk.Button(ventana, text="Encender LED", command=encender_led, bg="green", fg="white", font=("Arial", 12))
btn_encender.pack(pady=5)

# Botón para apagar el LED
btn_apagar = tk.Button(ventana, text="Apagar LED", command=apagar_led, bg="red", fg="white", font=("Arial", 12))
btn_apagar.pack(pady=5)

# Botón para salir
btn_salir = tk.Button(ventana, text="Salir", command=ventana.quit, font=("Arial", 12))
btn_salir.pack(pady=10)

# Iniciar el bucle de Tkinter
ventana.mainloop()

4️⃣ Explicación del Código

🔹 1. Conectar con Arduino

try:
    arduino = serial.Serial('COM3', 9600)  # Cambia 'COM3' si es necesario
    time.sleep(2)  # Esperar que la conexión se establezca
except:
    messagebox.showerror("Error", "No se pudo conectar con Arduino. Verifica el puerto COM.")
    exit()

✔️ Intenta conectar con Arduino en el puerto COM3.
✔️ Si no encuentra el Arduino, muestra un mensaje de error y cierra el programa.


🔹 2. Funciones para Encender y Apagar el LED

def encender_led():
    arduino.write(b'1')  # Enviar '1' al Arduino
    label_estado.config(text="LED ENCENDIDO", fg="green")

def apagar_led():
    arduino.write(b'0')  # Enviar '0' al Arduino
    label_estado.config(text="LED APAGADO", fg="red")

✔️ arduino.write(b'1') → Envía '1' al Arduino para encender el LED.
✔️ arduino.write(b'0') → Envía '0' al Arduino para apagar el LED.
✔️ label_estado.config(...) → Cambia el texto de la interfaz según el estado del LED.


🔹 3. Interfaz Gráfica con Tkinter

ventana = tk.Tk()
ventana.title("Control de LED con Tkinter")
ventana.geometry("300x200")  # Tamaño de la ventana

✔️ Crea una ventana de Tkinter con el título "Control de LED con Tkinter".


🔹 4. Botones para Encender y Apagar

btn_encender = tk.Button(ventana, text="Encender LED", command=encender_led, bg="green", fg="white", font=("Arial", 12))
btn_encender.pack(pady=5)

btn_apagar = tk.Button(ventana, text="Apagar LED", command=apagar_led, bg="red", fg="white", font=("Arial", 12))
btn_apagar.pack(pady=5)

✔️ Botón "Encender LED" → Llama a la función encender_led().
✔️ Botón "Apagar LED" → Llama a la función apagar_led().


🔹 5. Iniciar la Interfaz

ventana.mainloop()

✔️ Ejecuta la interfaz gráfica hasta que el usuario la cierre.


5️⃣ Ejecución del Programa

Para ejecutar el programa, abre CMD en la carpeta donde guardaste control_led_tkinter.py y escribe:

python control_led_tkinter.py

Si todo está correcto, se abrirá una ventana con los botones para encender y apagar el LED.


6️⃣ Resultado Final

Cuando presionas los botones:

  • "Encender LED"Arduino recibe '1' y enciende el LED.
  • "Apagar LED"Arduino recibe '0' y apaga el LED.
  • La interfaz cambia el texto a "LED ENCENDIDO" o "LED APAGADO".

7️⃣ Mejoras Opcionales 🚀

📌 Agregar más LEDs y botones para controlarlos individualmente.
📌 Mostrar el estado del LED leyendo la respuesta del Arduino.
📌 Usar imágenes en los botones en lugar de texto.


🔹 Conclusión

Este método es mucho más interactivo que escribir en la consola. Ahora puedes controlar el Arduino con botones en una interfaz gráfica creada con Tkinter. 🎛️✨

Si tienes dudas o quieres mejorar el código, dime y te ayudo. 🚀😊

Comments

Popular posts from this blog

Te cuento mi aventura como mestra IB de Design y STEM

Cómo enseñar a mover motores con Arduino (RECOMENDABLE PARA COLLEGIOS, GOOGLE REFERENCE SCHOOL QUE USEN CHROMEBOOKS!)