Radar ultrasonique Arduino HC-SR04 : Affichage temps réel avec servo et Processing
Composants nécessaires
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Capteur ultrasonique HC-SR04 | 1 |
| Servomoteur standard (ex: SG90, MG996R) | 1 |
| Plaque d'essai et fils de connexion | 1 |
| Ordinateur avec Processing IDE | 1 |
Principe général
Ce projet réalise un radar à balayage : un servomoteur fait pivoter le capteur HC-SR04 sur un arc de 160° (-80° à +80°), et l'Arduino envoie les mesures de distance (angle, distance) via le port série. Un programme Processing sur PC reçoit ces données et dessine une visualisation temps réel en vue de dessus (type écran radar).
Architecture du système
Côté Arduino (Serveur)
- Pilote le servo par pas de 1°
- À chaque position, lit la distance via HC-SR04 (bibliothèque
NewPing) - Envoie sur le port série :
angle,distance\n(ex:-45,123\n) - Inverse la direction aux bornes (±80°)
Côté Processing (Client)
- Ouvre le port série (9600 bauds)
- Parse chaque ligne : angle, distance
- Trace un trait depuis le centre à l'angle reçu, longueur proportionnelle à la distance
- Moyenne les deux balayages (aller/retour) pour réduire le bruit
- Affiche une interface type radar (grille, échelle, trace persistante)
Code Arduino (Arduino_radar_server_arduino.ino)
/* Radar HC-SR04 + Servo - Envoi série pour Processing
* Basé sur le travail de faweiz (GitHub)
*/
#include <NewPing.h>
#include <Servo.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define MAX_DISTANCE 150 // cm (max fiable ~400-500 cm)
#define SERVO_PIN 9
#define ANGLE_BOUNDS 80 // ±80°
#define ANGLE_STEP 1 // Pas de 1°
Servo myservo;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
int angle = 0; // Angle courant (-80..+80)
int dir = 1; // Direction : +1 ou -1
void setup() {
Serial.begin(9600);
myservo.attach(SERVO_PIN);
}
void loop() {
delay(50); // Temps de stabilisation servo + mesure
// Convertir angle [-80,80] en position servo [0,180]
myservo.write(angle + ANGLE_BOUNDS);
// Mesure et envoi série
int cm = sonar.ping_cm();
Serial.print(angle, DEC);
Serial.print(",");
Serial.println(cm, DEC);
// Prochain angle
if (angle >= ANGLE_BOUNDS || angle <= -ANGLE_BOUNDS) dir = -dir;
angle += dir * ANGLE_STEP;
}
Code Processing (Arduino_radar_client_processing.pde)
Le code complet est disponible sur le GitHub de l'auteur : faweiz/My-Arduino/arduino_radar
Points clés du sketch Processing :
serialEvent()lit les lignes, split par virgule- Conversion angle → radians, distance → pixels
- Double tampon : un pour le balayage aller, un pour le retour
- Moyenne des deux pour l'affichage final
- Effet de rémanence (traces qui s'estompent) pour l'aspect radar
Schéma de câblage
| HC-SR04 | Arduino |
|---|---|
| VCC | 5V |
| Trig | Pin 2 |
| Echo | Pin 3 |
| GND | GND |
| Servo | Arduino |
|---|---|
| Signal (orange/jaune) | Pin 9 (PWM) |
| VCC (rouge) | 5V (ou alimentation externe si servo puissant) |
| GND (marron/noir) | GND |
Important : Alimentez le servo depuis une source externe (ou au moins un condensateur 470-1000 µF sur l'alimentation 5V de l'Arduino) pour éviter les réinitialisations dues aux pics de courant.
Installation et lancement
- Installez la bibliothèque NewPing dans l'IDE Arduino (Gestionnaire de bibliothèques).
- Téléversez le code Arduino.
- Installez Processing 3/4 depuis processing.org.
- Ouvrez le sketch Processing, adaptez le nom du port série (
Serial.list()). - Lancez le sketch Processing → la fenêtre radar s'ouvre et affiche les mesures en temps réel.
Personnalisation et extensions
- Portée : modifiez
MAX_DISTANCE(max 400-500 cm théorique). - Résolution angulaire : changez
ANGLE_STEP(1° par défaut). - Vitesse de balayage : ajustez
delay(50). - Affichage : couleurs, grille, échelle, texte dans Processing.
- Enregistrement : sauvegarder les scans dans un fichier CSV pour analyse ultérieure.
- Détection d'objets : seuillage sur la distance pour déclencher une alarme.
Limites connues
- Le HC-SR04 a un angle d'ouverture large (~30°) : la résolution angulaire réelle est limitée.
- Mesures instables sur surfaces absorbantes ou inclinées.
- Le servo hobby (SG90) a du jeu ; un servo métallique (MG996R) améliore la précision.
- Latence série + traitement Processing : pas temps réel strict, mais suffisant pour démo/éducation.
Processus de fabrication
- Construire un Spybot Arduino piloté par Bluetooth
- FlickMote : Télécommande IR à gestes pour maison connectée
- TV-B-Gone DIY Arduino : Télécommande universelle pour toutes les TV
- Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Solutions d'alimentation optimisées pour projets Arduino
- Morpion sur matrice LED MAX7219 avec boîtier en carton
- Construire un robot quadrupède Arduino intelligent : guide étape par étape
- Mesure de distance en temps réel par sonar Arduino et visualisation Processing