Raspberry Pi – Arduino Uno – Détecter les aliens avec un HC-SR04 !

Lorsque j’ai reçu mon colis de débutant Arduino il y avait dedans un HC-SR04. Sous ce nom barbare se cache un capteur de distance à ultrason. Et j’ai tout de suite pensé à ce détecteur utilisé dans le film Alien (et ses suites) !

motion_tracker

Pour ceux qui ne connaissent pas cet appareil, en dehors d’une honte qui va s’abattre sur vous pendant 18 générations (oui 18 rien que ça), voici l’appareil en action :

(ici si la vidéo n’apparait pas)

Voilà maintenant vous voyez certainement où je veux en venir. Non pas détecter les Aliens qui trainent dans la maison mais simplement détecter un mouvement dans un couloir par exemple. Pour le fun j’ai ajouté un buzzer qui va au même rythme que le clignotement de la LED.

Et voici le fameux capteur :

hc-sr04-s

Pour ceux qui veulent tout savoir sur ce composant HC-SR04, la datasheet est disponible sur cette page.

Matériel

Alors pour notre détecteur il nous faut le matériel suivant :

  • Un HC-SR04
  • Une breadboard
  • Une LED rouge pour la zone « non autorisée »
  • Une LED verte pour la zone « autorisée »
  • Une résistance de 190Ω minimum (j’utilise une résistance de 1KΩ fournie dans le kit)
  • Un buzzer
  • Des câbles

Montage

L’assemblage va ressembler à ça :

HC-SR04_bb

Le programme

Pour le programme j’ai mis des commentaires pour vous aider à le lire même s’il n’est franchement pas compliqué :

// Pin de controle du module HC-SR04
const int trigPin = 3;
const int echoPin = 2;
// Pin pour la LED verte
const int greenLEDPin = 10;
// Pin pour la LED rouge
const int redLEDPin = 12;
// Pin pour le buzzer
const int buzzerPin = 7;
// Distance minimale correcte
const int min_dist = 200;
// Distance pour declancher l alerte
const int alerte_dist = 100;
// Variable pour la distance calculee
long distance;

// Fonction pour le parametrage
void setup()
{
  // Initialisation des broches
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenLEDPin, OUTPUT);
  pinMode(redLEDPin, OUTPUT);
  pinMode(buzzerPin,OUTPUT);
  // Definition de la vitesse de transmission pour la console
  Serial.begin(9600);
}

// Fonction de boucle
void loop()
{
  // Duree du signal emis par la sonde. Il y a un aller et un retour
  int duree;
  // Activation de la sonde
  digitalWrite(trigPin, HIGH);
  // Attente
  delayMicroseconds(1000);
  // Desactivation de la sonde
  digitalWrite(trigPin, LOW);
  // Demande de la duree a la sonde
  duree = pulseIn(echoPin, HIGH);
  // Calcul en centimetre (division par 2 pour un aller simple puis par 29 la distance parcourue par micro seconde)
  distance = duree/58;

  if (distance >= min_dist || distance <= 0) {     Serial.print(distance);     Serial.println(" hors limite");   } else {     Serial.println(distance);     if(distance >0 && distance < alerte_dist)     {       blink(distance, redLEDPin, true);     }     else if(distance >= alerte_dist)
    {
      blink(distance, greenLEDPin, false);
    }
  }
}

// Fonction pour faire clignoter une LED en fonction de la distance detectee
// Le buzzer peut etre active
void blink(int pause, int ledPin, int buzzer)
{
  pause = distance * 10;
  digitalWrite(ledPin, HIGH);
  if (buzzer) digitalWrite(buzzerPin,HIGH);
  delay(10);
  digitalWrite(ledPin, LOW);
  if (buzzer) digitalWrite(buzzerPin,LOW);
  delay(pause);
}

Résultat

WP_20130810_002

Voilà. Si quelque chose passe devant le capteur et entre dans la zone définie comme « non autorisée », alors la LED rouge s’allume et le buzzer bip !

Si vous voulez, vous pouvez utiliser dans votre programme la librairie Ultrasonic qui simplifie l’initialisation et le calcul de distance. Plus d’information sur son utilisation ici.

[EDIT] Si vous voulez des tests plus poussés sur le capteur vous avez un article ici.

Bon week end à tous !

Vous aimerez aussi...