Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

7.1 Licht-Theremin

Ein Theremin ist ein elektronisches Musikinstrument, das keinen physischen Kontakt erfordert. Je nach Position der Hand des Spielers erzeugt es unterschiedliche Töne.

Üblicherweise besteht der Steuerungsbereich aus zwei Metallantennen, die die Position der Hände des Thereministen erfassen und Oszillatoren mit einer Hand und die Lautstärke mit der anderen steuern. Die elektrischen Signale vom Theremin werden verstärkt und an einen Lautsprecher gesendet.

Zwar können wir das gleiche Instrument mit Pico W nicht nachbilden, jedoch können wir mit einem Fotowiderstand und einem passiven Summer ein ähnliches Spielgefühl erzeugen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Kepler Kit

450+

Kepler Ultimate Kit

Sie können die Teile auch einzeln über die unten stehenden Links erwerben.

SN

KOMPONENTE

MENGE

LINK

1

Raspberry Pi Pico W

1

BUY

2

Micro-USB-Kabel

1

3

Steckbrett

1

BUY

4

Jumperkabel

Mehrere

BUY

5

LED

1

BUY

6

Transistor

1(S8050)

BUY

7

Widerstand

3(1KΩ, 220Ω, 10KΩ)

BUY

8

Aktiver Summer

1

9

Fotowiderstand

1

BUY

Schaltplan

sch_light_theremin

Bevor Sie mit dem Projekt beginnen, bewegen Sie Ihre Hand auf und ab über den Fotowiderstand, um den Lichtintensitätsbereich zu kalibrieren. Die mit GP16 verbundene LED dient zur Anzeige der Debugging-Zeit; sie leuchtet beim Debugging-Start und erlischt beim Debugging-Ende.

Wenn GP15 ein hohes Signal ausgibt, leitet der S8050 (NPN-Transistor) und der passive Summer ertönt.

Je stärker das Licht, desto kleiner ist der Wert an GP28; umgekehrt ist er größer, wenn das Licht schwächer ist. Durch Programmierung des Fotowiderstandswerts zur Beeinflussung der Frequenz des passiven Summers kann ein lichtempfindliches Gerät simuliert werden.

Verdrahtung

wiring_light_theremin

Code

Bemerkung

  • Öffnen Sie die Datei 7.1_light_theremin.py im Pfad kepler-kit-main/micropython oder kopieren Sie diesen Code in Thonny und klicken Sie auf „Aktuelles Skript ausführen“ oder drücken Sie einfach F5.

  • Vergessen Sie nicht, den „MicroPython (Raspberry Pi Pico)“-Interpreter in der unteren rechten Ecke auszuwählen.

  • Für detaillierte Anleitungen siehe Code direkt öffnen und ausführen.

import machine
import utime

# Initialize LED, photoresistor, and buzzer
led = machine.Pin(16, machine.Pin.OUT)  # LED on pin 16
photoresistor = machine.ADC(28)  # Photoresistor on ADC pin 28
buzzer = machine.PWM(machine.Pin(15))  # Buzzer on pin 15 with PWM

# Variables to store the highest and lowest light readings for calibration
light_low = 65535
light_high = 0

# Function to map one range of values to another
def interval_mapping(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# Function to play a tone on the buzzer at a specified frequency for a set duration
def tone(pin, frequency, duration):
    pin.freq(frequency)  # Set buzzer frequency
    pin.duty_u16(30000)  # Set duty cycle to around 50%
    utime.sleep_ms(duration)  # Play the tone for the specified duration
    pin.duty_u16(0)  # Turn off the tone by setting duty cycle to 0

# Calibrate the photoresistor by finding the highest and lowest light values over 5 seconds
timer_init_start = utime.ticks_ms()  # Get the current time (start time)
led.value(1)  # Turn on LED to indicate calibration is in progress
while utime.ticks_diff(utime.ticks_ms(), timer_init_start) < 5000:  # Run calibration for 5 seconds
    light_value = photoresistor.read_u16()  # Read the light value from the photoresistor
    if light_value > light_high:  # Track the maximum light value
        light_high = light_value
    if light_value < light_low:  # Track the minimum light value
        light_low = light_value
led.value(0)  # Turn off the LED after calibration

# Main loop to read light levels and play corresponding tones
while True:
    light_value = photoresistor.read_u16()  # Read the current light value from the photoresistor
    pitch = int(interval_mapping(light_value, light_low, light_high, 50, 6000))  # Map light value to a pitch range
    if pitch > 50:  # Only play tones if the pitch is above a minimum threshold
        tone(buzzer, pitch, 20)  # Play the corresponding pitch for 20ms
    utime.sleep_ms(10)  # Small delay between readings

Sobald das Programm startet, leuchtet die LED auf, und wir haben fünf Sekunden Zeit, um den Erfassungsbereich des Fotowiderstands zu kalibrieren.

Dies ist auf die verschiedenen Lichtverhältnisse zurückzuführen, unter denen das Gerät eingesetzt werden könnte (z. B. unterschiedliche Lichtintensitäten zu Mittag und in der Dämmerung) sowie auf die Höhe unserer Hände über dem Fotowiderstand. Sie müssen die maximale und minimale Höhe Ihrer Hand über dem Fotowiderstand festlegen, die zugleich die Höhe ist, in der Sie das Instrument spielen.

Nach Ablauf der fünf Sekunden erlischt die LED, und wir können unsere Hände über dem Fotowiderstand bewegen und spielen.