# Importa las bibliotecas necesarias
import machine # Biblioteca para acceder a hardware de la placa
import time # Biblioteca para manejar el tiempo
# Configura el pin de salida PWM para reproducir sonidos
pwm_pin = machine.Pin(27) # Elige el número de pin para la salida PWM (ajusta según tu placa)
pwm = machine.PWM(pwm_pin, freq=440, duty=0) # Crea un objeto PWM en el pin especificado con frecuencia y dutycycle
# Configura el pin del sensor de movimiento PIR
pir_pin = machine.Pin(14, machine.Pin.IN) # Elige el número de pin para el sensor PIR y configúralo como entrada
# Define las frecuencias de las notas musicales
frecuencias = {
'C4': 261.63,
'D4': 293.66,
'E4': 329.63,
'F4': 349.23,
'G4': 392.00,
'A4': 440.00,
'B4': 493.88,
}
# Define la melodía de la alarma de coche como una lista de notas
alarma_coche = [
'C4', 'E4', 'G4', 'B4', 'C4', 'E4', 'G4', 'B4',
'C4', 'E4', 'G4', 'B4', 'C4', 'E4', 'G4', 'B4',
]
# Duración de las notas en milisegundos
nota_duracion = 150 # Duración de una nota musical
pausa_duracion = 50 # Duración de una pausa entre notas
# Función para tocar una nota musical
def tocar_nota(frecuencia, duracion):
"""
Toca una nota musical en el altavoz PWM.
:param frecuencia: La frecuencia de la nota musical (e.g., 'C4').
:param duracion: La duración de la nota en milisegundos.
"""
if frecuencia == 'P':
time.sleep_ms(duracion) # Si la nota es una pausa, espera el tiempo especificado
else:
pwm.freq(int(frecuencias[frecuencia])) # Configura la frecuencia del PWM según la nota
pwm.duty(512) # Establece el dutycycle para generar el sonido
time.sleep_ms(duracion) # Espera la duración de la nota
pwm.duty(0) # Apaga el sonido configurando el dutycycle a 0
# Función para verificar si hay movimiento detectado por el sensor PIR
def hay_movimiento():
"""
Verifica si hay movimiento detectado por el sensor PIR.
:return: True si hay movimiento, False si no hay movimiento.
"""
return pir_pin.value() == 1 # Lee el valor del pin del sensor PIR y devuelve True si es 1 (movimiento detectado)
# Bucle principal para detectar movimiento continuamente
while True:
if hay_movimiento():
# Reproduce la melodía de la alarma de coche cuando se detecta movimiento
for nota in alarma_coche:
tocar_nota(nota, nota_duracion) # Llama a la función para tocar la nota actual
time.sleep_ms(pausa_duracion) # Espera una pausa antes de tocar la siguiente nota