import machine
import utime
# --- Configuration des broches ---
# Broches d'entrée pour la détection des phases (via optocoupleurs)
phase1_detect_pin = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
phase2_detect_pin = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP)
phase3_detect_pin = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
# Broches de sortie pour la commande des transistors des relais
relais_phase1_pin = machine.Pin(18, machine.Pin.OUT)
relais_phase2_pin = machine.Pin(19, machine.Pin.OUT)
relais_phase3_pin = machine.Pin(20, machine.Pin.OUT)
relais_generateur_pin = machine.Pin(21, machine.Pin.OUT)
# Liste des relais pour une gestion facile
tous_les_relais = [relais_phase1_pin, relais_phase2_pin, relais_phase3_pin, relais_generateur_pin]
def desactiver_tous_relais():
"""Fonction de sécurité pour s'assurer que tous les relais sont ouverts."""
for relais in tous_les_relais:
relais.low() # Met la broche à 0V, le transistor se bloque, le relais se désactive
def activer_relais(relais_a_activer):
"""Active un relais spécifique et désactive tous les autres."""
desactiver_tous_relais() # Sécurité "break-before-make"
utime.sleep_ms(50) # Petite pause pour laisser le temps aux relais de s'ouvrir
relais_a_activer.high() # Met la broche à 3.3V, le transistor conduit, le relais s'active
# --- Boucle principale ---
print("Démarrage du sélecteur automatique de source...")
desactiver_tous_relais() # Initialisation : tout est coupé au démarrage
while True:
# Lecture de l'état des phases (0 = présent, 1 = absent)
phase1_ok = phase1_detect_pin.value() == 0
phase2_ok = phase2_detect_pin.value() == 0
phase3_ok = phase3_detect_pin.value() == 0
# Logique de sélection par priorité
if phase1_ok:
if relais_phase1_pin.value() == 0: # Si le relais n'est pas déjà actif
print("Source active : Phase 1")
activer_relais(relais_phase1_pin)
elif phase2_ok:
if relais_phase2_pin.value() == 0:
print("Source active : Phase 2")
activer_relais(relais_phase2_pin)
elif phase3_ok:
if relais_phase3_pin.value() == 0:
print("Source active : Phase 3")
activer_relais(relais_phase3_pin)
else: # Aucune phase du réseau n'est disponible
if relais_generateur_pin.value() == 0:
print("Aucune phase réseau. Basculement sur le groupe électrogène.")
activer_relais(relais_generateur_pin)
# Pause entre chaque vérification
utime.sleep(1)