
programmable keyboard / stream controller
STDprogrammable keyboard / stream controller
License
:Domena publiczna
Description
PROGRAMOWALNA KLAWIATURA / KONTROLER STREAMA (OBS, MACRA)
DOKUMENTACJA
1. OPIS PROJEKTU.
W założeniu ma być tani i prosty zamiennik popularnego Stream Decka ale o mniejszych ambicjach co do muzyki. Ma pozwolić na przypisanie makr do obsługi programów, na przykład kontrolowania OBSa.
|
Urządzenie jest konfigurowalne w zakresie doboru narzędzi oraz LED. Można w nim zainstalować podwyższenie bez podświetlania, podwyższenie podświetlane lub z „kapturkami”. Przyciski do przełącznika taktowego o rozmiarze 12x12mm.
|
|
|
Klawiatura jest używana bez obudowy, ale jej budowa nie ułatwia montażu w ramach naszego pojazdu. Posiadają odpowiednie wsporniki montażowe.
Wszystkie potrzebne informacje są zawarte w jednym dokumencie a edytowalne schematy elektroniczne, kody programów, pliki gerber i tym podobne udostępnione bezpłatnie i bez roszczeń dotyczących praw autorskich.
Płytka PCB wykonana w ramach współpracy z JLCPCB.
2.DZIAŁANIE.
Urządzenie oparte jest o mikrokontroler Arduino Pro Micro w wersji 5V. Kontroler ten posiada natywną obsługę HID USB - w skrócie może być wykrywany przez komputer jako klawiatura.W Arduino IDE dostępna jest odpowiednia biblioteka oraz przykłady. Arduino łączy się z komputerem za pomocą USB oraz jest z niego zasilane.
|
Przed rozpoczęciem pracy z urządzeniem (na przykład streamowania lub nagrywania w OBS) należy upewnić się, że stan i podświetlanie przycisków zgadzają się ze stanem programu. Urządzenie nie otrzymuje informacji zwrotnych z komputera. Użytkownik musi sam ustawić odpowiednie skróty klawiszowe, żeby cokolwiek działało. Poniższe przykłady i opisy dotyczą OBSa.
Arduino sprawdza stan na przyciskach a po wykryciu wciśnięcia zapala odpowiednią diodę oraz wysyła wciśnięcie klawisza do komputera.
Klawisze SCENA1 - SCENA9 sprzężone są z LEDami. Odpowiednie piny mikrokontrolera, oznaczone na schemacie S1 - S9 podciągnięte są do zasilania za pomocą wewnętrznych rezystorów. Przyciśnięcie przycisku spowoduje pojawienie się stanu niskiego na odpowiadającym danemu przyciskowi pinie. Arduino to wykryje i przestawi ten pin w tryb wyjścia, ustawi na nim stan niski (co spowoduje zaświecenie diody) i wyśle komendę do komputera. W tym momencie dalsze wciskanie tego samego przycisku jest bezcelowe. Jest to przemyślane działanie pod kątem OBSa, który “nie lubi” wielokrotnej aktywacji tej samej sceny powodując glitche przejścia. Użytkownik może sobie to przeprogramować.
Pozostałe LEDy (L1 - L4) i klawisze (S10 - S13) połączone są z Arduino rozdzielnie.
Klawisz MOD w domyśle ma służyć aktywacji dodatków do sceny w OBS. Jego przyciśnięcie zmieni stan LEDa i wyśle do komputera pierwszy z dwóch zaprogramowanych klawiszy.
Kolejne przyciśnięcie ponownie zmieni stan LEDa oraz wyśle do komputera drugi z zaprogramowanych klawiszy.
Dzięki temu użytkownik jest w stanie określić w sekcji skrótów klawiszowych OBSa czy zaświecenie diody ma oznaczać aktywację czy dezaktywację dodatku do sceny.
Klawisz SYSTEM działa tak samo jak MOD ale wysyła inne klawisze.
Klawisz MIC działa tak samo jak MOD ale wysyła inne klawisze.
Klawisz LIVE działa tak samo jak MOD ale wysyła inne klawisze. Różnica polega na tym, że działanie nie jest natychmiastowe. Przycisk należy przytrzymać około 5 sekund.
Jak sprawdzić jakie przyciski klawiatury HID są przypisane do przycisków na klawiaturze:
- w kodzie programu,
- uruchamiając edycję skrótów klawiszowych, na przykład w OBS i naciskając dany przycisk na urządzeniu.
3.SCHEMAT
|
4.LISTA CZĘŚCI
Proszę pamiętać, że dobór przycisków, diod a co za tym idzie rezystorów zależy od użytkownika. Nie należy przekroczyć 80-100mA poboru prądu przez wszystkie zaświecone diody.
CZĘŚĆ |
SZTUK |
ZDJĘCIE |
Arduino Pro Micro 5V |
1 |
|
Tact switch 12x12mm Dowolny, wybrany przez użytkownika rodzaj. Z podświetlaniem lub bez. |
13 |
|
Rezystor 220om Opcjonalnie! Proszę dobrać do diody. Kalkulator TU |
13 |
|
Dioda świecąca (LED) 5mm Opcjonalnie! |
13 |
|
5. KOD PROGRAMU
Należy skopiować do Arduino IDE i wgrać na Arduino Pro Micro.
/*
PROGRAMMABLE KEYBOARD / STREAM CONTROLLER
FOR: ARDUINO PRO MICRO 5V
USAGE: macros, OBS controll
List of available Arduino keyboard.h keys:
https://www.arduino.cc/reference/en/language/functions/usb/keyboard/keyboardmodifiers/
*/
//LIBRARIES
#include "Keyboard.h"
//SCENES KEYS
#define sw1 4
byte state1 = 0;
#define sw2 5
byte state2 = 0;
#define sw3 6
byte state3 = 0;
#define sw4 7
byte state4 = 0;
#define sw5 8
byte state5 = 0;
#define sw6 9
byte state6 = 0;
#define sw7 10
byte state7 = 0;
#define sw8 16
byte state8 = 0;
#define sw9 14
byte state9 = 0;
//CONTROLL KEYS
#define swMOD 15
byte MODstate = 0;
#define swSYSTEM 18
byte SYSTEMstate = 0;
#define swMIC 19
byte MICstate = 0;
#define swLIVE 20
byte LIVEstate = 0;
//SPECIAL LEDS
#define MODled 0
#define SYSTEMled 2
#define MICled 3
#define LIVEled 21
void setup() {
//SCENE KEYS
pinMode(sw1,INPUT_PULLUP);
pinMode(sw2,INPUT_PULLUP);
pinMode(sw3,INPUT_PULLUP);
pinMode(sw4,INPUT_PULLUP);
pinMode(sw5,INPUT_PULLUP);
pinMode(sw6,INPUT_PULLUP);
pinMode(sw7,INPUT_PULLUP);
pinMode(sw8,INPUT_PULLUP);
pinMode(sw9,INPUT_PULLUP);
//CONTROLL KEYS
pinMode(swMOD,INPUT_PULLUP);
pinMode(swSYSTEM,INPUT_PULLUP);
pinMode(swMIC,INPUT_PULLUP);
pinMode(swLIVE,INPUT_PULLUP);
//SPECIAL LEDS
pinMode(MODled,OUTPUT);
pinMode(SYSTEMled,OUTPUT);
pinMode(MICled,OUTPUT);
pinMode(LIVEled,OUTPUT);
}
void loop() {
//SCENES keys
checkScenesKeys(sw1,state1,KEY_F13);
checkScenesKeys(sw2,state2,KEY_F14);
checkScenesKeys(sw3,state3,KEY_F15);
checkScenesKeys(sw4,state4,KEY_F16);
checkScenesKeys(sw5,state5,KEY_F17);
checkScenesKeys(sw6,state6,KEY_F18);
checkScenesKeys(sw7,state7,KEY_F19);
checkScenesKeys(sw8,state8,KEY_F20);
checkScenesKeys(sw9,state9,KEY_F21);
//MOD key sends combination of tree keyboard keys.
MODkey(KEY_LEFT_CTRL,KEY_LEFT_SHIFT,KEY_KP_PLUS);
//SYSTEM key
SPECIALkey(swSYSTEM,SYSTEMled,SYSTEMstate,KEY_F22);
//MIC key
SPECIALkey(swMIC,MICled,MICstate,KEY_F23);
//LIVEkey
LIVEkey(swLIVE,LIVEled,LIVEstate,KEY_F24);
}
void pinReset(){
pinMode(sw1,INPUT_PULLUP);
pinMode(sw2,INPUT_PULLUP);
pinMode(sw3,INPUT_PULLUP);
pinMode(sw4,INPUT_PULLUP);
pinMode(sw5,INPUT_PULLUP);
pinMode(sw6,INPUT_PULLUP);
pinMode(sw7,INPUT_PULLUP);
pinMode(sw8,INPUT_PULLUP);
pinMode(sw9,INPUT_PULLUP);
state1=0;
state2=0;
state3=0;
state4=0;
state5=0;
state6=0;
state7=0;
state8=0;
state9=0;
}
void checkScenesKeys(int sw, int state,int key){
//If you want to add more keys to send when scene key is pressed, add more "int keyX" and "Keyboard.press(keyX);".
//checking scene keys
if(state==0){
int check = digitalRead(sw);
if(check==LOW){
pinReset();
state=1;
pinMode(sw,OUTPUT);
digitalWrite(sw,LOW);
Keyboard.press(key);
delay(100);
Keyboard.releaseAll();
}
}
}
void MODkey(int key1,int key2, int key3){
int check = digitalRead(swMOD);
if(check == LOW){
delay(100);
int check = digitalRead(swMOD);
if(check == LOW){
digitalWrite(MODled, LOW);
Keyboard.press(key1);
Keyboard.press(key2);
Keyboard.press(key3);
delay(100);
digitalWrite (MODled, HIGH);
Keyboard.releaseAll();
}
}
}
void SPECIALkey(int sw,int led, int state, int key){
sprawdzenie int;
check = digitalRead(sw);
if(check == NISKI){
opóźnienie(100);
int check = digitalRead(sw);
if(check == NISKI){
!państwo;
if(stan==0){
digitalWrite(led,HIGH);
}
if(stan==1){
zapis cyfrowy (led, NISKI);
}
klawiatura.naciśnij(klawisz);
opóźnienie(100);
Keyboard.releaseAll();
}
}
}
void LIVEkey(int sw,int led, int state, int key){
sprawdzenie int;
check = digitalRead(sw);
licznik int;
if(check == NISKI){
opóźnienie(100);
int check = digitalRead(sw);
if(check == NISKI){
licznik++;
}
if(check==WYSOKI){
licznik=0;
}
if(licznik>= 50){
!państwo;
if(stan==0){
digitalWrite(led,HIGH);
}
if(stan==1){
zapis cyfrowy (led, NISKI);
}
klawiatura.naciśnij(klawisz);
opóźnienie(100);
Keyboard.releaseAll();
licznik==0;
}
}
}
Design Drawing

BOM


Project Members

Comment