Cómo Comunicar Arduino y Python por USB: Lectura del Estado de un Interruptor

Puedes conectar un Arduino a un ordenador mediante un cable USB y utilizar un programa en Python para recibir información de la placa. Esta comunicación permite supervisar sensores, registrar mediciones y crear aplicaciones que interactúan con el mundo físico.

En este tutorial, comenzaremos con un experimento sencillo: un interruptor conectado a un Arduino Uno y un programa en Python que muestra si está encendido o apagado.

El Arduino detecta la posición del interruptor y envía un mensaje mediante comunicación serie. Python recibe este mensaje y muestra el resultado en la terminal del ordenador.

Qué Necesitas

Para realizar este experimento, necesitarás:

  • Arduino Uno;
  • Cable USB compatible con la transferencia de datos;
  • Interruptor de dos terminales y cables de conexión;
  • IDE de Arduino;
  • Python instalado en el ordenador;
  • Biblioteca de Python pyserial.

Si no tienes un interruptor, puedes realizar la prueba utilizando un cable: conectar y desconectar el cable entre el pin 2 y GND simula los dos estados.

Cómo Funciona la Comunicación

El cable USB permite que el ordenador se comunique con el Arduino a través de un puerto serie. En Windows, este puerto recibe un nombre como COM3, COM5 o COM6.

El Arduino envía los mensajes de texto LIGADA y DESLIGADA. El programa en Python espera estos mensajes y muestra cada estado recibido.

En este experimento, utilizamos una velocidad de 9600 baudios, configurada tanto en el Arduino como en Python. Ambos deben utilizar la misma velocidad para que la comunicación funcione correctamente.

Conexión del Interruptor al Arduino

La conexión es sencilla:

  • Un terminal del interruptor se conecta al pin digital 2.
  • El otro terminal se conecta a GND.

El código configura el pin 2 como INPUT_PULLUP. Esto activa la resistencia pull-up interna del Arduino, eliminando la necesidad de utilizar una resistencia externa en este montaje.

Con esta configuración, cuando el interruptor está abierto, el pin registra HIGH. Cuando el interruptor cierra el contacto con GND, el pin registra LOW.

En nuestro programa, interpretamos estos estados de la siguiente manera:

Estado del interruptorLectura del pinMensaje enviado
Contacto abiertoHIGHDESLIGADA
Contacto cerradoLOWLIGADA

Carga y Prueba del Código de Arduino

En el IDE de Arduino, selecciona Arduino Uno en Herramientas → Placa y elige el puerto correspondiente en Herramientas → Puerto.

Carga en la placa el código presentado en este artículo.

El programa envía el estado inicial del interruptor y, después, un nuevo mensaje únicamente cuando detecta un cambio. De esta manera, la terminal no repite continuamente el mismo texto.

const int pinoChave = 2;

int estadoAnterior = -1;

void setup() {

  pinMode(pinoChave, INPUT_PULLUP);

  Serial.begin(9600);

}

void loop() {

  int estado = digitalRead(pinoChave);

  // Envia o estado inicial e depois apenas quando mudar.

  if (estado != estadoAnterior) {

    if (estado == LOW) {

      Serial.println(«LIGADA»);

    } else {

      Serial.println(«DESLIGADA»);

    }

    estadoAnterior = estado;

  }

  delay(50);

}

Antes de pasar a Python, abre el Monitor Serie del IDE de Arduino y selecciona 9600 baudios. Al encender y apagar el interruptor, deberían aparecer los mensajes LIGADA y DESLIGADA.

Esta prueba confirma que la conexión y el código de Arduino funcionan correctamente.

Preparación de Python

Con Python instalado, abre el Símbolo del sistema de Windows y comprueba la instalación con el comando py --version.

Después, instala la biblioteca de comunicación serie con py -m pip install pyserial.

La biblioteca pyserial permite que el programa abra el puerto serie del Arduino y lea los datos enviados a través del USB.

Creación del Programa en el Ordenador

Guarda el código Python presentado en este artículo en un archivo llamado chave.py.

Si utilizas el Bloc de notas, selecciona Todos los archivos en el campo de tipo de archivo al guardar. Esto evita que el archivo reciba el nombre chave.py.txt.

En el código, configura el puerto serie para que coincida con el que aparece en el IDE de Arduino. En esta prueba, utilizamos COM6, pero puede ser diferente en tu ordenador.

El programa lee una línea cada vez, convierte los datos recibidos en texto y comprueba si el mensaje corresponde a LIGADA o DESLIGADA.

Ejecución del Experimento

Mantén el Arduino conectado mediante USB y cierra el Monitor Serie del IDE de Arduino para liberar el puerto y permitir que Python lo utilice.

Abre la carpeta donde guardaste chave.py. En la barra de direcciones del Explorador de archivos, escribe cmd y pulsa Enter.

En la ventana que se abre, ejecuta py chave.py.

Ahora, cambia la posición del interruptor. La terminal mostrará Interruptor: LIGADA o Interruptor: DESLIGADA, según el estado recibido.

Para detener el programa, pulsa Ctrl+C.

Si No Funciona

Si tu ordenador no reconoce el Arduino, prueba con otro cable USB y otro puerto USB del ordenador. Que el LED de alimentación esté encendido confirma que la placa recibe energía, pero no garantiza que el cable permita transmitir datos.

Si Python muestra un error al abrir el puerto, comprueba el número del puerto COM y asegúrate de que el Monitor Serie u otro programa no esté utilizando esa conexión.

Si los mensajes no aparecen correctamente, confirma que tanto Arduino como Python estén configurados a 9600 baudios.

¿Qué Podemos Hacer a Partir de Aquí?

Este experimento demuestra los fundamentos de la integración entre Arduino y una aplicación informática. Podemos sustituir el interruptor por sensores de temperatura, luminosidad o distancia y utilizar Python para mostrar gráficos, guardar mediciones o generar alertas.

También podemos crear una interfaz con un indicador verde cuando el interruptor esté encendido y uno rojo cuando esté apagado.

La comunicación puede funcionar en ambos sentidos: además de recibir información, Python puede enviar comandos al Arduino para controlar LED, zumbadores y otros componentes.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *