El Código
​
//------------------------------------------------------------------------------------------------------------------
#include <Keypad.h>
//------------------------------------------------------------------------------------------------------------------
const byte Filas = 4;
const byte Columnas = 4;
//------------------------------------------------------------------------------------------------------------------
const int Direccion = 10;
const int Step = 11;
//------------------------------------------------------------------------------------------------------------------
int LedGira = 13;
int Habilitador = 12;
int Pulsos = 1;
int Vueltas = 0;
int TiempoStep = 1250; // Velocidad en el giro MicroPasos 000 = 500 a 1500 aprox.
//------------------------------------------------------------------------------------------------------------------
byte PinesFilas[] = {9, 8, 7, 6}; //Pines Arduino para las filas.
byte PinesColumnas[] = {5, 4, 3, 2}; // Pines Arduino para las columnas.
byte NumeroDigitos = 0;
//------------------------------------------------------------------------------------------------------------------
char Pulsacion;
//------------------------------------------------------------------------------------------------------------------
String PinTecleado = "";
String ClaveCorrecta3600 = "3600";
String ClaveCorrecta3240 = "3240";
String ClaveCorrecta2880 = "2880";
String ClaveCorrecta2520 = "2520";
String ClaveCorrecta2160 = "2160";
String ClaveCorrecta1800 = "1800";
String ClaveCorrecta1440 = "1440";
String ClaveCorrecta1080 = "1080";
String ClaveCorrecta0720 = "0720";
String ClaveCorrecta0360 = "0360";
String ClaveCorrecta0315 = "0315";
String ClaveCorrecta0270 = "0270";
String ClaveCorrecta0225 = "0225";
String ClaveCorrecta0180 = "0180";
String ClaveCorrecta0135 = "0135";
String ClaveCorrecta0090 = "0090";
String ClaveCorrecta0045 = "0045";
String ClaveCorrecta0022 = "0022";
String ClaveCorrecta0011 = "0011";
String ClaveCorrecta0006 = "0006";
String ClaveCorrecta0003 = "0003";
String ClaveCorrecta0001 = "0001";
//------------------------------------------------------------------------------------------------------------------
char Teclas [Filas][Columnas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
//------------------------------------------------------------------------------------------------------------------
Keypad Teclado1 = Keypad(makeKeymap(Teclas), PinesFilas, PinesColumnas, Filas, Columnas);
//------------------------------------------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
Serial.println("Pulsar (*) Selecciona el Giro Izquierdo.");
Serial.println("Pulsar (#) Selecciona el Giro Derecho.");
Serial.println("Introduzca Grados de Giro: Pulsar los digitos del 0 al 9, deben tener 4 digitos.");
Serial.println("Pulsar (C) Para corregir el ultimo numero pulsado.");
Serial.println("Pulsar (D) Para corregir todo los numeros pulsado.");
Serial.println("Pulsar (A) Para validar los Grados.");
Serial.println("Grados Posibles: 3600, 3240, 2880, 2520, 2160, 1800, 1440, 1080, 0720, 0360, 0315, 0270, 0225, 0180, 0135, 0090 , 0045, 0022, 0011, 0006, 0003, 0001 ");
//------------------------------------------------------------------------------------------------------------------
pinMode(Habilitador, OUTPUT);
pinMode(LedGira, OUTPUT);
pinMode(Direccion, OUTPUT);
pinMode(Step, OUTPUT);
digitalWrite(Habilitador, HIGH);
digitalWrite(Direccion, LOW);
}
//------------------------------------------------------------------------------------------------------------------
void loop() {
Pulsacion = Teclado1.getKey();
if (Pulsacion) {
if (Pulsacion == '*') {
digitalWrite(Direccion, HIGH);
Serial.print("Giro (Izquierdo)" );
}
if (Pulsacion == '#') {
digitalWrite(Direccion, LOW);
Serial.print("Giro (Derecho)" );
}
if (Pulsacion >= '0' && Pulsacion <= '9' && NumeroDigitos < 4) {
NumeroDigitos ++;
PinTecleado += Pulsacion;
Serial.print(Pulsacion);
}
if (Pulsacion == 'C' && NumeroDigitos > 0) {
NumeroDigitos --;
PinTecleado = PinTecleado.substring(0, NumeroDigitos);
Serial.println();
Serial.print(PinTecleado);
}
if (Pulsacion == 'D') {
NumeroDigitos = 0;
PinTecleado = "";
Serial.println();
}
if (Pulsacion == 'A') {
Serial.println();
if (NumeroDigitos == 4) {
if (PinTecleado == ClaveCorrecta3600) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 2000 ; i++) {
Pasos();
} Serial.println("3600 Grados, 10 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta3240) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 1800 ; i++) {
Pasos();
} Serial.println("3240 Grados, 9 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta2880) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 1600 ; i++) {
Pasos();
} Serial.println("2880 Grados, 8 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta2520) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 1400 ; i++) {
Pasos();
} Serial.println("2520 Grados, 7 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta2160) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 1200 ; i++) {
Pasos();
} Serial.println("2160 Grados, 6 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta1800) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 1000 ; i++) {
Pasos();
} Serial.println("1800 Grados, 5 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta1440) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 800 ; i++) {
Pasos();
} Serial.println("1440 Grados, 4 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta1080) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 600 ; i++) {
Pasos();
} Serial.println("1080 Grados, 3 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0720) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 400 ; i++) {
Pasos();
} Serial.println("720 Grados, 2 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0360) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 200 ; i++) {
Pasos();
} Serial.println("360 Grados, 1 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0315) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 175 ; i++) {
Pasos();
} Serial.println("315 Grados, 7/8 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0270) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 150 ; i++) {
Pasos();
} Serial.println("270 Grados, 3/4 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0225) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 125 ; i++) {
Pasos();
} Serial.println("225 Grados, 5/8 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0180) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 100 ; i++) {
Pasos();
} Serial.println("180 Grados, 1/2 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0135) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 75 ; i++) {
Pasos();
} Serial.println("135 Grados, 3/8 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0090) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 50 ; i++) {
Pasos();
} Serial.println("90 Grados, 1/4 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0045) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 25 ; i++) {
Pasos();
} Serial.println("45 Grados, 1/8 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0022) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 12.5 ; i++) {
Pasos();
} Serial.println("22.5 Grados, 1/16 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0011) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 6.25 ; i++) {
Pasos();
} Serial.println("11.25 Grados, 1/32 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0006) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 3.125 ; i++) {
Pasos();
} Serial.println("6.25 Grados, 1/64 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0003) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 1.625 ; i++) {
Pasos();
} Serial.println("3.125 Grados, 1/128 vueltas");
} Deshabilita();
}
if (PinTecleado == ClaveCorrecta0001) {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * 0.78125 ; i++) {
Pasos();
} Serial.println("1.5625 Grados, 1/256 vueltas");
} Deshabilita();
}
if ( PinTecleado == ClaveCorrecta3600 || PinTecleado == ClaveCorrecta3240 || PinTecleado == ClaveCorrecta2880 || PinTecleado == ClaveCorrecta2520 || PinTecleado == ClaveCorrecta3600 || PinTecleado == ClaveCorrecta3240 || PinTecleado == ClaveCorrecta2880 || PinTecleado == ClaveCorrecta2520 || PinTecleado == ClaveCorrecta2160 || PinTecleado == ClaveCorrecta1800 || PinTecleado == ClaveCorrecta1440 || PinTecleado == ClaveCorrecta1080 || PinTecleado == ClaveCorrecta0720 || PinTecleado == ClaveCorrecta0360 || PinTecleado == ClaveCorrecta0315 || PinTecleado == ClaveCorrecta0270 || PinTecleado == ClaveCorrecta0225 || PinTecleado == ClaveCorrecta0180 || PinTecleado == ClaveCorrecta0135 || PinTecleado == ClaveCorrecta0090 || PinTecleado == ClaveCorrecta0045 || PinTecleado == ClaveCorrecta0022 || PinTecleado == ClaveCorrecta0011 || PinTecleado == ClaveCorrecta0006 || PinTecleado == ClaveCorrecta0003 || PinTecleado == ClaveCorrecta0001 )
{
Serial.print("Los Grados son correctos: "); Serial.print(PinTecleado); Serial.println(" Grados.");
}
else {
Serial.print("Los Grados NO son correctos: "); Serial.print(PinTecleado);; Serial.println(" Grados.");
}
PinTecleado = "";
NumeroDigitos = 0;
} else {
Serial.println ("Los Grados deben tener cuatro digitos");
Serial.print(PinTecleado);
}
}
}
}
//------------------------------------------------------------------------------------------------------------------
void Rutina() {
Habilita();
for (int i = 1; i <= 1 ; i++) {
for (int i = 0; i <= Pulsos * (200) ; i++) {
Pasos();
} Serial.println(Pulsos * (200));
} Deshabilita(); delay(1000);
}
//------------------------------------------------------------------------------------------------------------------
void Habilita() {
digitalWrite(LedGira, HIGH);
digitalWrite(Habilitador, LOW);
}
//------------------------------------------------------------------------------------------------------------------
void Deshabilita() {
digitalWrite(LedGira, LOW);
digitalWrite(Habilitador, HIGH);
}
//------------------------------------------------------------------------------------------------------------------
void Pasos() {
digitalWrite(Step, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(Step, LOW);
delayMicroseconds(TiempoStep);
}
//------------------------------------------------------------------------------------------------------------------
Motor Paso a Paso, Angulo con Teclado Matricial.
​
​
​
​
Manejo de un Motor Paso a Paso.
Uso de Teclado Matricial 4 x 4, para el ingreso de grados de giro.
​
Materiales para el proyecto:
​
Arduino Uno.
Driver A4988
Motor Paso a Paso Nema 17.
1 Capacitor Electrolítico 1000uf 25V, Para La entrada de 12 Volts del A4988.
1 Resistencia de 1K ohm, Para el Led Rojo.
1 Led Rojo. Para Aviso de Giro.
1 Teclado Matricial 4 x 4.
Conexión:
​Pin 13 del Arduino al Led Rojo Aviso Giro.
Pin 12 del Arduino al Enable del A4988.
Pin 11 del Arduino al Step del A4988.
Pin 10 del Arduino al Dir del A4988.
A4988 : Reset y Sleeep Conectar en puente entre si.
A4988 : M1, M2, M3 Responsables de Micro Pasos no usaremos, dejarlos desconectados.
A4988 : A1, A2, B1 y B2 Conectar el Motor Nema 17.
A4988 : Alimentacion 0 y 5 Volts, 0 y 12 Volts.​
Teclado Matricial:
El 1° Pin de la derecha del Teclado Matricial al Pin 2 del Arduino.
El 2° Pin de la derecha del Teclado Matricial al Pin 3 del Arduino.
El 3° Pin de la derecha del Teclado Matricial al Pin 4 del Arduino.
El 4° Pin de la derecha del Teclado Matricial al Pin 5 del Arduino.
El 5° Pin de la derecha del Teclado Matricial al Pin 6 del Arduino.
El 6° Pin de la derecha del Teclado Matricial al Pin 7 del Arduino.
El 7° Pin de la derecha del Teclado Matricial al Pin 8 del Arduino.
El 8° Pin de la derecha del Teclado Matricial al Pin 9 del Arduino.
​
​
​
​









