import machine
import time
import dht
import onewire
import ds18x20
import os
# Définition des broches
RELAY_CLIM = machine.Pin(5, machine.Pin.OUT) # Relais climatisation
RELAY_GARAGE_OPEN = machine.Pin(18, machine.Pin.OUT) # Relais ouverture garage
RELAY_GARAGE_CLOSE = machine.Pin(19, machine.Pin.OUT) # Relais fermeture garage
BUZZER = machine.Pin(21, machine.Pin.OUT) # Buzzer alarme sonore
PIR_SENSOR = machine.Pin(4, machine.Pin.IN) # Capteur PIR
TEMP_SENSOR_PIN = 12 # Broche du capteur DS18B20
DHT_SENSOR_PIN = 13 # Broche du capteur DHT pour la température et humidité
# Initialisation du capteur de température (DS18B20)
ow = onewire.OneWire(machine.Pin(TEMP_SENSOR_PIN))
sensor = ds18x20.DS18X20(ow)
roms = sensor.scan() # Scanne tous les capteurs DS18B20 connectés
# Initialisation du capteur DHT (Température et Humidité)
dht_sensor = dht.DHT22(machine.Pin(DHT_SENSOR_PIN))
def lire_temperature_ds18b20():
try:
# Vérifie si un capteur est bien connecté
if not roms:
print("Erreur : Aucun capteur DS18B20 trouvé!")
return None
sensor.convert_temp() # Démarre la conversion de la température
time.sleep(1) # Attendre que la conversion soit terminée
temperature = sensor.read_temp(roms[0]) # Lecture de la température du premier capteur
return temperature
except Exception as e:
print(f"Erreur lors de la lecture du capteur DS18B20 : {e}")
return None
def lire_temperature_dht():
try:
dht_sensor.measure() # Demande la mesure de température et d'humidité
temperature = dht_sensor.temperature() # Récupère la température mesurée
return temperature
except Exception as e:
print(f"Erreur lors de la lecture du capteur DHT : {e}")
return None
def activation_clim(temperature):
if temperature is None:
print("Impossible de lire la température, climatisation non contrôlée.")
return
if temperature > 30: # Si la température dépasse 30°C, activer la climatisation
RELAY_CLIM.on()
print("Climatisation activée.")
else:
RELAY_CLIM.off()
print("Climatisation désactivée.")
def detecter_intrusion():
try:
if PIR_SENSOR.value() == 1: # Si le capteur PIR détecte du mouvement
print("Intrusion détectée!")
BUZZER.on() # Allume l'alarme sonore
return True
else:
BUZZER.off() # Éteint l'alarme sonore si aucune intrusion
return False
except Exception as e:
print(f"Erreur avec le capteur PIR : {e}")
BUZZER.off()
return False
def controle_garage():
try:
heure = time.localtime()[3] # Heure actuelle (en 24h)
if heure > 6 and heure < 22: # Entre 6h et 22h, ouverture du garage
RELAY_GARAGE_OPEN.on()
RELAY_GARAGE_CLOSE.off()
else: # Autrement, fermer le garage
RELAY_GARAGE_OPEN.off()
RELAY_GARAGE_CLOSE.on()
except Exception as e:
print(f"Erreur avec le contrôle du garage : {e}")
def loop():
while True:
temperature_ds18b20 = lire_temperature_ds18b20() # Lire la température DS18B20
temperature_dht = lire_temperature_dht() # Lire la température DHT
# Utilisation de la température la plus fiable (DS18B20 ou DHT22)
if temperature_ds18b20 is not None:
temperature = temperature_ds18b20
elif temperature_dht is not None:
temperature = temperature_dht
else:
print("Impossible de lire la température. Les deux capteurs échouent.")
temperature = None
print(f"Température lue : {temperature}°C")
activation_clim(temperature) # Contrôler la climatisation
if detecter_intrusion(): # Si intrusion détectée, activer l'alarme
print("Alerte : Intrusion détectée!")
controle_garage() # Contrôle du garage en fonction de l'heure
time.sleep(5) # Attente avant la prochaine vérification
# Initialisation du programme
print("Démarrage du système de gestion de la maison intelligente...")
loop()