import machine
import time
from machine import Pin, I2C, PWM, ADC
from time import sleep
import ssd1306
"OLED"
#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()
"PIR"
#recibir datos del sensor de movimiento
PIR = Pin(12, Pin.IN, Pin.PULL_UP)
"BUZZER"
#datos del buzzer
buzzer = PWM(Pin(13,Pin.OUT))
#buzzer apagado
buzzer.init(freq=1047, duty=0)
"SERVOMOTOR"
# Crear un objeto GPIO p5 regular
p5 = machine.Pin(5, machine.Pin.OUT)
# Crear otro objeto llamado pwm por
# conectar el controlador pwm al pin
pwm = machine.PWM(p5)
# Establecer el pulso cada 20ms
pwm.freq(50)
# Establecer el servicio inicial en 0
# para apagar el pulso
pwm.duty(0)
# Crea una función para mapear los 0 a 180 grados
# a 20 a 120 valores de servicio pwm
def map(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# Crea otra función para girar
# el servo según el ángulo de entrada
def servo(pin, angle):
pin.duty(map(angle, 0, 180, 20, 120))
while True:
Valor_PIR = PIR.value()
#si se descomenta la line 26 (la función print) se mostrará en la consola
#el valor lógico que se obtiene del sensor de movimiento el cual, al ser
#lógico, solo puede ser 0(si no hay movimiento) y 1(si hay movimiento)
print(PIR.value())
if Valor_PIR == 1:
servo(pwm, 90)
sleep(5)
servo(pwm, 0)
display.fill(0)
display.show()
display.text('COMIDA SERVIDA', 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()
display.text('...', 0,0)
display.show()