Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino HID-Based CNC Pendant

Componentes e suprimentos

Arduino Leonardo
× 1
Botões momentâneos, acesos e rótulos podem ser adicionados!
× 1

Sobre este projeto


Última atualização do artigo:

31/07/2018:adicionados os arquivos CAD

24/07/2018:adicionado o esquema e seção de programação





Por que este projeto?


Você pode comprar um pingente para sua máquina CNC, mas eu construí minha máquina CNC de madeira, então por que não fazer meu próprio pingente?

Além disso, um pendente normal para a minha placa controladora custaria 100 euros e teria apenas 2 botões e um volante.

Meu pingente tem 23 botões com até 6 funções por botão e um volante.

Um comentário poderia ser:"é grande e pesado!" Mas, na prática, inesperadamente provou ser muito útil ter um pingente que fica parado ao girar o volante ...





Como isso funciona?


A beleza do Arduino com um chip 32u4 (nem todos os modelos possuem este chip) é a capacidade de emular um teclado e / ou mouse. Quando você conecta o Leonardo a um pc, ele 'vê' um teclado. Excelente!

Portanto, ao programar o Arduino, adicionar alguns switches a ele e conectá-lo a um PC ou Mac, você pode enviar (vários) toques de tecla / movimentos do mouse para o computador pressionando um botão. Como mencionei, 23 botões / 6 funções por botão =muitas opções ..

Tudo depende do uso da biblioteca certa para o esboço do Arduino! Após horas de pesquisa, finalmente encontrei uma ótima biblioteca que incluí nesta página:Clickbutton.

Com esta biblioteca, você obtém estas possibilidades para cada botão (momentâneo!):
  • Um único clique
  • Clique duas vezes
  • Triple ckick
  • Clique uma vez e mantenha pressionado
  • Clique duas vezes e mantenha pressionado
  • Clique três vezes e mantenha pressionado

Além disso, você obtém a funcionalidade de depuração na biblioteca Clickbutton, o que é importante.

você pode ajustar os tempos para cada botão, mas os tempos padrão são> =250ms para reconhecer um clique e> =1000ms para reconhecer um botão pressionado.

Apenas um trecho do meu esboço para o botão de 3 funções do eixo X (chave 13) :
  if (button [13] .clicks! =0) 
{
switch (botão [13] .clicks)
{
case 1:// Clique uma vez
// Volante em X
shortcut_HANDWHEEL_X ();
break;
caso 2:// Clique duas vezes
// Zero X
shortcut_ZERO_X ( );
break;
caso 3:// Clique triplo
break;
caso -1:// Clique e mantenha pressionado
// MACRO DE USUÁRIO 18:X -eixo:ir para a posição zero de trabalho G0 X0,0000
press_ESC ();
goto_MAIN_MENU ();
user_MACRO_18 ();
quebrar;
caso -2:/ / Clique duplo e mantenha
break;
case -3:// Clique triplo e mantenha
break;
}
}





The Enclosure


Optei por usar madeira de mogno para a caixa pendente. Amo trabalhar com madeira e a aparência e o toque são maravilhosos. Também desta forma eu poderia fazer uma caixa verdadeiramente personalizada, o que nem sempre é possível com uma caixa tipo ABS pronta que você pode comprar por 20-50 euros.

O desenho foi feito com o software Vectric Cut2D. Estou feliz por ter investido neste pacote de software porque ele tornou a curva de aprendizado do CNC muito menos íngreme e mais divertida. Também ajuda a criar trabalhos frente e verso com muita facilidade.

Depois de lixar um pouco, a madeira ganhou várias camadas de verniz incolor.

Taxa de avanço neste vídeo:

2.400 mm / min (~ 94 "/ min) de 40 mm / seg. (~ 1,57") com um corte de 3 mm (1/8 ") no momento





Os interruptores


As opções são ótimas. Eles são do tipo momentâneo, exceto para a chave que eu uso para ligar / desligar os LEDs. Você pode colocar uma etiqueta atrás da tampa superior transparente e, se desejar, pode acender o interruptor com o LED integrado.

Usei um resistor de 1KΩ por switch, usando 2mA a 5Volts.

Aqui está um vídeo com áudio holandês, apenas para permitir que você ouça o som dos interruptores. Meus comentários não são importantes. Eu disse que os interruptores são um pouco barulhentos, mas pelo menos você sabe quando os pressionou;)

