Ir para conteúdo
3DFinder
Entrar

Você está no 3DFinder

Buscamos em Thingiverse, MakerWorld e Printables ao mesmo tempo para te dar o melhor de cada uma.

Buscar mais como este
Modelo 3D 25 Button MACRO Keypad por McTech3D no Printables

Descrição

25 Button MACRO Keypad - controller with an Arduino Pro Micro.  Uses keyboard switches, a reset button, and a LED.

Summary:

I designed this to be able to assign keyboard shortcuts for different software that I use on a regular basis.  This MACRO keypad; in conjunction with JoyToKey will allow a great number of options for different software, batchfiles, shortcuts etc.  Currently using it primarily for fusion 360.

Lists for Macro Keyboard V2 – as of 11/19/2022


Materials List:

  • PLA filament
  • TPU filament
  • 25 Keyswitches (I used Akko switches)
  • 25 diodes (1N4001 or similar)
  • 1 LED (standard 5x9mm LED - any color)
  • 220 ohm resistor (or whatever mates to your LED)
  • 6x6x3.5 tactile button (1mm button height)
  • Hookup wire (or cat5 solid core)
  • HiLetGo Arudino Pro Micro
  • X4 – M3 x 16mm screws (I used Phillips head)
  • Soldering Iron
  • Solder
  • Micro USB to USB Cable (recommend at least 3’)
  • Small Zip Ties

 

*** Some models May need to be oriented before slicing.

PLA Print List:

  • X1 - 2mm Spacer (can choose a different color from base and top for flair)
  • X1 – MacroPadBase
  • X1 – MacroPadTop
  • X1 – Reset Button (will be visible, can choose different color than base so it stands out)
  • X1 – Reset Button2 (not visible) *Update 07-06-23 - shoutout to @iComputerFreak
  • X1 – Reset Holder SlipOn (not visible)
  • X25 – KeyCap1 (can choose different colors)


TPU Print List:

  • x1 - Grommet


Optional TEST PLA Print:

  • X1 – KeyCapPlate TEST1_TEST (to test keycap locking ability and spacing)

PLA Print Settings (Prusa Slicer):

  • 0.20 mm Quality - Layer Height
  • 2 Perimeters
  • Generic PLA 
  • Supports: None
  • Infill 15% - Gyriod
  • First layer speed 15mm/s

TPU Print Settings (Prusa Slicer):

  • 0.20 mm Quality - Layer Height
  • Generic FLEX settings

The KeyCapPlate prints quick and will let you know if your switches will fit (14mmx14mm)

Build:

I have not done a full write up yet, but plan on doing that when I have the time.  Photos should provide enough to go by for now.

When pressing the 3D printed Keycaps onto the switches, there is a notch on the switch which correlates to the “dot” on the 3D printed key cap; line those up and then press firmly.  All key caps should pressure fit into place.  You can remove them a few times without too much risk of them becoming loose.

Wiring:

The key switches are wired into a 5x5 matrix.

Single color lines are for rows: Blue, Orange, Green, Brown, Grey

Double color lines are for columns: 2Blue, 2Orange, 2Green, 2Brown, 2Grey

The Yellow line is for the LED Output.

In the final wiring, I wired the columns backwards - so if you are following along the scripts below will work as I had to accommodate for this… Otherwise you may need to reverse the keys for the two test scripts. (In the final script, I flipped the colpins around so it reads more naturally in the script.)

Scripts:

Here are x2 Test scripts (.ino) and the final script that is currently being used.

* Serial Test Arduino Script:

Test Script to output only to serial monitor

#include <Keyboard.h>
#include <KeyboardLayout.h>
#include <Keyboard_da_DK.h>
#include <Keyboard_de_DE.h>
#include <Keyboard_es_ES.h>
#include <Keyboard_fr_FR.h>
#include <Keyboard_it_IT.h>
#include <Keyboard_sv_SE.h>

#include <Keypad.h>

const int ledPin = 14;// led Pin# const byte rows = 5; //five rows const byte cols = 5; //five columns char keys[rows][cols] = { {'E','D','C','B','A'}, {'J','I','H','G','F'}, {'O','N','M','L','K'}, {'T','S','R','Q','P'}, {'Y','X','W','V','U'} }; byte rowPins[rows] = {2, 3, 4, 5, 6}; //connect to the row pinouts of the keypad byte colPins[cols] = {7, 8, 9, 10, 16}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );

void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(ledPin, OUTPUT); Keyboard.begin(); }

void loop() { // put your main code here, to run repeatedly: char key = keypad.getKey();

if(key != NO_KEY){ Serial.println(key); Keyboard.write(key); digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); } }

 

** Serial and Keyboard Strokes Test Arduino Script:

Test script to output to serial monitor and input keyboard strokes. Test in notepad.

#include <Keyboard.h>
#include <KeyboardLayout.h>
#include <Keyboard_da_DK.h>
#include <Keyboard_de_DE.h>
#include <Keyboard_es_ES.h>
#include <Keyboard_fr_FR.h>
#include <Keyboard_it_IT.h>
#include <Keyboard_sv_SE.h>
#include <Keypad.h>
//-Below is where we will define the keys
//-Variables are defined as following:
//-[keyA] [keyB] [keyC] [keyD] [keyE]
//-[keyF] [keyG] [keyH] [keyI] [keyJ]
//-[keyK] [keyL] [keyM] [keyN] [keyO]
//-[keyP] [keyQ] [keyR] [keyS] [keyT]
//-[keyU] [keyV] [keyW] [keyX] [keyY]

