GIMNASIO CACERES ROBÓTICA

 TRABAJO FINAL DE RÓBOTICA:

PROYECTOS TECNOLÓGICOS INTEGRADORES URFI TECPRO


ESTUDIANTES DE GRADO DÉCIMO y ONCES, EL PRÓXIMO 29 DE OCTUBRE SE REALIZARÁ LA PRESENTACIÓN DE PROYECTO FINAL ROBÓTICA 2025, PARA LA CUAL DEBEN REALIZAR UN PROYECTO BASADO EN EL KIT DE LABORATORIO ROBÓTICO URFI Y UN ESCENARIO DE APLICACIÓN EN EL ENTORNO.


El reto será desarrollar un escenario simulado donde propongan una solución a un problema asociado a uno de los ámbitos de sostenibilidad  mediante el uso de robótica responsable (tener en cuenta la programación final abajo relacionada).

Las condiciones que debe cumplir el producto final son:

  • ·         Tener seguimiento de línea curva de URFI en un escenario simulado.
  • ·         Usar todos los actuadores.
  • ·         Usar  TODOS o al menos dos sensores, más el seguidor de línea: sonido y/o luz y y/o ultrasonido.
  • ·         El escenario debe representarse en un tamaño estándar  (máximo 1 pliego).
  • ·         Estar claramente definido el problema y cómo el robot simula una posible solución técnica.
  • Solo exponen el proyecto 2 estudiantes: el líder y el comunicador de cada equipo. 

    🧩Revisar la metodología “Caja de ideas” para empezar a generar tus primeras propuestas del escenario que diseñarán para la solución de un problema asociado a un ámbito de sostenibilidad, mediante el uso de robótica responsable, luego realizar un boceto de un escenario para proyectar una solución y un plan de algoritmo. (anexos al final).


EJEMPLOS DE PROYECTOS URFI nivel I TecPro:


1. Alarma de inundaciones:

El objetivo del proyecto es desarrollar un sistema de alarma de inundaciones que pueda detectar y advertir a las personas sobre el riesgo de inundaciones en un área geográfica determinada.


2. Transporte de alimentos en la Granja:

En la actualidad la comida que cultiva nuestros campesinos y la comida que servimos en nuestros platos maneja un gran proceso en términos de trasporte, supermercados, manejo, cuidado, entre otros. Es un gran circuito donde la ganancia que obtiene el campesino que trabaja y produce los alimentos es mínima y en algunos casos inexistente. El siguiente proyecto propone abordar el trasporte de estos alimentos para generar una opción economía y que contribuya al campesino obtener ganancia de su gran trabajo.Por medio del sensor seguidor de línea se trazará el recorrido que debe realizar el vehículo sin la necesidad de un conductor, es decir, un sistema autónomo, el cual se detendrá en ciertos destinos por medio de un sensor de luz o sensor de sonido.


Ver mas ejemplos en: https://www.tdrobotica.co/tecpro/


METODOLOGÍAS:

EJEMPLOS DE PROYECTOS TECNOLÓGICOS INTEGRADORES URFI TECPRO:


Actuadores:

  • Motoreductores-->Ruedas
  • Zumbador (buzzer)
  • LED

Sensores:

  • Fotocelda o sensor de luz
  • Sensor seguidor de línea
  • Sensor ultrasónico
  • Sensor de sonido

🚗 1. Robot Patrulla Escolar Autónomo

🎯 Objetivo

Un robot que recorre rutas escolares siguiendo líneas, detecta obstáculos, responde a sonidos (como una palmada) y ajusta su comportamiento según la luz ambiental.

🧩 Funcionalidad

  • Motoreductores: movimiento autónomo sobre ruedas.
  • Sensor seguidor de línea: guía el recorrido.
  • Sensor ultrasónico: evita obstáculos.
  • Sensor de sonido: activa el robot con una señal sonora.
  • Fotocelda: ajusta velocidad o luces según la luz ambiental.
  • LED: indica estado (activo, detenido, alerta).
  • Buzzer: alerta de proximidad o parada.

 


🧴 2. Robot Higienizador Móvil

🎯 Objetivo

