☛ 功能說明

利用 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
}