UNIVERSIDAD PRIVADA DEL VALLE
FACULTAD DE INFORMÁTICA Y ELECTRÓNICA
Evaluación
INGENIERÍA EN __________
CAMPUS TIQUIPAYA
Informe de Práctica de Laboratorio N°5
SEGUIMIENTO DE LÍNEAS EN
ROBOTS MÓVILES MEDIANTE
EL SENSOR DE LUZ
GRUPO “A”
Estudiante: Marcos Kevin Villafuerte Ramallo
Carrera: IMT
Materia: ROBÓTICA
Docente: Ing. Elias Chavez
Gestión: II-2024
Fecha de presentación: 13 de 05 del 2024
1
Página
SEGUIMIENTO DE LÍNEAS EN ROBOTS MÓVILES MEDIANTE EL
SENSOR DE LUZ
1. Marco teórico
Para detectar la línea, utilizamos sensores de reflectancia. Estos sensores operan emitiendo luz
mediante un diodo, generalmente infrarrojo, y midiendo la luz reflejada con un fotodiodo o
fototransistor. La lectura varía dependiendo de si la luz rebota en una superficie negra o
blanca. Es crucial tener en cuenta que la medición de estos sensores puede ser afectada por la
distancia a la superficie y la luz ambiental.
En esta experiencia, se utilizó un código simple pero basado en una lógica compleja
proporcionada por el docente. Primero, se emplea la función SetSensorLight para activar el
sensor de luz según el puerto al que está conectado, en este caso, el puerto 3. Una línea de
código fundamental es el "Umbral", que establece el nivel de luz que el sensor debe
reconocer. Este valor generalmente oscila entre 40 pero se recomienda calibrar el sensor
previamente.
Una vez que el sensor está activo, se controlan los motores mediante encendido y apagado,
además de ajustar la velocidad para que el robot pueda detectar y seguir las líneas
correctamente.
2. Resultados de Laboratorio Virtual
Programación en la plataforma BRICX CC
Utilizando el robot móvil LEGO MINDSTORMS (Prototipo armado con sensores y actuadores) para completar el
laboratorio, programe el robot en BRICX CC para que siga la línea negra usando el sensor de luz y el algoritmo PID.
El robot no debe chocar con ninguno de los obstáculos (vasos amarillos) a lo largo del recorrido.
Código usado:
from hub import port
2
import motor_pair
Página
#from runloop import until
import time
import color_sensor
#import gyro
#import motor
umbral=40
motor_pair.pair(motor_pair.PAIR_1, port.D, port.C)
# Función para avanzar encendiendo una pareja de motores con una velocidad específica
def avanzar(velocidad):
motor_pair.move(motor_pair.PAIR_1, 0, velocity=velocidad)
# Función para apagar una pareja de motores:
def detener():
motor_pair.stop(motor_pair.PAIR_1)
# funcion para avanzar una distancia determinada en centímetros
def avanzar_distancia(distancia_cm, velocidad):
# Calcular la cantidad de grados a girar en cada motor para recorrer la distancia deseada
DIAMETRO_LLANTA = 5.6 # Diámetro de la llanta en centímetros
CIRCUNFERENCIA = DIAMETRO_LLANTA * 3.14159 # Circunferencia de la llanta
grados_por_cm = 360 / CIRCUNFERENCIA # Cantidad de grados por centímetro recorrido
grados_a_girar =int ( distancia_cm * grados_por_cm)
# Encender los motores para avanzar
motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, grados_a_girar, velocidad, velocidad)
3
Página
# funcion para girar
# Función para girar el robot una cantidad de grados basada en los encoders de los motores
def girar_con_encoders(velocidad, grados_deseados):
# Calcular la cantidad de grados a girar en cada motor
# Insertar la distancia entre los extremos de las ruedas
Ancho=12.5 # en cm
# insertar el diametro de las ruedas
Diametro=5.5 # cm
GradosMotor=int (grados_deseados*Ancho/Diametro)
# Girar cada motor la cantidad de grados deseada
if GradosMotor<0:
motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, GradosMotor, -velocidad, velocidad)
else :
motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, GradosMotor, velocidad, -velocidad)
#################################################################################
######
# escribir tu codigo aqui
avanzar(400)
#until(color_sensor.reflection(port.A)<umbral)
while (color_sensor.reflection(port.B)>umbral):
umbral=umbral
detener()
avanzar(400)
4
Página
time.sleep_ms(800)
girar_con_encoders(300,110)
avanzar(400)
while (color_sensor.reflection(port.B)>umbral):
umbral=umbral
detener()
avanzar(400)
time.sleep_ms(800)
girar_con_encoders(300,110)
avanzar(400)
while (color_sensor.reflection(port.B)>umbral):
umbral=umbral
detener()
avanzar(400)
time.sleep_ms(800)
girar_con_encoders(300,110)
*****
detener()
avanzar(400)
time.sleep_ms(800)
while (color_sensor.reflection(port.B)>umbral):
umbral=umbral
detener()
avanzar(400)
while (color_sensor.reflection(port.B)>umbral):
5
Página
umbral=umbral
detener()
avanzar(400)
time.sleep_ms(800)
girar_con_encoders(300,110)
avanzar(400)
while (color_sensor.reflection(port.B)>umbral):
umbral=umbral
detener()
avanzar(400)
time.sleep_ms(800)
girar_con_encoders(300,110)
avanzar(400)
while (color_sensor.reflection(port.B)>umbral):
umbral=umbral
detener()
avanzar(400)
time.sleep_ms(800)
girar_con_encoders(300,110)
detener()
avanzar(400)
time.sleep_ms(800)
while (color_sensor.reflection(port.B)>umbral):
6
Página
umbral=umbral
detener()
print("Termino!!")
Realizar un video que muestren el proceso de movimiento del robot y su finalización en la
plataforma STREAM, añada el link junto al presente documento.
VID_20240508_095231.mp4
[Link]
[Link]/personal/vrm2018940_est_univalle_edu/_layouts/15/[Link]?id=%2Fperson
al%2Fvrm2018940%5Fest%5Funivalle%5Fedu%2FDocuments%2FVID%5F20240508%5F095231
%2Emp4&referrer=StreamWebApp%2EWeb&referrerScenario=AddressBarCopied%2Eview%2E23
696c6f%2D7774%2D4356%2D968c%2D6f04eb57d325
7
Página
Fotografías de inicio, etapa intermedia y fin del recorrido del robot móvil.
8
Página
3. Conclusiones
Se desarrolló el código del robot móvil de manera que, al detectar el color blanco, avance girando
levemente a la derecha. En contraste, al detectar el color negro, avance girando hacia la izquierda.
De esta forma, el robot sigue el borde izquierdo de la línea a seguir, logrando completar el
ejercicio del laboratorio
4. Cuestionario
1. Describa los sensores de LEGO MINDSTORMS NXT compatibles con LEGO MINDSTORMS
EV3
Todos son compatibles tanto distancia infrarrojo, enconder, giroscopio.
2. Describa dos tipos de algoritmos seguidores de línea comúnmente utilizados.
Seguir la línea por izquierda y seguir la línea por derecha
3. Describa mediante un ejemplo la forma de crear funciones en BRICX CC
prefijo sub y el nombre de la función, con las variables necesarias y entre corchetes las acciones que
realizara la función en BRICX CC
9
Página