☛ 功能说明
利用串列埠传输键盘按键值来控制步进马达的转向及转速。使用键盘按键控制步进马达,其中 0~9 键设定马达的转动方向或速度,r 键 ( right turn ) 使马达正转设定的步进数,l 键 ( left turn ) 使马达反转设定的步进数,s 键 ( speed ) 设定马达转速度 ( 单位:RPM )。例如键盘输入 60s 时,表示设定马达转速为 60 RPM;输入 100r 时,马达正转 100 步后停止;输入 50l 时,马达开始反转 50 步后停止。
PS.
输入 64s4096l2048r 步进马达将设置 64RPM 后,左转二圈,接着右转一圈。
☛ 使用材料
Arduino UNO R3 开发板 × 1、ULN2003 步进马达控制模块 × 1、步进马达 28BYJ-48 × 1。
☛ 电路图及面包板接线图
☛ 程式码
#include <Stepper.h> //使用 Stepper.h 函式库 #define STEPS 200 //步进马达每圈步进数 Stepper stepper(STEPS, 2, 4, 3, 5); //建立 Steeper 资料形态的物件 int steps = 0; //步进数 char ch; //按键值 void setup() { stepper.setSpeed(1); //设定步进马达的转速为 1 RPM Serial.begin(9600); //初始化串列埠,鲍率为 9600 bps Serial.println("Press 0-9: setting steps"); Serial.println("Press s:Setting speed ( default value 1 RPM"); Serial.println("Press r: Right Turn"); Serial.println("Press l: Left Turn"); } void loop() { if(Serial.available()) //按下任意键? { ch = Serial.read(); //读取按键值 if(ch>='0' && ch<='9') //按键值为 0-9 steps = steps*10+ch-'0'; //加权储存 else if(ch=='r') //键值为 r (右转) { Serial.print("Setting Right Turn Steps:"); Serial.println(steps); //显示正转总步数 steps stepper.step(-1*steps); //马达正转 steps 步 steps=0; //清除 steps } else if(ch=='l') //键值为 l (左转) { Serial.print("Setting Left Turn Steps:"); Serial.println(steps); //显示反转总步数 steps stepper.step(steps); //马达反转 steps 步 steps=0; //清除 steps } else if(ch=='s') //键值为 s (设定转速) { Serial.print("Setting Speed:"); Serial.print(steps); //显示所设定的马达转速 Serial.println(" RPM"); stepper.setSpeed(steps); //设定马达转速 (单位:RPM) steps=0; } } }
☛ 练习
⑴ 设计 Arduino 程式,利用键盘来控制步进马达。数字 0~9 键设定马达的转动方向或速度;r 键使马达正转设定步数;l 键使马达反转设定步数;s 键设定马达转动速度 ( 单位:RPM );e 键使马达停止转动。
#include <Stepper.h> //使用 Stepper.h 函式库 #define STEPS 200 //步进马达每圈步进数 Stepper stepper(STEPS, 2, 4, 3, 5); //建立 Steeper 资料形态的物件 int steps = 0; //步进数 char ch; //按键值 void setup() { stepper.setSpeed(1); //设定步进马达的转速为 1 RPM Serial.begin(9600); //初始化串列埠,鲍率为 9600 bps Serial.println("Press 0-9: setting steps"); Serial.println("Press s:Setting speed ( default value 1 RPM"); Serial.println("Press r: Right Turn"); Serial.println("Press l: Left Turn"); } void loop() { if(Serial.available()) //按下任意键? { ch = Serial.read(); //读取按键值 switch(ch) { case '0': //按键值为 0-9 case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': steps = steps*10+ch-'0'; //加权储存 break; case 'r': //键值为 r (右转),并显示正转总步数 Serial.print("Setting Right Turn Steps:"); Serial.println(steps); //显示正转总步数 steps stepper.step(-1*steps); //马达正转 steps 步 steps=0; //清除 steps break; case 'l': //键值为 l (左转),并显示反转总步数 Serial.print("Setting Left Turn Steps:"); Serial.println(steps); //显示反转总步数 steps stepper.step(steps); //马达反转 steps 步 steps=0; //清除 steps break; case 's': //键值为 s (设定转速) Serial.print("Setting Speed:"); Serial.print(steps); //显示所设定的马达转速 Serial.println(" RPM"); stepper.setSpeed(steps); //设定马达转速 (单位:RPM) steps=0; break; case 'e': steps=0; break; } } }