Com Programar Arduino amb Python: Guia Completa i Exemples

  • La biblioteca PySerial permet una comunicació fluida entre Arduino i Python a través del port sèrie.
  • És possible enviar ordres i rebre dades entre plaques Arduino i scripts de Python de forma senzilla.
  • La integració amb processament d‟imatges mitjançant OpenCV amplia les capacitats d‟Arduino.
  • Es poden automatitzar tasques electròniques combinant Python, sensors i actuadors Arduino.

python arduino

Sabies que pots controlar una placa Arduino usant simplement Python? Encara que el llenguatge nadiu d'Arduino està basat en C++, hi ha una manera força accessible de programar i comunicar els teus projectes Arduino usant Python, gràcies a l'ús de biblioteques especialitzades com PySerial. Aquesta combinació entre tots dos mons resulta no només interessant, sinó també molt potent, especialment per als que busquen integrar electrònica amb processament de dades, visió artificial o fins i tot intel·ligència artificial. Si vols aprofundir més en aquest tema, pots consultar la nostra guia pràctica.

En aquest article t'expliquem què necessites, com fer la connexió entre Arduino i Python, i et mostrem diversos exemples pràctics que pots seguir pas a pas per començar a controlar la teva placa usant scripts a Python. Tot plegat explicat de forma clara i amb una estructura pensada tant per a principiants com per als qui ja tenen certa base en programació i electrònica.

Es pot programar Arduino directament amb Python?

Sí, encara que amb matisos. De forma nativa, Arduino es programa mitjançant el seu propi entorn de desenvolupament (Arduino IDE), que utilitza un llenguatge basat en C++. gràcies a l'ús de biblioteques com PySerial i altres alternatives com Snek o MicroPython (encara que amb limitacions de maquinari), és possible establir una comunicació entre Python i Arduino per controlar la placa o interactuar amb els seus perifèrics. Per a més informació sobre MicroPython, pots llegir el nostre article sobre les novetats de MicroPython.

El més habitual és fer servir Python per enviar dades a Arduino a través del port sèrie, i que la placa els interpreti per executar accions físiques (com encendre LEDs o llegir sensors). També podem fer el contrari: que Arduino enviï dades a Python i que aquest les mostri, processi o emmagatzemi.

Eines necessàries per començar

Abans d'embrutar-nos les mans amb cables i codi, necessites tenir llestos alguns elements bàsics:

  • Una placa Arduino: qualsevol model serveix, encara que els més comuns són el Arduino UNO o el Nano.
  • Cable USB per connectar el teu Arduino a l'ordinador.
  • Python instal·lat al teu equip. Pots obtenir-ho des de la web oficial de Python.
  • Instal·lació de PySerial, la biblioteca que permet la comunicació sèrie entre Arduino i Python. Pots instal·lar-la executant a la terminal:
pip install pyserial

PySerial és la peça clau que ens permet enviar ordres des de Python i rebre respostes d'Arduino com si estiguéssim xatejant amb un robot electrònic.

Primer pas: comunicar Arduino amb Python a través del port sèrie

Una de les formes més comunes d'interacció consisteix a enviar dades des d'un script a Python a l'Arduino per encendre o apagar un LED. Vegem com fer-ho pas a pas.

1. Carregar un programa bàsic a Arduino

Aquest codi es carrega des de l'Arduino IDE i estarà encarregat de controlar el LED integrat al pin 13, depenent de la dada rebuda via port sèrie:

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    char data = Serial.read();
    if (data == '1') {
      digitalWrite(13, HIGH);
    } else if (data == '0') {
      digitalWrite(13, LOW);
    }
  }
}

Aquest sketch interpreta les dades rebudes pel port sèrie. Si rebeu un '1', encén el LED; si rep un '0', ho apaga. Per a més exemples de projectes amb Arduino, visita el nostre article sobre com crear uns escacs amb Arduino.

2. Enviar les ordres des de Python

Quan el codi estigui carregat a la placa, creem un script a Python que s'encarregueu d'enviar les ordres:

import serial
import time

