
☛ 功能說明
利用 Arduino UNO 開發板控制直流馬達轉動速度。 由 Serial Monitor 視窗傳送命令控制馬達轉速,當輸入 ” + ” 鍵時,馬達加速,當輸入 ” – ” 鍵時,馬達減速。 馬達轉速可以使用 analogWrite() 函式輸出 PWM 信號,改變 value 參數的大小,得到不同的平均直流電壓,即可達到控制馬達轉速的目的。

☛ 使用材料
Arduino UNO R3 開發板 × 1、1N4001 二極體 × 1、C9013 電晶體 × 2、5V 直流馬達 × 1、10KΩ 電阻 × 1。
☛ 電路圖及麵包板接線圖


☛ 程式碼
const int motorPin = 3; //類比接腳 3 連接馬達控制腳
int speed = 10; //馬達初速
void setup()
{
Serial.begin(9600); //初始化串列埠,鮑率為 9600bps
Serial.println("Press '+' : Speed Up"); //按 '+' 鍵,馬達加速
Serial.println("Press '-' : Slow up"); //按 '-' 鍵,馬達減速
}
void loop()
{
if(Serial.available()) //按任意鍵?
{
char key=Serial.read(); //讀取按鍵值
if(key=='+') //按 '+' 鍵
speed=speed+10; //按 '+' 鍵,馬達加速一級
if(speed>250) //已經達到最高速?
speed=250; //維持最高速
else if(key=='-') //按 '-' 鍵
speed=speed-10; //按 '-' 鍵,馬達減速一級
if(speed<10) //已經達到最低速?
speed=10; //維持最低速
analogWrite(motorPin,speed); //驅動馬達轉動
}
}
☛ 練習
㈠ 設計 Arduino 程式,使用 Serial Monitor 視窗控制直流馬達產生停止、低速、中速、高速四段轉速控制。
const int motorPin = 3; //類比接腳 3 連接馬達控制腳
int speed = 0; //馬達初速
char key; //讀取按鍵值
void setup()
{
Serial.begin(9600); //初始化串列埠,鮑率為 9600bps
Serial.println("Press 'S' : Stop"); //按 'S' 鍵,馬達停止
Serial.println("Press 'L' : Low speed"); //按 'L' 鍵,馬達低速
Serial.println("Press 'M' : Medium speed"); //按 'M' 鍵,馬達中速
Serial.println("Press 'H' : High speed"); //按 'H' 鍵,馬達高速
}
void loop()
{
if(Serial.available()) //按任意鍵?
key=Serial.read(); //讀取按鍵值
switch(key)
{
case 'S':
case 's': speed=0; //馬達停止轉動
break;
case 'L':
case 'l': speed=80; //馬達低速轉動
break;
case 'M':
case 'm': speed=160; //馬達中速轉動
break;
case 'H':
case 'h': speed=250; //馬達高速轉動
break;
}
analogWrite(motorPin,speed); //驅動馬達轉動
}
㈡ 設計 Arduino 程式,使用 Serial Monitor 視窗控制直流馬達產生停止、低速、中速、高速及自然風等五段風速。 ( 自然風一般都是陣性風,時弱時強。 當一股較強陣風吹來,人體上的熱量或汗液便被風 ” 吹走 “,感覺涼快,這樣反反覆複,陣風習習,使人覺得特別涼快。 )
const int motorPin = 3; //類比接腳 3 連接馬達控制腳
int speed = 0; //馬達初速
char key; //讀取按鍵值
void setup()
{
Serial.begin(9600); //初始化串列埠,鮑率為 9600bps
Serial.println("Press 'S' : Stop"); //按 'S' 鍵,馬達停止
Serial.println("Press 'L' : Low speed"); //按 'L' 鍵,馬達低速
Serial.println("Press 'M' : Medium speed"); //按 'M' 鍵,馬達中速
Serial.println("Press 'H' : High speed"); //按 'H' 鍵,馬達高速
Serial.println("Press 'N' : Natural wind"); //按 'N' 鍵,馬達模擬自然風運轉
}
void loop()
{
if(Serial.available()) //按任意鍵?
key=Serial.read(); //讀取按鍵值
switch(key)
{
case 'S':
case 's': speed=0; //馬達停止轉動
break;
case 'L':
case 'l': speed=80; //馬達低速轉動
break;
case 'M':
case 'm': speed=160; //馬達中速轉動
break;
case 'H':
case 'h': speed=250; //馬達高速轉動
break;
case 'N':
case 'n': Natural_wind(); //馬達模擬自然風運轉
break;
}
if(key<>'N' || key<>'n')
analogWrite(motorPin,speed); //驅動馬達轉動
}
void Natural_wind() //模擬自然風運轉副程式
{
analogWrite(motorPin,250); //馬達高速轉動
delay(500); //延遲 500ms
analogWrite(motorPin,0); //馬達停止轉動
delay(100);
analogWrite(motorPin,80); //馬達低速轉動
delay(200); //延遲 200ms
analogWrite(motorPin,0); //馬達停止轉動
delay(100);
analogWrite(motorPin,160); //馬達中速轉動
delay(300); //延遲 300ms
analogWrite(motorPin,0); //馬達停止轉動
delay(100); //延遲 100ms
}


