Par Rémi Favreau — 21 avril 2026
Quand je fais les courses pour un nouveau projet robotique, je me rends compte qu’en quinze ans je suis toujours revenu au même tiroir dans mon atelier : celui qui contient cinq familles de capteurs. Ces cinq-là, combinés différemment, couvrent littéralement toute la robotique DIY débutante et intermédiaire. Si tu démarres, investir dans les quatre premiers te revient à une douzaine d’euros. En ajoutant la caméra, tu montes à quarante euros. Dans tous les cas, c’est un coffre à outils sensoriels complet qui couvre la plupart des projets.
Cet article passe en revue chaque famille avec le même niveau de détail : à quoi ça sert, comment ça marche physiquement, comment on le branche sur un Pi, un bout de code Python pour le tester, et les pièges que j’ai vus en atelier. L’ordre va du plus simple au plus complexe.
Capteur ultrason HC-SR04 : mesurer la distance au mur
C’est le capteur le plus populaire en robotique débutante, et pour cause : il coûte moins de deux euros, il est quasiment indestructible, et il donne un résultat immédiatement compréhensible (« il y a un obstacle à 23 centimètres »). On l’a utilisé dans le projet robot 2 roues pour l’évitement d’obstacles.
Principe physique. Le module embarque un émetteur et un récepteur piézoélectriques. L’émetteur envoie une salve d’ultrasons à 40 kHz (inaudible par l’oreille humaine). Les ondes rebondissent sur le premier obstacle solide et reviennent au récepteur. Le module mesure le temps de vol et l’expose via sa broche ECHO sous forme d’une impulsion dont la durée est proportionnelle à la distance. La formule : distance = durée × vitesse du son / 2. À 20 °C dans l’air, la vitesse du son est d’environ 343 m/s.
Portée et précision. Le HC-SR04 mesure de 2 cm à environ 400 cm, avec une précision de l’ordre de 3 mm dans des conditions idéales. Son cône de détection fait environ 15° d’ouverture. Conséquence pratique : plus l’obstacle est loin, plus la « tache » détectée est large, et le capteur ne sait pas exactement quel point il a touché. En dessous de 2 cm, la mesure est fausse (le signal retour arrive trop vite pour être chronométré correctement).
Câblage sur Raspberry Pi. Quatre fils : VCC → 5V du Pi (broche 2), GND → GND (broche 6), TRIG → un GPIO quelconque (3,3V suffit pour déclencher), ECHO → un GPIO via un pont diviseur de tension (résistances 330 Ω + 470 Ω). Ce pont est obligatoire parce que le HC-SR04 renvoie un signal à 5V et le GPIO du Pi tolère 3,3V max. Sans le pont, tu risques d’endommager la broche GPIO.
# Test rapide HC-SR04 avec gpiozero
from gpiozero import DistanceSensor
from time import sleep
capteur = DistanceSensor(echo=25, trigger=24, max_distance=2)
while True:
print(f"Distance : {capteur.distance * 100:.1f} cm")
sleep(0.3)
Limites à connaître. Les surfaces molles (tissu, mousse) absorbent les ultrasons au lieu de les réfléchir. Les angles rasants (mur très incliné par rapport au capteur) donnent des lectures erratiques. Et la température ambiante modifie la vitesse du son : entre un garage à 5 °C et un salon à 25 °C, l’écart atteint presque 4 %. Si tu as besoin de plus de précision ou d’un format plus compact, le VL53L0X (capteur laser Time-of-Flight, I2C, ~4 euros) est une alternative sérieuse.
Capteur infrarouge TCRT5000 : détecter un objet à courte portée
Si l’ultrason est le radar longue portée du robot, l’infrarouge réfléchi est son capteur de proximité immédiate. Le TCRT5000 de Vishay (ou ses clones chinois) coûte moins d’un euro, se branche en deux fils sur un GPIO, et répond à une seule question : « est-ce qu’il y a quelque chose juste devant moi, à moins de 3 centimètres ? ».
Fonctionnement. Le module contient une LED infrarouge émettrice et une photodiode réceptrice, côte à côte. La LED émet un faisceau IR invisible. Si un objet est assez proche pour réfléchir le faisceau, la photodiode le capte et la sortie passe à 0 (logique inversée sur la plupart des modules). Si rien ne réfléchit, la sortie reste à 1. C’est binaire : présence ou absence, pas de mesure de distance précise.
Usages classiques en robotique. On les met par trois en barre sous le châssis d’un robot pour du suivi de ligne : le capteur central voit la ligne noire (sortie 0), les deux latéraux voient le blanc (sortie 1). Si le capteur gauche passe à 0, le robot dérive à gauche et doit corriger à droite. Trois capteurs, six lignes de code, un projet d’atelier qui prend une heure. On les utilise aussi comme fin de course (détecter un bord de table pour que le robot ne tombe pas) ou comme capteur de passage (comptage d’objets sur un tapis roulant miniature).
Réglage. La plupart des modules incluent un petit potentiomètre pour régler le seuil de détection. Tourner le potard change la distance de basculement (entre 5 mm et 30 mm environ). Si ton capteur ne détecte rien ou détecte en permanence, c’est probablement le potentiomètre qui est mal réglé. Un tournevis cruciforme miniature et trente secondes suffisent.
Encodeurs de roues : savoir où en est le robot
Un robot sans encodeur ne sait pas s’il a avancé de 10 cm ou de 50. Il sait juste qu’il a envoyé du courant à ses moteurs pendant un certain temps, mais le résultat réel dépend de la surface (moquette vs carrelage), de la charge batterie, de la pente. Les encodeurs de roues résolvent ce problème en comptant les tours.
Deux grandes familles. Les encodeurs optiques utilisent un disque perforé solidaire de l’axe du moteur. Une fourche LED/photodiode détecte chaque passage de trou : un trou = une impulsion. Résolution typique : 20 à 40 impulsions par tour de roue. Les encodeurs magnétiques (ou quadrature) utilisent un aimant et un capteur à effet Hall, souvent intégrés dans le moteur lui-même. Résolution nettement supérieure (200 à 600 impulsions par tour), et ils donnent en plus le sens de rotation grâce à deux signaux déphasés (voies A et B).
Ce que ça permet. Avec deux encodeurs (un par roue), on fait de l’odométrie : calculer en temps réel la position estimée du robot par rapport à son point de départ. Le principe est simple (distance = nombre d’impulsions × périmètre de roue / impulsions par tour), mais la dérive s’accumule vite. Sur un sol lisse et plat, un robot bien calibré dérive de moins de 5 % sur 2 mètres. Sur du gravier ou de la moquette, on dépasse 20 %. C’est pourquoi on combine toujours les encodeurs avec d’autres capteurs (ultrason pour la distance aux murs, IMU pour l’orientation).
Prix. Les encodeurs optiques à disque coûtent 2 à 4 euros la paire. Les moteurs avec encodeur magnétique intégré (type N20 ou JGA25-371) coûtent 6 à 12 euros la paire mais simplifient le montage mécanique. Pour un premier robot, les kits « Smart Car 2WD » qu’on trouve entre 8 et 12 euros incluent souvent des encodeurs optiques basiques. Pas les meilleurs, mais largement suffisants pour apprendre le concept.
Centrale inertielle (IMU) : orientation dans l’espace
La centrale inertielle est le capteur qui fait passer un robot du 2D au 3D. Elle mesure les accélérations linéaires (accéléromètre) et les vitesses angulaires (gyroscope), et parfois le champ magnétique terrestre (magnétomètre/boussole). Les trois combinés donnent l’orientation complète du robot dans les trois axes.
MPU6050 : le classique à 3 euros. Accéléromètre 3 axes + gyroscope 3 axes, communication I2C (deux fils SDA + SCL, plus alim), format breakout board de 2 cm × 1,5 cm. C’est le capteur que j’utilise dans tous les ateliers débutants parce qu’il est bon marché et que les bibliothèques Python pour le lire sont matures. Il ne contient pas de magnétomètre, donc il ne sait pas où est le nord.
BNO055 : le tout-en-un à 15 euros. Accéléromètre + gyroscope + magnétomètre, plus un processeur de fusion de capteurs intégré (filtre de Kalman en hardware). Avantage décisif : on branche les fils, on lit via I2C un quaternion d’orientation prêt à l’emploi, sans se soucier de la fusion logicielle. Inconvénient : le prix. Pour un robot à 40 euros, c’est un tiers du budget. Je le recommande si tu prévois de construire un robot auto-équilibré (type Segway miniature) ou un drone maison. Pour un robot à roues simple, le MPU6050 suffit.
Câblage I2C. Quatre fils dans tous les cas : VCC (3,3V), GND, SDA (GPIO 2 par défaut sur Pi), SCL (GPIO 3). Après branchement, sudo i2cdetect -y 1 doit afficher l’adresse du capteur (0x68 pour le MPU6050, 0x28 pour le BNO055). Si rien n’apparaît : vérifie l’alimentation, les soudures, et que I2C est bien activé via sudo raspi-config → Interface Options → I2C.
Le piège de la dérive gyroscopique. Le gyroscope seul dérive : il accumule une erreur de quelques degrés par minute. Le magnétomètre est stable sur le long terme mais bruité sur le court terme (perturbé par les moteurs et les fils sous tension). La fusion de capteurs (filtre complémentaire, Madgwick, Kalman) combine les deux pour obtenir le meilleur des deux mondes. Le BNO055 fait ça en interne. Le MPU6050 te demande de le coder toi-même, ce qui est formateur mais pas toujours amusant.
Pi Camera v3 : voir le monde
Le saut qualitatif, vraiment. Les quatre capteurs précédents donnent au robot des informations numériques ponctuelles (distance, présence, angle). La caméra lui donne une image complète du monde, ce qui ouvre la porte à la vision par ordinateur : reconnaissance d’objets, suivi de cible, lecture de QR codes, détection de visages, estimation de profondeur stéréo.
Pi Camera v3 : le module officiel. Capteur Sony IMX708, 12 mégapixels, autofocus, HDR, champ de vision 75° (standard) ou 120° (wide). Il se connecte via le port CSI du Pi avec un câble plat. Prix : environ 27 euros pour la version standard, 32 euros pour la wide. Le CSI est important parce qu’il utilise un bus dédié, pas la bande passante USB.
CSI vs caméra USB. Les webcams USB fonctionnent aussi sur le Pi, mais elles passent par le bus USB (partagé avec le clavier, la souris, le Wi-Fi sur certains modèles), et les bibliothèques d’accès sont moins intégrées. La Pi Camera via CSI est lue par la bibliothèque officielle picamera2, qui donne accès au pipeline ISP du Pi (traitement d’image matériel). Pour de la vision par ordinateur sérieuse, le CSI est clairement le meilleur chemin.
Exemple minimal : flux vidéo en continu.
from picamera2 import Picamera2
import cv2
picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration(main={"size": (640, 480)}))
picam2.start()
while True:
frame = picam2.capture_array()
cv2.imshow("Pi Camera", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
picam2.stop()
cv2.destroyAllWindows()
Ce script affiche le flux vidéo en direct sur un écran connecté au Pi (ou en X11 forwarding via SSH si tu es en headless). Ajouter OpenCV pour la détection d’objets ou de visages ajoute environ dix lignes au script. Le Pi 5 gère confortablement du 640×480 à 30 fps avec un modèle Haar Cascade pour la détection de visages. Le Pi 4 tient aussi mais consomme la quasi-totalité de son CPU.
L’éclairage, le facteur invisible. Un point que les tutos en ligne oublient presque toujours. La qualité de la détection dépend au moins autant de l’éclairage que de l’algorithme. Un visage bien éclairé de face est détecté à 100 %. Le même visage en contre-jour est raté à 80 %. Pour un robot mobile, ajouter une LED blanche à 50 centimes pointée dans la même direction que la caméra change radicalement les résultats en intérieur.
Récap : le kit de démarrage à moins de 30 euros
| Capteur | Usage principal | Prix unitaire | Interface |
|---|---|---|---|
| HC-SR04 | Distance au mur (2 cm – 4 m) | 1,50 – 3 € | GPIO (pont diviseur) |
| TCRT5000 × 3 | Suivi de ligne / proximité | 0,50 – 1 € pièce | GPIO digital |
| Encodeur optique × 2 | Comptage tours de roue | 1 – 2 € pièce | GPIO interrupts |
| MPU6050 | Orientation 6 axes | 2 – 4 € | I2C |
| Pi Camera v3 | Vision par ordinateur | 27 – 32 € | CSI |
Les quatre premiers (hors caméra) tiennent dans la paume de la main et ne coûtent ensemble que 8 à 12 euros. La caméra ajoute un pallier de prix mais aussi un pallier de possibilités. Mon conseil pour commencer : achète les quatre capteurs sans la caméra, fais rouler ton robot 2 roues avec l’ultrason, ajoute les IR pour du suivi de ligne, branche l’IMU pour voir l’orientation changer en temps réel. La caméra viendra naturellement quand tu auras envie que ton robot « voie » les choses.
Les datasheets complètes de chaque capteur sont disponibles chez leur fabricant respectif : HC-SR04 (SparkFun mirror), TCRT5000 (Vishay), MPU6050 (InvenSense/TDK), BNO055 (Bosch). Lire une datasheet, c’est rébarbatif les premières fois, mais c’est aussi la seule source d’information qui ne ment jamais.