☛ 功能說明
利用 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 }