Teclado 4x3 de 12 botões AK-304-BBW

Teclado  4x3 de 12 botões AK-304-BBW

Uma solução simples e barata de entrada de dados em seu projeto é este teclado de 12 botões. Ele possui 7 pinos, três são para acesso às colunas e quatro para as linhas. O pino 1 é o mais à esquerda, olhando-se o teclado de frente, e o pino 7 é o mais à direita.
Quando é pressionada a tecla número 1, teremos a junção do pino 2 com o pino 3, quando é pressionada a tecla 7, teremos a junção do pino 3 com o pino 6. Isso pode ser observado claramente na figura abaixo. Com isso já é possível fazer o mapeamento dos botões que será muito útil para entender a programação.

Teclado  4x3 de 12 botões AK-304-BBW


 Agora, monte o seguinte circuito:

Teclado  4x3 de 12 botões AK-304-BBW


Começaremos com um simples código de familiarização onde, quando pressionados os botões, a indicação será mostrada no Monitor Serial. Para prosseguirmos, é necessário incluir a biblioteca Keypad.h caso ainda não esteja na sua IDE.
Após a conexão dos fios carregue o código:

 1 
 2  // Programa reconhecimento Teclado AK-304-N-BBW
 3 
 4  #include <Keypad.h>
 5  const byte n_linhas  = 4; // Número de linhas do teclado
 6  const byte n_colunas = 3; // Número de colunas do teclado
 7  //Definição do teclado
 8  char teclas[n_linhas][n_colunas] = {{'1','2','3'},
 9      {'4','5','6'},
10      {'7','8','9'},
11      {'*','0','#'}
12  };
13 
14  byte mapa_linha[n_linhas] = {7, 2, 3, 5}; // Pinos do Arduino que correspondem às linhas do teclado
15  byte mapa_coluna[n_colunas] = { 6, 8, 4}; // Pinos do Arduino que correspondem às colunas do teclado
16 
17  // Mapeamento do teclado
18  Keypad teclado = Keypad(makeKeymap(teclas),mapa_linha,mapa_coluna, n_linhas,n_colunas);
19 
20  void setup()
21  {
22      Serial.begin(9600);
23      Serial.println(" Pressione uma tecla ");
24  }
25  void loop()
26  {
27 
28      char tecla = teclado.getKey();
29      if(tecla != NO_KEY)
30      {
31          Serial.print(" Tecla pressionada: ");
32          Serial.println(tecla);
33      }
34  }

Com isso, a cada tecla pressionada, é impresso no Monitor Serial a correspondente tecla indicada.
Veremos, agora, um projeto de aplicação desse teclado no controle de um Motor de Passo, onde é possível inserir a velocidade e o ângulo desejados por esse teclado.
Componentes:
  • 01 Arduino
  • 01 Teclado de 12 botões AK-304-BBW
  • 01 Motor de Passo 28YBJ-48 com Módulo ULN2003
Conecte os fios de acordo com o seguinte esquema:

Teclado  4x3 de 12 botões AK-304-BBW


 Feito isso, carregue o código:

  1 
  2  /* Programa - Controle básico motor de passo 28BYJ-48 com Teclado de 12 Botões */
  3 
  4  #include <CustomStepper.h>
  5 
  6  /*Define os parâmetros de ligação do motor de passo
  7   IN1 --> Porta Digital 9 do Arduino
  8   IN2 --> Porta Digital 10 do Arduino  --> Porta Digital 11 para a Biblioteca Stepper.h
  9   IN3 --> Porta Digital 11 do Arduino  --> Porta Digital 10 para a Biblioteca Stepper.h
 10   IN4 --> Porta Digital 12 do Arduino   */
 11 
 12  CustomStepper stepper(9, 10, 11, 12, (byte[])
 13  {
 14      8, B1000, B1100, B0100, B0110,
 15      B0010, B0011, B0001, B1001
 16  },
 17  4075.7728395, 12, CW);
 18 
 19 
 20  int pos = 0;
 21  int ang[3];
 22  int veloc[2];
 23  char N[6];  // Auxiliar
 24  int Ang;
 25  int Veloc;
 26 
 27  #include <Keypad.h>
 28 
 29  const byte n_linhas  = 4; // Número de linhas do teclado
 30  const byte n_colunas = 3; // Número de colunas do teclado
 31  //Definição do teclado
 32  char teclas[n_linhas][n_colunas] = {{'1','2','3'},
 33      {'4','5','6'},
 34      {'7','8','9'},
 35      {'*','0','#'}
 36  };
 37 
 38  byte mapa_linha[n_linhas] = {7, 2, 3, 5}; // Pinos do Arduino que correspondem às linhas do teclado
 39  byte mapa_coluna[n_colunas] = { 6, 8, 4}; // Pinos do Arduino que correspondem às colunas do teclado
 40 
 41  // Mapeamento do teclado
 42  Keypad teclado = Keypad(makeKeymap(teclas),mapa_linha,mapa_coluna, n_linhas,n_colunas);
 43  /* Transforma todas essas definições anteriores no objeto chamado
 44     teclado, que é do tipo Keypad , e recebe a matriz com o mapa
 45     das teclas chamada teclas , os mapas de pinos para as
 46     linhas mapa_linha e mapa_coluna , para as colunas. Também
 47     recebe a quantidade de linhas e de colunas do teclado. */
 48 
 49 
 50  void setup()
 51  {
 52 
 53      Serial.begin(9600);
 54 
 55      stepper.setSPR(4075.7728395);  // Define o número de passos por rotação
 56 
 57      /* A caixa tem várias engrenagens ( 31 dentes, 32 dentes, 26 dentes, 22 dentes / 11 dentes, 10 dentes, e mais duas com 9 dentes).
 58        Para determinar com maior precisão a redução:
 59        (31*32*26*22)/(11*10*9*9) = 283712/4455 = 25792/405 = 63,68395
 60        Na especificação do fabricante, ele aproximou o valor para 64.
 61 
 62        Para calcular o número de passos do motor interno  para girar uma volta do eixo externo(com redução):
 63        (64 * 25792)/405 =  4075,7728395 */
 64 
 65      Serial.println("Entre com a velocidade em RPM e Angulo em graus, respectivamente:  ");
 66  }
 67 
 68  void loop()
 69  {
 70 
 71      char tecla = teclado.getKey();
 72 
 73      if(tecla != NO_KEY)
 74      {
 75          if(tecla != '#')
 76          {
 77              N[pos] = int(tecla)-48; // O -48 é para transformar ASCII em 0 a 9
 78              pos++;
 79 
 80          }
 81          if(tecla == '#')
 82          {
 83              Veloc = N[2]+10*N[1]; // Transformação em dezena
 84 
 85              Ang = N[5]+10*N[4] + 100*N[3]; // Transformação em centena
 86 
 87              Serial.println(Veloc);
 88              Serial.println(Ang);
 89              pos = 0;
 90          }
 91 
 92      }
 93 
 94      if (stepper.isDone() && N[0] != -6)
 95      {
 96          stepper.setRPM(Veloc);       // Define a velocidade do motor
 97        stepper.setDirection(CW); //  Define o sentido de rotação (CW = Horário)
 98          stepper.rotateDegrees(Ang);  // Define o ângulo que vai girar
 99          Veloc = 0; // Para permitir a parada do motor
100          Ang = 0;
101      }
102 
103      if (stepper.isDone() && N[0] == -6)
104      {
105          stepper.setRPM(Veloc);       //  Define a velocidade do motor
106          stepper.setDirection(CCW);   //  Define o sentido de rotação (CCW = Anti-horário)
107          stepper.rotateDegrees(Ang);  //  Define o ângulo que vai girar
108          Veloc = 0;
109          Ang = 0;
110      }
111 
112      stepper.run();  //   Comando obrigatório para funcionamento da biblioteca
113 
114 
115  }
116 
117 


Carregado o programa, veremos o movimento do Motor de Passo com os comandos no formato de seis dígitos com a tecla “ # ” para finalizar a entrada.
Por exemplo:
Deseja-se girar 45° no sentido horário com uma velocidade de 5 RPM e, depois, no sentido anti-horário uma velocidade de 12 RPM com um ângulo de 180°.
Digita-se:
" 005045# " e depois "  *12180# ".
O asterisco no início indica o sentido anti-horário e o sentido horário pode ser qualquer outra tecla.

Nenhum comentário:

Postar um comentário