Un robot que se activa por sonido, se desplaza siguiendo una línea, detecta presencia con ultrasonido y ajusta su comportamiento según la luz, emitiendo señales visuales y sonoras.

🧩 Funcionalidad

  • Motoreductores: movimiento hacia estaciones de higiene.
  • Sensor seguidor de línea: guía el recorrido.
  • Sensor ultrasónico: detecta personas para detenerse.
  • Sensor de sonido: activa el sistema.
  • Fotocelda: ajusta intensidad de LED según luz ambiental.
  • LED: indica disponibilidad de gel.
  • Buzzer: alerta de activación o error.

🚦 3. Robot Controlador de Tráfico Escolar

🎯 Objetivo

Un robot que patrulla zonas de tráfico escolar, detecta vehículos o personas, responde a sonidos, ajusta su comportamiento según la luz y emite señales de control.

🧩 Funcionalidad

  • Motoreductores: movimiento por rutas escolares.
  • Sensor seguidor de línea: guía el recorrido.
  • Sensor ultrasónico: detecta vehículos o peatones.
  • Sensor de sonido: activa el sistema.
  • Fotocelda: ajusta semáforo según luz ambiental.
  • LED: simula semáforo (rojo/verde).
  • Buzzer: alerta de paso prohibido.
---------------------------------------------------------------------------------------------------------------------------

MONTAJE URFI:
CÓDIGO DE PROGRAMACIÓN  PROYECTO FINAL URFI:

Explicación del código:  el robot sigue la línea autocorrigiendo su curso, si detecta un obstáculo, retrocede (enciende el LED al retroceder); oprimir el botón D13 para reanudar y continuar. Si detecta un ruido por encima de los 120 dB, para automáticamente y suena una alarma o si detecta intensidad lumínica fuerte también se detiene. Nuevamente oprimir el botón D13 para reanudar y continuar. 

#include <DRV8833.h>        // Esta instrucción incluye un fichero que nos permite manejar el DRIVER del motor con instrucciones fáciles
DRV8833 driver = DRV8833(); // Esta instrucción indica la creación del DRIVER virtual dentro del programa

// Declaración de variables enteras globales para nombrar los pines:

int sensorIzquierdo = 10;   //Pin de conexión sensor seguidor de línea Izquierdo
int sensorDerecho = 2;      //Pin de conexión sensor seguidor de línea Derecha
int sensor1 = A1;            //Pin de conexión sensor de sonido MICROFONO
int sensor2 = A2;            //Pin de conexión sensor de luz FOTOCELDA
int pinUltrasonido = 4;      //Pin de conexión sensor DE ULTRASONIDO
int LED = 8;                 //Pin de conexión  LED
int ZumbadorPin = 9;         //Pin de conexión BUZZER

int valorIzquierdo;
int valorDerecho;
int distancia;

int motorA1 = 5 ; //Pin de conexión de los motores.
int motorA2 = 6;
int motorB1 = 11;
int motorB2 = 3;

int velocidadMotorA =200; //Se define la velocidad para los motores A y B
int velocidadMotorB = 180;

void setup() {
  // Código de configuración que se ejecuta una sola vez:
  // Configurar los pines como entradas o como salidas
  pinMode(ZumbadorPin,OUTPUT);
  pinMode (sensorIzquierdo, INPUT);   //Pin de salida seguidor de línea izquierda
  pinMode (sensorDerecho, INPUT); //Pin de salida seguidor de línea derecha
 
  driver.attachMotorA(motorA1, motorA2); // Esta instrucción especial ya configura los pines del motor A como salidas
  driver.attachMotorB(motorB1, motorB2); // Esta instrucción especial ya configura los pines del motor B como salidas
}

