"""HC-SR04: VCC → 3.3V (Pin 39) GND → GND (Pin 38) Trigger → GP10 (Pin 14) Echo → GP11 (Pin 15) Lautsprecher/Piezo: Ein Pin an GP12 (Pin 16), der andere Pin an GND (über einen Widerstand, falls nötig). """ from machine import Pin, PWM import time import math # Pins für den HC-SR04 trigger = Pin(10, Pin.OUT) echo = Pin(11, Pin.IN) # Pin für den Lautsprecher (PWM) buzzer = PWM(Pin(12)) # Frequenzen der Oktave (C bis C) frequencies = [ 261.63, # C4 277.18, # C#4 293.66, # D4 311.13, # D#4 329.63, # E4 349.23, # F4 369.99, # F#4 392.00, # G4 415.30, # G#4 440.00, # A4 466.16, # A#4 493.88, # B4 523.25 # C5 (hohes C) ] def get_distance(): # Trigger-Impuls für 10 Mikrosekunden trigger.low() time.usleep(2) trigger.high() time.usleep(10) trigger.low() # Echo-Impuls messen while echo.value() == 0: pulse_start = time.ticks_us() while echo.value() == 1: pulse_end = time.ticks_us() # Entfernung in cm berechnen pulse_duration = time.ticks_diff(pulse_end, pulse_start) distance = (pulse_duration * 0.0343) / 2 return min(max(distance, 0), 100) # Begrenze auf 0-100 cm def play_tone(frequency, duration=100): if frequency > 0: buzzer.freq(int(frequency)) buzzer.duty_u16(32767) # 50% Duty Cycle time.sleep_ms(duration) buzzer.duty_u16(0) # Ton stoppen # Hauptprogramm try: while True: distance = get_distance() print(f"Entfernung: {distance:.1f} cm") # Berechne den Index für die Frequenz (0-12) index = int((1 - (distance / 100)) * 12) index = max(0, min(index, 12)) # Begrenze auf 0-12 frequency = frequencies[index] # Spiele den Ton play_tone(frequency, 200) time.sleep(0.1) except KeyboardInterrupt: buzzer.duty_u16(0) # Ton stoppen