RGB Macro/Soundboard

by Ronan Stam in Circuits > Arduino

169 Views, 0 Favorites, 0 Comments

RGB Macro/Soundboard

20220612_211740.jpg
ezgif-4-2793b02147.gif

Dit is een instructable voor het maken van een rgb macro controller voor een soundboard. Ik ga hier uitleggen hoe je met behulp van een arduino leonardo, een aantal buttons en wat ledjes je eigen doosje kan bouwen met code en schematica.

Supplies

Usb communication capable arduino (leonardo, micro..)

Micro-usb naar usb-a data kabel

14 Knoppen

14 Adresseerbare leds

14 Weerstanden van verschillende grootte

1 100k Ω Weerstand

Draden

Soldeer bord

Soldeergereedschap

Iets om een doos mee te bouwen.

Conceptualisatie

ITTT concept.png

Om te beginnen had ik eigenlijk heel veel moeite met bedenken wat ik wilde doen niet omdat ik niks kon bedenken maar juist omdat ik te veel kon bedenken. De ideeën die het leukst leken waren bijvoorbeeld, een vorm van midi-controller die ik voor muziek zou kunnen gebruiken en een interactief licht speeltje, ik wilde eigenlijk voor de midi controller gaan maar toen bleek het dat midi controllen met een arduino best ingewikkeld was dus begon ik weer na te denken want eigenlijk vond ik gewoon een grappig speeltje niet nuttig genoeg ik wilde namelijk iets maken wat ik ook echt zou kunnen gebruiken. Toen bedacht ik me ineens dat ik op mijn computer een programma gebruik om mijn toetsenbord als soundboard te gebruiken. Daarvoor gebruik ik mijn numpad en andere combinaties met de numpad [CTRL, SHIFT, etc] maar mijn opties begonnen op te raken. Dus toen kreeg ik het idee om een kastje te bouwen waar ik eigenlijk zelf een toetsenbord van kon maken en die te gebruiken om mijn soundboard programma aan te sturen door middel van macros.

Om nou alleen een toetsenbord te bouwen was te simpel dus bedacht ik me om er led verlichting in te verwerken. Nu ik mijn idee had ben ik gewoon gaan schetsen en nadenken hoe ik dit zou kunnen maken.

Ontwerp

20220613_003812.jpg
20220613_003832.jpg

Om zo’n groot array aan knoppen te maken zou je meer buttons hebben dan er inputs zijn op een arduino dus in plaats daarvan zet je de knoppen in parallel op 1 analoge input en zet je bij elke knop een andere weerstand. Dit kan je later uitlezen om de knoppen te differentiëren. (Tussen note, je kan dit project met zoveel of weinig buttons maken als je wilt. Als je minder buttons hebt dan dat je digital inputs hebt kun je dat ook doen. Op die manier zal het signaal stabieler zijn maar je zal wel meer draadjes nodig hebben.) Nu dat opgelost was ging ik nadenken over de led verlichting. Ik kocht voor elke knop zijn eigen led zodat de layout niet uit zou maken en ik het zo groot kon maken als ik wilde. Als jij dit na maakt kan je dit doen zoals ik heb gedaan maar het is wel meer soldeerwerk. Alternatief kan je een led strip gebruiken en die over de knoppen heen plakken maar dan zit je wel vast aan een bepaalde afstand tussen de buttons.

Tegen deze tijd had ik eigenlijk al bedacht dat het beeldscherm en de led strip om de rand heen niet mogelijk zouden zijn met de deadline die ik had. Maar met alle onderdelen voor het systeem bij elkaar ben ik begonnen met bedenken hoe ik dit ook echt in elkaar zet.

In dit prototype kan je zien hoe ik een chain maak van knoppen waar ik in parallel telkens de weerstanden terug breng waar ik later dan waarden uit kan lezen.

Nu werd het tijd om ook echt iets te gaan maken. Om het voor mezelf wat makkelijker te maken met solderen heb ik een schema gemaakt van hoe alles dan ook echt aangesloten moet worden.

Schema En Bouw

unknown (7).png
unknown (8).png
20220612_1808326.jpg
20220612_180836.jpg
20220612_180812.jpg
ezgif-1-004a998d5f.gif
20220612_180802.jpg

