Controla tu PC con el sensor ultrasónico HC-SR04 y Arduino

Controla tu PC con el sensor ultrasónico HC-SR04 y Arduino Leonardo

En este tutorial, aprenderás sobre el módulo de ultrasonidos SR04 y descubrirás cómo funciona. Al final, podrás conectarlo a la placa Arduino y usarlo como detector de movimiento para controlar tu monitor con gestos de la mano.

Lo que aprenderás:

  • Qué es el módulo ultrasónico y cómo funciona
  • Cómo usar el módulo ultrasónico con Arduino
  • Controlar un monitor usando el módulo ultrasónico

Qué es el módulo ultrasónico y cómo funciona

El sensor ultrasónico es un sensor de proximidad. Este sensor calcula el tiempo y la dirección de los ultrasonidos en el aire enviando un breve pulso de audio a una frecuencia superior al rango de audición humana y recibiéndolo después de la reflexión de la superficie del objeto. Utilizando este tiempo, la distancia se mide con alta resolución. El método ultrasónico es uno de los mejores métodos para medir la distancia y detectar objetos debido a la alta precisión y velocidad, la falta de contacto con el objeto, la ausencia de corrosión y el precio adecuado. La mayoría de los módulos ultrasónicos incluyen un transmisor y un receptor. El receptor y el transmisor de los módulos SRF04 y SRF05 son adyacentes entre sí y pueden detectar con precisión objetos en el rango de 2 a 300 cm. El módulo SRF05 es una versión mejorada del SRF04. Esta versión es compatible con el modo dual e incluye 5 pines para trabajar con ellos. Pero el módulo SRF04 tiene 4 pines y sólo admite un modo. Ambos módulos tienen un modo común que se conoce como modo1.

módulos de ultrasonidosEn el modo 1 primero, debes aplicar un pulso durante al menos 10 microsegundos a la clavija de disparo. El módulo enviará automáticamente 8 pulsos a la frecuencia de 40 kHz y ajustará la clavija de eco a 1. La clavija de eco permanece alta hasta que el módulo reciba los pulsos reflejados de un objeto. Entonces podemos calcular el tiempo entre el envío y la recepción de la señal midiendo el tiempo que la patilla del eco está en un nivel lógico alto. En este modo dejar la clavija SRF05 OUT sin conexión.

hy srf05 pinoutsrF05 en modo 1

El modo 2, que sólo está disponible en el módulo SRF05, utiliza un solo pin para las señales de disparo y de eco. Para utilizar este modo, conecta la clavija OUT a la tierra y utiliza la clavija de Eco para enviar y recibir el pulso de Eco. Podemos calcular la distancia desde el primer objeto midiendo la duración de la señal, como se mencionó anteriormente.

srF05 en modo 2

Materiales requeridos

materiales

  • Arduino LEONARDO × 1
  • HY-SRF05 Módulo de Sensor de Distancia Ultrasónico × 2
  • Jumpers × 1
  • Arduino IDE

Módulo de Ultrasonido y Arduino Interfaz

La conexión entre el módulo ultrasónico y Arduino es muy simple. Sólo hay que conectar los pines de Trig y Eco a dos pines de Arduino e introducir estos dos pines en Arduino. Usando estos pines, Arduino calcula la distancia desde el primer objeto en frente del módulo, como se explicó anteriormente. Además, no olvides conectar el VCC y el GND del módulo a 5V y el GND de Arduino.

Circuito

arduino leonardo con hc sr04

Código

/*    
   * Ultrasonic Sensor HC-SR05/4 and Arduino
    * by Hanie Kiani
*  https://descubrearduino.com
    */
long duration;
    int distance;
    
    const int trig = 9;
    const int echo = 10;
   
    
    void setup() {
    pinMode(trig, OUTPUT); // Sets the trigPin as an Output
    pinMode(echo, INPUT); // Sets the echoPin as an Input
    Serial.begin(9600); // Starts the serial communication
    }
    void loop() {
       distance = calculateDistance();
Serial.println(distance); 
 
    }
    int calculateDistance(){ 
  
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
  return distance;
}

Echemos un vistazo más de cerca al código:

digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW);

enviando un pulso de 10 microsegundos en la clavija trig.

duration = pulseIn(echoPin, HIGH);

la función pulseIn() calcula el tiempo en que la clavija de eco es alta, que en realidad es igual al tiempo entre la señal que se transmite y la que se recibe.

distance= duration*0.034/2;

Multiplicando la duración del tiempo y la velocidad del sonido, se puede calcular la distancia recorrida por el sonido.

Controlando su monitor con Arduino y el módulo ultrasónico

Supongamos que se está reproduciendo un video en tu pantalla. Queremos controlar el video para que se reproduzca o se detenga, su volumen y moverlo hacia adelante y hacia atrás sólo con gestos de la mano.

