«Botón sin contacto» con sensor ultrasónico HC-SR04 en tiempos de COVID-19

En una entrada de hace un par de semanas describía cómo construir un «botón sin contacto», por medio de una célula fotoeléctrica, en previsión que este tipo de interruptores van a utilizarse mucho más a partir de ahora, en este nuevo mundo durante y tras COVID-19…

Cuento ahora otro botón «sin contacto» también muy sencillo, empleando el sensor ultrasónico HC-SR04.

El concepto detrás de este sensor es muy sencillo: se emite un pulso de alta frecuencia que tras rebotar en un objeto es captado de vuelta por un micrófono. Midiendo el tiempo entre la señal emitida y la recepción de su rebote se puede calcular la distancia a la que se encuentra el objeto en cuestión.

HC-SR04
Sensor ultrasonidos HC-SR04
HC-SR04 frontal
HC-SR04 frontal
HC-SR04 parte trasera
HC-SR04 parte trasera

Según la hoja de especificaciones, se alimenta de 5V y su rango de medida está entre 2 cm y 400 cm, con un ángulo de 15º. Es un sensor muy típico y barato (menos de 2€).

Instalo la librería NewPing desde el IDE de Arduino, y conecto de la siguiente forma:

HC-SR04 -> Arduino Pro Micro (Leonardo):
Vcc -> VCC
Trig -> 5
Echo -> 5
Gnd -> GND

Puede conectarse «Trig» y «Echo» a pines diferentes, pero con la librería «NewPing», que se puede instalar directamente desde el IDE de Arduino, se puede emplear un mismo pin, en mi caso el 5. A fin de cuentas, cuando se está emitiendo la señal no se está esperando la respuesta, por lo que se puede emplear el mismo pin para los dos propósitos.

Conecto también un led (con su resistencia correspondiente), de forma que me queda conectado así:

Arudino + HC-SR04 + led
Arduino + HC-SR04 + led

Y cargo el siguiente código:

<code>#include &lt;NewPing.h>

// HC-SR04 -> Arduino Pro Micro (Leonardo):
// Vcc -> VCC
// Trig -> 5
// Echo -> 5
// Gnd -> GND

const int UltrasonicPin = 5;  // Pin al que se envía y recibe la señal del HC-SR04
const int MaxDistance = 200;
const int ledPin = 9;         // Pin al que está conectado el LED
const int distSens = 11;   // Distancia por debajo de la cual se enciende el led

int dist;

NewPing sonar(UltrasonicPin, UltrasonicPin, MaxDistance);
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  delay(50);                      // esperar 50ms entre pings (29 ms como mínimo)
  dist=sonar.ping_cm();
  Serial.print(dist);
  Serial.println("cm");

  if (dist &lt; distSens)
  {
    Serial.println("Enciendo");  
    digitalWrite(ledPin, HIGH);
    delay(50);
    Serial.println("Apago");  
    digitalWrite(ledPin, LOW); 
  }
  
}</code>

En el vídeo del principio puede verse en funcionamiento.

Referencias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.