一、工具
1、Arduino UNO
2、ULN2003步进电机驱动板
3、步进电机
二、参数(数据来自七星虫官网):
直径:28mm
电压:5V
步进角度:5.625 x 1/16
减速比:1/16
注:5线4相可以用普通uln2003芯片驱动,也可以接成2相使用,可以配套开发板使用。
三、接线
1、步进电机可以直接插入驱动板接口
2、驱动板正极、负极、IN1、IN2、IN3、IN4分别接Arduino VCC、GND、引脚8、9、10、11,然后通过专门的数据线将Arduino与电脑连在一起
三、程序功能
1、通过调用步进电机库文件控制步进电机正反转
2、代码
//初始化
#include<Stepper.h>
const int stepsPerRevolution = 200; //定义200步/转
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
//定义引脚为8,9,10,11(可根据实际情况自行改变)
void setup() {
myStepper.setSpeed(60);// 设置速度为60转/分钟
Serial.begin(9600);//初始化串口
}
//循环
void loop() {
Serial.println("clockwise");//顺时针旋转
myStepper.step(stepsPerRevolution);//控制步进电机开始旋转
delay(500);//延时500ms
Serial.println("counterclockwise");//逆时针旋转
myStepper.step(-stepsPerRevolution);//stepsPerRevolution取反
delay(500);
}
四、扩展
身为一名技术宅,岂能简简单单就满足了,下面开始介绍步进电机另一种玩法
1、功能:通过串口控制步进电机正反转
2、代码
//初始化
int val;//定义变量
int Pin0 = 8;//定义数字接口
int Pin1 = 9;
int Pin2 =10;
int Pin3 = 11;
int t=1;
void setup() {
pinMode(Pin0, OUTPUT);//设置输出
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
Serial.begin(9600); // 初始化串口
}
//循环
void loop() {
char val;
while(1)
{
val = Serial.read();//读取串口
if(val!=-1)
{
switch(val)
{
case 'Z'://即如果在串口输入Z,步进电机正转,后期介绍手机通过蓝牙控制Arduino我会详细介绍
zheng();
delay(50);
break;
case 'F'://即如果在串口输入F,步进电机反转
fan();
delay(50);
break;
case 'T'://即如果在串口输入T,步进电机停止转动
ting();
delay(50);
break;
}
}
}}
void ting()
{//定义停止函数
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
Serial.println("stop");//显示“stop”字符串
}
void fan()
{
//定义反转函数
for(int i=100;i>0;i--)//通过循环控制旋转步数,“i”值可以自定义
{
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
delay(t);
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
delay(t);
}
Serial.println("counterclockwise");//显示“counterclockwise”字符串
}
void zheng()
{
//定义正转函数
for(int i=100;i>0;i--)
{
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
delay(t);
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
delay(t);
}
Serial.println("clockwise");//显示“clockwise”字符串
}
五、步进电机实际应用
1、用于一些有定位要求的场合,例如:线切割的工作台拖动,植毛机工作台(毛孔定位)等
2、广泛应用于ATM机、喷绘机、刻字机等设备
六、总结
通过前后代码对比你会发现,实现同样的功能,前面的代码要比后面的代码简洁的多,从这里我们可以看出Arduino库的强大之处,明天请跟随我一起走进Arduino库的世界,揭开其神秘的面纱。
参考来源:
3 电工学习网