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?
- Connectar el codificador EC11 a la Raspberry Pi:
- CLK → GPIO 17
- DT → GPIO 18 (opcional, per detectar direcció)
- GND → GND de la Raspberry Pi
- VCC → 3.3V de la Raspberry Pi
- 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.
Debe estar conectado para enviar un comentario.