☛ 功能說明

利用串列埠傳輸鍵盤按鍵值來控制步進馬達的轉向及轉速。使用鍵盤按鍵控制步進馬達,其中 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;
        }
    }
}