Search models, users, collections, and posts

Arduino Stream deck

Print Profile(1)

All
P1S
H2D Pro
X1 Carbon
X1
P1P
H2S
H2D
X1E
A1
P2S
H2C
X2D
A2L

0.2mm layer, 2 walls, 15% infill
0.2mm layer, 2 walls, 15% infill
Designer
2.7 h
1 plate

Open in Bambu Studio
Boost
143
330
4
2
88
10
Released 

Description

Content has been automatically translated.
Show original

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);

}

}

}

Comment & Rating (4)

(0/1000)

License

This user content is licensed under a Standard Digital File 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.