Hier zijn mijn twee iteraties van hoe ik alles zou bedraden. Ik kan mijn hele systeem in principe aansturen met maar 4 draadjes. Ook heb ik hier gelijk aangegeven welke weerstanden ik wil gebruiken om de knoppen te differentiëren.

Mogelijk kan je nog een condensator aan de stroomlijn toevoegen om de stroomtoevoer stabieler te maken.


Vanaf hier was het tijd om ook echt wat te gaan maken.


Hier is de onderkant van mijn circuit te zien waar ook echt alle bedrading te zien is. links zit mijn 5V rail die gedistribueerd wordt over het bord naar de andere kan de weerstanden. Rechts is de connectie naar de analoge draad en de GND te zien die in een tegenovergesteld patroon naar links gaan naar de andere kant van alle drukknoopjes.

Hier aan de bovenkant onder de ledjes zijn de knopjes te zien met daarnaast de weerstanden.

Heel belangrijk als je zelf ook een Keyboard controller wil maken. Je kan niet met een arduino UNO werken. Je moet een arduino hebben zoals de leonardo, micro, of iets soortgelijks. Ofwel de arduino moet usb-communication hebben anders kun je computer het niet herkennen als een toetsenbord.

Om dan over de ledjes te beginnen dit was een lichte ramp in het begin. De contactpunten aan de onderkant van de ledjes zijn heel klein waardoor daar op solderen niet bepaald makkelijk was. Na veel gepeuter kreeg ik er een werkend.

Nu was het niet meer dan het werk van de rest doen. In de vorige twee foto’s zie je het resultaat van hoe de ledjes er uiteindelijk uit zijn komen te zien en hoe ik de 5V heb aangesloten op de 5V van de knoppen. De ledjes zijn met wat lijm op de knoppen gezet zodat ze op hun plek blijven.

Hier merkte ik tijdens testen dat ik de GND van mijn LEDs niet meer achter mijn data-pin van de knoppen kon krijgen, dus heb ik hem zijn eigen GND draad gegeven. Als je dit na bouwt denk er dus aan dat je ruimte overhoudt daarvoor, hoewel het op deze manier even goed werkt.

Behuizing

unknown (9).png

Dit moet natuurlijk allemaal in een doos terecht dus ik ben illustrator in gegaan en heb een doos ontworpen.

Dit schema heb ik later gebruikt om met een lasersnijder mijn doos uit te snijden. Vanaf hier moest alles in elkaar en moest de code geschreven worden.

Buttons Bepalen

Om op de waardes van de knoppen te komen maak je eerst een test sketch waar je puur de analog Input uitleest en die in de serial monitor print. Dan kijk je per knop welke waardes die aangeeft en baseer je daarop welke regio van nummers het best past om de knop te laten werken. Dit zal je zelf moeten doen omdat dit per weerstand en kwaliteit van solderen kan verschillen hoe accuraat hij is.

int WeerstandWaarde;void setup() {  Serial.begin(9600);}void loop() {  WeerstandWaarde = analogRead(A0);  Serial.println(WeerstandWaarde);}

Final Code

Dit is de code om alle knoppen en leds aan te sturen. Binnen de code staan comments die snel uitleggen wat elk stukje code doet.

