Com funciona el programa?

El programa compta els polsos generats pel codificador cada vegada que gira. A partir del nombre de polsos registrats, calcula la distància recorreguda segons la següent fórmula:

On:

  • Polsos per volta: Depèn del model del codificador EC11 (normalment 20 polsos per volta).
  • Circumferència de la roda: Es calcula com π×diaˋmetre\pi \times \text{diàmetre}π×diaˋmetre.
  • Distància recorreguda: Expressada en centímetres (cm).

Codi en Python

import RPi.GPIO as GPIO
import time
import math

# Configuració dels pins GPIO
CLK_PIN = 17  # Pin del canal A del codificador
DT_PIN = 18   # Pin del canal B (opcional, per detectar direcció)
PULSOS_PER_VOLTA = 20  # Depèn del model del EC11
DIAMETRE_RODA = 6.5  # En cm (ajustar segons la roda utilitzada)

# Variables globals
contador_polsos = 0
estat_anterior = 0

def callback_encoder(channel):
    global contador_polsos, estat_anterior
    estat_actual = GPIO.input(CLK_PIN)
    
    if estat_actual != estat_anterior:
        contador_polsos += 1  # Compta només els flancs de pujada
    
    estat_anterior = estat_actual

def calcular_distancia():
    circumferencia = math.pi * DIAMETRE_RODA  # Càlcul de la circumferència
    voltes = contador_polsos / PULSOS_PER_VOLTA
    distancia = voltes * circumferencia  # Distància total recorreguda en cm
    return distancia

# Configuració del GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(CLK_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(DT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Configurar interrupció per comptar polsos
GPIO.add_event_detect(CLK_PIN, GPIO.BOTH, callback=callback_encoder)

try:
    print("Comptant polsos del codificador... Prem Ctrl+C per aturar")
    while True:
        distancia_recorreguda = calcular_distancia()
        print(f"Distància recorreguda: {distancia_recorreguda:.2f} cm", end="\r")
        time.sleep(0.5)  # Evita saturar la CPU

except KeyboardInterrupt:
    print("\nPrograma finalitzat")

finally:
    GPIO.cleanup()  # Restablir els pins GPIO

Com utilitzar el programa?

  1. Connectar el codificador EC11 a la Raspberry Pi:
    • CLK → GPIO 17
    • DT → GPIO 18 (opcional, per detectar direcció)
    • GNDGND de la Raspberry Pi
    • VCC3.3V de la Raspberry Pi
  2. Executar el programa a la Raspberry Pi:

python3 encoder_distance.py

Veure els resultats:

  • El programa mostra la distància recorreguda en cm en temps real.
  • Si la roda es mou, els polsos es compten i la distància es recalcula automàticament.
  • Pots modificar PULSOS_PER_VOLTA segons el model específic del teu codificador.