☛ 功能说明

利用串列埠传输键盘按键值来控制步进马达的转向及转速。使用键盘按键控制步进马达,其中 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;
        }
    }
}