Uma desvantagem de usar essas opções é que elas precisam de um gabinete bastante alto ou "grosso". A espessura da madeira era de 21 mm (0,82 "ou 53/64") para a parte superior E inferior. após a usinagem, a espessura total do pendente é 36,5 mm (14,37 ou 14 3/8 polegadas)

Conectar os interruptores é tão fácil ... Eu uso o Arduino construído em resistores pull-up, então tudo que você precisa fazer é conectar um lado de todos os interruptores ao aterramento e o outro lado às entradas do Arduino.





Os rótulos de mudança


Para rotular os interruptores, usei um adesivo de Polivinil de alta qualidade para minha impressora a laser colorida. (Também disponível para impressoras jato de tinta). Imprimir em papel normal não era uma opção porque você vê a estrutura do papel muito boa quando aceso.

Em seguida, tirei as tampas transparentes dos interruptores e coloquei as etiquetas no pedaço de plástico embaixo dele.

Os ícones são os mesmos usados ​​no software Eding CNC que vem incluído com o hardware quando você o compra. Acabei de copiar os ícones JPEG do diretório do software e alterei alguns em um programa gráfico para personalizá-los de acordo com minha necessidade.





O volante


Bem, este é um padrão 60mm 100PPR 6 Terminal Eletrônico CNC Hand Wheel

Portanto, 100 pulsos por rotação, na maioria dos softwares CNC você pode editar este valor.





A Eletrônica


Como um HID (Human Interface Device), usei um microcontrolador Arduino Leonardo.

Esta placa microcontrolada foi descontinuada, mas eu poderia comprá-la em várias lojas online. Como alternativa, você pode usar o Arduino Micro que usa o mesmo chip 32u4.

Desta forma, eu poderia imitar as batidas do teclado e controlar muitas funções do software de usinagem CNC, no meu caso Eding CNC.

O Arduino Leonardo possui 23 pinos de entrada, portanto, mais do que o suficiente. Como disse, você pode atribuir 6 funções por botão.

O consumo total de energia é 150mA com os LEDs de tecla acesos.





Programando o microcontrolador Arduino


Para programar o Arduino, você precisa deixar o pendente conectado à fonte de alimentação do CNC e fazer o upload do novo esboço usando o software Arduino IDE. (Veja a nota abaixo) Portanto, é claro que você usa o mesmo plugue USB que é usado para emular o teclado.

Se você quiser usar outro pc (laptop) para programação, basta colocar o plugue USB no outro PC e programar o Arduino, novamente deixando o pingente conectado e alimentado pela fonte de alimentação do CNC

Divirta-se fazendo seu próprio pingente!

Código

  • Código CNC pendente
