µSynth7: Mini Sintetizator Digital

Introducere

µSynth7 este un sintetizator digital compact, conceput pentru a oferi o experiență muzicală interactivă și portabilă. Dispozitivul folosește un microcontroler ESP32 și oferă șapte butoane tactile ce corespund notelor unei chei în sistemul Nashville, un joystick pentru control adițional, un buzzer PWM pentru generarea de sunete și un ecran LCD I2C pentru feedback vizual.

Descriere generală

µSynth7 este construit în jurul unui microcontroler ESP32 și implementează un sequencer muzical digital. Utilizatorul poate reda note secvențial, unde un set de pași temporizați declanșează notele într-o buclă. Interfața include șapte butoane pentru notele scalei, un buton de opțiuni pentru comutarea între moduri și un joystick pentru ajustarea BPM-ului, transpunere și alte setări muzicale.

Hardware Design

Componente utilizate

  • ESP32 DevKit V1
  • 7x Butoane tactile - Notele muzicale (C, D, E, F, G, A, B)
  • 1x Buton opțiuni - Schimbare mod funcționare
  • 1x Joystick analogic - Modificare octava, transpunere
  • 1x Buzzer pasiv PWM
  • 1x LCD 16×2 cu interfață I2C
  • Breadboard-uri și fire jumper

Conexiuni

COMPONENTA PIN ESP32
Butoane Note (C) GPIO 4/5/13/14/27/32/33
Buton Opțiuni GPIO 19
Joystick X/Y GPIO 34/35
Buzzer PWM GPIO 18
LCD SDA/SCL GPIO 21/22

Conectarea componentelor s-a realizat pe breadboard, utilizând fire jumper.

Software Design

Codul este scris în Arduino IDE și organizat modular, cu fișiere pentru notare, controlul sequencer-ului, interfață LCD și input. Codul complet este disponibil pe GitHub:

[GitHub - µSynth7](https://github.com/aighita/-Synth7)

Funcționalități software

  • Modul sequencer: notele se repetă în buclă în funcție de BPM
  • Transpunere în timp real
  • Controlul octavei prin joystick
  • Afișarea stării pe LCD

Definirea notelor - frecventelor

const int Sequencer::degreeFreqs[7] = {
  262, 294, 311, 349, 392, 415, 466
};

Rulare secvență în modul sequencer

void Sequencer::update() {
  if (!isPlaying_) return;
  unsigned long now = millis();
  if (now - lastStepTime_ < (unsigned long)stepLengthMs_) return;
  lastStepTime_ = now;
  if (metronome_) {
    if (readIndex_ % 16 == 0) tone(audioPin_, 800, 50);
    else if (readIndex_ % 4 == 0) tone(audioPin_, 1000, 50);
  }
  int freq = pattern_[readIndex_];
  if (freq > 0) {
    tone(audioPin_, transpose(transposeOctave(freq)));
    digitalWrite(ledPin_, HIGH);
  } else {
    noTone(audioPin_);
    digitalWrite(ledPin_, LOW);
  }
  readIndex_ = (readIndex_ + 1) % patternLength_;
  writeIndex_ = readIndex_;
}

Biblioteci utilizate

  • `Arduino.h`
  • `LiquidCrystal_I2C.h` – control LCD
  • `ESP32Servo.h`

Rezultate Obţinute

µSynth7 funcționează stabil, răspunzând rapid la input și oferind o experiență interactivă de generare a sunetului. Modul sequencer este precis, iar joystick-ul adaugă un control intuitiv asupra parametrilor muzicali. Butonul optiuni poate fi folosit in combinatie cu cele 7 butoane de note pentru a modifica setarile sequencer-ului.

Concluzii

Proiectul a demonstrat posibilitatea construirii unui sintetizator digital complet funcțional folosind hardware accesibil și un software modular. Designul permite extindere (ex. adăugare MIDI sau ieșire audio cu DAC extern).

Repository Cod

Bibliografie/Resurse

pm/prj2025/vradulescu/andrei_iulian.ghita.txt · Last modified: 2025/05/25 19:50 by andrei_iulian.ghita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0