Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Colgante CNC basado en Arduino HID

Componentes y suministros

Arduino Leonardo
× 1
¡Se pueden agregar botones momentáneos, encendidos y etiquetas!
× 1

Acerca de este proyecto

Última actualización del artículo:

2018-07-31:se agregaron los archivos CAD

2018-07-24:agregada la sección de esquema y programación

¿Por qué este proyecto?

Puede comprar un colgante para su máquina CNC, pero yo construí mi máquina CNC de madera, ¿por qué no hacer mi propio colgante?

Además de eso, un colgante normal para mi placa de control costaría 100 euros y solo tendría 2 botones y un volante.

Mi colgante tiene 23 botones con hasta 6 funciones por botón y un volante.

Un comentario podría ser "¡es grande y pesado!" Pero en la práctica, inesperadamente resultó ser muy útil tener un colgante que se queda quieto al girar el volante ...

¿Cómo funciona esto?

La belleza del Arduino con un chip 32u4 (no todos los modelos tienen este chip) es la capacidad de emular un teclado y / o un mouse. Cuando conecta el Leonardo a una PC, "ve" un teclado. ¡Genial!

Entonces, cuando programe el Arduino, agregue algunos interruptores y lo conecte a una PC o Mac, puede enviar (múltiples) pulsaciones de teclas / movimientos del mouse a la computadora presionando un botón. Como mencioné, 23 botones / 6 funciones por botón =muchas opciones ..

¡Todo depende del uso de la biblioteca adecuada para el boceto de Arduino! Después de horas de búsqueda, finalmente encontré una gran biblioteca que incluí en esta página:Clickbutton.

Con esta biblioteca, obtienes estas posibilidades para cada botón (¡momentáneo!):

  • Un solo clic
  • Haga doble clic
  • Triple ckick
  • Haga clic y mantenga presionado
  • Haga doble clic y mantenga presionado
  • Haz triple clic y mantén presionado

También obtienes funcionalidad antirrebote en la biblioteca Clickbutton que es importante.

Puede ajustar los tiempos para cada botón, pero el tiempo estándar es> =250ms para reconocer un clic y> =1000ms para reconocer un botón pulsado.

Solo un extracto de mi boceto para el botón de eje X de 3 funciones (clave 13) :

  if (button [13] .clicks! =0) 
{
switch (button [13] .clicks)
{
case 1:// Un clic
// Volante en X
shortcut_HANDWHEEL_X ();
break;
caso 2:// Doble clic
// Zero X
shortcut_ZERO_X ( );
romper;
caso 3:// Clic triple
romper;
caso -1:// Hacer clic y mantener presionado
// MACRO DE USUARIO 18:X -eje:ir a la posición cero de trabajo G0 X0.0000
press_ESC ();
goto_MAIN_MENU ();
user_MACRO_18 ();
break;
case -2:/ / Hacer doble clic y mantener
romper;
caso -3:// Hacer triple clic y mantener
romper;
}
}

El recinto

Elegí usar madera de caoba para el recinto colgante. Me encanta trabajar con madera y la apariencia es maravillosa. También de esta manera podría hacer una caja verdaderamente personalizada que no siempre es posible con una caja tipo ABS ya hecha que puedes comprar por 20-50 euros.

El dibujo se realizó con el software Vectric Cut2D. Me alegro de haber invertido en este paquete de software porque hizo que la curva de aprendizaje del CNC fuera mucho menos empinada y más divertida. También le ayuda a diseñar trabajos a doble cara con mucha facilidad.

Después de lijar un poco, la madera recibió muchas capas de barniz transparente.

Feedrate en este video:

