---
# System prepended metadata

title: Arduino筆記-6
tags: [Arduino]

---

# 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. 程式編寫錯誤
   
