Tous les projets
Brico DiscoJournal de fabrication · 01

Projet 01 · Détection

Un radar ultrason : Arduino, impression 3D et Processing

Mon premier projet intégré : un capteur HC-SR04 sur un servomoteur SG90, une tour imprimée en 3D et un écran radar. Récit honnête, cinq prototypes ratés compris.

5 min de lectureIntermédiaire
Illustration de l’article : Un radar ultrason : Arduino, impression 3D et Processing

Pièce témoin HC-SR04 · Servo SG90

01

Le principe

Capteur ultrason vintage entouré d’ondes découpées

Je donne un cours du soir qui mélange drones volants, électronique et robotique. Pour l'année prochaine, je voulais un exercice qui rassemble un peu de tout ça d'un coup : de l'électronique, du code embarqué, de la modélisation et de l'impression 3D, et une interface qui affiche des données en temps réel.

Le radar ultrason est un classique des tutos Arduino — mais le refaire proprement, en concevant le support soi-même et en comprenant chaque délai, c'est une autre histoire.

Le principe est simple : un capteur HC-SR04 — les deux « yeux » — monté sur un servomoteur SG90 (un petit moteur dont on commande l'angle) balaie l'horizon de 0 à 180°. À chaque angle, l'Arduino mesure la distance et envoie angle,distance sur le port série. Un sketch Processing lit ce flux et dessine l'écran radar vert phosphorescent réglementaire.

Le radar en action : balayage 0–180° et affichage en temps réel.

Sur le papier, le HC-SR04 est un capteur étonnamment capable pour son prix (quelques euros) : une portée de 2 cm à environ 4 m, une résolution annoncée de 3 mm, un cône de mesure d'environ 15°, le tout alimenté directement en 5 V par l'Arduino. Il envoie une salve d'ultrasons à 40 kHz et mesure le temps que met l'écho à revenir — à 340 m/s, chaque milliseconde d'aller-retour représente environ 17 cm. C'est le capteur de distance low-cost par excellence : on le retrouve dans les robots éviteurs d'obstacles, les aides au stationnement bricolées et les mesures de niveau de cuve.

En pratique, ce n'est pas un capteur de précision : son cône de détection est large, les surfaces molles ou obliques absorbent l'écho et certaines mesures doivent être filtrées. Pour un radar pédagogique, c'est parfait : ses limites physiques deviennent visibles à l'écran.

02

Fabriquer la tour

Tour turquoise, pied à coulisse et plan technique découpés

Le support est une petite tour imprimée en PLA sur ma Bambu Lab : socle circulaire avec les graduations d'angle gravées, colonne cannelée, et une nacelle qui tient le capteur sur le palonnier du servo.

Elle a été modélisée en Python avec build123d — du CAD paramétrique en code : chaque cote est une variable, on change une valeur et toute la pièce se régénère.

03

Le code, ligne à ligne

Terminal rétro cobalt affichant un balayage radar vert, papier listing et connecteur

Côté Arduino, le firmware tient en cinquante lignes, mais presque chacune a une raison d'être. Le cœur, c'est la fonction de balayage :

void sweep(int start, int end) {
  int step = (start < end) ? 2 : -2;
  for (int i = start;
       (step > 0) ? (i <= end) : (i >= end);
       i += step) {
    myservo.write(i);
    delay(30);                   // 2° ≈ 4 ms de trajet + marge de stabilisation
    Serial.print(i);
    Serial.print(",");
    Serial.println(readDistance());
  }
}

Trois détails qui ne se voient pas dans les tutos :

  • Le delay(30) est avant la mesure, pas après : il laisse au servo le temps de se stabiliser sur son nouvel angle. Un délai après serait inutile, car la mesure ultrason est déjà bloquante — elle attend l'écho (ou son timeout) avant de rendre la main.
  • Le port série tourne à 115 200 bauds : à 9600, la transmission de chaque ligne mangeait à elle seule une bonne partie du budget temps du balayage.
  • La boucle for doit fonctionner dans les deux sens (balayage montant puis descendant). Avec un pas négatif, la condition classique i <= end ne s'exécute jamais — d'où cette condition qui change selon le signe du pas.

En face, le sketch Processing lit chaque ligne angle,distance, convertit le polaire en cartésien avec les éternels sinus et cosinus, et laisse les échos s'estomper progressivement pour donner l'effet de rémanence de l'écran radar.

04

Cinq versions et leurs ratés

Cinq prototypes de nacelles alignés comme des archives de magazine

Il a fallu cinq versions de la nacelle pour arriver au bout. La v1 avait une fente pour le câble qui s'arrêtait à 0,5 mm de déboucher — invisible sur les rendus 3D. On a fini par écrire un script de validation qui vérifie que chaque découpe traverse vraiment la matière : des tests unitaires, mais pour de la géométrie.

La v3 était géométriquement parfaite… et impossible à monter. Les yeux du capteur traversent la plaque avant : le module doit donc s'insérer par l'arrière. Rien n'était prévu pour son passage ni pour le quartz qui dépasse du circuit.

La v4 se montait enfin… sauf que la vis fournie avec le servo fait 8,9 mm et mon empilement de plastique 10,3 mm. La vis n'atteignait jamais l'axe. Sa longueur est maintenant une cote du modèle, avec un garde-fou qui refuse de générer la pièce si l'engagement est insuffisant.

05

Ce que j’ai appris

Main tenant un pied à coulisse près d’une pièce turquoise
  • Mesurer avant de modéliser. Tout est parti de mesures au pied à coulisse. Les fiches techniques des kits peuvent être imprécises — la mienne annonçait un servomoteur de 9 g pesant 134 g.
  • Apprendre le vocabulaire qui va avec : entraxe, trou pilote, press-fit.
  • Imprimer un gabarit de test — dix minutes de temps d'impression — avant de lancer la vraie pièce, qui en demande trois heures. La taille des trous et les jeux d'impression se calibrent sur ce petit coupon d'essai.
  • Chaque délai doit se justifier. Comprendre pourquoi un delay est là (ou pas) vaut mieux que copier ceux du tuto — voir le chapitre sur le code.
  • Le piège du repère écran : dans Processing, l'axe Y pointe vers le bas. Les sinus et cosinus du collège fonctionnent, à condition d'y penser.
06

La suite

Petit rover de plage rétro équipé d’un radar turquoise

La prochaine étape sera un châssis plus compact qui cache l'électronique, avec un Arduino Nano et peut-être un écran OLED. J'aimerais aussi comparer le HC-SR04 à un capteur ToF laser, puis transposer l'ensemble sur un robot roulant pour le cours.

Tout est sur GitHub dans le dépôt radar-ultrason : firmware Arduino, sketch Processing, modèles Python paramétriques, STL prêts à imprimer et journal de bord complet.

Projet mené en collaboration avec Claude Fable 5 pour l'encadrement pédagogique, la modélisation 3D et la rédaction, avec des coups de main de GPT-5.6 Sol sur l'électronique, Processing et les illustrations.

Ressources consultées

  • Le tutoriel du kit Elegoo Mega 2560 — c'est là que j'ai trouvé les PDF du kit et les exemples de code Elegoo (dont la bibliothèque SR04 utilisée dans le firmware).
  • La documentation de build123d — le CAD paramétrique en Python utilisé pour modéliser la tour.
  • La fiche technique du HC-SR04 — portée, cône de mesure et chronogramme du signal trigger/echo.
  • La référence Processing — pour le dessin de l'écran radar et la lecture du port série.