Programación del robot Raspberry Pi: hacer que siga las líneas (Parte 2)

importar RPi.GPIO como GPIO

tiempo de importación

desde l293d importar L293D

clase Robot():

def __init__(self, motor_left_pin1=17, motor_left_pin2=27, motor_right_pin1=23, motor_right_pin2=24,

line_follow_pin_left=19, line_follow_pin_right=6):

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings (falso)

# módulos de inicio

self.motor = L293D(motor_pin_izquierdo1, motor_pin_izquierdo2, motor_pin_derecho1, motor_pin_derecho2)

self.line_follow_pin_left = line_follow_pin_left

self.line_follow_pin_right = line_follow_pin_right

GPIO.setup(self.line_follow_pin_left, GPIO.IN)

GPIO.setup(self.line_follow_pin_right, GPIO.IN)

def líneaFollowModeOn(self):

status_left = Falso

status_right = Falso

mientras que Verdadero:

status_left = bool(GPIO.input(self.line_follow_pin_left)) # Falso: no en línea/sensor demasiado distante del fondo

status_right = bool(GPIO.input(self.line_follow_pin_right)) # Verdadero: en línea

si status_left y status_right:

# uno en la línea, sigue recto

auto.motor.adelante()

elif estado_izquierda:

# la línea está a la izquierda, muévase hacia la izquierda (motor hacia la derecha)

self.motor.adelanteDerecha()

elif estado_derecho:

# la línea está a la derecha, muévase a la derecha (motor a la izquierda)

self.motor.adelanteIzquierda()

demás:

# se han descarriado, línea de búsqueda. primero retroceda unos cm

self.motor.hacia atrás()

tiempo.sueño(7.5/self.motor.DIST_PER_SEC)

auto.parada.motor()

# rotar x grados para buscar la línea

grados_a_búsqueda = 45,0

self.motor.adelanteDerecha()

s = GPIO.wait_for_edge(self.line_follow_pin_left, GPIO.RISING, timeout=int(1000 * self.motor.SEC_PER_TURN / 360.0 * grados_para_búsqueda))

auto.parada.motor()

si s no es Ninguno:

# línea encontrada, continuar

continuar

demás:

# no se encontró nada, volver a la posición original

self.motor.hacia atrásDerecha()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * grados_para_búsqueda)

# buscar en el otro lado

self.motor.adelanteIzquierda()

s = GPIO.wait_for_edge(self.line_follow_pin_right, GPIO.RISING, timeout=int(1000 * self.motor.SEC_PER_TURN / 360.0 * grados_para_búsqueda))

auto.parada.motor()

si s no es Ninguno:

# línea encontrada, continuar

imprimir(«fondo»)

continuar

demás:

No se pudo encontrar # línea, volver a la posición original, detener

self.motor.hacia atrásIzquierda()

time.sleep(self.motor.SEC_PER_TURN / 360.0 * grados_para_búsqueda)

auto.parada.motor()

romper

tiempo.dormir(0.001)