Vous êtes sur la page 1sur 6

PROGRAMACIÓN ESTRUCTURADA

DETECCIÓN DE OBSTÁCULOS

Materiales:

1 Led Verde

1 Led Amarillo

1 Led Rojo

1 Sensor Ultrasónico HC-SR04

1 buzzer

3 resistencias 220 Ω

1 protoboard

Circuito
ALGORITMO

1. Comprobar la distancia de los objetos


1. ¿Está dentro del rango para avisar?
1. Si
1. Lanzar alarma visual y sonora
2. Continuar
2. No
1. Continuar

El algoritmo del sistema de alerta visual y sonora sería el siguiente.

1. ¿Está en zona verde?


1. Si
1. Encender LED verde
2. Emitir sonido 1
3. Salir
2. No
1. Continuar
2. ¿Está en zona amarilla?
1. Si
1. Encender LED amarillo
2. Emitir sonido 2
3. Salir
2. No
1. Continuar
3. ¿Está en zona roja?

1. Si
1. Encender LED rojo
2. Emitir sonido 2
3. Salir
2. No
1. Continuar

De los dos algoritmos anteriores, deducimos que vamos a necesitar varios umbrales de decisión,
uno para cada situación. Podemos coger una simple regla y determinarlos.

 Umbral 1: está en zona verde desde 30 cm a 20 cm.


 Umbral 2: está en zona amarilla, desde 20 cm a 10 cm.
 Umbral 3: está en zona roja, menos de 10 cm.
Calcular Distancia de los objetos

Para calcular el tiempo se utiliza la función nativa de Arduino pulseIn. Esta función nos devuelve el
tiempo transcurrido hasta que cambia de estado. Cuando la onda ultrasónica viaja por el aire, rebota
en el objeto y es detectada por el echo, el pin cambia de estado a alto (HIGH).

La función pulseIn detecta eso precisamente, y devuelve el tiempo transcurrido en microsegundos.


Por este motivo se debe convertir a segundos multiplicando por 0,000001 que es lo mismo que
dividir por 1.000.000. Con esta información ya podemos aplicar la fórmula para calcular la distancia
en función del tiempo y la velocidad.

El tiempo obtenido por la función pulseIn debe ser dividido por 2. Esto es debido a que recorre dos
veces la distancia, va hacia el objeto, rebota y vuelve hasta el sensor y por lo tanto tarda el doble.

Código

#define LEDVERDE 2

#define LEDAMARILLO 3

#define LEDROJO 4

#define TRIGGER 5

#define ECHO 6

#define BUZZER 9

const float sonido=34300.00; //Velocidad del sonido en cm/s

const float umbral1=30.0;

const float umbral2=20.0;

const float umbral3=10.0;

void setup() {

Serial.begin(9600);

pinMode(LEDVERDE,OUTPUT);

pinMode(LEDAMARILLO,OUTPUT);

pinMode(LEDROJO,OUTPUT);

pinMode(BUZZER,OUTPUT);

pinMode(TRIGGER,OUTPUT);
pinMode(ECHO,INPUT);

apagarLeds();

void loop() {

//Preparar el sensor Ultrasónico

iniciarTrigger();

//Obtener la distancia

float distancia = calcularDistancia();

//Apagar todos los LEDS

apagarLeds();

if(distancia < umbral1)

alertas(distancia);

void apagarLeds()

digitalWrite(LEDVERDE,LOW);

digitalWrite(LEDAMARILLO,LOW);

digitalWrite(LEDROJO,LOW);

}
void alertas(float distancia)

if(distancia < umbral1 && distancia >= umbral2)

digitalWrite(LEDVERDE,HIGH);

tone(BUZZER,2000,200);

else if(distancia < umbral2 && distancia > umbral3)

digitalWrite(LEDAMARILLO,HIGH);

tone(BUZZER,2500,200);

else if(distancia <= umbral3)

digitalWrite(LEDROJO,HIGH);

tone(BUZZER,3000,200);

//Metodo que calcula la distancia a la que se encuentra un objeto

//Devuelve una variable tipo float que contiene la distancia

float calcularDistancia()

unsigned long tiempo = pulseIn(ECHO,HIGH);

//Obtenemos la distancia en cm, hay que convertir el tiempo a segundos ya que esta en
microsegundos

//Por eso se multiplica por 0.000001

float distancia = tiempo * 0.000001 * sonido / 2.0;

Serial.print("Distancia: ");

Serial.print(distancia);
Serial.println(" cm");

delay(500);

return distancia;

//Metodo que inicia la secuencia del trigger para comenzar a medir

void iniciarTrigger()

//Ponemos el trigger en estado bajo y esperamos 2ms

digitalWrite(TRIGGER,LOW);

delayMicroseconds(2);

//Ponemos el trigger en estado alto y esperamos 10ms

digitalWrite(TRIGGER,HIGH);

delayMicroseconds(10);

//Comenzamos poniendo el trigger en estado bajo

digitalWrite(TRIGGER,LOW);

Vous aimerez peut-être aussi