Stappenplan Digitale Theremin
Hier is een overzichtelijk en volledig plan voor een middelbare-studentenproject: een digitale theremin met 2 LD2410C sensoren en een Raspberry Pi Pico W als USB-MIDI device.
🎵 Projectplan: Digitale Theremin met LD2410C en Raspberry Pi Pico W (USB-MIDI)
1️⃣ Doel van het project
Bouw een touchless muziekinstrument:
- Rechterhand: toonhoogte (pitch)
- Linkerhand: volume (MIDI CC7)
- Output: via USB-MIDI naar computer of synthesizer.
2️⃣ Benodigde onderdelen
Onderdelen | Aantal | Opmerking |
|---|---|---|
Raspberry Pi Pico W | 1 | Native USB, programmeerbaar via Arduino IDE |
LD2410C mmWave sensor | 2 | Voor handafstandsdetectie |
Jumper wires | 6–10 | Verbinding sensor ↔ Pico W |
USB-kabel | 1 | Voor voeding en MIDI naar computer |
Computer met DAW of virtuele synth | 1 | Ontvangt de MIDI-berichten |
3️⃣ Hardware-opstelling
- Sensor 1 (pitch)
- TX → Pico W RX0 (GP1)
- RX → Pico W TX0 (GP0)
- VCC → 3.3V, GND → GND
- Sensor 2 (volume)
- TX → Pico W RX1 (GP5)
- RX → Pico W TX1 (GP4)
- VCC → 3.3V, GND → GND
- USB
- Pico W ↔ computer voor MIDI-uitvoer
- Opstelling tips
- Sensoren tegenover elkaar plaatsen, hand eronder bewegen
- Houd 30–1500 mm als werkbereik
4️⃣ Softwareconcept
- Lees sensoren via UART
- Sensor 1 → toonhoogte
- Sensor 2 → volume
- Map afstand naar MIDI
- Toonhoogte: 48–84 (C3–C6)
- Volume: 0–127 (MIDI CC7)
- Verstuur USB-MIDI
- Note On voor pitch (rechterhand)
- Control Change CC7 voor volume (linkerhand)
- Dummy parser
- Voor demo: eerste 2 bytes sensorbuffer interpreteren als afstand
- Genoeg om al MIDI te sturen en geluid te horen in de DAW
5️⃣ Arduino C++ voorbeeldcode (demo)
#include <Arduino.h>
#include <MIDIUSB.h>
#define SENSOR1_RX 0
#define SENSOR1_TX 1
#define SENSOR2_RX 4
#define SENSOR2_TX 5
const int MIDI_NOTE_MIN = 48;
const int MIDI_NOTE_MAX = 84;
const int DIST_MIN = 30;
const int DIST_MAX = 1500;
int notePitch = 60;
int volume = 100;
int mapDistanceToRange(int dist, int outMin, int outMax) {
if (dist < DIST_MIN) dist = DIST_MIN;
if (dist > DIST_MAX) dist = DIST_MAX;
return map(dist, DIST_MIN, DIST_MAX, outMin, outMax);
}
void sendNoteOn(byte pitch, byte velocity, byte channel) {
midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
MidiUSB.sendMIDI(noteOn);
MidiUSB.flush();
}
void sendControlChange(byte control, byte value, byte channel) {
midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
MidiUSB.sendMIDI(event);
MidiUSB.flush();
}
int readDistanceFromSensor(HardwareSerial &serial) {
int dist = -1;
if (serial.available() >= 2) {
byte b1 = serial.read();
byte b2 = serial.read();
dist = (b2 << 8) | b1;
}
return dist;
}
void setup() {
Serial1.setRX(SENSOR1_RX);
Serial1.setTX(SENSOR1_TX);
Serial1.begin(256000);
Serial2.setRX(SENSOR2_RX);
Serial2.setTX(SENSOR2_TX);
Serial2.begin(256000);
delay(2000);
}
void loop() {
int dist1 = readDistanceFromSensor(Serial1);
if (dist1 > 0) {
notePitch = mapDistanceToRange(dist1, MIDI_NOTE_MIN, MIDI_NOTE_MAX);
sendNoteOn(notePitch, volume, 0);
}
int dist2 = readDistanceFromSensor(Serial2);
if (dist2 > 0) {
volume = mapDistanceToRange(dist2, 0, 127);
sendControlChange(7, volume, 0);
}
delay(20);
}6️⃣ Wat hoor je al met de dummy parser
- Rechterhand → toonhoogte verandert in de DAW
- Linkerhand → volume verandert
- Je krijgt direct een werkend theremin-achtig geluid
- Nog niet vloeiend: later kun je Note On/Note Off logica toevoegen voor smooth spelen
7️⃣ Uitbreidingsmogelijkheden
- Note On / Note Off logica → smooth theremin
- Gemiddelde afstand → minder springende toonhoogtes
- Octaaf-switch met extra knop of sensor
- Andere MIDI-CC’s → filter, modulatie, effecten
- BLE-MIDI voor draadloze connectie
- Software mapping → toonladders (pentatonisch, mineur, majeur)
8️⃣ Leerdoelen voor studenten
- Sensor uitlezen via UART
- Afstand → MIDI mapping
- USB-MIDI communicatie
- Creatief gebruik van technologie in muziek
✅ Dit overzicht maakt het project direct uitvoerbaar en toont meteen resultaat in een DAW, terwijl het ook uitbreidbaar is voor gevorderde functionaliteit.
Als je wilt kan ik er nog een verbeterde versie bij maken met Note On/Off en smoothing, zodat het al veel vloeiender klinkt als echte theremin. Wil je dat?

entities.comment_count