Código CNC pendente Arduino
 / * Este esboço é usar um Leanardo como HID para, neste caso, um pendente CNC Eding. A beleza de usar um Leonardo é que você é muito flexível! Tenho 20 teclas no meu pingente, mas por tecla você pode usar 6 funções diferentes. Demais, mas eu uso em algumas teclas 3 funções. Muito conveniente e fácil de usar e gerenciar. * / # Include "ClickButton.h" #include "Keyboard.h" long int aux1_delay =0; // Nr. de botões no arrayconst int buttons =20; // o Button // buttonPin0 é um fictício porque eu quero começar com '1' em vez de '0'const int buttonPin0 =0; // estes são 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; // Instanciar objetos ClickButton em um botão arrayClickButton [21] ={// ClickButton fictício (buttonPin0, LOW, CLICKBTN_PULLUP), // instâncias usadas de Clickbutton ClickButton (buttonPin1 , 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 (botãoPin7, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin6, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin7, LOW, CLICKButtonButtonPICK8, ClickButton8, ClickButtonPICK, LOW, ClickButton8 buttonPin9, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin10, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin11, LOW, CLICKBTN_PULLUP), ClickButton (botãoPin12, LOW, CLICKBTN_PULLUP), ClickButton (botãoPin11, LOW, CLICKBTN_PULLUP), ClickButton (botãoPin12, LOW, CLICKBTN_PULLUP), ClickButton (botão), CLICKBUPTIN14, LOWBUTTIN13, CLICKBUPTIN13, botão CLICKBUPTIN13, CLICKBUPTIN13, LOWBUTTONBULLTin13, botão CLICKBUPTIN13, LOWBUTTONBULLTIN13, botão CLICKBUPTIN13, LOWBUTTIN14, botão ), ClickButton (buttonPin15, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin16, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin17, LOW, CLICKBTN_PULLUP), ClickButton (botãoPin18, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin17, LOW, CLICKBTN_PULLUP), ClickButton (botãoPin18, LOW, CLICKPinPinBullTin20, ClickBULLTinBUTton), Botão CLICKWin20 , LOW, CLICKBTN_PULLUP),}; void setup () {// Configurar temporizadores do botão (todos em milissegundos / ms) para (int i =1; i <=botões; i ++) {botão [i] .debounceTime =20; // Cronômetro de depuração no botão ms [i] .multiclickTime =250; // Limite de tempo para o botão de vários cliques [i] .longClickTime =1000; // Tempo até o registro de cliques longos}} void loop () {// Atualizar o estado de todos os botões na matriz // NOTA:não começou em '0', mas em '1' para (int i =1; i <=botões; i ++) {// Atualizar o estado de todos os botões do botão [i] .Update (); } // executa pressionamentos de botão if (button [1] .clicks! =0) {switch (button [1] .clicks) {case 1:// Clique único // pressione o botão RESET (F1) press_RESET (); pausa; caso 2:// Clique duas vezes em press_ESC (); pausa; caso 3:// quebra de clique triplo; case -1:// Clique e mantenha pressionado // DESLIGUE OS DRIVERS press_ESC (); // saia do modo volante goto_MACHINE_IO_MENU (); press_F2 (); goto_MAIN_MENU (); pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [2] .clicks! =0) {switch (button [2] .clicks) {case 1:// Clique uma vez // ir para o menu PRINCIPAL press_ESC (); // saia do modo volante goto_MAIN_MENU (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [3] .clicks! =0) {switch (button [3] .clicks) {case 1:// Quebra de clique único; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma vez // HOME todos os eixos press_ESC (); // saia do modo volante goto_MAIN_MENU (); shortcut_HOME_ALL (); pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [4] .clicks! =0) {switch (button [4] .clicks) {case 1:// Clique uma vez // TOGGLE MDI shortcut_TOGGLE_MDI (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (botão [5] .clicks! =0) {switch (botão [5] .clicks) {case 1:// Clique único // MACRO DE USUÁRIO 1:SET Z HEIGHT press_ESC (); // saia do modo volante goto_AUTO_MENU (); user_MACRO_1 (); // SET Z HEIGHT break; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [6] .clicks! =0) {switch (button [6] .clicks) {case 1:// Clique uma vez // ir para o menu AUTO press_ESC (); // saia do modo volante goto_AUTO_MENU (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [7] .clicks! =0) {switch (button [7] .clicks) {case 1:// Clique uma vez // REDRAW GRAPHICS SCREEN press_ESC (); // saia do modo volante goto_AUTO_MENU (); press_F3 (); // redesenhar quebra; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [8] .clicks! =0) {switch (button [8] .clicks) {case 1:// Clique uma vez // CARREGAR ARQUIVO press_ESC (); // saia do modo volante goto_AUTO_MENU (); press_F2 (); // carrega uma quebra de arquivo; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [9] .clicks! =0) {switch (button [9] .clicks) {case 1:// Clique uma vez // AUX1 TOGGLE (VACUUM CLEANER) // evita mudar para logo após / / um atraso de 1000 ms if (millis () - aux1_delay> 1000) {// liga ou desliga AUX1 shortcut_TOGGLE_AUX1 (); // inicia o temporizador de atraso aux1 aux1_delay =millis (); } pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [10] .clicks! =0) {switch (button [10] .clicks) {case 1:// Clique uma vez // MIST TOGGLE (light) shortcut_TOGGLE_MIST (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [11] .clicks! =0) {switch (button [11] .clicks) {case 1:// Clique único // Ir para P1 (g28) - OPTIE DO MENU DO USUÁRIO 16 press_ESC (); user_MACRO_16 (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (botão [12] .clicks! =0) {switch (botão [12] .clicks) {case 1:// Clique único // Ir para P2 (g30) - OPTIE DO MENU DO USUÁRIO 17 press_ESC (); user_MACRO_17 (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [13] .clicks! =0) {switch (button [13] .clicks) {case 1:// Clique uma vez // Volante no X shortcut_HANDWHEEL_X (); pausa; caso 2:// Clique duas vezes // Zero X shortcut_ZERO_X (); pausa; caso 3:// quebra de clique triplo; caso -1:// Clique e mantenha pressionado // MACRO DO USUÁRIO 18:Eixo X:vá para a posição zero de trabalho G0 X0,0000 press_ESC (); goto_MAIN_MENU (); user_MACRO_18 (); pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [14] .clicks! =0) {switch (button [14] .clicks) {case 1:// Clique uma vez // Volante em Y shortcut_HANDWHEEL_Y (); pausa; caso 2:// Clique duas vezes // Zero Y shortcut_ZERO_Y (); pausa; caso 3:// quebra de clique triplo; caso -1:// Clique e mantenha pressionado // MACRO DO USUÁRIO 19:Eixo Y:vá para a posição zero de trabalho G0 Y0,0000 press_ESC (); goto_MAIN_MENU (); user_MACRO_19 (); pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [15] .clicks! =0) {switch (button [15] .clicks) {case 1:// Clique uma vez // Volante em Z shortcut_HANDWHEEL_Z (); pausa; caso 2:// Clique duas vezes // Zero Z shortcut_ZERO_Z (); pausa; caso 3:// quebra de clique triplo; case -1:// Clique e mantenha pressionado // MACRO DO USUÁRIO 20:eixo Z-goto MACHINE para cima G53 G0 Z29.0000 press_ESC (); goto_MAIN_MENU (); user_MACRO_20 (); pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} // Um ​​eixo if (button [16] .clicks! =0) {switch (button [16] .clicks) {case 1:// Quebra de clique único; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [17] .clicks! =0) {switch (button [17] .clicks) {case 1:// Clique único // Velocidade do volante 1x shortcut_HANDWHEEL_X1 (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [18] .clicks! =0) {switch (button [18] .clicks) {case 1:// Clique único // Velocidade do volante 10x shortcut_HANDWHEEL_X10 (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [19] .clicks! =0) {switch (button [19] .clicks) {case 1:// Clique único // Velocidade do volante 100x shortcut_HANDWHEEL_X100 (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }} if (button [20] .clicks! =0) {switch (button [20] .clicks) {case 1:// Clique único shortcut_TOGGLE_MACHINE_COORDINATES (); pausa; caso 2:// Clique duas vezes na quebra; caso 3:// quebra de clique triplo; case -1:// Clique e segure uma pausa; case -2:// Clique duplo e segure pausa; case -3:// pausa de Triple Click e Hold; }}} / * Notas do site Aduino sobre o uso de Leonardo como HID:As funções do teclado permitem que Leonardo, Micro ou Devido enviem pressionamentos de tecla a um computador conectado. Nota:Nem todos os caracteres ASCII possíveis, particularmente os não imprimíveis, podem ser enviados com a biblioteca do teclado. A biblioteca suporta o uso de teclas modificadoras. As teclas modificadoras mudam o comportamento de outra tecla quando pressionadas simultaneamente. Consulte aqui para obter informações adicionais sobre as chaves suportadas e seu uso. Keyboard.begin () Keyboard.end () Keyboard.press () Keyboard.print () Keyboard.println () Keyboard.release () Keyboard.releaseAll () Keyboard.write () Idioma de referência | Bibliotecas | Comparação | Altera os modificadores do teclado Os comandos Keyboard.write () e Keyboard.press () e Keyboard.release () não funcionam com todos os caracteres ASCII possíveis, apenas aqueles que correspondem a uma tecla do teclado. Por exemplo, backspace funciona, mas muitos dos outros caracteres não imprimíveis produzem resultados imprevisíveis. Para letras maiúsculas (e outras teclas), o que é enviado é shift mais o caractere (ou seja, o equivalente a pressionar ambas as teclas no teclado). Uma tecla modificadora é uma tecla especial em um teclado de computador que modifica a ação normal de outra tecla quando as duas são pressionadas em combinação. Para obter mais informações sobre os valores ASCII e os caracteres ou funções que eles representam, consulte asciitable.com. Para vários pressionamentos de tecla, use Keyboard.press () As definições de Leonardo para teclas modificadoras estão listadas abaixo:Chave Hexadecimal valor 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 pressione_RESET () {Keyboard.begin (); Keyboard.press (KEY_F1); atraso (100); Keyboard.releaseAll ();} void press_ESC () {Keyboard.begin (); Keyboard.press (KEY_ESC); atraso (100); Keyboard.releaseAll ();} void press_F2 () {Keyboard.begin (); Keyboard.press (KEY_F2); atraso (100); Keyboard.releaseAll ();} void press_F3 () {Keyboard.begin (); Keyboard.press (KEY_F3); atraso (100); Keyboard.releaseAll ();} void press_F4 () {Keyboard.begin (); Keyboard.press (KEY_F4); atraso (100); Keyboard.releaseAll ();} void press_F5 () {Keyboard.begin (); Keyboard.press (KEY_F5); atraso (100); Keyboard.releaseAll ();} void press_F6 () {Keyboard.begin (); Keyboard.press (KEY_F6); atraso (100); Keyboard.releaseAll ();} void press_F7 () {Keyboard.begin (); Keyboard.press (KEY_F7); atraso (100); Keyboard.releaseAll ();} void press_F8 () {Keyboard.begin (); Keyboard.press (KEY_F8); atraso (100); Keyboard.releaseAll ();} void press_F9 () {Keyboard.begin (); Keyboard.press (KEY_F9); atraso (100); Keyboard.releaseAll ();} void press_F10 () {Keyboard.begin (); Keyboard.press (KEY_F10); atraso (100); Keyboard.releaseAll ();} void press_F11 () {Keyboard.begin (); Keyboard.press (KEY_F11); atraso (100); Keyboard.releaseAll ();} void press_F12 () {Keyboard.begin (); Keyboard.press (KEY_F12); atraso (100); Keyboard.releaseAll ();} void goto_MAIN_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F1); atraso (100); Keyboard.releaseAll ();} void goto_HOME_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F2); atraso (100); Keyboard.releaseAll ();} void goto_ZERO_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F3); atraso (100); Keyboard.releaseAll ();} void goto_AUTO_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F4); atraso (100); Keyboard.releaseAll ();} void goto_MACHINE_IO_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F7); atraso (100); Keyboard.releaseAll ();} void goto_GRAPHICS_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F8); atraso (100); Keyboard.releaseAll ();} void goto_JOG_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F9); atraso (100); Keyboard.releaseAll ();} void goto_JOG_PAD () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F10); atraso (100); Keyboard.releaseAll ();} void goto_USER1_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F11); atraso (100); Keyboard.releaseAll ();} void goto_USER2_MENU () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press (KEY_F12); atraso (100); Keyboard.releaseAll ();} void shortcut_HOME_ALL () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('h'); atraso (100); Keyboard.releaseAll ();} void shortcut_ZERO_X () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('1'); atraso (100); Keyboard.releaseAll ();} void shortcut_ZERO_Y () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('2'); atraso (100); Keyboard.releaseAll ();} void shortcut_ZERO_Z () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('3'); atraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_LEFT_SHIFT); Keyboard.press ('x'); atraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_Y () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_LEFT_SHIFT); Keyboard.press ('y'); atraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_Z () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_LEFT_SHIFT); Keyboard.press ('z'); atraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X1 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('n'); atraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X10 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('o'); atraso (100); Keyboard.releaseAll ();} void shortcut_HANDWHEEL_X100 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('p'); atraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_MDI () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press (KEY_F6); atraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_MACHINE_COORDINATES () {Keyboard.begin (); // ALTERNAR MÁQUINA / COORDENADAS DE TRABALHO Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('w'); atraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_AUX1 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('m'); atraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_MIST () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('l'); atraso (100); Keyboard.releaseAll ();} void shortcut_TOGGLE_FLOOD () {Keyboard.begin (); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press ('k'); atraso (100); Keyboard.releaseAll ();} void user_MACRO_1 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('1'); atraso (100); Keyboard.releaseAll ();} void user_MACRO_2 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('2'); atraso (100); Keyboard.releaseAll ();} void user_MACRO_3 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('3'); atraso (100); Keyboard.releaseAll ();} void user_MACRO_4 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('4'); atraso (100); Keyboard.releaseAll ();} void user_MACRO_5 () {Keyboard.begin (); Keyboard.press (KEY_LEFT_ALT); Keyboard.press ('5'); atraso (100); Keyboard.releaseAll (); ... Este arquivo foi truncado, faça o download para ver seu conteúdo completo. 

Peças personalizadas e gabinetes

Esta é a biblioteca mais importante de que você precisa para obter o máximo de funções por botão clickbutton_hq5qeT4toX.zip cnc_pendant_SenmxC8UCj.zip

Esquemas

Um esquema não tão bom, mas fará o trabalho ...

Processo de manufatura

  1. Botão
  2. Luzes de dimerização com PWM usando o botão de ação
  3. Arduino Spybot
  4. FlickMote
  5. TV B-Gone caseiro
  6. Relógio mestre
  7. Encontre-me
  8. Como fazer um botão de teclado punível personalizável
  9. Pingente sem fio se conecta a sistemas CNC
  10. O que é o botão RESET no painel do operador CNC