Portable All in One Wave Builder Synth
by aRandomUserName in Circuits > Arduino
265 Views, 1 Favorites, 0 Comments
Portable All in One Wave Builder Synth
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
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
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
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
(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
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