# Inicializa la conexión
arduino = serial.Serial('COM3', 9600)
time.sleep(2)

# Enciende el LED
arduino.write(b'1')
print("LED encendido")
time.sleep(2)

# Apaga el LED
arduino.write(b'0')
print("LED apagado")

# Cierra la conexión
arduino.close()

Tingues en compte que has de substituir 'COM3' pel port corresponent al vostre sistema operatiu. Al Windows sol ser COM3 o COM4; a Linux, com /dev/ttyUSB0.

Llegir dades des de sensors connectats a Arduino

A més d'enviar instruccions, podem fer servir Python per llegir dades enviades per Arduino, per exemple des d'un sensor de temperatura. Per a una guia sobre com utilitzar diferents sensors, us recomanem aquest article sobre el sensor DPS310.

1. Codi a Arduino per llegir un sensor

La rutina següent llegeix un valor analògic (com la sortida d'un sensor LM35) i l'envia a través del port sèrie:

int sensorPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);
  delay(1000);
}

2. Script a Python per llegir els valors

Des de Python podem llegir aquestes dades i mostrar-les per pantalla:

import serial
import time

arduino = serial.Serial('COM3', 9600)
time.sleep(2)

while True:
  sensor_data = arduino.readline().decode('utf-8').strip()
  print(f"Valor del sensor: {sensor_data}")
  time.sleep(1)

Aquest simple bucle ens permet visualitzar els valors mesurats directament al nostre terminal.

Enviar dades des de Python a Arduino amb exemples pràctics

Vegem un altre exemple en què enviem un número de l'1 al 9 des de Python, i Arduino fa parpellejar el LED aquest nombre de vegades:

Sketch a Arduino

const int pinLED = 13;

void setup() {
  Serial.begin(9600);
  pinMode(pinLED, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    char option = Serial.read();
    if (option >= '1' && option <= '9') {
      option -= '0';
      for (int i = 0; i < option; i++) {
        digitalWrite(pinLED, HIGH);
        delay(100);
        digitalWrite(pinLED, LOW);
        delay(200);
      }
    }
  }
}

Script Python per enviar el valor

import serial
import time

arduino = serial.Serial("COM4", 9600)
time.sleep(2)

arduino.write(b'5')  # Parpadea 5 veces
arduino.close()

Aquest tipus d'interacció és ideal per crear interfícies d'usuari a Python, i que aquestes controlin de forma intuïtiva dispositius físics. En aquest context, també podeu explorar més sobre com utilitzar pantalles electròniques amb Arduino.

Exemple avançat: detecció amb visió artificial

Un projecte més avançat que demostra el poder de combinar Arduino amb Python és fer servir visió artificial amb OpenCV i MediaPipe per detectar si una persona porta mascareta, i controlar LEDs a Arduino en funció de la detecció.

Arduino: control de dos LEDs

int led1 = 50;
int led2 = 51;
int option;

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  if (Serial.available() > 0){
    option = Serial.read();
    if(option == 'P'){
      digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
    }
    if(option == 'N'){
      digitalWrite(led1, LOW);
      digitalWrite(led2, HIGH);
    }
  }
}

Python amb OpenCV i MediaPipe

Al codi Python s'analitza la imatge de la càmera, detectant cares, i segons es determini si porten o no mascareta, s'envia el valor corresponent:

# fragmento clave
if LABELS] == "Con_mascarilla":
    ser.write(b'P')
else:
    ser.write(b'N')

Aquest exemple demostra com pot ser de potent la combinació de Python i Arduino, ja que permet unir el món físic amb algoritmes sofisticats com ara el reconeixement facial o la detecció d'objectes.

Programar Arduino amb Python és completament possible, accessible i fins i tot divertit. Des d'encendre un LED fins a implementar sistemes complexos amb sensors i visió per ordinador, les possibilitats són enormes. Python actua com una interfície poderosa que permet portar els teus projectes d'Arduino a un altre nivell. Si cerques una forma pràctica d'aplicar els teus coneixements de programació o donar-los una segona vida a les plaques Arduino, aquesta combinació és sens dubte el camí a seguir.