Portable All in One Wave Builder Synth

by aRandomUserName in Circuits > Arduino

248 Views, 1 Favorites, 0 Comments

Portable All in One Wave Builder Synth

20220617_144026 (1).jpg

Voor dit project heb ik een synthesizer gemaakt op basis van CMOS ICs. Omdat het met deze ICs gebouwd is, is het erg toegankelijk voor mensen die niet veel werken met synthesizers. Het project werkt met erg simpele logica om geluid uit je elektronica te krijgen. Ik gebruik een Arduino UNO om de VU meter aan te sturen en het circuit te voorzien van stroom. Het heeft redelijk minimale code, omdat het meeste van dit project analoog is. Het project werkt door verschillende ICs te gebruiken voor de step sequencers; deze zijn essentieel om het effect te krijgen waar ik naar zocht.

Deze twee stepsequencers zijn verbonden door een vco, dit zorgt er voor dat je een van de tweede stepsequencers kan gebruiken als oscillator. Omdat de klok snelheid van de tweede stepsequencer zo hoog ligt, zorgt dit ervoor dat je de individuele stappen niet meer kan horen en je het waarneemt als een toon. Je kan met de potmeters de oscillatie aan passen; Omdat je 8 potmeters hebt, kan je de spanning van 8 verschillende gedeeltes van de oscillatie veranderen.

Dus eigenlijk een soort wavetabel synthesizer.

Supplies

Elektronica benodigdheden

  • 17 x Potentiometer
  • 1 x Arduino UNO
  • 1 x 0.1 uF capacitor
  • 1 x 1 uF capacitor
  • 1 x 4 nF capacitor
  • 1 x motor servo
  • 1 x bc548
  • 5 x 100K resistors
  • 4 x 56K resistors
  • 1 x 40106
  • 2 x 4040
  • 2 x 4051
  • 2 x LM358
  • 1 x PAM8406
  • 1 x speaker

Behuizing benodigdheden

  • 1 x wijndoos
  • 1 x 8mm boor bitje
  • 1 x 25mm hout boor bitje
  • 1 x gas brander
  • 1 x Kruiskop schroevendraaier
  • 1 x Boormachine

overige benodigdheden

  • Soldeer bout
  • Tin
  • 3 x strip bord
  • (Optioneel) Oscilloscoop
  • (Optioneel) Multimeter
  • 70+ x Jumper kabeltjes
  • Staal draad
  • Kabel stripper
  • Schroefbank (of iets anders op het stripbord vast te houden)
  • Mes

Ideeën

msedge_eqyFkREc8k.png
unknown.png
unknown.png

Ik heb erg veel moeite gehad met het inschatten van de hoeveelheid tijd die verschillende projecten zouden kosten. In eerste instantie zat ik te denken aan synthesizer die gestuurd zou worden door planten, maar ik merkte dat de laatste tijd dit erg vaak gedaan was. Hierna ben ik gaan kijken naar een schokband voor gamers; dit zou een persoon een schok geven wanneer de persoon aan het schreeuwen was. Maar dit heb ik ook niet gedaan, omdat ik te weinig ervaring heb met elektronica om dit veilig te doen.

Omdat ik redelijk laat was begonnen, en nog niet een duidelijk plan had voor een project ben ik maar begonnen met simpele modules voor synthesizers. Ik heb een losse stepsequencer gemaakt en een losse oscillator. Het idee van dit project kwam na dat ik de kloksnelheid van de stepsequencer te hoog had gezet. Ik had deze module vervolgens aan mijn oscilloscoop en speaker gehangen en merkte dat, doordat de kloksnelheid zo hoog stond, het signaal van de stepsequencer op een oscillator golf begon te lijken. Dit verbaasde me enorm dat er een bruikbare toon uit kwam. Door dit toeval kwam ik op het idee om een synthesizer te maken waarbij de oscillator vervangen werd door een tweede stepsequencer, en dit is hoe ik op mijn uiteindelijke idee ben gekomen.

Test Fase

IMG-20220530-WA0011.jpeg
unknown.png
20220612_173107.jpg
VID 20220611 WA0003

Ik heb in eerste instantie verschillende modules gemaakt om ze individueel uit te testen. Na wat prutsen merkte ik dat alle losse modules op zichzelf werkte. Omdat ik te weinig breadboards had om alles tegelijk te maken en aan elkaar te testen ben ik direct bezig gegaan met het solderen van het project.

Ook merkte ik dat ik te weinig tijd had om een LDR mute, leds en een Arduino-scope toe te voegen, dus ik houd dit maar in gedachte voor v2.

Bouwen

