使用Arduino+L298N控制光驱两项四线步进电机

使用Arduino+L298N控制光驱两项四线步进电机

一、所需配件

  1. Arduino 开发板 x1

    image-20220120143349053

  2. L298N步进电机驱动模块 x2

    image-20220120143448412

  3. 5V电源模块 x1

  4. 12V电源 x2

  5. 杜邦线(公对母) x15

    image-20220120143635712

  6. 其他铜导线 x10

    点击查看图片来源

  7. 红波按钮 x1

    image-20220120143911285

  8. 光驱步进电机 x2

    image-20220120144103514

  9. 激光头 x1

    image-20220120144213022


二、步进电机与L298N接线说明

  1. 电机按下图摆放,4根线依次命名1、2、3、4

    image-20220120150035612

  2. L298N模块按下图摆放,电机的1、2、3、4分别与L298N的1、2、3、4相对应

    image-20220120150736521


三、L298N与Arduino开发板接线说明

  1. 将第一块L298N的IN1~IN4分别连接Arduino的2、3、4、5,如下图:

    image-20220120155212507

    image-20220120154944310

  2. 第二块L298N同理,IN1~IN4分别连接Arduino的6、7、8、9,如下图:

    image-20220120155516596


四、激光头与Arduino接线说明

  1. 激光头有三根线,分别标号1、2、3,其中1为电源正极,2为电源负极,3为信号控制,如图:

    image-20220120155910363

  2. 将1电源正极接入Arduino的5V,2接Arduino的GND,3接Arduino的10,如图:

    image-20220120160240093


五、红波按钮与Arduino接线说明

  1. 红波按钮未到,暂未调试……
  2. 将普通开关的其中一条线接入Arduino12号引脚,另一根线与GND相连

六、控制代码

已烧制,运维人员无需关心

int IN1 = 2; //定义L298N-1控制引脚
int IN2 = 3;
int IN3 = 4;
int IN4 = 5;

int IN5 = 6; //定义L298N-2控制引脚
int IN6 = 7;
int IN7 = 8;
int IN8 = 9;
int switchPin = 12;   // 开关引脚
int ledPin = 10;      // 激光灯引脚
int waitTime = 40;    // 电机转动速度
int moveLen = 10;     // 移动长度
int ledLight = 255;   // 激光头亮度值 0~255
void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  
  pinMode(IN5, OUTPUT);
  pinMode(IN6, OUTPUT);
  pinMode(IN7, OUTPUT);
  pinMode(IN8, OUTPUT);
  pinMode(switchPin, INPUT_PULLUP);  //使用该内部上拉电阻
  Serial.begin(9600); 
}

void loop() {
   int switchStatus = digitalRead(switchPin);
   if (switchStatus == LOW) {
     // 开关被按下,激光灯亮起,电机正转然后反转,激光灯熄灭
     analogWrite(ledPin, ledLight);
     for(int i = 0; i < moveLen; i++) {
        go(); 
     }
     for(int i = 0; i < moveLen; i++) {
        back(); 
     }
     analogWrite(ledPin, 0);
   }
   
}

void go() {
   digitalWrite(IN2, HIGH);
   delay(waitTime);
   cleanOne();
   digitalWrite(IN4, HIGH);
   delay(waitTime);
   cleanOne();
   digitalWrite(IN1, HIGH);
   delay(waitTime);
   cleanOne();
   digitalWrite(IN3, HIGH);
   delay(waitTime);
   cleanOne();  

   // 控制第二个电机
   digitalWrite(IN6, HIGH);
   delay(waitTime);
   cleanTwo();
   digitalWrite(IN8, HIGH);
   delay(waitTime);
   cleanTwo();
   digitalWrite(IN5, HIGH);
   delay(waitTime);
   cleanTwo();
   digitalWrite(IN7, HIGH);
   delay(waitTime);
   cleanTwo(); 
}


void back() {
   digitalWrite(IN3, HIGH);
   delay(waitTime);
   cleanOne();  
   digitalWrite(IN1, HIGH);
   delay(waitTime);
   cleanOne();
   digitalWrite(IN4, HIGH);
   delay(waitTime);
   cleanOne();
   digitalWrite(IN2, HIGH);
   delay(waitTime);
   cleanOne();

   // 控制第二个电机
   digitalWrite(IN7, HIGH);
   delay(waitTime);
   cleanTwo();  
   digitalWrite(IN5, HIGH);
   delay(waitTime);
   cleanTwo();
   digitalWrite(IN8, HIGH);
   delay(waitTime);
   cleanTwo();
   digitalWrite(IN6, HIGH);
   delay(waitTime);
   cleanTwo();
}

void cleanOne() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void cleanTwo() {
  digitalWrite(IN5, LOW);
  digitalWrite(IN6, LOW);
  digitalWrite(IN7, LOW);
  digitalWrite(IN8, LOW);
}

七、运行效果

预览效果


八、实物图

image-20220120163514979

版权声明:本文为CSDN博主「YoungJ5788」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaoyajie1011/article/details/122604988

生成海报
点赞 0

YoungJ5788

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

数码管轮播显示

硬件: 数码管10个引脚,8个控制二极管亮、灭,2个引脚为负极。1k欧电阻链接负极,接gnd。 将8个二极管引脚依次链接0-7号引脚。 软件: /*共阳极单数码管显示&

pwm电机调速的原理介绍与代码实现

1、pwm实现调速的原理与介绍 PWM(Pulse Width Modulation)脉冲宽度调制。 1)占空比 pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。 通过调节PWM的占空比就能调节IO口上电压的持续