from machine import Pin,I2C,PWM
import utime
from ssd1306 import SSD1306_I2C
#Sensor
trigger= Pin(21,Pin.OUT)
echo=Pin(20,Pin.IN)
#Oled
i2c = I2C(0,sda=Pin(0), scl=Pin(1),freq=400000)
oled = SSD1306_I2C(128,64,i2c)
#Piezo
pwm = PWM(Pin(22))
#RGB
red = Pin(3,Pin.OUT)
green = Pin(4,Pin.OUT)
blue = Pin(5,Pin.OUT)
def sensor():
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(5)
trigger.low()
while echo.value()==0:
apagado=utime.ticks_us()
while echo.value()==1:
encendido=utime.ticks_us()
duracion=encendido-apagado
distancia=duracion/29.4/2 #distancia ultrasonico (No es calculo exacto)
print("la distancia al objeto es :", int (distancia), "cm")
return int(distancia)
def pantalla(oled,distancia):
if(distancia<50):
oled.text("Estado actual:",0,0)
oled.text("muy cerca de",0,10)
oled.text("la puerta",0,20)
oled.show()
sonido = 80
elif(distancia<75):
oled.text("Estado actual:",0,0)
oled.text("A 75 cm de",0,10)
oled.text("distancia",0,20)
oled.show()
sonido = 70
elif(distancia<=100):
oled.text("Estado actual:",0,0)
oled.text("A 1 metro de",0,10)
oled.text("distancia",0,20)
oled.show()
sonido = 50
else:
oled.text("Estado actual:",0,0)
oled.text("Sin movimiento",0,10)
oled.show()
sonido = 10
oled.fill(0)
return int(sonido)
def tono(frecuencia,duracion):
pwm.freq(frecuencia) # Establecer la frecuencia del PWM
pwm.duty_u16(32768) # Establecer el 50% duty cycle
utime.sleep(duracion) # Esperar durante la duración del tono
pwm.duty_u16(0) # Apagar el sonido
def ledRGB(distancia):
if(distancia<50):
red.value(1)
elif(distancia<75):
blue.value(1)
elif(distancia<=100):
green.value(1)
while True:
red.value(0)
green.value(0)
blue.value(0)
distanciaUltra = sensor()
ledRGB(distanciaUltra)
sonido = pantalla(oled,distanciaUltra)
tono(sonido,0.5)
#utime.sleep(0.5)