Proiectul constă în realizarea unui instrument muzical fără contact fizic, inspirat din thereminul clasic inventat de Lev Termen în 1920. Utilizatorul controlează frecvența sunetului prin mișcarea mâinii deasupra unui senzor ultrasonic — cu cât mâna este mai aproape, cu atât nota muzicală este mai înaltă.
Sistemul este construit în jurul microcontrollerului ESP32 DevKit V1 și funcționează astfel:
Fluxul de date: HC-SR04 → Timer (măsurare ecou) → Calcul distanță → Mapare frecvență × octavă (ADC) → PWM buzzer + I2C OLED + UART debug.
| Nr. | Componentă | Model / Specificații | Rol în circuit | Datasheet / Link |
|---|---|---|---|---|
| 1 | Microcontroller | ESP32 DevKit V1 (dual-core, WiFi, BT) | Unitate centrală de procesare | Espressif ESP32 |
| 2 | Senzor ultrasonic | HC-SR04 (5V, 2–400cm, rezoluție 3mm) | Măsurare distanță mână–senzor | HC-SR04 Datasheet |
| 3 | Buzzer pasiv piezoelectric | CPT-1775-3TH (17mm, 3Vp-p, 75dB, Through Hole) | Generare ton muzical prin PWM | Same Sky CPT Series |
| 4 | Display OLED | SSD1306, 0.96”, 128×64, I2C, 3–5V, alb | Afișare notă, frecvență, octavă | SSD1306 Datasheet |
| 5 | Potențiometru | 10kΩ, through hole | Selectare octavă activă (ADC) | - |
| 6 | Buton tactil | SPST, Through Hole (PC Mount) | Funcția mute (întrerupere externă) | - |
| 7 | Rezistență | 10kΩ, Metal Film, 1%, Through Hole (RLR07C1002FS) | Divizor tensiune ECHO (sus) | - |
| 8 | Rezistență | 20kΩ, Metal Film, 1%, Through Hole (RLR07C2002FS) | Divizor tensiune ECHO (jos, la GND) | - |
| 9 | Breadboard | 830 puncte | Prototipare fără lipire | - |
| 10 | Fire conexiune | Jumper wires male-to-male | Conexiuni breadboard | - |
| 11 | Cablu USB | Micro-USB sau USB-C (depinde de varianta ESP32) | Alimentare + programare + UART | - |
| Periferic | Pin ESP32 | Funcție |
|---|---|---|
| HC-SR04 TRIGGER | GPIO5 | Output digital (puls 10μs) |
| HC-SR04 ECHO | GPIO18 (prin divizor rezistiv) | Input digital (măsurare durată puls) |
| Buzzer CPT-1775-3TH (+) | GPIO25 | PWM output (frecvență variabilă) |
| Potențiometru (wiper) | GPIO34 (ADC1_CH6) | Input analogic (selectare octavă) |
| Buton mute | GPIO4 | Întrerupere externă (INPUT_PULLUP) |
| OLED SDA | GPIO21 | I2C Data |
| OLED SCL | GPIO22 | I2C Clock |
| HC-SR04 VCC | VIN (5V) | Alimentare senzor |
| OLED VCC | 3.3V | Alimentare display |
Divizor rezistiv pentru ECHO (5V → 3.3V):
HC-SR04 ECHO ──┬── [R1 = 10kΩ] ──┬── GPIO18 (ESP32)
│ │
└──────────────────┴── [R2 = 20kΩ] ── GND
Vout = 5V × 20k / (10k + 20k) = 3.33V
ledcWriteTone(channel, frequency) a ESP32 generează semnal PWM la frecvența calculată pe pinul buzzerului.Demo video al proiectului funcțional:
În urma realizării proiectului, am aprofundat concepte de programare cu microprocesoare, în special lucrul cu PWM, ADC, I2C și întreruperi, aplicate într-un context practic. Principala dificultate a fost instabilitatea citirilor senzorului ultrasonic, rezolvată prin implementarea unui filtru de medie mobilă, și calitatea tonului generat de buzzer, îmbunătățită prin creșterea rezoluției PWM de la 8 la 12 biți.
A fost un proiect interesant de realizat și m-a ajutat să înțeleg mai bine cum se integrează mai multe periferice într-un sistem funcțional, nu doar individual ca în laborator. Pe viitor, proiectul ar putea fi extins cu un al doilea senzor pentru controlul volumului sau cu conectivitate Bluetooth pentru o aplicație mobilă.
Codul sursă complet al proiectului este disponibil pe GitHub:
PM Fair - Theremin Digital (GitHub Repository)
Resurse Hardware:
Resurse Software: