Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ROBOTICA
Informe de Práctica de Laboratorio N°4
CONTROL DE SENSORES
GRUPO “A”
Gestión II-2021
PROGRAMAS CONTROL DE PERIFERICOS
ASIGNATURA: Robótica
TEMA Control de Sensores
Elemento de Robot Lego
estudio
Plataforma de RobotC VirtualWord
emulación virtual
Fecha 27/10/2021
1. Marco teórico
#define dist1 y dist2 este comando define sirve para definir una variable para el sensor ultrasónico
While Mientras se cumpla la condición funcionara el código interno que está en el ciclo.
Para completar este desafío, programe el robot para avanzar hacia la pared usando el sensor táctil, siga el curso de seguimiento
de línea usando el sensor de luz, llegue al área de calibración (zona con un libro verde) usando el sensor de sonda y finalmente
viaje a la meta. Su robot no debe golpear ningún obstáculo ni cruzar las líneas de límite de desafío.
Código usado:
#define dist1 15
#define dist2 50
2
#define umbral_1 53
Página
#define umbral_2 53
task main ()
{
SetSensorLowspeed(IN_2); //para inicializar el sensor ultrasonico
if(SensorUS(IN_2)>dist1){
OnFwdSync(OUT_AC, 50, 0);
while(SensorUS(IN_2)>dist1);
Off(OUT_AC);
OnRev(OUT_C, 50);
}
Wait(1000);
SetSensorLight(IN_1);
OnFwd(OUT_AC, 50);
Wait(1500);
while (SensorUS(IN_2)>dist1){
if(Sensor(IN_1)<umbral_1)
{
Off(OUT_C);
OnFwd(OUT_A,50);
}
else if(Sensor(IN_1)>umbral_1)
{
Off(OUT_A);
OnFwd(OUT_C,50);
}
if(Sensor(IN_1)==umbral_1)
{
Off(OUT_AC);
OnFwdSync(OUT_AC,50,0);
}
}
Off(OUT_AC);
OnFwdSync(OUT_AC, 50, 0);
Wait(1000);
Off(OUT_AC);
if(Sensor(IN_1)>umbral_2)
{
OnFwdSync(OUT_AC, 50, 0);
}
else
{
Off(OUT_A);
OnFwd(OUT_C,50);
}
}
3
Página
3. Cuestionario
4. Conclusiones y recomendaciones
• Se recomienda previamente verificar el nivel de batería del robot a usar, para luego no tener
problemas de funcionamiento
• Se recomienda verificar los puertos a los cuales están instalados los sensores y motores.
• Se recomienda verificar el valor de umbral y de distancia que se usara para así tener un mejor
rendimiento al momento de la realización de la practica
• Se pudo observar que a medida que la luz ambiente iba bajando el valor del umbral debía ser
modificado para poder realizar correctamente la práctica.
• Se pudo realizar de manera sencilla el código para el funcionamiento correcto de la práctica
• Se pudo observar que el sensor de proximidad a ciertas distancias mínimas tiene un fallo de
reconocimiento, para eso se recomienda ver el manual de usuario del modelo del brick que se
está usando.
5. Bibliografía
• Anote la dirección web o el libro de donde extrajo el contenido del marco teórico. Componentes del
lego Mindstorm NXT 2.0 . Revisado: 06 de noviembre de 2021. Recuperado:
http://cefire.edu.gva.es/pluginfile.php/190596/mod_imscp/content/1/componentes_del_lego_mindstorm
s_nxt_20.html
• Ramírez, K. Escuela de Ciencias de la Computación e Informática. Revisado: 06 de noviembre de
2021. Recuperado:
https://www.kramirez.net/Robotica/Material/Presentaciones/LEGOMindstorms_NXT20.pdf
• Benedettelli, D. Programming LEGO NXT Robots using NXC. 7 de junio de 2007. Recuperado de:
NXC_tutorial.pdf (sourceforge.net)
4
• Programming LEGO NXT Robots using NXC. Visto: 06 de noviembre de 2021. Recuperado de:
Página
http://rbs.felk.cvut.cz/files/Prezentace_NXC.pdf
UNIVERSIDAD PRIVADA DEL VALLE
EXAMEN PREVIO
Obstacle Course
Para completar este desafío, programe el robot para avanzar hacia la pared usando el sensor táctil, siga el curso de seguimiento
de línea usando el sensor de luz, llegue al área de calibración (zona con un libro verde) usando el sensor de sonda y finalmente
viaje a la meta. Su robot no debe golpear ningún obstáculo ni cruzar las líneas de límite de desafío.
Código usado:
#define UMBRAL 50
#define Obstaculo1 15
#define Obstaculo2 30
task main ()
{
//primer tramo
SetSensorLowspeed(IN_2);
OnFwdSync(OUT_AC,50,0);
while(SensorUS(IN_2)>Obstaculo1);
Off(OUT_AC);
//hacia linea
OnFwd(OUT_A,100);
Wait(800);
OnFwdSync(OUT_AC,50,0);
Wait(1200);
Off(OUT_AC);
//seguidor de linea
SetSensorLight(IN_4);
while(SensorUS(IN_2)>Obstaculo2)
{
if(Sensor(IN_4)<UMBRAL)
5
{
Página
Off(OUT_C);
OnFwd(OUT_A,40);
}
else
{
Off(OUT_A);
OnFwd(OUT_C,40);
}
}
Off(OUT_AC);
//posicionamiento 1
SetSensorLight(IN_4);
OnFwdSync(OUT_AC,80,0);
while(Sensor(IN_4)>UMBRAL);
{
RotateMotorEx(OUT_AC,60,920,20,true,true);
Wait(1000);
}
}
6
Página
Código usado:
task main()
{
repeat(9)
{
SetSensorLight(IN_4);
OnFwdSync(OUT_AC,80,0);
while(Sensor(IN_4)>LINEA);
{
}
}
//media vuelta
RotateMotorEx(OUT_AC,60,920,20,true,true);
Wait(2200);
//adelante
OnFwdSync(OUT_AC,80,0);
Wait(3000);
// 1/2 vuelta izq
RotateMotorEx(OUT_AC,60,920,-20,true,true);
Wait(1000);
// 1/2 vuelta der
RotateMotorEx(OUT_AC,60,920,20,true,true);
Wait(1000);
//adelante
OnFwdSync(OUT_AC,80,0);
Wait(1500);
//media vuelta
RotateMotorEx(OUT_AC,60,920,-20,true,true);
Wait(2200);
//fin
OnFwdSync(OUT_AC,80,0);
Wait(5000);
}
7
Página