PLANTILLA INSPIRACIÓN
PARA VER LA PLANTILLA SIGA EL LINK:
PLANTILLA IMPLEMENTACIÓN
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
- 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.
- 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