from machine import Pin, ADC, PWM
from math import log
from time import sleep
from utime import sleep_us, ticks_us
ntc_temp=ADC(Pin(28))
ldr_luz_int=ADC(Pin(27))
ldr_luz_ext=ADC(Pin(26))
led_temp=Pin(15, Pin.OUT)
led_luz_int=Pin(14, Pin.OUT)
servo_cortina=PWM(Pin(22), freq=50)
servo_puerta=PWM(Pin(2), freq=50)
sensor_prox=Pin(21, Pin.IN)
led_luz_prox=Pin(13, Pin.OUT)
trig=Pin(19, Pin.OUT)
echo=Pin(18, Pin.IN)
# Parámetros de control
para_temp_min=20
para_temp_max=30
para_luz_int=450
para_luz_ext=600
para_dist_pue=100
def temp_interior():
valor_adc_ntc=ntc_temp.read_u16()
BETA=3950
temperatura=1/(log(1/(65535./valor_adc_ntc-1))/BETA+1.0/298.15)-273.15
return temperatura
def luz_interior():
GAMMA=0.7
RL10=50
valor_adc_luz=ldr_luz_int.read_u16()
voltaje=valor_adc_luz/65535*3.3
resistencia=2000*voltaje/(3.3-voltaje)
luz=pow(RL10*1e3/resistencia,(1/GAMMA))
return luz
def luz_exterior():
GAMMA=0.7
RL10=50
valor_adc_luz=ldr_luz_ext.read_u16()
voltaje=valor_adc_luz/65535*3.3
resistencia=2000*voltaje/(3.3-voltaje)
luz_e=pow(RL10*1e3/resistencia,(1/GAMMA))
return luz_e
def movimiento_servo(angulo, servo):
max_duty=7864
min_duty=1802
duty=min_duty+(max_duty-min_duty)*(angulo/180)
servo.duty_u16(int(duty))
def distancia_sensor():
trig.low()
sleep_us(2)
trig.high()
sleep_us(5)
trig.low()
while echo.value()==0:
inicio=ticks_us()
while echo.value()==1:
final=ticks_us()
duracion=final-inicio
distancia=(duracion*0.0343)/2
return distancia
def apertura_puerta():
if distancia_sensor()<=para_dist_pue:
movimiento_servo(180,servo_puerta)
else:
movimiento_servo(90,servo_puerta)
def sensor_movimiento():
if sensor_prox.value() == True:
led_luz_prox.value(1)
else:
led_luz_prox.value(0)
def apertura_cortinas():
if luz_exterior()<para_luz_ext:
movimiento_servo(0, servo_cortina)
else:
movimiento_servo(180, servo_cortina)
def encendido_led():
if temp_interior()<para_temp_min:
led_temp.value(1)
else:
led_temp.value(0)
if luz_interior()<para_luz_int:
led_luz_int.value(1)
else:
led_luz_int.value(0)
while True:
dist=distancia_sensor()
apertura_puerta()
sensor_movimiento()
apertura_cortinas()
temp=temp_interior()
luz_int=luz_interior()
luz_ext=luz_exterior()
encendido_led()
print(temp, luz_int, luz_ext, dist)
sleep(1)