使用Arduino L298N控制光驱两项四线步进电机
一、所需配件
步进电机和L298N接线说明
-
电机按下图摆放,4根线依次命名1、2、3、4
-
L298N按下图放置模块,电机1、2、3、4分别与L298N1、2、3、4对应
三、L298N与Arduino开发板接线说明
-
将第一块L298N的IN1~IN4分别连接Arduino如下图所示:
-
第二块L298N同理,IN1~IN4分别连接Arduino如下图所示:
四、激光头与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); }
七、运行效果
预览效果