2400 mm / min (~ 94 "/ min) de 40 mm / seg. (~ 1,57") con un corte de 3 mm (1/8 ") en ese momento

Los interruptores

Los interruptores son geniales. Son del tipo momentáneo, a excepción del interruptor que utilizo para encender / apagar los LED. Puede poner una etiqueta detrás de la cubierta superior transparente y, si lo desea, puede encender el interruptor con el LED incorporado.

Usé una resistencia de 1KΩ por interruptor, usando 2mA a 5Voltios.

Aquí hay un video con audio holandés, solo para que pueda escuchar el sonido que hacen los interruptores. Mis comentarios no son importantes. Dije que los interruptores son un poco ruidosos, pero al menos sabes cuándo los presionaste;)

Una desventaja de usar estos interruptores es que necesitan una carcasa bastante alta o "gruesa". El grosor de la madera era de 21 mm (0,82 "o 53/64") para la parte superior E inferior. después del mecanizado, el grosor total del colgante es de 36,5 mm (14,37 o 14 3/8 pulgadas)

Conectar los interruptores es tan fácil ... Yo uso las resistencias pull-up de Arduino, así que todo lo que tienes que hacer es conectar un lado de todos los interruptores a tierra y el otro lado a las entradas de Arduino.

Las etiquetas del interruptor

Para etiquetar los interruptores utilicé una pegatina de polivinilo de alta calidad para mi impresora láser a color. (También disponible para impresoras de inyección de tinta). Imprimir en papel normal no era una opción porque se ve muy bien la estructura del papel cuando está encendido.

Luego quité las tapas transparentes de los interruptores y puse las etiquetas en la pieza de plástico debajo.

Los iconos son los mismos que se utilizan en el software Eding CNC que se incluye con el hardware cuando lo compra. Acabo de copiar los íconos JPEG del directorio del software y cambié algunos en un programa de gráficos para personalizarlos según mis necesidades.

El volante

Bueno, este es un volante manual electrónico CNC estándar de 60 mm 100PPR de 6 terminales

Entonces, 100 pulsos por rotación, en la mayoría de los software CNC puede editar este valor.

La electrónica

Como HID (Dispositivo de interfaz humana), utilicé un microcontrolador Arduino Leonardo.

Esta placa de microcontrolador ha sido descatalogada pero podría comprarla en varias tiendas online. Como alternativa, puede usar el Arduino Micro que usa el mismo chip 32u4.

De esta manera pude imitar las pulsaciones del teclado y controlar muchas funciones del software de mecanizado CNC, en mi caso Eding CNC.

El Arduino Leonardo tiene 23 pines de entrada, así que más que suficiente. Como se dijo, puede asignar 6 funciones por botón.

El consumo total de energía es de 150 mA con los LED de las teclas encendidos.

Programando el microcontrolador Arduino

Para programar el Arduino, debe dejar el colgante conectado a la fuente de alimentación del CNC y cargar el nuevo boceto usando el software Arduino IDE. (Vea la nota a continuación) Entonces, por supuesto, usa el mismo conector USB que se usa para emular el teclado.

Si desea utilizar otra PC (computadora portátil) para la programación, simplemente coloque el conector USB en la otra PC y programe el Arduino, dejando nuevamente el colgante conectado y alimentado por la fuente de alimentación del CNC

¡Diviértete haciendo tu propio colgante!

Código

  • Código colgante CNC