Para ello debes conectar dos módulos ultrasónicos a una placa Arduino Leonardo, y colocar los módulos a la derecha y a la izquierda por encima de tu monitor.

Sube el siguiente código en tu placa. Ahora puedes parar o reproducir el video colocando tus dos manos a una distancia de 20 a 30 centímetros de los módulos.

Si colocas tu mano derecha a una distancia de 9 a 15 centímetros delante del módulo derecho y lo alejas ligeramente de él, el vídeo retrocede 5 segundos. Y si cierras tu mano ligeramente al módulo, el video avanza 5 segundos.

No te preocupes por el volumen. Colocando la mano izquierda a una distancia de 9 a 15 cm del módulo y cerrándola al módulo, el volumen del vídeo aumentará y alejando la mano se reducirá.

Circuito

arduino leonardo con dos hc sr04

Necesitas la biblioteca de Keyboard.h para esta parte. Puedes descargarla desde el siguiente enlace:

https://descubrearduino.com/keyboard/

Código

/*
    * Control Your PC with Ultrasonic Sensor HC-SR04 and Arduino
  
 */
#include <Keyboard.h>
long duration;
int distance,distLeft,distRight;
 
const int trigger1 = 2; //Trigger pin of 1st Sesnor
const int echo1 = 3; //Echo pin of 1st Sesnor
const int trigger2 = 4; //Trigger pin of 2nd Sesnor
const int echo2 = 5;//Echo pin of 2nd Sesnor
 
 
void setup() {
Serial.begin(9600); 
  
pinMode(trigger1, OUTPUT); 
pinMode(echo1, INPUT); 
pinMode(trigger2, OUTPUT); 
pinMode(echo2, INPUT); 
}
 
 
 
void loop() { 
distance=calculateDistance(trigger1,echo1);
distLeft =distance; 
 
distance=calculateDistance(trigger2,echo2);
distRight =distance;
 
//Pause Modes -Hold
if ((distLeft >20 && distRight>20) && (distLeft <30 && distRight<30)) //Detect both hands
{Serial.println("Play/Pause"); 
                        Keyboard.press(KEY_TAB);
                        delay(100);
                        Keyboard.releaseAll();
  delay (500);}
 
distance=calculateDistance(trigger1,echo1);
distLeft =distance;
 
distance=calculateDistance(trigger2,echo2);
distRight =distance;
 
 
 
//Control Modes
//Lock Left - Control Mode
if (distLeft>=9 && distLeft<=14)
{
  delay(100); //Hand Hold Time
 distance=calculateDistance(trigger1,echo1);
  distLeft =distance;
  if (distLeft>=0 && distLeft<=15)
  {
    Serial.println("Left Hand detected");
    while(distLeft<=20)
    {
     distance=calculateDistance(trigger1,echo1);
      distLeft =distance;
      if (distLeft<5) //Hand pushed in 
      {Serial.println ("Volume Up");
                         Keyboard.press(KEY_UP_ARROW); //up  key
                         delay(100);
                         Keyboard.releaseAll();
        delay (300);}
      if (distLeft>17) //Hand pulled out
      {Serial.println ("Volume Down");
       Keyboard.press(KEY_DOWN_ARROW); //down  key
                         delay(100);
                         Keyboard.releaseAll();
       delay (300);}
    }
  }
}
 
//Lock Right - Control Mode
if (distRight>=9 && distRight<=14)
{
  delay(100); //Hand Hold Time
 distance=calculateDistance(trigger2,echo2);
  distRight =distance;
  if (distRight>=0 && distRight<=20)
  {
    Serial.println("Right Hnaad Detected");
    while(distRight<=20)
    {
      distance=calculateDistance(trigger2,echo2);
      distRight =distance;
      if (distRight<5) //Right hand pushed in
      {Serial.println ("Rewind"); 
       Keyboard.press(KEY_LEFT_ARROW); //left key
                         delay(100);
                         Keyboard.releaseAll();
       delay (300);
      }
      if (distRight>17) //Right hand pulled out
      {Serial.println ("Forward"); 
       Keyboard.press(KEY_RIGHT_ARROW); //right  key
                         delay(100);
                         Keyboard.releaseAll();
       delay (300);}
  }
}
}
 
delay(200);
}
 int calculateDistance(int trig, int echo){ 
  
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
distance = 50;
 return distance;
}

¿Qué más puedes hacer?

  • Intenta calcular la distancia de cada objeto alrededor del módulo ultrasónico añadiendo un servomotor al módulo.
  • Intenta definir otros gestos para nuevas opciones como cambiar la velocidad de reproducción del vídeo.

Pin It on Pinterest

Shares