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