TTs whisper
This commit is contained in:
238
raspi/tests/test_motion.py
Normal file
238
raspi/tests/test_motion.py
Normal file
@@ -0,0 +1,238 @@
|
||||
"""
|
||||
test_motion.py — Tests individuals del mòdul motion.py.
|
||||
Executa des del directori Rasp/: python tests/test_motion.py
|
||||
|
||||
Descomenta la funció que vols provar al final del fitxer.
|
||||
Assegura't que el venv està activat i pigpiod en marxa (sudo pigpiod -s 1).
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
import time
|
||||
import pigpio
|
||||
import motion
|
||||
from motion import (
|
||||
motion_setup, motion_setup_steppers, motion_setup_sensors, motion_cleanup,
|
||||
enable_wheels, enable_arms, enable_syringe,
|
||||
arms_home, syringe_home,
|
||||
distance_to_object,
|
||||
ON, OFF, CW, CCW,
|
||||
)
|
||||
|
||||
def _pi_connect():
|
||||
pi = pigpio.pi()
|
||||
if not pi.connected:
|
||||
print("ERROR: pigpiod no està en marxa. Executa: sudo pigpiod -s 1")
|
||||
sys.exit(1)
|
||||
return pi
|
||||
|
||||
def _setup_motors():
|
||||
"""Setup mínim per a tests de motors (sense sensors I2C)."""
|
||||
pi = _pi_connect()
|
||||
motion_setup_steppers(pi)
|
||||
return pi
|
||||
|
||||
def _setup_sensors():
|
||||
"""Setup mínim per a tests de sensors I2C (sense steppers)."""
|
||||
pi = _pi_connect()
|
||||
motion_setup_sensors(pi)
|
||||
return pi
|
||||
|
||||
def _teardown_motors(pi):
|
||||
motion_cleanup()
|
||||
pi.stop()
|
||||
|
||||
def _teardown_sensors(pi):
|
||||
pi.stop()
|
||||
|
||||
|
||||
# ==================
|
||||
# TEST 1 — Motors pas a pas (rodes)
|
||||
# ==================
|
||||
|
||||
def test_motor_unic():
|
||||
"""
|
||||
Prova únicament la roda DRETA: 200 passos endavant i enrere.
|
||||
Primer test a fer — verifica que un sol motor funciona correctament.
|
||||
Hauries de veure la roda girar ~1/5 de volta (reducció 1:5).
|
||||
"""
|
||||
print("=== TEST MOTOR ÚNIC (RODA DRETA) ===")
|
||||
pi = _setup_motors()
|
||||
|
||||
PASSOS = 200
|
||||
|
||||
print(f"Movent roda DRETA {PASSOS} passos endavant...")
|
||||
enable_wheels(ON)
|
||||
motion.wheel_R.move_to(PASSOS)
|
||||
while motion.wheel_R.is_running():
|
||||
time.sleep(0.05)
|
||||
print("Roda dreta endavant: OK")
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"Movent roda DRETA {PASSOS} passos enrere...")
|
||||
motion.wheel_R.move_to(0)
|
||||
while motion.wheel_R.is_running():
|
||||
time.sleep(0.05)
|
||||
print("Roda dreta enrere: OK")
|
||||
|
||||
enable_wheels(OFF)
|
||||
_teardown_motors(pi)
|
||||
print("Test motor únic completat.\n")
|
||||
|
||||
|
||||
def test_motors():
|
||||
"""
|
||||
Prova les dues rodes: avança 200 passos i torna enrere.
|
||||
Executa test_motor_unic() primer per verificar que un motor funciona.
|
||||
Hauries de veure cada roda girar ~1/5 de volta (reducció 1:5).
|
||||
"""
|
||||
print("=== TEST MOTORS (RODES) ===")
|
||||
pi = _setup_motors()
|
||||
|
||||
PASSOS = 200
|
||||
|
||||
print(f"Movent roda DRETA {PASSOS} passos endavant...")
|
||||
enable_wheels(ON)
|
||||
motion.wheel_R.move_to(PASSOS)
|
||||
while motion.wheel_R.is_running():
|
||||
time.sleep(0.05)
|
||||
print("Roda dreta: OK")
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"Movent roda DRETA {PASSOS} passos enrere...")
|
||||
motion.wheel_R.move_to(0)
|
||||
while motion.wheel_R.is_running():
|
||||
time.sleep(0.05)
|
||||
print("Roda dreta enrere: OK")
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"Movent roda ESQUERRA {PASSOS} passos endavant...")
|
||||
motion.wheel_L.move_to(PASSOS)
|
||||
while motion.wheel_L.is_running():
|
||||
time.sleep(0.05)
|
||||
print("Roda esquerra: OK")
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"Movent roda ESQUERRA {PASSOS} passos enrere...")
|
||||
motion.wheel_L.move_to(0)
|
||||
while motion.wheel_L.is_running():
|
||||
time.sleep(0.05)
|
||||
print("Roda esquerra enrere: OK")
|
||||
|
||||
enable_wheels(OFF)
|
||||
_teardown_motors(pi)
|
||||
print("Test motors completat.\n")
|
||||
|
||||
|
||||
# ==================
|
||||
# TEST 2 — Homing (finals de carrera)
|
||||
# ==================
|
||||
|
||||
def test_homing_brac():
|
||||
"""
|
||||
Executa el homing únicament dels BRAÇOS.
|
||||
Primer test de homing — verifica que un sol conjunt de finals de carrera funciona.
|
||||
ATENCIÓ: assegura't que els braços tinguin espai per moure's.
|
||||
"""
|
||||
print("=== TEST HOMING BRAÇOS ===")
|
||||
pi = _setup_motors()
|
||||
|
||||
print("Iniciant homing dels BRAÇOS...")
|
||||
arms_home()
|
||||
print("Homing braços: OK")
|
||||
|
||||
_teardown_motors(pi)
|
||||
print("Test homing braços completat.\n")
|
||||
|
||||
|
||||
def test_homing():
|
||||
"""
|
||||
Executa el homing complet: braços i xeringa.
|
||||
Executa test_homing_brac() primer per verificar els finals de carrera dels braços.
|
||||
ATENCIÓ: assegura't que els braços i la xeringa tinguin espai per moure's.
|
||||
"""
|
||||
print("=== TEST HOMING COMPLET ===")
|
||||
pi = _setup_motors()
|
||||
|
||||
print("Iniciant homing dels BRAÇOS...")
|
||||
arms_home()
|
||||
print("Homing braços: OK")
|
||||
|
||||
time.sleep(1.0)
|
||||
|
||||
print("Iniciant homing de la XERINGA...")
|
||||
syringe_home()
|
||||
print("Homing xeringa: OK")
|
||||
|
||||
_teardown_motors(pi)
|
||||
print("Test homing completat.\n")
|
||||
|
||||
|
||||
# ==================
|
||||
# TEST 3 — Sensor de distància VL53L0X
|
||||
# ==================
|
||||
|
||||
def test_distance_sensor():
|
||||
"""
|
||||
Llegeix la distància 10 vegades cada 500ms.
|
||||
Posa la mà davant del sensor per verificar que canvia el valor.
|
||||
"""
|
||||
print("=== TEST SENSOR DISTÀNCIA VL53L0X ===")
|
||||
pi = _setup_sensors()
|
||||
|
||||
print("Llegint distància durant 5 segons (posa la mà davant del sensor)...")
|
||||
for i in range(10):
|
||||
dist = distance_to_object()
|
||||
if dist == 65535:
|
||||
print(f" Lectura {i+1:2d}: fora de rang")
|
||||
else:
|
||||
print(f" Lectura {i+1:2d}: {dist} mm")
|
||||
time.sleep(0.5)
|
||||
|
||||
_teardown_sensors(pi)
|
||||
print("Test sensor distància completat.\n")
|
||||
|
||||
|
||||
# ==================
|
||||
# TEST 4 — Sensors de línia ADS1115
|
||||
# ==================
|
||||
|
||||
def test_line_sensors():
|
||||
"""
|
||||
Llegeix els dos sensors de línia 10 vegades cada 500ms.
|
||||
Posa el sensor sobre superfícies de diferent color per veure la variació.
|
||||
Valor alt (~9700+) = negre. Valor baix = blanc/clar.
|
||||
"""
|
||||
print("=== TEST SENSORS DE LÍNIA ADS1115 ===")
|
||||
pi = _setup_sensors()
|
||||
|
||||
print("Llegint sensors de línia durant 5 segons...")
|
||||
print(" (posa els sensors sobre blanc i negre per veure la diferència)")
|
||||
for i in range(10):
|
||||
r = motion._chan_r.value
|
||||
l = motion._chan_l.value
|
||||
print(f" Lectura {i+1:2d}: DRETA={r:5d} ESQUERRA={l:5d} error={r-l:+6d}")
|
||||
time.sleep(0.5)
|
||||
|
||||
_teardown_sensors(pi)
|
||||
print("Test sensors de línia completat.\n")
|
||||
|
||||
|
||||
# ==================
|
||||
# Execució
|
||||
# ==================
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Descomenta el test que vols executar:
|
||||
test_motor_unic() # Primer: prova un sol motor
|
||||
# test_motors() # Segon: prova les dues rodes
|
||||
# test_homing_brac() # Primer homing: només els braços
|
||||
# test_homing() # Homing complet: braços i xeringa
|
||||
# test_distance_sensor()
|
||||
# test_line_sensors()
|
||||
Reference in New Issue
Block a user