Tutorial: Motor paso a paso unipolar 28BJY-48 con Arduino UNO

En este nuevo tutorial te enseñaremos el motor paso a paso unipolar 28BYJ-48

Este motor va junto con un módulo controlador con el chip ULN2003, es un motor pequeño y lo mas importante, a un precio muy asequible.

Los motores paso a paso son dispositivos electromagnéticos que convierten impulsos eléctricos en rotación, mediante un impulso estos motores avanzan un paso los cuales oscilan entre 1.8º y 90º todo esto dependiendo de la referencia de motor que tengamos, el 28BYJ-48 tiene un paso de 5.625º por paso, lo que se traduce en que es un motor de 64 pasos por vuelta.

Características del 28BYJ-48:

Voltaje: 5 VDC
Número de Fases: 4
Resistencia: 50Ω ± 7%
Torque: 34.3 N
consumo: 55 mah

Estos motores funcionan con 4 bobinas las cuales son excitadas secuencialmente para el movimiento del eje, en este ejemplo el código se ha realizado para hacer medios pasos; estos consisten basicamente en activar la bobina 1, después la 1 con la 2, luego la 2, la 2 con la 3 y así hasta completar el ciclo con la bobina 4 y volver a partir desde la 1, el nombre de esta secuencia es “Half-step”.

Existen otros tipos de secuencias, las diferencias entre si son la cantidad de bobinas excitadas a la vez, la velocidad, el consumo, entre otras.


↑↑ Stepper 28BYJ-48 con el controlador ULN2003 en su módulo ↑↑

↑↑ Módulo con controlador ULN2003 ↑↑

Características del chip ULN2003:

Corriente de salida: 0.5A
Tensión de salida: 2-50V
Número de canales: 7
Temperatura de trabajo: -40 a 85°C
Tensión de entrada: 30V

↑↑ ULN2003 ↑↑

 ↑↑ Puertos ULN2003 ↑↑

 

Cabe resaltar que existen dos referencias en este controlador, el ULN2003APG y el ULN2003A, entre ambas no existe ningún tipo de diferencia en su funcionamiento, modo de uso o conexiones.

Para este tutorial utilizaremos:

1 Arduino Uno R3 + Cable USB

1 Motor paso a paso unipolar 28BYJ-48

↑↑ Vista 1, conexión ↑↑

↑↑ Vista 2, conexión ↑↑

↑↑ Vista 3, conexión ↑↑

 

El codigo es el siguiente:


int motorPin1 = 8; // Azul - 28BYJ48 pin 1 motor
int motorPin2 = 9; // Rosa - 28BYJ48 pin 2 motor
int motorPin3 = 10; // Amarillo - 28BYJ48 pin 3 motor
int motorPin4 = 11; // Naranja - 28BYJ48 pin 4 motor
// Rojo - 28BYJ48 pin 5 (VCC) motor

int motorSpeed = 1200; //variable para fijar la velocidad del motor (el retraso entre cada secuencia)
int count = 0; // cuenta de los pasos dados
int countsperrev = 512; // número de pasos por vuelta completa
int lookup[8] = {B01000,B01100,B00100,B00110,B00010,B00011,B00001,B01001};

void setup() {
//declare the motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}

void loop(){
if(count < countsperrev )
clockwise(); //sentido agujas del reloj
else if (count == countsperrev * 2)
count = 0;
else
anticlockwise(); //sentido antihorario
count++;
}

//creación funciones giro horario y antihorario
void anticlockwise()
{
for(int i = 0; i < 8; i++) { setOutput(i); delayMicroseconds(motorSpeed); } } void clockwise() { for(int i = 7; i >= 0; i--)
{
setOutput(i);
delayMicroseconds(motorSpeed);
}
}

void setOutput(int out) //función secuencia giro
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));
digitalWrite(motorPin2, bitRead(lookup[out], 1));
digitalWrite(motorPin3, bitRead(lookup[out], 2));
digitalWrite(motorPin4, bitRead(lookup[out], 3));
}

