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.
Agora, monte o seguinte circuito:
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
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:
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:
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.
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