# main.py - Sonde-Ambiance, programme de depart
import time
import dht
from machine import Pin, ADC
from servo import Servo
# ---- Reglages : broches ----------------------------------------------
BROCHE_LUMIERE = 34 # photoresistance, sortie AO
BROCHE_DHT = 15 # DHT22
BROCHE_PIR = 13 # detecteur de mouvement
BROCHE_DEL_ALERTE = 4 # DEL rouge d alerte
BROCHE_SERVO = 18 # servomoteur du store
BROCHE_POT = 35
# ---- Reglages : rythme -----------------------------------------------
PAUSE_BOUCLE_S = 1 # une mesure par seconde
SEUIL_ALERTE_ON_C = 28.0
SEUIL_ALERTE_OFF_C = 27.0
# ---- Materiel : cree une seule fois ----------------------------------
capteur_lumiere = ADC(Pin(BROCHE_LUMIERE))
capteur_lumiere.atten(ADC.ATTN_11DB) # mesure de 0 a 3,3 V
capteur_dht = dht.DHT22(Pin(BROCHE_DHT))
capteur_pir = Pin(BROCHE_PIR, Pin.IN)
del_alerte = Pin(BROCHE_DEL_ALERTE, Pin.OUT)
servo = Servo(BROCHE_SERVO)
potentiometre = ADC(Pin(BROCHE_POT))
potentiometre.atten(ADC.ATTN_11DB)
# ---- Etat du programme -----------------------------------------------
passages = 0
pir_avant = 0
alerte_active = False
# ---- Lecture des capteurs --------------------------------------------
def lire_clarte():
# 0 = noir complet, 100 = pleine lumiere
brut = capteur_lumiere.read_u16() # de 0 a 65535
return 100 - brut * 100 // 65535 # plus de lumiere = tension plus basse
def lire_temperature():
# renvoie la temperature en degres C, ou None si la mesure rate
try:
capteur_dht.measure()
return capteur_dht.temperature()
except OSError:
return None
def compter_passage():
# ajoute 1 a chaque nouveau mouvement : le PIR passe de 0 a 1
global passages, pir_avant
pir = capteur_pir.value()
if pir == 1 and pir_avant == 0:
passages = passages + 1
print("Passage detecte, total :", passages)
pir_avant = pir
# ---- Demarrage et boucle ---------------------------------------------
def commander_alerte(active):
global alerte_active
if isinstance(active, bool):
if alerte_active == False and active == True:
del_alerte.on()
print("Alerte ON")
elif alerte_active == True and active == False:
del_alerte.off()
print("Alerte OFF")
alerte_active = active
def decider_alerte(t, alerte_avant):
global SEUIL_ALERTE_ON_C, SEUIL_ALERTE_OFF_C
try:
if t >= SEUIL_ALERTE_ON_C:
return True
elif t <= SEUIL_ALERTE_OFF_C:
return False
else:
return alerte_avant
except TypeError:
return alerte_avant
def convertir_echelle(x, x_min, x_max, y_min, y_max):
def demarrer():
print("Sonde-Ambiance : demarrage")
del_alerte.off()
servo.write(90)
def boucle():
t = lire_temperature()
commander_alerte(decider_alerte(t, alerte_active))
clarte = lire_clarte()
compter_passage()
print("T =", t, "C clarte =", clarte, "% passages =", passages)
demarrer()
while True:
boucle()
time.sleep(PAUSE_BOUCLE_S)