Arduino Stream deck
Print Profile(1)

Description
Homemade stream deck made with arduino pro micro and some mechanical switches and one poteciometer.
And of course with Bambu 3d printer :)
Homemade Elgato Stream Deck made with Arduino Pro Micro and some mechanical switches and a potentiometer and of course with a Bambulab 3D printer :)
To assemble the model 12 mechanical switches and a potentiometer are needed I used a 10K one
Of course an Arduino Pro Micro which you can get on Aliexpress for about 50 CZK
And the printed attached models I recommend using PLA or PETG
A carbon fiber patterned mat was also used also from Aliexpress for approximately 220 CZK
I recommend printing keycaps at a layer height of 0.10mm and the rest at 0.15-0.20mm depending on your preference for detail and print time
Also needed are 4x M3x2 screws + 1x M3x10 screw
There is a prepared hole at the back for the Arduino's USB C port
Optionally also a knob for the potentiometer and a USB C data cable
And of course C++ code for Arduino this depends on what functions you want your stream deck to perform
I had custom stickers made for the keycaps you can print them on your 2D printer on special paper or on plain paper and cover them with clear tape (that's a last resort)
#include <HID-Project.h>
#include <HID-Settings.h>
#define MUTE 10
#define PREVIOUS 14
#define PLAY_PAUSE 15
#define SKIP 16
#define CTRL_ALT_F 6
#define CTRL_ALT_S 8
#define CTRL_ALT_P 7
#define CTRL_ALT_C 9
#define COPY 3
#define PASTE 4
#define ARROW_LEFT 2
#define ARROW_RIGHT 5
int potentiometerPin = A0; // Pin pro potenciometr
int previousVolume = -1; // Uložení předchozí hlasitosti (-1 pro inicializaci)
// Setup
void setup() {
// Nastavení pinu pro tlačítka jako vstupy s interními pull-up rezistory
pinMode(MUTE, INPUT_PULLUP);
pinMode(PREVIOUS, INPUT_PULLUP);
pinMode(PLAY_PAUSE, INPUT_PULLUP);
pinMode(SKIP, INPUT_PULLUP);
pinMode(CTRL_ALT_F, INPUT_PULLUP);
pinMode(CTRL_ALT_S, INPUT_PULLUP);
pinMode(CTRL_ALT_P, INPUT_PULLUP);
pinMode(CTRL_ALT_C, INPUT_PULLUP);
pinMode(COPY, INPUT_PULLUP);
pinMode(PASTE, INPUT_PULLUP);
pinMode(ARROW_LEFT, INPUT_PULLUP);
pinMode(ARROW_RIGHT, INPUT_PULLUP);
// Inicializace HID pro klávesnici a multimédia
Consumer.begin();
Keyboard.begin();
}
void loop() {
// *Tlačítka*
if (digitalRead(MUTE) == LOW) {
Consumer.write(MEDIA_VOLUME_MUTE);
delay(200); // Malá prodleva, aby se příkaz neopakoval příliš rychle
}
if (digitalRead(PREVIOUS) == LOW) {
Consumer.write(MEDIA_PREVIOUS);
delay(200);
}
if (digitalRead(PLAY_PAUSE) == LOW) {
Consumer.write(MEDIA_PLAY_PAUSE);
delay(200);
}
if (digitalRead(SKIP) == LOW) {
Consumer.write(MEDIA_NEXT);
delay(200);
}
// *Kombinace kláves*
if (digitalRead(CTRL_ALT_F) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('f');
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(CTRL_ALT_S) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('s');
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(CTRL_ALT_P) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('p');
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(CTRL_ALT_C) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('c');
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(COPY) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('c');
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(PASTE) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('v');
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(ARROW_LEFT) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('y'); // CTRL + Z místo šipky doleva
delay(200);
Keyboard.releaseAll();
}
if (digitalRead(ARROW_RIGHT) == LOW) {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('z'); // CTRL + Y místo šipky doprava
delay(200);
Keyboard.releaseAll();
}
// *Potenciometr*
int potentiometerValue = analogRead(potentiometerPin);
int currentVolume = map(potentiometerValue, 0, 1023, 0, 100);
if (currentVolume != previousVolume) {
adjustVolume(previousVolume, currentVolume);
previousVolume = currentVolume;
}
delay(50); // Malá prodleva pro stabilitu
}
// Funkce pro změnu hlasitosti
void adjustVolume(int previous, int current) {
if (current > previous) {
for (int i = previous; i < current; i++) {
Consumer.write(MEDIA_VOLUME_UP);
delay(5);
}
} else if (current < previous) {
for (int i = previous; i > current; i--) {
Consumer.write(MEDIA_VOLUME_DOWN);
delay(5);
}
}
}
License
You shall not share, sub-license, sell, rent, host, transfer, or distribute in any way the digital or 3D printed versions of this object, nor any other derivative work of this object in its digital or physical format (including - but not limited to - remixes of this object, and hosting on other digital platforms). The objects may not be used without permission in any way whatsoever in which you charge money, or collect fees.




Comment & Rating (4)