Stepper motor unipolar driver 28byj

Referencias:

El cajón de ardu

Toshiba (ULN2003APG)

Prometec

 

Tutorial: Sensor LDR con Arduino UNO

En este nuevo tutorial queremos enseñarte las características y el uso de los sensores fotoeléctricos, los fotosensores o simplemente los sensores LDR.

Este tipo de sensores responden al cambio en la intensidad de la luz; el LDR (Light Dependant Resistor) es el mas común dentro de lo que son los sensores fotoeléctricos.

A continuación veremos el uso como tal del sensor LDR, posterior a esto puedes entrar a jugar con leds, zumbadores o cualquier otro tipo de componente que le quieras añadir.

Para esto usaremos:

Mediante la siguiente conexión:

Imagen 1 (Esquema protoboard con LDR y arduino UNO)

Imagen 2 (Conexión LDR a los pines del Arduino UNO)

En la variable LDR guardaremos la información o los valores que irá recibiendo el sensor respecto a los cambios de luz para posteriormente mostrarlos por el monitor serial.

 


// Declaramos la variable en la que vamos a almacenar todos los distintos valores recibidos por el sensor.
int LDR;

void setup(){
Serial.begin(9600);
}

void loop(){
// Recibo el valor del pin analogico 0.
sensorLDR = analogRead(0);

// Lo muestro en el monitor serial.
Serial.print("Valor del sensor LDR: ");
Serial.println(LDR);

// Hago una pausa de 100 milisegundos.
delay(100);
}

Esto es todo por el momento, como lo mencionamos anteriormente, si deseas agregar a este circuito un piezo o led no es nada complicado, solo es cuestión de agregar un par de lineas en el código.

¡Saludos!

 

Para mas tutoriales puedes seguirnos por nuestra pagina en Facebook
o visita nuestra tienda www.somosmakers.cl

 

Referencias:

Wikipedia

Untitled.es

Arduino Nano + Sensor Ultrasonico HC-SR004 + LED

El HC-SR04 es un sensor de distancias por ultrasonidos (los cuales viajan a una velocidad de 340 m/s) capaz de detectar objetos y calcular la distancia a la que se encuentra en un rango de 2 a 450 cm; Contiene toda la electrónica encargada de hacer la medición. Es un simple y efectivo sistema compuesto por dos cilindros donde uno es quien envía la señal ultrasónica (emisor) mientras el otro es quien la recibe (receptor); funciona con 5v y con una señal de 40 KHz.

En este sencillo tutorial queremos explicar el breve funcionamiento del sensor ultrasónico con el uso de la librería NewPing con el fin de encender un led siempre y cuando la distancia que capte el sensor sea menor a la que nosotros coloquemos en el código.

 

La conexión es la siguiente:

 

HC-SR04 (Esquema en Fritzing)

NewPing_v1.8 (Librería)

El código para la anterior conexión es el siguiente:

#include <NewPing.h>

#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

const int buttonPin = 7;

int buttonState = 0;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(buttonPin, INPUT);

}

void loop() {
delay(1000);
int uS = sonar.ping_median();
Serial.print("Distancia: ");
Serial.print(uS / US_ROUNDTRIP_CM);
Serial.println("cm");
buttonState = digitalRead(buttonPin);

if (uS / US_ROUNDTRIP_CM<50) {
digitalWrite(9, HIGH);
delay(500);
(buttonState == HIGH);
digitalWrite(12, HIGH);




}
else {
digitalWrite(9, LOW);
delay(500);
digitalWrite(12, LOW);

}

}

En la línea 28 del código podemos cambiar la distancia que el sensor perciba para que se pueda activar el Led, o un zumbador, o cualquier otro dispositivo añadiendo algunas líneas de programación y librerías dependiento al caso que sea necesario, todo esto depende solo de su imaginación.

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);
}