20220613_170649.jpg
20220613_170110.jpg
20220612_195819.jpg
20220612_144003.jpg
20220612_173115.jpg
20220612_195816.jpg
unknown.png
unknown.png
unknown.png
unknown.png
unknown.png

Ik heb de schema's gevolgd om individueel modules te maken op strip borden. Tijdens het bouwen ben ik tegen van alles aangelopen. Ik heb een stripboard volledig verkeerd gesoldeerd waardoor ik met dit bord helemaal opnieuw moest beginnen, ik had per ongeluk een strip niet diep genoeg door gesneden waardoor ik kortsluiting kreeg en de code werkte niet helemaal.

Toen ik alles individueel aan de praat kreeg heb ik vervolgens alles samen getest, toen ik zeker was dat alles werkte, ben ik begonnen aan de behuizing.



Inbouwen

20220617_220731.jpg
20220617_144002.jpg
20220617_220735.jpg

(De foto's zijn van de test doos)

Ik heb een wijndoos gebruikt als behuizing van dit project, omdat het de juiste formaten al had en het makkelijk te bewerken is.

Ik heb twee wijndozen gekocht, zodat ik een back-up had als er een kapot ging. ik heb met een gasbrander alles behalve de onderkant donker gebrand en met een soldeerbout op de bovenkant indicatoren er op gebrand. vervolgens ben ik met een hout boor door de helft van het hout gegaan om plaats te maken voor de potmeters. Ik heb alle potmeters vast gezet en ben vervolgens alle strip borden gaan monteren. Nadat ze allemaal op de juiste plek zaten, merkte ik dat er te weinig ruimte was voor mijn speaker om de amp door zijn voorbedachte gat te laten gaan. Ik heb dit opgelost door nog een gat te boren op een andere plek en het oude gat te gebruiken voor een led.

Code

Ik heb een redelijk simpel programma geschreven voor een servo gebaseerde vu meter. In eerste instantie heb ik het voltage gemeten aan het einde van de modules, maar dit zorgde ervoor dat het voltage niet overeen kwam met de toon die uit de speaker kwam. Vervolgens heb ik hem tussen de eerste stepsequencer en de vco geplaatst; wanneer ik de klok lager zette, de juiste waarde werden weergegeven.


//////////
// NOTE //
//////////
// set PIN_READ op de analog pin waar je signaal aan zit
// set PIN_SERVO op de digital pin waar de servo op zit
// voor "betere" reponse verander de SAMPLE_RATE




#include <Servo.h>


#define PIN_READ A0
#define PIN_SERVO 9


#define SAMPLE_RATE 100
#define SERVO_MAX 180


#define ADC_DIVISOR 5.68
#define ADC_MAX 1023


// uncomment for serial control of the servo
// #define DEBUG




#ifdef DEBUG
    String data = "";
#endif


Servo servo;
int servo_pos = 0;
int incomingByte = 0;


void do_meter(void);
int convert_values(int raw);


void setup()
{
    servo.attach(PIN_SERVO); // attaches the servo on pin 9 to the servo object
    Serial.begin(9600);
    Serial.setTimeout(200);
}


void loop()
{
    #ifdef DEBUG
        while (Serial.available())
        {


            data = Serial.readString(); // read the incoming data as string


            servo_pos = data.toInt(); 
            
            int x = convert_values(servo_pos * ADC_DIVISOR);
            servo.write(x);
            Serial.println(x);
        
        }
    #else
        do_meter();
        delay(SAMPLE_RATE);
    #endif
}


/**
 * @brief converts the ADC value to a value the servo can use
 * 
 * @param raw ADC value
 * @return converted value
 */
int convert_values(int raw)
{
    int scaled = raw / ADC_DIVISOR;
    return SERVO_MAX - scaled;
}


/**
 * @brief reads the voltage on a analog pin, and sets the servo accordingly
 * @param void void
 */
void do_meter(void)
{
    int for_servo = convert_values(analogRead(PIN_READ));
    servo.write(for_servo);
}



Conclusie

VID 20220614 WA0006
VID 20220614 WA0004

Ik ben erg tevreden met het resultaat van dit project. Ik vond het een erg leuk project en vond het erg gaaf om te zien dat je met simpele elektronica complexe geluiden kan creëren.

Hoewel ik al wat ervaring had met elektronica, heb ik het gevoel dat ik nu een project beter af kan maken doordat ik door dit hele proces ben gegaan.

Het bedenken van het idee koste me erg veel tijd, maar wanneer ik eenmaal bezig was ging het redelijk snel.

Ik kan niet wachten om verder aan dit project te werken en het verder uit te breiden.


Bedankt aan Joppe Boeve Ceres 90 bij het helpen van dit project, zonder jouw had ik het echt niet gered <3