Nema17 + Controlador A4988 + RFID RC522 + Arduino Nano

Hola amigos, en este nuevo tutorial queremos compartir con ustedes nuestro ejemplo de como poner en funcionamiento un motor paso a paso bipolar de referencia Nema 17 conectado a un cotrolador A4988 mediante un lector RFID RC522 tan solo con una tarjeta BIP o cualquier tarjeta bancaria u otra tarjeta o llavero que emita una frecuencia de 13.56 Mhz; todo esto dirigido por un Arduino Nano.

El RC522 está diseñado para escribir o leer datos de aplicaciones de bajoc consumo de energia y todo esto a un bajo costo, ideal para dispositivos portatiles y tiene por caracteristicas lo siguiente:

  1. Corriente de operación: 13-26mA a 3.3V
  2. Corriente de standby: 10-13mA a 3.3V
  3. Corriente de sleep-mode: <80µA
  4. Corriente máxima: 30mA
  5. Frecuencia de operación: 13.56Mhz
  6. Distancia de lectura: 0 a 60mm
  7. Protocolo de comunicación: SPI
  8. Velocidad de datos máxima: 10Mbit/s

 

 

En el Diagrama podemos ver como conectamos el controlador A4988 al arduino
Detalle del controlador A4988 y sus conexiones.

pololuA4988

 

Este codigo basicamente trata de que al acercar la tarjeta BIP o la que estemos usando al RC522 un Led se encenderá haciendo girar el motor Nema 17 y no se apagará hasta que el motor regrese a su estado inicial manteniendo un completo descanso, lo cual le otorga un buen cuidado al motor y a su vez al controlador, la idea surge empezando por acercar la tarjeta al RC522, posteriormente encendiendo un Led y por ultimo el presente codigo´, esperamos sea de mucha utilidad.

Librerias:

SPI-master

rfid-master

Codigo:

#include <SPI.h>
#include <MFRC522.h>
int steps = 8;
int direccion = 7;
int reset = 5;
int pasos = 4000;

#define VELOCIDAD 1700

#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance

void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println(F(«Ingrese Tarjeta para Escribir Dato Personal»));
pinMode(4, OUTPUT);
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
pinMode(reset, OUTPUT);
}

void loop() {
//Activar una direccion y fijar la velocidad con stepDelay

// Giramos 200 pulsos para hacer una vuelta completa
digitalWrite(4, LOW);
// Prepare key – all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
MFRC522::MIFARE_Key key;

for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

if (  mfrc522.PICC_IsNewCardPresent()) {

digitalWrite(4, HIGH);
Serial.println(F(«Lectura Confirmada»));

digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(100);
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, HIGH);

for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
{
digitalWrite(steps, HIGH); // This LOW to HIGH change is what creates the
digitalWrite(steps, LOW); // al A4988 de avanzar una vez por cada pulso de energia.
delayMicroseconds(VELOCIDAD); // Regula la velocidad, cuanto mas bajo mas velocidad.

}

digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(500);
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, LOW);

for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
{

digitalWrite(steps, LOW); // LOW to HIGH hace que el motor avance ya que da la orden
digitalWrite(steps, HIGH); // al A4988 de avanzar una vez por cada pulso de energia.
delayMicroseconds(VELOCIDAD); // Regula la velocidad, cuanto mas bajo mas velocidad.
}

digitalWrite(reset, LOW);

//delay(500);

return;
}
// Look for new cards

digitalWrite(4, LOW);
}