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) !
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 :
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 :
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
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 !