Hi,
I trying to use my Arduino to get my 28BYJ-48 steppermotor to run at an exact speed. I thought i had written a code that does just that, but when i try to make it run at exactly 1rpm it keeps turning a bit too fast. Can you help me figure out what I'm doing wrong? I would like to keep the code as simple as possible since i have no programming experience and kind of understand this code.
Thanks!
Douwey
/*
Code om een BYJ48 stappenmotor per tijdseenheid een andere snelheid te laten draaien
*/
//sluit de stappenmotor als voglt aan
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 5
//beginwaarde voor de array
int i=0;
//beginwaarde voor verschilbepaling voor intervalberekening
long previousMillis = 0;
//bepaald interval waarmee de snelheid veranderd. LET OP! interval moet groter zijn dan 8x de hoogste waarde in lut!
int interval = 60000;
//array met delays tussen stappen
float lut[] = {
14.72,
14.72,
14.72,
14.72
};
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
// bepaald de tijd dat de arduino aanstaat in miliseconden
unsigned long currentMillis = millis();
//check of er meer dan de intervaltijd is verstreken
if(currentMillis - previousMillis > interval)
{
//zet de tijd vanwaar gemeten wordt weer op nul
previousMillis = currentMillis;
//gaat één waarde vErder in lut
i++;
}
//maakt de waarde in lut de delay tussen de stappen
float value = lut[i%3];
//beschrijft de stappen en de delay ertussen
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(value);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(value);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(value);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(value);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(value);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(value);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(value);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(value);
}