🎼

Light Theremin

Projekt A07 - Lichtgesteuertes Musikinstrument

Advanced
LDR
Piezo
tone()
1

Was du lernst

  • Fotowiderstand (LDR) - Lichtstärke messen
  • tone() Funktion - Frequenzen erzeugen
  • map() Funktion - Wertebereiche umrechnen
  • Kalibrierung - Sensor automatisch einmessen

Komponenten

Arduino Uno, LDR-Modul, Piezo-Summer, Potentiometer, LED

2

Schaltung

Pin-Belegung

  • A0 - LDR (Licht -> Tonhöhe)
  • A1 - Potentiometer (Tonbereich)
  • D9 - Piezo-Summer (PWM)
  • D8 - LED (Aktivitätsanzeige)

Spielprinzip

Bewege deine Hand über den Lichtsensor - je mehr Licht, desto höher der Ton!

Der Code

const int LDR_PIN = A0;
const int POTI_PIN = A1;
const int PIEZO_PIN = 9;

void loop() {
  int ldrValue = analogRead(LDR_PIN);
  int potiValue = analogRead(POTI_PIN);

  // Tonbereich mit Poti einstellen
  int maxFreq = map(potiValue, 0, 1023,
                     500, 2000);

  // Licht in Frequenz umwandeln
  int freq = map(ldrValue, 0, 1023,
                 100, maxFreq);

  tone(PIEZO_PIN, freq);
  delay(10);
}
3

Kalibrierung

Warum kalibrieren?

Je nach Raumbeleuchtung variiert der LDR-Wertebereich stark. Automatische Kalibrierung findet Min/Max.

void calibrate() {
  for (int i = 0; i < 100; i++) {
    int ldr = analogRead(LDR_PIN);
    if (ldr < ldrMin) ldrMin = ldr;
    if (ldr > ldrMax) ldrMax = ldr;
    delay(30);
  }
}
4

Signalglättung

Gleitender Durchschnitt

Reduziert Rauschen durch Mittelung mehrerer Messwerte

int values[5];
int index = 0;

int getSmoothed() {
  values[index] = analogRead(LDR_PIN);
  index = (index + 1) % 5;

  long sum = 0;
  for (int i = 0; i < 5; i++) {
    sum += values[i];
  }
  return sum / 5;
}
5

Erweiterungen

Ideen

  • Tonleiter erzwingen (nur bestimmte Noten)
  • Zweiter LDR für Lautstärke
  • Button für Ton an/aus (Staccato)
  • OLED-Display mit Frequenzanzeige
🎼

Geschafft!

Du hast ein Licht-Theremin gebaut!

Nächstes Projekt

A08: Mini-Oszilloskop

← →
1 / 8