Controlling a 28BYJ-48 Stepper Motor with Two Push Buttons to Set Speed (STPB-3)
This is the Arduino code to control the 28BYJ-48 stepper motor with two push buttons to control direction (clockwise and counter-clockwise) in one full revolution. The motor speed can be set in the code. Watch the video for details.318-Arduino code to control a 28BYJ-48 with a ULN2003 board using two push buttons (STPBP-3)
语言: C++
/*
* This is Arduino code to control a 28BYJ-48 with ULN2003 board using
2 push buttons to move the motor in one revolution in CW or CCW
This is video: STPBP-3
* Written by Ahmad Shamshiri for Robojax Robojax.com
* on April 18, 2020 at 19:59 in Ajax, Ontario, Canada
*
Watch the video instruction for this sketch: https://youtu.be/MEEKvjj7vbY
More videos and codes
STPB-1 Control Stepper 28BYJ-48 Push buttons using Arduino code CCW, CW STOP STPB-1
STPB-2 Controlling Position of 28BYJ-48 Stepper Motor with 2 Push buttons STPB-2
STPB-3 Controlling ONE Revolution of 28BYJ-48 Stepper Motor with 2 Push buttons STPB-3
STPB-4 Send 28BYJ-48 Stepper Motor to any Angle with 3 Push buttons STPB-4 CW, CCW and STOP
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
*
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int Pin1 = 10;//IN1 is connected to 10
int Pin2 = 11;//IN2 is connected to 11
int Pin3 = 12;//IN3 is connected to 12
int Pin4 = 13;//IN4 is connected to 13
int switchCW =2;//define input pin for CW push button
int switchCCW =3;//define input pin for CCW push button
int speedFactor =1;//1=fastest, 2=slower or 3 more slower
int correction_CW = 150;
int correction_CCW = 150;
const int CW =1;
const int CCW =2;
const int STOP =3;
int poleStep = 0;
const int SPR=64*64;
int pole1[] ={0,0,0,0, 0,1,1,1, 0};//pole1, 8 step values
int pole2[] ={0,0,0,1, 1,1,0,0, 0};//pole2, 8 step values
int pole3[] ={0,1,1,1, 0,0,0,0, 0};//pole3, 8 step values
int pole4[] ={1,1,0,0, 0,0,0,1, 0};//pole4, 8 step values
int count=0;
int dirStatus = STOP;// stores direction status 3= stop (do not change)
void setup()
{
//Robojax.com Stepper Push button One Revolution STPB-3
Serial.begin(9600);
Serial.print("Robojax Video for Stepper Motor STPB-3");
pinMode(Pin1, OUTPUT);//define pin for ULN2003 in1
pinMode(Pin2, OUTPUT);//define pin for ULN2003 in2
pinMode(Pin3, OUTPUT);//define pin for ULN2003 in3
pinMode(Pin4, OUTPUT);//define pin for ULN2003 in4
pinMode(switchCW,INPUT_PULLUP);
pinMode(switchCCW,INPUT_PULLUP);
}
void loop()
{
//Robojax.com Stepper Push button One Revolution STPB-3
if(digitalRead(switchCCW) == LOW)
{
dirStatus =CCW;
count =0;
}else if(digitalRead(switchCW) == LOW)
{
dirStatus = CW;
count =0;
}
if(digitalRead(switchCW) == LOW && digitalRead(switchCCW) == LOW)
{
dirStatus = STOP;
delay(200);
}
if(dirStatus ==CW){
poleStep++;
count++;
if(count+correction_CCW <= SPR)
{
driveStepper(poleStep);
}else{
driveStepper(8);
}
}else if(dirStatus ==CCW){
poleStep--;
count++;
if(count+correction_CW <=SPR)
{
driveStepper(poleStep);
}else{
driveStepper(8);
}
}else{
driveStepper(8);
}
if(poleStep>7){
poleStep=0;
}
if(poleStep<0){
poleStep=7;
}
delay(speedFactor);
//Robojax.com Stepper Push button One Revolution STPB-3
}// loop
/*
* @brief moves motor to specific angle
* @param "angle" is integer representing the angle
* @return does not return anything
*
* www.Robojax.com code April 19 2020 at 01:22 in Ajax, Ontario, Canada
*/
void driveStepper(int c)
{
digitalWrite(Pin1, pole1[c]);
digitalWrite(Pin2, pole2[c]);
digitalWrite(Pin3, pole3[c]);
digitalWrite(Pin4, pole4[c]);
if(c ==8)
{
digitalWrite(switchCW, HIGH);
digitalWrite(switchCCW, HIGH);
}
}//driveStepper ends here
资源与参考
尚无可用资源。
文件📁
没有可用的文件。