"""
HC-SR04 Bar Graph avec Seuils de Couleur
Par Louis Rafel Edwin
"""
from HCSR04 import HCSR04
from time import sleep
from machine import Pin
# Configuration des LEDs (tes pins)
led_pins = [23, 22, 21, 19, 17, 16, 4, 2, 14, 12]
leds = []
# Initialisation des LEDs
for pin in led_pins:
leds.append(Pin(pin, Pin.OUT))
# Configuration capteur HC-SR04
sensor = HCSR04(trigger_pin=5, echo_pin=18)
# ⚡ SEUILS DE DISTANCE
SEUIL_ROUGE = 50 # < 50cm = ROUGE (danger)
SEUIL_ORANGE = 100 # 50-100cm = ORANGE (attention)
SEUIL_VERT = 200 # > 100cm = VERT (sécurisé)
def eteindre_toutes_leds():
"""Éteint toutes les LEDs"""
for led in leds:
led.off()
def calculer_nb_leds(distance):
"""Calcule le nombre de LEDs à allumer selon la distance"""
if distance <= 0: # Erreur de mesure
return 0
elif distance >= SEUIL_VERT: # Très loin = 1-2 LEDs
return min(2, len(leds))
elif distance >= SEUIL_ORANGE: # Distance moyenne = progression
# Mapping: 100-200cm → 2 à 5 LEDs
ratio = (SEUIL_VERT - distance) / (SEUIL_VERT - SEUIL_ORANGE)
return int(2 + ratio * 3)
elif distance >= SEUIL_ROUGE: # Proche = plus de LEDs
# Mapping: 50-100cm → 5 à 8 LEDs
ratio = (SEUIL_ORANGE - distance) / (SEUIL_ORANGE - SEUIL_ROUGE)
return int(5 + ratio * 3)
else: # Très proche = toutes les LEDs
return len(leds)
def afficher_bargraph_avec_effet(nb_leds, couleur, distance):
"""Affiche le bar graph avec effet selon la couleur"""
eteindre_toutes_leds()
if couleur == "ROUGE":
# Effet clignotant rapide pour le danger
for _ in range(3): # 3 clignotements
for i in range(nb_leds):
leds[i].on()
sleep(0.1)
eteindre_toutes_leds()
sleep(0.1)
# Laisse allumé
for i in range(nb_leds):
leds[i].on()
elif couleur == "ORANGE":
# Effet progressif modéré
for i in range(nb_leds):
leds[i].on()
sleep(0.05)
else: # VERT
# Effet doux et lent
for i in range(nb_leds):
leds[i].on()
sleep(0.1)
def determiner_couleur(distance):
"""Détermine la couleur selon la distance"""
if distance < SEUIL_ROUGE:
return "ROUGE"
elif distance < SEUIL_ORANGE:
return "ORANGE"
else:
return "VERT"
def afficher_status(distance, nb_leds, couleur):
"""Affiche le status dans la console"""
barre = "█" * nb_leds + "░" * (len(leds) - nb_leds)
if couleur == "ROUGE":
status = "🔴 DANGER - TRÈS PROCHE !"
elif couleur == "ORANGE":
status = "🟠 ATTENTION - RAPPROCHEMENT"
else:
status = "🟢 SÉCURISÉ - DISTANCE OK"
print(f"Distance: {distance:.1f}cm | {barre} | {status}")
# 🚀 PROGRAMME PRINCIPAL
print("=== BAR GRAPH HC-SR04 avec COULEURS ===")
print("🔴 Rouge: < 50cm | 🟠 Orange: 50-100cm | 🟢 Vert: > 100cm")
print("=" * 50)
while True:
try:
# Mesure de distance
distance = sensor.distance_cm()
if distance > 0: # Mesure valide
# Calculs
nb_leds = calculer_nb_leds(distance)
couleur = determiner_couleur(distance)
# Affichage LED
afficher_bargraph_avec_effet(nb_leds, couleur, distance)
# Affichage console
afficher_status(distance, nb_leds, couleur)
else:
# Erreur de mesure
eteindre_toutes_leds()
print("❌ Erreur de mesure - LEDs éteintes")
sleep(0.2) # Pause entre mesures
except Exception as e:
print(f"Erreur: {e}")
eteindre_toutes_leds()
sleep(1)
#fait par ia