¡Hola de nuevo, makers! Ya os hemos enseñado varios proyectos de programación con las pequeñas placas Arduino, ahora vamos a dar un paso más y utilizaremos funciones en la programación. Por si no lo sabíais disponemos de varios kits Arduino que os podéis llevar a vuestras casas para realizar cualquier proyecto que se os ocurra. Sigue nuestro blog y te informaremos de cuándo volvemos a abrir nuestras puertas.

Hoy os traemos un nuevo proyecto de Arduino realizado con la página  que habitualmente utilizamos TinkerCad Circuits. ¡Sí, con las placas Arduino podemos crear muchísimas cosas útiles!, así que hoy os traemos un sensor de aparcamiento.

Como sabéis, tienes que registrarte en la página: https://www.tinkercad.com/circuits

Una vez aquí, ya podemos seguir el videotutorial que hemos creado. Los componentes que vamos a usar son los siguientes:

  • Arduino UNO
  • Placa protoboard
  • LED x3 (rojo, amarillo, verde)
  • Resistencias 220 x3
  • Sensor de ultrasonido HC-SR04
  • Buzzer x1
  • Cables de interconexión

Y, a modo de explicación básica, debemos conocer para qué sirve un sensor ultrasónico. Su funcionamiento es muy sencillo. A través del trigger se lanzará una señal de sonido que rebotará en el obstáculo y volverá hasta el sensor echo o receptor. El tiempo transcurrido entre el envío y la recepción determinará la distancia que hay hasta el obstáculo.

Por otro lado, os dejamos el código del programa. En el tutorial podéis ver dónde se deberá pegar para poder realizar la simulación. Hay pequeños comentarios en el código, pero si tenéis alguna duda no dudéis en preguntar.

Os recomendamos que echéis un vistazo al material que tenéis disponible en la sección de prototipado electrónico para empezar a entender el código ya que con éste podremos hacer muchas más cosas que con scratch. Consulta toda esta información en:

https://blogs.ugr.es/bibliomaker/prototipado-electronico/

El código del programa es el siguiente:

// Pines utilizados
#define LEDVERDE 2
#define LEDAMARILLO 3
#define LEDROJO 4
#define TRIGGER 5
#define ECHO 6
#define BUZZER 9

// Constantes
const float sonido = 34300.0;

// Velocidad del sonido en cm/s
const float umbral1 = 30.0;
const float umbral2 = 20.0;
const float umbral3 = 10.0;

void setup() {
// Iniciamos el monitor serie
Serial.begin(9600);

// Modo entrada/salida de los pines
pinMode(LEDVERDE, OUTPUT);
pinMode(LEDAMARILLO, OUTPUT);
pinMode(LEDROJO, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(TRIGGER, OUTPUT);
pinMode(BUZZER, OUTPUT);

// Apagamos todos los LEDs
apagarLEDs();

}

void loop() {
// Preparamos el sensor de ultrasonidos
iniciarTrigger();

// Obtenemos la distancia
float distancia = calcularDistancia();

// Apagamos todos los LEDs
apagarLEDs();

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

}

// Apaga todos los LEDs
void apagarLEDs()
{
// Apagamos todos los LEDs
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDAMARILLO, LOW);
digitalWrite(LEDROJO, LOW);
}

// Función que comprueba si hay que lanzar alguna alerta visual o sonora
void alertas(float distancia)
{
if (distancia < umbral1 && distancia >= umbral2)
{
// Encendemos el LED verde
digitalWrite(LEDVERDE, HIGH);
tone(BUZZER, 2000, 200);
}
else if (distancia < umbral2 && distancia > umbral3)
{
// Encendemos el LED amarillo
digitalWrite(LEDAMARILLO, HIGH);
tone(BUZZER, 2500, 200);
}
else if (distancia <= umbral3)
{
// Encendemos el LED rojo
digitalWrite(LEDROJO, HIGH);
tone(BUZZER, 3000, 200);
}
}

// Método que calcula la distancia a la que se encuentra un objeto.
// Devuelve una variable tipo float que contiene la distancia
float calcularDistancia()
{
// La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
unsigned long tiempo = pulseIn(ECHO, HIGH);

// Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que está en microsegundos
// por eso se multiplica por 0.000001
float distancia = tiempo * 0.000001 * sonido / 2.0;
Serial.print(distancia);
Serial.print(“cm”);
Serial.println();
delay(500);

return distancia;
}

// Método que inicia la secuencia del Trigger para comenzar a medir
void iniciarTrigger()
{
// Ponemos el Triiger en estado bajo y esperamos 2 ms
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);

// Ponemos el pin Trigger a estado alto y esperamos 10 ms
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);

// Comenzamos poniendo el pin Trigger en estado bajo
digitalWrite(TRIGGER, LOW);
}

¡Esperamos que lo disfruten!

By: Yaiza Tejera Fumero