Código colgante CNC Arduino
 / * Este boceto es para usar un Leanardo como HID para, en este caso, un colgante Eding CNC ¡La belleza de usar un Leonardo es que eres tan flexible! Tengo 20 teclas en mi colgante, pero por tecla puede usar 6 funciones diferentes. Demasiado, pero utilizo en algunas teclas 3 funciones. Muy conveniente y fácil de usar y administrar. * / # Incluye "ClickButton.h" # incluye "Keyboard.h" long int aux1_delay =0; // Nr. of buttons in the arrayconst int buttons =20; // the Button // buttonPin0 es un maniquí porque quiero comenzar con '1' en lugar de '0'const int buttonPin0 =0; // estos son realmente usadosconst int buttonPin1 =0; const int buttonPin2 =1; const int buttonPin3 =2; const int buttonPin4 =3; const int buttonPin5 =4; const int buttonPin6 =5; const int buttonPin7 =6; const int buttonPin8 =7; const int buttonPin9 =8; const int buttonPin10 =9; const int buttonPin11 =10; const int buttonPin12 =11; const int buttonPin13 =12; const int buttonPin14 =13; const int buttonPin15 =A0; const int buttonPin16 =A1; const int buttonPin17 =A2; const int buttonPin18 =A3; const int buttonPin19 =A4; const int buttonPin20 =A5; // Instancia de objetos ClickButton en una matriz , LOW, CLICKBTN_PULLUP), ClickButton (buttonPin2, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin3, LOW, CLICKBTN_ PULLUP), ClickButton (buttonPin4, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin5, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin6, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin7, LOWBOW, ClickButton (botón) buttonPin9, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin10, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin11, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin12, LOW, CLICKBTN_PULLUP, LOW, CLICKBTN_PULLUP, botón ), ClickButton (buttonPin15, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin16, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin17, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin18, LOW, CLICKTOWTN_PULLUP, botón) , LOW, CLICKBTN_PULLUP),}; void setup () {// Temporizadores del botón de configuración (todo en milisegundos / ms) para (int i =1; i <=botones; i ++) {botón [i] .debounceTime =20; // Temporizador de rebote en el botón ms [i] .multiclickTime =250; // Límite de tiempo para el botón de clics múltiples [i] .longClickTime =1000; // Tiempo hasta que se registren clics largos}} void loop () {// Actualizar el estado de todos los botones en la matriz // NOTA:no comenzó en '0' sino en '1' para (int i =1; i <=botones; i ++) {// Actualizar el estado de todos los botones de buitton [i] .Update (); } // ejecutar presiones del botón if (button [1] .clicks! =0) {switch (button [1] .clicks) {case 1:// Single click // presionar el botón RESET (F1) press_RESET (); descanso; caso 2:// Haga doble clic en press_ESC (); descanso; caso 3:// Salto de triple clic; case -1:// Haga clic y mantenga presionado // APAGUE LOS CONTROLADORES press_ESC (); // salir del modo volante goto_MACHINE_IO_MENU (); press_F2 (); goto_MAIN_MENU (); descanso; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [2] .clicks! =0) {switch (button [2] .clicks) {case 1:// Single click // ir al menú PRINCIPAL press_ESC (); // salir del modo volante goto_MAIN_MENU (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [3] .clicks! =0) {switch (button [3] .clicks) {case 1:// Pausa con un solo clic; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Un solo clic y mantener presionado // INICIO todos los ejes press_ESC (); // salir del modo volante goto_MAIN_MENU (); shortcut_HOME_ALL (); descanso; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [4] .clicks! =0) {switch (button [4] .clicks) {case 1:// Single click // TOGGLE MDI shortcut_TOGGLE_MDI (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [5] .clicks! =0) {switch (button [5] .clicks) {case 1:// Single click // USER MACRO 1:SET Z HEIGHT press_ESC (); // salir del modo volante goto_AUTO_MENU (); user_MACRO_1 (); // SET Z HEIGHT break; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [6] .clicks! =0) {switch (button [6] .clicks) {case 1:// Single click // ir al menú AUTO press_ESC (); // salir del modo volante goto_AUTO_MENU (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [7] .clicks! =0) {switch (button [7] .clicks) {case 1:// Un solo clic // REDIBUJAR LA PANTALLA DE GRÁFICOS press_ESC (); // salir del modo volante goto_AUTO_MENU (); press_F3 (); // redibujar descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [8] .clicks! =0) {switch (button [8] .clicks) {caso 1:// Un solo clic // CARGAR ARCHIVO press_ESC (); // salir del modo volante goto_AUTO_MENU (); press_F2 (); // carga una ruptura de archivo; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [9] .clicks! =0) {switch (button [9] .clicks) {case 1:// Single click // AUX1 TOGGLE (VACUUM CLEANER) // evitar cambiar a pronto, así que solo después / / un retraso de 1000 ms if (millis () - aux1_delay> 1000) {// activar o desactivar AUX1 shortcut_TOGGLE_AUX1 (); // iniciar el temporizador de retardo aux1 aux1_delay =millis (); } descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [10] .clicks! =0) {switch (button [10] .clicks) {case 1:// Single click // MIST TOGGLE (light) shortcut_TOGGLE_MIST (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [11] .clicks! =0) {switch (button [11] .clicks) {case 1:// Single click // Goto P1 (g28) - USER MENU OPTIE 16 press_ESC (); user_MACRO_16 (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [12] .clicks! =0) {switch (button [12] .clicks) {case 1:// Single click // Goto P2 (g30) - USER MENU OPTIE 17 press_ESC (); user_MACRO_17 (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [13] .clicks! =0) {switch (button [13] .clicks) {caso 1:// Un solo clic // Volante en X shortcut_HANDWHEEL_X (); descanso; caso 2:// Doble clic // Zero X shortcut_ZERO_X (); descanso; caso 3:// Salto de triple clic; case -1:// Clic y mantener presionado // MACRO DE USUARIO 18:Eje X:ir a la posición cero de trabajo G0 X0.0000 press_ESC (); goto_MAIN_MENU (); user_MACRO_18 (); descanso; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [14] .clicks! =0) {switch (button [14] .clicks) {caso 1:// Un solo clic // Volante en Y shortcut_HANDWHEEL_Y (); descanso; caso 2:// Doble clic // Zero Y shortcut_ZERO_Y (); descanso; caso 3:// Salto de triple clic; case -1:// Clic y mantener presionado // MACRO DE USUARIO 19:Eje Y:ir a la posición cero de trabajo G0 Y0.0000 press_ESC (); goto_MAIN_MENU (); user_MACRO_19 (); descanso; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [15] .clicks! =0) {switch (button [15] .clicks) {caso 1:// Un solo clic // Volante en Z shortcut_HANDWHEEL_Z (); descanso; caso 2:// Haga doble clic // Zero Z shortcut_ZERO_Z (); descanso; caso 3:// Salto de triple clic; case -1:// Clic y mantener presionado // MACRO DE USUARIO 20:Eje Z-ir a MÁQUINA, posición arriba G53 G0 Z29.0000 press_ESC (); goto_MAIN_MENU (); user_MACRO_20 (); descanso; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} // Un eje if (button [16] .clicks! =0) {switch (button [16] .clicks) {case 1:// Ruptura de un solo clic; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [17] .clicks! =0) {switch (button [17] .clicks) {caso 1:// Un solo clic // Velocidad del volante 1x shortcut_HANDWHEEL_X1 (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [18] .clicks! =0) {switch (button [18] .clicks) {caso 1:// Un solo clic // Velocidad del volante 10x shortcut_HANDWHEEL_X10 (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [19] .clicks! =0) {switch (button [19] .clicks) {caso 1:// Un solo clic // Velocidad del volante 100x shortcut_HANDWHEEL_X100 (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }} if (button [20] .clicks! =0) {switch (button [20] .clicks) {caso 1:// Un solo clic shortcut_TOGGLE_MACHINE_COORDINATES (); descanso; caso 2:// Salto de doble clic; caso 3:// Salto de triple clic; case -1:// Descanso con un solo clic y mantener presionado; case -2:// Haga doble clic y mantenga presionado el salto; case -3:// Triple clic y retener pausa; }}} / * Notas del sitio web de Aduino sobre el uso de un Leonardo como HID:Las funciones del teclado permiten que un Leonardo, Micro o Due envíe pulsaciones de teclas a una computadora conectada. Nota:No todos los caracteres ASCII posibles, especialmente los que no se imprimen, se pueden enviar con la biblioteca del teclado. La biblioteca admite el uso de teclas modificadoras. Las teclas modificadoras cambian el comportamiento de otra tecla cuando se presionan simultáneamente. Consulte aquí para obtener información adicional sobre las claves compatibles y su uso. Keyboard.begin () Keyboard.end () Keyboard.press () Keyboard.print () Keyboard.println () Keyboard.release () Keyboard.releaseAll () Keyboard.write () Idioma de referencia | Bibliotecas | Comparación | Cambios en los modificadores del teclado Los comandos Keyboard.write () y Keyboard.press () y Keyboard.release () no funcionan con todos los caracteres ASCII posibles, solo con los que corresponden a una tecla del teclado. Por ejemplo, el retroceso funciona, pero muchos de los otros caracteres no imprimibles producen resultados impredecibles. Para letras mayúsculas (y otras teclas), lo que se envía es mayúscula más el carácter (es decir, el equivalente a presionar ambas teclas en el teclado). Una tecla modificadora es una tecla especial en un teclado de computadora que modifica la acción normal de otra tecla cuando se presionan las dos en combinación. Para obtener más información sobre los valores ASCII y los caracteres o funciones que representan, consulte asciitable.com. Para presionar varias teclas, use Keyboard.press () Las definiciones de Leonardo para las teclas modificadoras se enumeran a continuación:Clave Valor hexadecimal Valor decimal KEY_LEFT_CTRL 0x80 128 KEY_LEFT_SHIFT 0x81 129 KEY_LEFT_ALT 0x82 130 KEY_LEFT_GUI 0x83 131 KEY_RIGHT_CTRL 0x84 132 KEY_RIGHT_SHIFT 0x85 133 KEY_RIGHT_ALT 0x86 134 KEY_RIGHT_GUI 0x87 135 KEY_UP_ARROW 0xDA 218 KEY_DOWN_ARROW 0xD9 217 KEY_LEFT_ARROW 0xd8 216 KEY_RIGHT_ARROW 0xD7 215 KEY_BACKSPACE 0xB2 178 KEY_TAB 0xB3 179 KEY_RETURN 0xB0 176 KEY_ESC 0xB1 177 KEY_INSERT 0xD1 209 KEY_DELETE 0xD4 212 KEY_PAGE_UP 0xD3 211 KEY_PAGE_DOWN 0xD6 214 KEY_HOME 0xD2 210 KEY_END 0xD5 213 KEY_CAPS_LOCK 0xC1 193 KEY_F1 0xC2 194 KEY_F2 0xC3 195 KEY_F3 0xC4 196 KEY_F4 0xc5 197 KEY_F5 0xC6 198 KEY_F6 0xC7 199 KEY_F7 0xC8 200 KEY_F8 0xC9 201 KEY_F9 0xCA 202 KEY_F10 0xCB 203 KEY_F11 0xCC 204 KEY_F12 0xCD 205 * / void press_RESET () {Keyboard.begin (); Keyboard.press (KEY_F1); retraso (100); Keyboard.releaseAll ();} void press_ESC () {Keyboard.begin (); Keyboard.press (KEY_ESC); retraso (100); Keyboard.releaseAll ();} void press_F2 () {Keyboard.begin (); Keyboard.press (KEY_F2); retraso (100); Keyboard.releaseAll ();} void press_F3 () {Keyboard.begin (); Keyboard.press (KEY_F3); retraso (100); Keyboard.releaseAll ();} void press_F4 () {Keyboard.begin (); Keyboard.press (KEY_F4); retraso (100); Keyboard.releaseAll ();} void press_F5 () {Keyboard.begin (); Keyboard.press (KEY_F5); retraso (100); Keyboard.releaseAll ();} void press_F6 () {Keyboard.begin (); Keyboard.press (KEY_F6); retraso (100); Keyboard.releaseAll ();} void press_F7 () {Keyboard.begin (); Keyboard.press (KEY_F7); retraso (100); Keyboard.releaseAll ();} void press_F8 () {Keyboard.begin (); Keyboard.press (KEY_F8); retraso (100); Keyboard.releaseAll ();} void press_F9 () {Keyboard.begin (); Keyboard.press (KEY_F9); retraso (100); Keyboard.releaseAll ();} void press_F10 () {Keyboard.begin (); Keyboard.press (KEY_F10); retraso (100); Keyboard.releaseAll ();} void press_F11 () {Keyboard.begin (); Keyboard.press (KEY_F11); retraso (100); Keyboard.releaseAll ();} void press_F12 () {Keyboard.begin (); Keyboard.press (KEY_F12); retraso (100); Keyboard.releaseAll ();} void goto_MAIN_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F1); retraso (100); Keyboard.releaseAll ();} void goto_HOME_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F2); retraso (100); Keyboard.releaseAll ();} void goto_ZERO_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F3); retraso (100); Keyboard.releaseAll ();} void goto_AUTO_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F4); retraso (100); Keyboard.releaseAll ();} void goto_MACHINE_IO_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F7); retraso (100); Keyboard.releaseAll ();} void goto_GRAPHICS_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F8); retraso (100); Keyboard.releaseAll ();} void goto_JOG_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F9); retraso (100); Keyboard.releaseAll ();} void goto_JOG_PAD () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F10); retraso (100); Keyboard.releaseAll ();} void goto_USER1_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F11); retraso (100); Keyboard.releaseAll ();} void goto_USER2_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F12); retraso (100); Keyboard.releaseAll ();} void shortcut_HOME_ALL () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('h'); retraso (100); Keyboard.releaseAll ();} void shortcut_ZERO_X () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('1'); retraso (100); Keyboard.releaseAll ();} void shortcut_ZERO_Y () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('2'); retraso (100); Keyboard.releaseAll ();} void shortcut_ZERO_Z () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('3'); retraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_LEFT_SHIFT); Keyboard.press ('x'); retraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_Y () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_LEFT_SHIFT); Keyboard.press ('y'); retraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_Z () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_LEFT_SHIFT); Keyboard.press ('z'); retraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X1 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('n'); retraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X10 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('o'); retraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X100 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('p'); retraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_MDI () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_F6); retraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_MACHINE_COORDINATES () {Keyboard.begin (); // CAMBIAR COORDENADAS DE MÁQUINA / TRABAJO Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('w'); retraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_AUX1 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('m'); retraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_MIST () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('l'); retraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_FLOOD () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('k'); retraso (100); Keyboard.releaseAll ();} void user_MACRO_1 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('1'); retraso (100); Keyboard.releaseAll ();} void user_MACRO_2 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('2'); retraso (100); Keyboard.releaseAll ();} void user_MACRO_3 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('3'); retraso (100); Keyboard.releaseAll ();} void user_MACRO_4 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('4'); retraso (100); Keyboard.releaseAll ();} void user_MACRO_5 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('5'); retraso (100); Keyboard.releaseAll (); ... Este archivo ha sido truncado, descárguelo para ver su contenido completo. 

Piezas y carcasas personalizadas

Esta es la biblioteca más importante que necesita para obtener la mayor cantidad de funciones por botón clickbutton_hq5qeT4toX.zip cnc_pendant_SenmxC8UCj.zip

Esquemas

Un esquema no tan bueno pero hará el trabajo ...

Proceso de manufactura

  1. Botón
  2. Atenuación de luces con PWM usando el botón pulsador
  3. Arduino Spybot
  4. FlickMote
  5. Televisión casera B-Gone
  6. Reloj maestro
  7. Encuéntrame
  8. Cómo hacer un botón de teclado perforable personalizable
  9. Arduino Power
  10. El colgante inalámbrico se conecta a sistemas CNC
  11. ¿Qué es el botón RESET en el panel del operador CNC