arduino控制28byj48步进电机

写了一个arduino控制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);
}

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen953

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值