# Arduino筆記-6 **注意!必須使用Arduino IDE,因為mBlock不支援序列埠監控窗** ## 學習內容 1. 認識伺服馬達(SG90) 2. 伺服馬達(SG90)接線 3. 編寫伺服馬達(SG90)程式 ## 認識伺服馬達(SG90) SG90 伺服馬達的控制是透過 PWM (脈衝寬度調變) 信號來控制馬達的旋轉角度。 在 Arduino 等微控制器上,可以使用 `Servo.h` 函式庫來控制 SG90。 SG90 的規格: - **尺寸**:約 23 x 12.2 x 29 mm - **重量**:約 9 克 - **操作電壓**:4.8V 至 6.0V - **扭矩**:可達 1.6kg/cm (在 4.8V 時) - **速度**:0.1 秒/60 度 (在 4.8V 時) ## 伺服馬達(SG90)接線 每顆sg90三條線的顏色都分別為紅、棕、黃三色, 通常紅色為正、棕色為負、黃色為信號線。 三條線都是母接頭,若要連結Arduino需要使用三條公-公接頭的杜邦線連接。 因為要使用PWM (脈衝寬度調變), 所以必須將黃色信號線連接在3、5、6、9、10、11接腳(數字前方有標記 ~ 符號的腳位) ![image](https://hackmd.io/_uploads/HJntLjXvA.png) ![image](https://hackmd.io/_uploads/Byk_wexvA.png) ## 編寫伺服馬達(SG90)程式 為了方便控制伺服馬達, 可以套用`Servo.h`函式庫, Arduino 的內建函式庫已經包含`Servo.h`, 所以只要`#include <Servo.h>`就能使用,不需額外安裝套件。 ```ino #include <Servo.h> Servo myservo; int angle; void setup() { myservo.attach(5); Serial.begin(9600); myservo.write(0); } void loop() { while (Serial.available() == 0) { delay(100); } angle = Serial.parseInt(); if (angle >= 0 && angle <= 180) { myservo.write(angle); Serial.println("伺服馬達已轉動至角度:"); Serial.println(angle); } else { Serial.println("輸入角度不在 0~180 內,請重新輸入!"); } } ``` 編譯並上傳後,接著按下鍵盤的**Ctrl+Shift+M**開啟序列埠監控窗 將右邊的配置調整成**沒有斷行字元**、**9600** ![image](https://hackmd.io/_uploads/BJlpkufv0.png) 接著在輸入框輸入角度, 測試伺服馬達是否轉動。 ![馬達轉動](https://hackmd.io/_uploads/r1lmV_fvA.gif) ### 問題排解 * 如果遇到伺服馬達沒有轉動,可能遇到以下情況 1. 腳位連接錯誤 2. 杜邦線接觸不良 3. 未與電腦連接 4. 波特率設置錯誤(應為9600) * 如果遇到伺服馬達再轉動後自動歸零,可能遇到以下情況 1. 換行設定條成**換行**(應為**沒有斷行字元**) 2. 程式編寫錯誤