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



