Capteur de proximité infrarouge low-cost pour Raspberry Pi utilisant uniquement les broches numériques
Les cartes Raspberry Pi fonctionnent sur le processeur Broadcom BCM2835, qui offre 26 broches d'entrée/sortie à usage général (GPIO). Bien que des bibliothèques Python comme RPi.GPIO rendent le contrôle de ces broches simple, une limitation notable par rapport à Arduino est l'absence de véritables entrées analogiques. Les broches GPIO sont strictement numériques : une broche configurée en sortie ne peut délivrer que 0 V (LOW) ou 3,3 V (HIGH). Configurée en entrée, toute tension sous 0,8 V est interprétée comme LOW, et toute tension au-dessus de 1,3 V est traitée comme HIGH.
Dans de nombreuses applications réelles – surveillance de température, mesure de distance, détection d'intensité lumineuse – le signal sous-jacent est intrinsèquement continu. Se fier à une sortie binaire « marche/arrêt » est souvent insuffisant. La solution de contournement typique consiste à ajouter un convertisseur analogique-numérique (ADC) externe tel que le MCP3008, TLC549 ou MCP23017, qui communiquent via SPI ou I²C. Ces puces sont peu coûteuses individuellement, mais combinées avec des capteurs commerciaux, le coût total peut grimper à 20–30 $ et l'assemblage devient encombrant – un problème pour les projets robotiques nécessitant plusieurs capteurs.
Heureusement, une approche simple mais efficace existe qui élimine le besoin d'un ADC externe. En convertissant la mesure analogique en un signal basé sur le temps, les broches numériques du Raspberry Pi peuvent échantillonner indirectement des données continues. Le temps est une quantité naturellement analogique, et la technique repose sur le principe classique de charge RC (résistance-condensateur).
Conception d'un capteur de proximité infrarouge DIY
Le circuit utilise uniquement des composants peu coûteux : une poignée de LEDs infrarouges, un phototransistor, un transistor NPN 2N3904, un condensateur céramique 100 nF et des résistances à faible puissance. Les numéros de pièce exacts sont interchangeables ; l'essentiel est de maintenir les bonnes caractéristiques électriques.
Note sur le composant clé : Le condensateur 100 nF peut être un céramique bas profil ou un céramique/film de classe 1 pour une stabilité optimale.
Configuration matérielle
- Alimentation : Connectez les fils +5 V et GND à une alimentation externe 5 V. Reliez le GND à la masse du Raspberry Pi.
- Attribution GPIO : Choisissez une broche GPIO (ex.
PIN_A) comme sortie de déclenchement, et une autre (ex.PIN_B) comme entrée de mesure.
Principe de mesure
Lorsque PIN_A est mis à HIGH, les LEDs infrarouges illuminent la surface cible. La lumière réfléchie active le phototransistor, qui produit un courant proportionnel à l'intensité réfléchie. Ce courant charge le condensateur via le transistor 2N3904. Le temps que met la tension du condensateur à franchir le seuil numérique du Raspberry Pi sur PIN_B est inversément lié au courant du phototransistor, et donc directement proportionnel à la distance de l'objet réfléchissant.
Flux de contrôle Python
# 1. S'assurer que le condensateur est complètement déchargé
GPIO.setup(PIN_B, GPIO.OUT)
GPIO.output(PIN_B, 0)
time.sleep(0.01) # 10 ms pour dépasser 200×RC (≈0,00005 s)
# 2. Basculer PIN_B en mode entrée
GPIO.setup(PIN_B, GPIO.IN)
# 3. Déclencher les LEDs IR
GPIO.setup(PIN_A, GPIO.OUT)
GPIO.output(PIN_A, 1)
# 4. Mesurer la durée d'état bas sur PIN_B
counter = 0
start_time = time.time() * 1000 # millisecondes
while GPIO.input(PIN_B) == 0 and counter < 1e4:
counter += 1
elapsed = time.time() * 1000 - start_time
# elapsed (en ms) ≈ k × distance
Avec une résistance de 4,3 kΩ et un condensateur de 100 nF, la constante de temps RC est de 0,43 ms. Le 2N3904 amplifie le courant du phototransistor d'environ 150×, permettant aux LEDs de tirer environ 50 mA chacune pendant l'activation. Le délai temporel résultant, elapsed, évolue linéairement avec la distance, fournissant une conversion analogique-vers-temps simple sans aucun matériel ADC dédié.
Cette méthode offre une alternative compacte et peu coûteuse aux capteurs de proximité basés sur ADC conventionnels, la rendant idéale pour la robotique embarquée, les projets amateurs et les démonstrations éducatives.
Processus de fabrication
- Connecter plusieurs capteurs DS18B20 1-Wire à un Raspberry Pi pour une surveillance température précise
- Comment connecter un capteur de température DS1820 One‑Wire à un Raspberry Pi via GPIO
- Intégration de données de capteurs sur Raspberry Pi : Guide pratique complet
- Connexion du capteur ultrasonique HC‑SR04 au Raspberry Pi 3 : Guide complet
- Capteur de suivi de ligne KY‑033 avec Raspberry Pi : Détecteur de porte/lignes simple
- Mesurer des capteurs analogiques sur Raspberry Pi avec une seule broche GPIO
- Construire un capteur de mouvement infrarouge DIY pour Raspberry Pi – Guide étape par étape
- Mesurer des capteurs analogiques sur Raspberry Pi sans ADC natif
- Comment connecter un thermomètre numérique DS18B20 One-Wire à un Raspberry Pi – Guide étape par étape