void loop() {
  // Código que se ejecuta de manera repetida:
int distancia = obtenerDistancia();    

  valorIzquierdo = digitalRead(sensorIzquierdo);            // Asignamos la lectura del sensor a la variable valorIzquierdo
  valorDerecho = digitalRead(sensorDerecho);                // Asignamos la lectura del sensor a la variable valorDerecho
 if(analogRead(sensor2) > 800){                             // Condicicion verdadera Si la lectura del sensor de luz supera el valor de 750
    driver.motorAStop();                                    // Motor A stop
    driver.motorBStop();                                    // Motor B stop
   tone(ZumbadorPin,2000);
    while(digitalRead(13) == 0){}                           // Espera hasta que se oprima el pulsador conectado a la placa en el pin 13
  noTone(ZumbadorPin);
  }else{                                                    // Condicion falsa Si la lectura del sensor de luz No supera el valor de 750
 
if (distancia > 6 && distancia < 15) {    //Ejecución de la función  sensor de distancia
digitalWrite(LED,HIGH);
  driver.motorAStop();
  driver.motorBStop();
  delay(700);
  driver.motorAReverse(velocidadMotorA);
  driver.motorBReverse(velocidadMotorB);
  delay(500);
  driver.motorAStop();
  driver.motorBStop();
  delay(900);
digitalWrite(LED,LOW);
}


  if(analogRead(sensor1) > 80){                             // Condcicion verdadera Si la lectura del sensor sonido supera el valor de 120
    driver.motorAStop();                                    // Motor A stop
    driver.motorBStop();                                    // Motor B stop
    tone(ZumbadorPin,1000);
    while(digitalRead(13) == 0){}                           // Espera hasta que se oprima el pulsador conectado a la placa en el pin 13
  noTone(ZumbadorPin);
  }else{                                                    // Condicion falsa Si la lectura del sensor No supera el valor de 120
  }
      if (valorIzquierdo == HIGH && valorDerecho == HIGH) { // Estado 1-1
        driver.motorAForward(velocidadMotorA);
        driver.motorBForward(velocidadMotorB);  
      }  
     
      if (valorIzquierdo == LOW && valorDerecho == LOW) { //Estado 0-0
        driver.motorBReverse(velocidadMotorA);
        driver.motorAReverse(velocidadMotorB);
        }
     
      if (valorIzquierdo == LOW && valorDerecho == HIGH) { //Estado 0-1
        driver.motorAStop();
        driver.motorBForward(velocidadMotorB);
        }
     
      if (valorIzquierdo == HIGH && valorDerecho == LOW) { //Estado 1-0
        driver.motorAForward(velocidadMotorA);
        driver.motorBStop();
        }
   }
}

int obtenerDistancia()
{
  int d;
  pinMode(pinUltrasonido, OUTPUT);    //Indicar que se usará como salida para generar señal ultrasónica
  digitalWrite(pinUltrasonido, LOW);  //Asegurarse de que no esté generando señal ultrasónico
  delayMicroseconds(2);               //Pequeño tiempo de espera para ecos o ruidos iniciales
  digitalWrite(pinUltrasonido, HIGH); //Generar señal ultrasónica
  delayMicroseconds(10);              //Pequeño tiempo de generación de señal
  digitalWrite(pinUltrasonido, LOW);  //Apagar señal ultrasónica
  pinMode(pinUltrasonido, INPUT);     //Indicar que se usará como entrada para recibir señal ultrasónica ("micrófono")
  d = pulseIn(pinUltrasonido, HIGH);  //Instrucción para medir el tiempo en que la señal ultrasónica rebota y produce HIGH
  d = d / 58;                         //Divisíon entre 58 para pasar de tiempo (microsegundos) a distancia (cm) - Valor a calibrar
  return d;                           //Retorna d para que se pueda almacenar en variable
}

TABLAS DE COMPORTAMIENTO: 



Para programar de una forma eficiente, teniendo en cuenta el comportamiento de cada uno de los sensores y actuadores que quieran vincular a su robot, pueden usar la técnica para diseñar algoritmos para robots autónomos: tablas de comportamiento.Éstas permiten analizar los comportamientos posibles de URFI teniendo en cuenta las combinaciones de uso de los sensores y actuadores elegidos para su programación. Así podrán tener presentes todas las tareas que puede desarrollar el robot autónomo. La tabla se debe diligenciar con la información de los sensores y actuadores del proyecto.


ACTIVIDAD FINAL COMPLEMENTARIA:

Comparar el algoritmo del programa, el comportamiento de URFI y las tablas de comportamiento; identifiquen las funciones que se indican en la tabla y relaciónenlas con las que se encuentran en el algoritmo. Recuerden identificar la función que debe cumplir cada sensor y el comportamiento de cada actuador.