Necesitaba realizar un par de bobinas de miles de vueltas de alambre magneto muy fino para otro proyecto que tengo entre manos.
Hacer el bobinado a mano es una locura. Así que aprovechando que tengo un motor paso a paso como recambio de la impresora 3D y un arduino nano me dispuse a realizar esta bobinadora.
De momento tengo el arduino y el driver del motor puestos en una protoboard. Mas adelante tengo pensado imprimir una caja donde pueda esconder toda la electrónica y que tenga un display que muestre el nº de vueltas y el potenciométro para graduar la velocidad de giro.
En esta versión el nº de vueltas se puede conocer si el arduino se conecta al PC a traves del puerto serie y el IDE de arduino.
Para mover el motor NEMA 17 he seguido el tutorial de A.García en: http://diymakers.es/mover-motores-paso-paso-con-arduino/
y el esquema conexiones de yomaker:
http://yomaker.com/control-de-motor-paso-a-paso/
He eliminado el interruptor para cambiar de sentido porque no tenia espacio en la protoboard por eso hay dos línieas comentadas que hay que descomentar si se pone dicho botón.
El código de arduino que he usado és el siguiente:
#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
#define STEPS 800 //Ponemos el número de pasos que necesita para dar una vuelta. 800 en mi caso
int PIN_STEP = 3; // pin step del pololu
int PIN_DIRECTION = 9; // pin direccion del pololu
int potenciometro; // lectura del potenciometro
int boton = 7; //pin boton para cambiar sentido
int direccion =1; //sentido de giro
int contador =0; // contador del nº de vueltas
// Ponemos nombre al motor, el número de pasos y los pins de control
Stepper stepper(STEPS, PIN_DIRECTION, PIN_STEP); //Stepper nombre motor (número de pasos por vuelta, pins de control)
void setup()
{
// Velocidad del motor en RPM
stepper.setSpeed(100); //Establece la velocidad del motor en rotaciones por minuto ( RPM )
pinMode(boton, INPUT);
Serial.begin(9600);
}
void loop()
{
// int sentido = digitalRead(boton); // miramos si está pulsado el boton
// if(sentido==1) direccion *=-1; // si está pulsado cambiamos de dirección
potenciometro = analogRead(A0); // leemos el potenciometro
potenciometro = map(potenciometro,0,1024,10,300); // adaptamos el valor leido a un retardo
stepper.setSpeed(potenciometro); //Establece la velocidad del motor en rotaciones por minuto ( RPM )
//Girar una vuelta entera en un sentido
stepper.step(STEPS*direccion);
contador++;
Serial.println (contador);
}