//libraries en values#include <Keyboard.h>#include <KeyboardLayout.h>#include "FastLED.h"#define NUM_LEDS 14#define DATA_PIN 3CRGB leds[NUM_LEDS];//variables om de lampjes aan te sturen//deze drie zijn willekeurige nummers om een begin punt aan te geven voor de cycleint rS = 140;int gS = 50;int bS = 1;//deze drie geven de richting aan van hoe de values veranderen.int rD = -1;int gD = 1;int bD = -1;//deze values zijn om de analoog input af te lezen en aan te geven op welke pagina we zittenint BVal = 0;int page = 0;void setup() {  //de initiator van de ledjes, (type led, welke data pin ze zitten, kleur volgorde, hoeveel leds er zijn  FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);}//functie om alle lampjes efficient tegelijkertijd aan te sturenvoid SetColour(int R, int G, int B) {  leds[0] = CRGB( R, G, B);  leds[1] = CRGB( R, G, B);  leds[2] = CRGB( R, G, B);  leds[3] = CRGB( R, G, B);  leds[4] = CRGB( R, G, B);  leds[5] = CRGB( R, G, B);  leds[6] = CRGB( R, G, B);  leds[7] = CRGB( R, G, B);  leds[8] = CRGB( R, G, B);  leds[9] = CRGB( R, G, B);  leds[10] = CRGB( R, G, B);  leds[11] = CRGB( R, G, B);  leds[12] = CRGB( R, G, B);  leds[13] = CRGB( R, G, B);  leds[14] = CRGB( R, G, B);  FastLED.show();}void loop() {  //hier zie je hoe de waardes voor de lampjes veranderen  rS = rS + rD;  gS = gS + gD;  bS = bS + bD;  //dit stukje zorgt er voor dat telkens als een waarde 0 of 255 raakt de richting van de verandering omdraait  if (rS >= 255 || rS <= 0) {    rD = rD * -1;  }  if (gS >= 255 || gS <= 0) {    gD = gD * -1;  }  if (bS >= 255 || bS <= 0) {    bD = bD * -1;  }  SetColour(rS, gS, bS);  //hier is de code om de knoppen te besturen  Keyboard.begin();  BVal = analogRead(A0);  //elk van deze if-statements geeft aan welke knop er ingedrukt word en welke computer knop er daar aan gekoppeld staat  if (BVal >= 1016 && BVal <= 1024) {    Keyboard.write(KEY_KP_1);    //de delay hier is bedoelt om de snelheid van de outputs te limiteren anders zou de arduino sneller numpad1 indrukken dan de computer kan bijhouden    delay(200);  }  if (BVal >= 1012 && BVal <= 1015) {    Keyboard.write(KEY_KP_2);    delay(200);  }  if (BVal >= 1005 && BVal <= 1011) {    Keyboard.write(KEY_KP_3);    delay(200);  }  if (BVal >= 989 && BVal <= 1004) {    Keyboard.write(KEY_KP_4);    delay(200);  }  if (BVal >= 968 && BVal <= 979) {    Keyboard.write(KEY_KP_5);    delay(200);  }  if (BVal >= 948 && BVal <= 959) {    Keyboard.write(KEY_KP_6);    delay(200);  }  if (BVal >= 922 && BVal <= 931) {    Keyboard.write(KEY_KP_7);    delay(200);  }  if (BVal >= 840 && BVal <= 852) {    Keyboard.write(KEY_KP_8);    delay(200);  }  if (BVal >= 687 && BVal <= 697) {    Keyboard.write(KEY_KP_9);    delay(200);  }  if (BVal >= 597 && BVal <= 605) {    //wanneer je knoppen begint in te drukken die een combinatie zoals dit moet indrukken schrijf je ze zo, dit drukt dus CTRL+NUMPAD1 in    Keyboard.press(KEY_LEFT_CTRL);    Keyboard.press(KEY_KP_1);    Keyboard.releaseAll();    delay(200);  }  if (BVal >= 500 && BVal <= 508) {    Keyboard.press(KEY_LEFT_CTRL);    Keyboard.press(KEY_KP_2);    Keyboard.releaseAll();    delay(200);  }  if (BVal >= 309 && BVal <= 318) {    Keyboard.press(KEY_LEFT_CTRL);    Keyboard.press(KEY_KP_3);    Keyboard.releaseAll();    delay(200);  }  if (BVal >= 248 && BVal <= 257) {    //hiermee kan ik als ik op deze knop druk van pagina switchen    page = page + 1;    if(page >= 2) {      page = 0;    }    delay(400);  }  if (BVal >= 164 && BVal <= 175) {    Keyboard.write(KEY_KP_0);    delay(400);  }  //kleine delay om de lampjes wat soepeler te laten lopen  delay(10);  Keyboard.end();}

Downloads

Eindproduct

ezgif-4-2793b02147.gif
20220612_211740.jpg

En dan het eindproduct. Je kan nog mooie covers maken voor de knoppen maar daar had ik zelf geen tijd voor.

Als laatste stap moet je nog het soundboard gedeelte regelen maar daarvoor link ik de tutorial van de makers van de software die ik gebruik Resanance.

Veel plezier met je vrienden irriteren met je soundboard. ;)