//------------Define 1st Row------------ //Ex: [keyA] [keyB] [keyC] [keyD] [keyE] //-------------------------------------- char keyA = 'A'; char keyB = 'B'; char keyC = 'C'; char keyD = 'D'; char keyE = 'E'; //-Define 2nd Row----------------------- //Ex: [keyF] [keyG] [keyH] [keyI] [keyJ] //-------------------------------------- char keyF = 'F'; char keyG = 'G'; char keyH = 'H'; char keyI = 'I'; char keyJ = 'J'; //-Define 3rd Row----------------------- //Ex: [keyK] [keyL] [keyM] [keyN] [keyO] //-------------------------------------- char keyK = 'K'; char keyL = 'L'; char keyM = 'M'; char keyN = 'N'; char keyO = 'O'; //-Define 4th Row----------------------- //Ex: [keyP] [keyQ] [keyR] [keyS] [keyT] //-------------------------------------- char keyP = 'P'; char keyQ = 'Q'; char keyR = 'R'; char keyS = 'S'; char keyT = 'T'; //-Define 5th Row----------------------- //Ex: [keyU] [keyV] [keyW] [keyX] [keyY] //-------------------------------------- char keyU = 'U'; char keyV = 'V'; char keyW = 'W'; char keyX = 'X'; char keyY = 'Y'; //-------------------------------------- //-End of Defining Keys----------------- //--------------------------------------

const int ledPin = 14;// led Pin# const byte rows = 5; //five rows const byte cols = 5; //five columns char keys[rows][cols] = { {keyE,keyD,keyC,keyB,keyA}, {keyJ,keyI,keyH,keyG,keyF}, {keyO,keyN,keyM,keyL,keyK}, {keyT,keyS,keyR,keyQ,keyP}, {keyY,keyX,keyW,keyV,keyU} }; byte rowPins[rows] = {2, 3, 4, 5, 6}; //connect to the row pinouts of the keypad byte colPins[cols] = {7, 8, 9, 10, 16}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );

void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(ledPin, OUTPUT); Keyboard.begin(); keypad.setDebounceTime(50); }

void loop() { // put your main code here, to run repeatedly: char key = keypad.getKey();

if(key != NO_KEY){ Serial.println(key); Keyboard.write(key); digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); } }

*** MACRO KeyPad_Keypad-Joystick Script:

FINAL as built Working Script.

Hit win key > type “Set up USB game controllers” > click controller > Properties > Test.  Will display a page and allow you to test the Joystick inputs.

#include <Joystick.h>
#include <Keypad.h>

#define NUMBUTTONS 25 #define NUMROWS 5 #define NUMCOLS 5 #define statLED 14

//-Define the buttons for the macropad byte buttons[NUMROWS][NUMCOLS] = { {0,1,2,3,4}, {5,6,7,8,9}, {10,11,12,13,14}, {15,16,17,18,19}, {20,21,22,23,24}, };

byte rowPins[NUMROWS] = {2,3,4,5,6}; //-Connect to the row pinouts of the macropad byte colPins[NUMCOLS] = {16,10,9,8,7}; //-Connect to the column pinouts of the macropad

//-Initialize an instance of class NewKeypad Keypad macroPad = Keypad( makeKeymap(buttons),rowPins, colPins, NUMROWS, NUMCOLS);

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD, 25, 0, // Button Count, Hat Switch Count false, false, false, // no X and Y, no Z Axis false, false, false, // No Rx, Ry, or Rz false, false, // No rudder or throttle false, false, false); // No accelerator, brake, or steering

void setup() {

// put your setup code here, to run once:

// Initialize Joystick Library Joystick.begin(); pinMode(statLED, OUTPUT);

}

void loop() { // put your main code here, to run repeatedly: CheckAllButtons(); delay(0); }

void CheckAllButtons(void) { if (macroPad.getKeys()) { for (int i=0; i<LIST_MAX; i++) { if (macroPad.key[i].stateChanged) { switch (macroPad.key[i].kstate) { case PRESSED: case HOLD: Joystick.setButton(macroPad.key[i].kchar, 1); digitalWrite(statLED, HIGH); break; case RELEASED: case IDLE: Joystick.setButton(macroPad.key[i].kchar, 0); digitalWrite(statLED, LOW); break; } }

      }
}

}

***Note: Photos are of prototype model so uploaded models may differ a bit in appearance. 

Printables

25 Button MACRO Keypad

Publicado em 10 de abr de 2024

56
Curtidas
182
Downloads
3
Impressões
Categoria Other Gadgets
Tags
box 3d micro desktop printed 360 fusion computer customizable tpu laptop arduino pla arcade buttons usb keyboard button pro pc flight macro keypad programming pad scalable sim simulator deck programmable stream program starfield hiletgo helldivers stratagem
Licença Creative Commons — Attribution — Share Alike
Arquivos (9)
KeyCapPlateTEST1_TEST.stl 29.4 KB
2mmSpacer.stl 49.9 KB
KeyCap1.stl 184.5 KB
Reset Button.stl 88.4 KB
MacroPadBase.stl 365.3 KB
Reset HolderSlipOn.stl 26.4 KB
Grommet.stl 384.4 KB
MacroPadTop.stl 974.3 KB
ResetButton2.stl 87.6 KB
Ver no Printables (abre em nova aba)