文章目录[隐藏]
使用Arduino+L298N控制光驱两项四线步进电机
一、所需配件
Arduino 开发板 x1
L298N步进电机驱动模块 x2
5V电源模块 x1
12V电源 x2
杜邦线(公对母) x15
其他铜导线 x10
红波按钮 x1
光驱步进电机 x2
激光头 x1
二、步进电机与L298N接线说明
-
电机按下图摆放,4根线依次命名1、2、3、4
-
L298N模块按下图摆放,电机的1、2、3、4分别与L298N的1、2、3、4相对应
三、L298N与Arduino开发板接线说明
-
将第一块L298N的IN1~IN4分别连接Arduino的2、3、4、5,如下图:
-
第二块L298N同理,IN1~IN4分别连接Arduino的6、7、8、9,如下图:
四、激光头与Arduino接线说明
-
激光头有三根线,分别标号1、2、3,其中1为电源正极,2为电源负极,3为信号控制,如图:
-
将1电源正极接入Arduino的5V,2接Arduino的GND,3接Arduino的10,如图:
五、红波按钮与Arduino接线说明
- 红波按钮未到,暂未调试……
- 将普通开关的其中一条线接入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);
}
七、运行效果
八、实物图
版权声明:本文为CSDN博主「YoungJ5788」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaoyajie1011/article/details/122604988
暂无评论