写了一个arduino控制28byj48步进电机的程序。

主要用于下面这种五线四相步进电机:

arduino控制28byj48步进电机_28byj48

代码:

#include <Stepper.h>

// 这里设置步进电机旋转一圈是多少步
#define STEPS1 100
#define STEPS2 100
#define STEPS3 100

//定义限位开关引脚
//swit1为齿条触碰的限位开关
#define swit1 14
//swit2为升降平台触碰的限位开关
#define swit2 15

//设置步进电机的步数和引脚(就是注意点2里面说的驱动板上IN1~IN4连接的四个数字口)。

//引脚要互换,电机A
Stepper stepper1(STEPS1, 2, 3, 4, 5);

//引脚要互换,电机B
Stepper stepper2(STEPS2, 6, 7, 8, 9);

//引脚要互换,电机C
Stepper stepper3(STEPS3, 10, 11, 12, 13);


//限位开关判断按钮,如果未触发,返回true,如果触发,返回false

bool swit1_jc(){
if(digitalRead(swit1)==HIGH)
{
delay(3);
if(digitalRead(swit1)==HIGH)
{
Serial.println("swit 1 on");
return true;
}

else
return false;
}
return false;
}

bool swit2_jc(){
if(digitalRead(swit2)==HIGH)
{
delay(3);
if(digitalRead(swit2)==HIGH)
{
Serial.println("swit 2 on");
return true;
}

else
return false;
}
return false;
}

void setup()
{
// 初始化串口,用于调试输出信息
Serial.begin(9600);

for(int i=2;i<=13;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}

pinMode(swit1,INPUT);
pinMode(swit2,INPUT);

// 设置电机的转速:每分钟为90转
stepper1.setSpeed(90);
stepper2.setSpeed(90);
stepper3.setSpeed(90);
//齿条复位回去,首先把X放到B
while(!(swit2_jc()))
{
stepper2.step(1);
stepper3.step(-1);
delay(10);
}

//步进电机A复位,C跑到最底层
while(!(swit1_jc()))
{
stepper1.step(-1);
delay(10);
}

Serial.println("Init successful!");
}

void loop()
{
//电机A正转2048步,使得电机C跑到跟B一个平面
Serial.println("step 1");
stepper1.step(2048);
delay(500);
Serial.println("step 2");

//电机BC同时旋转,把齿条移出来放到C上
for(int i=0;i<=2048;i++)
{
stepper2.step(-1);
stepper3.step(1);
delay(10);
}

delay(500);
Serial.println("step 3");
//C跑到顶层
stepper1.step(2048);
//在顶层停留3秒
delay(3000);
//把C回来
stepper1.step(-2048);
Serial.println("step 4");
//齿条复位回去,首先把X送回B
while(!(swit2_jc()))
{
stepper2.step(-1);
stepper3.step(1);
delay(10);
}
Serial.println("step 5");
//步进电机A复位,回去
while(!(swit1_jc()))
{
stepper1.step(-1);
delay(10);
}

delay(500);
}