Introduction: USB Volume Knop Met Mute Button.
Idee:
Mijn idee is een volume knop voor op je bureau bij je PC. Thuis heb ik zo'n volume knop, maar als ik mijn geluid tijdelijk uit wil zetten moet ik deze knop helemaal omlaag draaien. Mijn idee is een volumeknop die ik kan draaien voor het geluid harder of zachter te zetten, maar ook in kan drukker om het geluid uit of aan te zetten. Mijn originele idee was om een potmeter te gebruiken. Ik ben nu gegaan voor een rotary encoder. Hiervoor is wel een adruino nodig, maar daarmee vallen de 3,5mm audio jacks weg.
Vereisten:
- Draaiknop voor volume die klikbaar is om het volume te muten.
- Een controlbox waar de kabel van de knop aan zit en waar de usb in geplugd kan worden.
- USB aansluiting in controlbox voor verbinding adruino en pc.
Wil graag:
- Een verzwaarde onderkant van de knop zodat hij niet gaat glijden.
- Verlichting aan de onderkant van de knop. (Door middel van een laag plexiglas en LED's).
Als ik nog tijd over heb:
- Een extra knop die de kleuren van de verlichting aanpast.
Step 1: Benodigdheden
1. 3d filament
2. 3mm dik hout
3. 3mm dik acryl
4. 4x common cathode RGB LED
5. 3x h331 transistor
6. Prototype circuit board
7. Klein breadboard
8. Ethernetkabel (zonder connectors) die de knop en de adruino behuizing verbind.
9. Weerstanden
- 1x 47Ω
- 2x 22Ω
- 11x 10kΩ
10. Condensatoren
- 4x 104 (0.1µF)
11. Rotary encoder met ingebouwde knop
12. Losse knop
13. Micro-usb kabel
Tools:
1. 3d printer
2. Lasercutter
3. Soldeerbout
4. Lijmpistool (hotglue)
Step 2: Elektronica
Prototypes schakeling.
Versie 1: (foto 1)
Rotary encoder verbonden met adruino. Knop is werkend, maar werkt erg instabiel door button bounce (getest met de seriële monitor). Geen connectie naar pc. Deze versie maakt alleen gebruik van een rotary encoder en een adruino uno.
Versie 2: (foto 2 en 3)
Het toevoegen van 10k ohm pull-up weerstanden en 10 nF condensatoren zorgt ervoor dat de button bounce verdwijnt.
Versie 3: (foto 4)
Adruino uno vervangen door adruino micro. Hierdoor kan een computer de knop zien als toetsenbord met mediatoetsen. Verder heb ik 4 RGB LED's toegevoegd in combinatie met 3 transistors. Ook is er een extra knop toegevoegd die de volumeknop kan laten switchen tussen verschillende led kleuren. Ook deze knop is voorzien van dezelfde pull-up weerstanden en condensator.
Ik heb deze code gebruikt. Hiervoor is gebruik gemaakt van de keyboard libary van https://github.com/NicoHood/HID.
#include "HID-Project.h" const byte modeRGB[][3] = {{0, 0, 255}, {255, 0, 0}, {0, 255, 0}, {255, 255, 0}, {0, 255, 255}, {255, 0, 255}, {255, 255, 255}}; //Different RGB values const float intensityDecay = 0.95F; const float switchIntensity = 0.8F; const float idleIntensity = 0.1F;</p><p>int pos = 0; unsigned long lastTriggered = 0; byte mode = 0; float intensity = switchIntensity; void setup() { pinMode(2, INPUT); // Encoder 1 pinMode(3, INPUT); // Encoder button pinMode(4, INPUT); // Encoder 2 pinMode(5, OUTPUT); // R pinMode(6, OUTPUT); // G pinMode(7, INPUT); // Button pinMode(9, OUTPUT); // B Consumer.begin(); attachInterrupt(digitalPinToInterrupt(2), readEncoder, FALLING); attachInterrupt(digitalPinToInterrupt(3), buttonPress, FALLING); attachInterrupt(digitalPinToInterrupt(7), switchMode, FALLING); analogWrite(5, modeRGB[mode][0]); analogWrite(6, modeRGB[mode][1]); analogWrite(9, modeRGB[mode][2]); }void switchMode() { switch (mode) { case 0: mode = 1; break; case 1: mode = 2; break; case 2: mode = 3; break; case 3: mode = 4; break; case 4: mode = 5; break; case 5: mode = 6; break; case 6: mode = 0; break; } intensity = switchIntensity; analogWrite(5, (byte)(modeRGB[mode][0] * intensity)); analogWrite(6, (byte)(modeRGB[mode][1] * intensity)); analogWrite(9, (byte)(modeRGB[mode][2] * intensity)); }void readEncoder() { if (lastTriggered + 10 < millis()) { if (digitalRead(4)) { pos--; Consumer.write(MEDIA_VOLUME_DOWN); } else { pos++; Consumer.write(MEDIA_VOLUME_UP); } lastTriggered = millis(); } } void buttonPress() { Consumer.write(MEDIA_VOLUME_MUTE); }void loop() { if (intensity > idleIntensity) { intensity *= intensityDecay; if (intensity < idleIntensity) intensity = idleIntensity; analogWrite(5, (byte)(modeRGB[mode][0] * intensity)); analogWrite(6, (byte)(modeRGB[mode][1] * intensity)); analogWrite(9, (byte)(modeRGB[mode][2] * intensity)); } delay(10); }
Versie 5: (foto 5, 6, 7 en 8)
Bij de 5e versie heb ik de draaiknop gesoldeerd. De knop om de kleur te veranderen heb ik bij het breadboard van de arduino geplaatst. Het idee hierbij is dat je de kleur 1 keer instelt. De knop hoeft dus niet op een zichtbare locatie geplaatst te worden. De verlichting is ook gesoldeerd. De ethernetkabel zorgt voor de connectie tussen de knop en de adruino.
Step 3: Adruino Behuizing
Voor de behuizing van de adruino heb ik gebruik gemaakt van een lasersnijder (foto 1 en 2). Ik heb een tandverbinding gebruikt om de panelen met elkaar te verbinden. Verder heb ik uitsneden gemaakt voor de kabel en de usb aansluiting (foto 3 en 4). Het breadboard is vastgeplakt in de behuizing
Attachments
Step 4: De Knop
Prototype knop.
Versie 1:
Dit 3d model van de knop heb ik gemaakt. Het model heb ik uitgeprint met een 3d-printer. Bij de eerste keer printen is de bovenkant (onderkant tijdens het printen) niet mooi uitgekomen. (foto 1 t/m 5)
De onderkant van de knop heb ik met de lasersnijder uitgesneden. Door verschillende ringen (3mm hout) uit te snijden en op elkaar te plakken (met secondelijm) ontstaat een cilinder(foto 6 en 7). Ook heb ik 3 ringen uit acryl (3mm) gesneden (foto 8 en 9). Hiermee wordt de verlichting zichtbaar.
Versie 2:
Bij versie 2 is hetzelfde 3d model gebruikt en opnieuw uitgeprint. Dit keer is de printer dicht gemaakt om de warmte binnen te houden. De bovenkant is bij deze print nog steeds niet optimaal, maar een stuk beter dan de eerste versie. Houtplamuur is gebruikt om de knop een wat betere vorm te geven. Verder is een stuk schuurpapier gebruikt om de bovenkant glad af te werken. Met het lijmpistool is de ethernetkabel vastgemaakt.