PROYECTO FINAL





PLANTILLA INSPIRACIÓN

PARA VER LA PLANTILLA SIGA  EL LINK:



PLANTILLA IMPLEMENTACIÓN







PARA VER LA PLANTILLA SIGA  EL LINK:




PROYECTO FINAL 



AGUJA DE SEGURIDAD PARA PASO DEL TREN


Este proyecto trata sobre un mecanismo que va a funcionar para regular el paso al  transitar y encontrar una linea ferrea, empleando un brazo robotico, sistema de alarma con luces y sonido, brindando varias alertas y tiempos de espera para tratar de disminuir la cantidad de accidentes que dejan tantas personas con discapacidades y familias destrozadas por la perdidas de sus seres queridos. 






VIDEO


CÓDIGO DEL PROGRAMA

#include <Servo.h>//libreria
Servo servoMotor; // constructor de la sentencia servo

// Pines utilizados
int ledVerde = 10;
int ledAmarillo = 9;
int ledRojo = 8;
int trig = 13;
int echo = 12; 
int piezo =  2;

// Constantes
const float sonido = 34300.0; // Velocidad del sonido en cm/s
const float rango1 = 30.0;
const float rango2 = 20.0;
const float rango3 = 10.0;

void setup() {
// monitor serie
  Serial.begin(9600);
// Modo de los pines
  pinMode(ledVerde, OUTPUT);
  pinMode(ledAmarillo, OUTPUT);
  pinMode(ledRojo, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(trig, OUTPUT);
  pinMode(piezo, OUTPUT);
  servoMotor.attach(3); //comunicacion con el servo
  

  // inicia con leds apagados
  apagoLeds();

}

void loop() {
  // inicia sensor ultrasonico
  iniciarTrigger();

  // operación para calcular distancia
  float distancia = calcularDistancia();

  // apago led
  apagoLeds();

  // Lanzamos alerta si estamos dentro del rango de peligro
  if (distancia < rango1)
  {
    // Lanzamos alertas
    alertas(distancia);
  }

}

// Apaga todos los leds
void apagoLeds()
{
  // Apaga todos los Leds
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAmarillo, LOW);
  digitalWrite(ledRojo, LOW);
}

// Función para comprobar si se activa alguna de las alerta
void alertas(float distancia)
{
  if (distancia < rango1 && distancia >= rango2)
  {
    // enciende led verde

    servoMotor.write(0);
    digitalWrite(ledVerde, HIGH);
    tone(piezo, 2000, 200);
    
  }
  else if (distancia < rango2 && distancia > rango3)
  {
    // enciende el led amarillo
   
    digitalWrite(ledAmarillo, HIGH);
    tone(piezo, 2500, 200);
  }
  else if (distancia <= rango3)
  {
    // encuende led rojo

    servoMotor.write (90);
    digitalWrite(ledRojo, HIGH);
    tone(piezo, 3000, 200);
  }
}

// Método para calcular la distancia a la que esta el carro.
// Devuelve una variable que tiene la distancia
float calcularDistancia()
{
  // esta función pulseIn obtiene el tiempo que tarda en cambiar entre estados
  unsigned long tiempo = pulseIn(echo, HIGH);

  
  float distancia = tiempo * 0.000001 * sonido / 2.0;
  Serial.print(distancia);
  Serial.print("cm");
  Serial.println();
  delay(500);

  return distancia;
}

// inicia en trigger
void iniciarTrigger()
{
  // se pone el trigger en bajo y espera 2ms
  digitalWrite(trig, LOW);
  delayMicroseconds(2);

  // cambia a alto y espera 10ms 
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);

  // ahora esta en bajo
  digitalWrite(trig, LOW);
}

  PROBLEMAS TÉCNICOS



  1. Calculo de distancia de los rangos:uve que apoyarme bien con el ejercicio de la practica 2,y  la pantalla LCD para ver los valores que arrojaba al acercar la mano y luego hacer el cálculo de la distancia en tres rangos.
  2. Configuración del servo: Como tenía que hacer el cálculo de que tanto mover el brazo tuve que probar varios grados para ver cual se ajustaba mejor


No hay comentarios:

Publicar un comentario

PAGINA PRINCIPAL

ESTE BLOG TIENE COMO FINALIDAD RECOPILAR LAS ACTIVIDADES Y APRENDIZAJES QUE SE VAN GENERANDO ACORDE AVANZA EL CURSO DE PROTOTIPOS INTERACT...