#Universidad Nacional de la Matanza
#Fundamentos de sistemas embebidos
#
# Santiago Tomas Rodriguez y
#El sensor por ultrasonido detecta la distancia de la mano que se
#pasa por encima y dependiendo de que tan lejos este, se va a poner en
#un modo u otro.
#El sensor detecta por ultrasonido la distancia, y gracias a unos if,
#determina como va a actuar. Una funcion llamada elegir_cancion reproduce
#la melodia en el buzzer, dependiendo de la variable ingresada donde se especifican
#la duracion y frecuencia de las notas, y otra funcion llamada elegir_patron
#selecciona el patron que las luces led van a tener.
import machine, neopixel
from machine import Pin, PWM
from time import sleep_us, sleep
#configuracion del buzzer
buzzer = PWM(Pin(16))
def tocar_nota(frequency, duration):
buzzer.freq(frequency)
buzzer.duty_u16(30000) #intensidad del sonido
sleep(duration)
buzzer.duty_u16(0) #silenciar
#[(frecuencia, duracion)]
cumple = [
(131, 0.5), (147, 0.5), (131, 0.5), (175, 0.5),
(165, 0.5), (131, 0.5), (147, 0.5), (131, 0.5),
(196, 0.5), (175, 0.5), (131, 0.5), (262, 0.5),
(220, 0.5), (175, 0.5), (165, 0.5), (147, 0.5),
(233, 0.5), (220, 0.5), (175, 0.5), (196, 0.5),
(175, 0.5)
]
cucaracha = [
(392, 0.5), (392, 0.5), (392, 0.5), (523, 0.5),
(659, 1), (659, 0.5),(587, 0.5), (659, 0.5),(392, 0.5),
(392, 1)
]
estrellita = [
(262, 0.5), (262, 0.5), (392, 0.5), (392, 0.5),
(440, 0.5), (440, 0.5), (392, 1),
(349, 0.5), (349, 0.5), (330, 0.5), (330, 0.5),
(294, 0.5), (294, 0.5), (262, 1)
]
#reproducir la cancion completa:
def elegir_cancion(cancion):
for note, duration in cancion:
tocar_nota(note, duration)
#######
#configuración de los LEDs
cl = neopixel.NeoPixel(machine.Pin(15), 16)
patrones_leds = [
[
(255, 0, 0), (0, 255, 0), (255, 0, 255),
(0, 0, 255), (255, 0, 0), (0, 255, 0),
(255, 0, 255), (0, 0, 255), (255, 0, 0),
(0, 255, 0), (255, 0, 255), (0, 0, 255),
(255, 0, 0), (0, 255, 0), (255, 0, 255),
(0, 0, 255)
],
[
(0, 0, 255), (0, 255, 255), (0, 0, 255), (0, 255, 255),
(0, 0, 255), (0, 255, 255), (0, 0, 255), (0, 255, 255),
(0, 0, 255), (0, 255, 255), (0, 0, 255), (0, 255, 255),
(0, 0, 255), (0, 255, 255), (0, 0, 255), (0, 255, 255)
],
[
(0, 0, 0), (255, 255, 255), (0, 0, 0), (255, 255, 255),
(0, 0, 0), (255, 255, 255), (0, 0, 0), (255, 255, 255),
(0, 0, 0), (255, 255, 255), (0, 0, 0), (255, 255, 255),
(0, 0, 0), (255, 255, 255), (0, 0, 0), (255, 255, 255)
]
]
def elegir_patron(numero_patron):
for i, color in enumerate(patrones_leds[numero_patron]):
cl[i] = color
cl.write() #actualiza los colores
#######
#sensor
echo = Pin(2, Pin.IN)
trig = Pin(0, Pin.OUT)
while True:
trig.value(0) #enviar 0 trigger
sleep_us(2)
trig.value(1) #enviar un pulso trigger
sleep_us(10) #envia el pulso de 10 ms para activar el sensor
trig.value(0) #apagar
x = machine.time_pulse_us(echo, 1)
distancia = (0.03401 * x) / 2 #calcula la distancia
print("Distancia:", distancia, "cm")
if 200 < distancia <=300:
elegir_patron(0)
elegir_cancion(cumple)
elif distancia >300:
elegir_patron(1)
elegir_cancion(cucaracha)
elif 100 < distancia <=200:
elegir_patron(2)
elegir_cancion(estrellita)
else:
#apaga los LEDs
cl.fill((0, 0, 0))
cl.write()
sleep(3) #espera 3 segundos antes de la prox medicion