from machine import Pin, I2C, PWM, ADC
from time import sleep
import ssd1306
def RevisarLuz(EstadoLuz):
if EstadoLuz == 1:
display.text('LUZ: ON', 0,10)
display.show()
led.value(1)
else:
display.text('Luz: OFF', 0,10)
display.show()
led.value(0)
def RevisarSistema(EstadoAlarma, StateLuz):
display.fill(0)
display.show()
if EstadoAlarma == 1:
RevisarLuz(StateLuz)
display.text('Alarma: ON', 0,0)
display.show()
#activar alarma
buzzer.init(freq=1047, duty=512)
#Cuanto timepo se activará la alarma
sleep(5)
#apagar alarma
buzzer.init(freq=1047, duty=0)
display.fill(0)
display.show()
RevisarLuz(StateLuz)
display.text('Alarma: OFF', 0,0)
display.show()
#datos de la fotorresistencia
pot = ADC(Pin(34))
pot.atten(ADC.ATTN_11DB)
#datos led
led = Pin(4, Pin.OUT)
#datos del display
i2c=I2C(0, scl=Pin(15), sda=Pin(2))
#tamaño que tiene la pantalla OLED
ancho=128
alto=64
display=ssd1306.SSD1306_I2C(ancho, alto, i2c)
# estado predefinido de la alarma en la pantalla OLED
display.text('Alarma: OFF', 0,0)
display.show()
display.text('Luz: OFF', 0,10)
display.show()
#recibir datos del sensor de movimiento
PIR = Pin(12, Pin.IN, Pin.PULL_UP)
#datos del buzzer
buzzer = PWM(Pin(13,Pin.OUT))
#buzzer apagado
buzzer.init(freq=1047, duty=0)
while True:
Valor_PIR = PIR.value()
#si se descomenta la line 28 (la función print) se mostrará en la consola
#el valor lógico que se obtiene de lsensor de movimiento el cual, al ser
#lógico, solo puede ser 0(si no hay movimiento) y 1(si hay movimiento)
#print(PIR.value())
#obtener valor
pot_value = pot.read()
#calculos para cambiar valor a luxes
volt = pot_value/4095*3.3
res = 2000*volt/(1-volt/3.3)
luxes = pow(33*1000*pow(10,0.7)/res, (1/0.7))
#prender y apagar las luces dependiendo de si está oscuro o no
print(luxes)
if luxes<100 and Valor_PIR == 1:
RevisarSistema(1,1)
elif luxes<100 and Valor_PIR == 0:
RevisarSistema(0,1)
elif luxes>=100 and Valor_PIR == 1:
RevisarSistema(1,0)
else:
RevisarSistema(0,0)
sleep(2)