Buenas a todos...
Otra vez de regreso. Este fin de semana retome el proyecto y estube trabajando en dos cuestiones:
Por un lado segui intentando mejorar lo que venia haciendo con el Stepper Sanyo Unipolar, y el driver DVU6A80V. Con esta parte quede así:
int PA = 11;
int DIR = 8;
int EN = 10;
int pasos = 200;
int VELOCIDAD = 1100;
void setup() {
pinMode(PA, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(EN, OUTPUT);
}
void loop(){
digitalWrite(EN, HIGH);
digitalWrite(EN, LOW);
digitalWrite(DIR, HIGH);
for (int i = 0; i<pasos; i++){
digitalWrite(PA, HIGH);
digitalWrite(PA, LOW);
delayMicroseconds(VELOCIDAD);
}
delay(2000);
}
Este código funciona bien para lo que quiero, aunque me hubiera gustado tener más flexibilidad a la hora de modificar las velocidades.
Con AccelStepper estube haciendo algo pero sin resultados positivos:
#include <AccelStepper.h>
AccelStepper stepper(3, 8, 10, 12);
void setup()
{
stepper.setMaxSpeed(2000);
stepper.setSpeed(2000);
}
void loop(){
stepper.runSpeed();
}
La velocidad que alcanso es bastante considerable pero no me doy cuenta como hacer para que realice la misma rutina que con el otro code: una vuelta completa y parar 1second.
Hoy estube tratando de jugar con algunas cositas pero con el code anterior, es decir, sin la librería AccelStepper:
Le agregue un Pot y dos botones. La idea es regular la variacion de velosidad col el Pot y detener y encender el stepper con los bot. Hice esto:
int PA = 11;//pin pasos
int DIR = 8;//pin dirección
int EN = 10;//pin entrada
int pot;//Potenciometro
int detener=3;//pin boton para detener el stepper
int iniciar=4;//pin boton para encender el stepper
int pasos=200;//pasos de mi stepper(1.8)
int estado;//lo agregue por si las moscas pero no se si cumple alguna función
void setup() {
pinMode(detener,INPUT);
pinMode(iniciar,INPUT);
pinMode(PA, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(PA, LOW);//No se si esto es necesario, pero la idea es que el stepper se inicie parado
digitalWrite(DIR, LOW);
digitalWrite(EN, LOW);
}
void loop(){
pot = analogRead(A0); //Esto funciona de maravilla(mitigue la frustración un poco)
pot=map(pot, 0, 1023, 600, 1500);
boolean estado=digitalRead(iniciar);//Leemos el estado del pulsador.De acá para abajo no funciona nada
if(estado==HIGH)//Comparamos estado del pulsador. El boolean no use porque lo vi en algun ejemplo
{
//digitalWrite(EN, HIGH);
//digitalWrite(EN, LOW);
//digitalWrite(DIR, HIGH);
for (int i = 0; i<pasos; i++)
digitalWrite(PA, HIGH);
digitalWrite(PA, LOW);
delayMicroseconds(pot);
}
bolean estado=digitalRead(detener);//Leemos el estado del pulsador
if(estado==HIGH)//Comparamos estado del pulsador
{
digitalWrite(PA, LOW);
digitalWrite(PA, LOW);
}
}
Este lo utilice con algunas leves modificaciones y anda perfecto, pero no funcionan las velocidades:
/*
www.diymakers.es
by A.García
Mover motores paso a paso con Arduino
Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/
*/
#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
#define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso
// Ponemos nombre al motor, el número de pasos y los pins de control
Stepper stepper(STEPS, 8, 10, 9, 11); //Stepper nombre motor (número de pasos por vuelta, pins de control)
int pot; //Variable lectura potenciómetro
int derecha=3; //Pulsador derecha
int izquierda=4; //Pulsador izquierda
int direccion; //Variable para indicar la direccón
void setup()
{
pinMode(derecha,INPUT);
pinMode(izquierda,INPUT);
}
void loop()
{
pot=analogRead(A0); //Lectura potenciómetro
pot = map(pot, 0, 1023, 200, 300); //Establecemos la velocidad entre 30 y 150 rpm(?)
stepper.setSpeed(pot); //Indicamos la velocidad al motor
stepper.step(direccion); //Indicamos la dirección al motor
if(digitalRead(izquierda)==HIGH)
{
direccion=200; //Si pulsamos el pulsador izquierdo, el motor se enciende
}
if(digitalRead(derecha)==HIGH)
{
direccion=0; //Si pulsamos el pulsador derecho, el motor se apaga
}
}
Conclución: La versión sin la librería funcionaría perfecto si pudiera hacer funcionar los botones. Estaría bueno poder aprender como controlar los pasos y los intervalos en la versión con la AccelStepper. Por último, el sketch final sería el optimo si tan solo pudiera saber porque los interbalos de velocidades son tan pequeños(me refiero a que los balores del entorno van de 200 a 300 y funciona muy lento)