Sélectionner une page

Contrôlez votre PC avec le capteur à ultrasons HC-SR04 et Arduino Leonardo

Dans ce tutoriel, vous découvrirez le module d’échographie SR04 et découvrirez son fonctionnement. En fin de compte, vous pouvez le connecter à la carte Arduino et l’utiliser comme détecteur de mouvement pour contrôler votre moniteur avec des gestes de la main.

Ce que vous allez apprendre:

  • Qu’est-ce que le module ultrasonique et comment fonctionne-t-il
  • Comment utiliser le module ultrasonique avec Arduino
  • Contrôler un moniteur à l’aide du module ultrasonique

Qu’est-ce que le module ultrasonique et comment fonctionne-t-il

Le capteur à ultrasons est un capteur de proximité. Ce capteur calcule le temps et la direction des ultrasons dans l’air en envoyant une courte impulsion audio à une fréquence supérieure à la portée auditive humaine et en la recevant après réflexion de la surface de l’objet. En utilisant ce temps, la distance est mesurée avec une haute résolution. La méthode par ultrasons est l’une des meilleures méthodes pour mesurer la distance et détecter des objets en raison de la haute précision et de la vitesse, du manque de contact avec l’objet, de l’absence de corrosion et du prix approprié. La plupart des modules à ultrasons comprennent un émetteur et un récepteur. Le récepteur et l’émetteur des modules SRF04 et SRF05 sont adjacents l’un à l’autre et peuvent détecter avec précision des objets dans la plage de 2 à 300 cm. Le module SRF05 est une version améliorée du SRF04. Cette version prend en charge le mode double et comprend 5 broches pour travailler avec. Mais le module SRF04 a 4 broches et ne prend en charge qu’un seul mode. Les deux modules ont un mode commun appelé mode1.

En mode 1, vous devez d’abord appliquer une impulsion pendant au moins 10 microsecondes à la broche de déclenchement. Le module envoie automatiquement 8 impulsions à la fréquence de 40 kHz et règle la broche d’écho sur 1. La broche d’écho reste haute jusqu’à ce que le module reçoive les impulsions réfléchies par un objet. On peut alors calculer le temps entre l’envoi et la réception du signal en mesurant le temps que la broche d’écho est à un niveau logique haut. Dans ce mode, laissez la prise SRF05 OUT non connectée.


srF05 en mode 1 - Contrôlez votre PC avec le capteur à ultrasons HC-SR04 et Arduino

Le mode 2, qui n’est disponible que sur le module SRF05, utilise une seule broche pour les signaux de déclenchement et d’écho. Pour utiliser ce mode, connectez la broche OUT à la masse et utilisez la broche Echo pour envoyer et recevoir l’impulsion d’écho. Nous pouvons calculer la distance du premier objet en mesurant la durée du signal, comme mentionné ci-dessus.

Matériaux nécessaires

  • Arduino LEONARDO × 1
  • Module de capteur de distance à ultrasons HY-SRF05 × 2
  • Cavaliers × 1
  • IDE Arduino

Module d’ultrasons et interface Arduino

La connexion entre le module ultrasonique et Arduino est très simple. Il vous suffit de connecter les broches Trig et Echo à deux broches Arduino et d’insérer ces deux broches dans l’Arduino. En utilisant ces broches, Arduino calcule la distance du premier objet devant le module, comme expliqué ci-dessus. N’oubliez pas non plus de connecter le VCC et GND du module à 5V et le GND d’Arduino.

Circuit

Code

/*    
   * Ultrasonic Sensor HC-SR05/4 and Arduino
    * by Hanie Kiani
*  https://arduinotutoriels.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;
}

Regardons de plus près le code:

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

envoyer une impulsion de 10 microsecondes sur la broche de déclenchement.

duration = pulseIn(echoPin, HIGH);

la fonction pulseIn () calcule le temps pendant lequel la broche d’écho est haute, qui est en fait égal au temps entre le signal transmis et le signal reçu.

distance= duration*0.034/2;

En multipliant la durée et la vitesse du son, la distance parcourue par le son peut être calculée.

Contrôler votre moniteur avec Arduino et le module ultrasonique

Supposons qu’une vidéo soit en cours de lecture sur votre écran. Nous voulons contrôler la lecture ou l’arrêt de la vidéo, son volume et la déplacer d’avant en arrière simplement avec des gestes de la main.

Pour cela, vous devez connecter deux modules à ultrasons à une carte Arduino Leonardo, et placer les modules à droite et à gauche au-dessus de votre moniteur.

Téléchargez le code suivant sur votre assiette. Vous pouvez maintenant arrêter ou lire la vidéo en plaçant vos deux mains à une distance de 20 à 30 centimètres des modules.

Si vous placez votre main droite de 3 à 6 pouces devant le module droit et que vous l’éloignez légèrement, la vidéo se rembobine de 5 secondes. Et si vous fermez légèrement la main sur le module, la vidéo avance de 5 secondes.

Ne vous inquiétez pas du volume. En plaçant la main gauche à une distance de 9 à 15 cm du module et en la fermant au module, le volume de la vidéo augmentera et l’éloignement de la main diminuera.

Circuit

Vous avez besoin de la bibliothèque Keyboard.h pour cette partie. Vous pouvez le télécharger à partir du lien suivant:

https://arduinotutoriels.com/keyboard/

Code

/*
    * 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;
}

Que pouvez vous faire d’autre?

  • Essayez de calculer la distance de chaque objet autour du module à ultrasons en ajoutant un servomoteur au module.
  • Essayez de définir d’autres gestes pour de nouvelles options telles que la modification de la vitesse de lecture vidéo.