☛ 功能說明

利用串列埠傳送電腦鍵盤按鍵值控制伺服馬達轉動固定角度。 當按下 a 鍵時,伺服馬達轉動至 0° 的位置;當按下 b 鍵時,伺服馬達轉動至 90° 的位置;當按下 c 鍵時,伺服馬達轉動至 180° 的位置。

☛ 使用材料

Arduino UNO R3 開發板 × 1、SG-90 伺服馬達 × 1。

☛ 電路圖及麵包板接線圖

☛ 程式碼

#include<Servo.h>             //使用 Servo.h 函式庫
Servo myServo;                //建立 Servo 資料形態的物件
char  ch;                     //按鍵值
void setup()
{
     Serial.begin(9600);      //初始化串列埠,設定鮑率為 9600 bps
     myServo.attach(2);       //數位接腳連接伺服馬達的信號線
}

void loop()
{
     if(Serial.available())   //鍵盤輸入任意鍵
     {
        ch=Serial.read();     //讀取按鍵值
     }
     if(ch=='a' || ch=='A')   //按下 a 或 A 鍵
        myServo.write(0);     //伺服馬達轉動至 0° 的位置
     if(ch=='b' || ch=='B')   //按下 b 或 B 鍵
        myServo.write(90);    //伺服馬達轉動至 90° 的位置
     if(ch=='c' || ch=='C')   //按下 c 或 C 鍵
        myServo.write(180);   //伺服馬達轉動至 180° 的位置
}

 

☛ 練習

⑴ 設計 Arduino 程式,利用鍵盤控制伺服馬達轉動角度。 當按下 a 鍵時,伺服馬達轉動至 0° 的位置;當按下 b 鍵時,伺服馬達轉動至 45° 的位置;當按下 c 鍵時,伺服馬達轉動至 90° 的位置;當按下 d 鍵時,伺服馬達轉動至 135° 的位置;當按下 e 鍵時,伺服馬達轉動至 180° 的位置。

#include<Servo.h>                          //使用 Servo.h 函式庫
Servo myServo;                             //建立 Servo 資料形態的物件
char  ch;                                  //按鍵值
void setup()
{
     Serial.begin(9600);                   //初始化串列埠,設定鮑率為 9600 bps
     myServo.attach(2);                    //數位接腳連接伺服馬達的信號線
}

void loop()
{
     if(Serial.available())                //鍵盤輸入任意鍵
        ch=Serial.read();                  //讀取按鍵值

     switch(ch)
     {
            case 'a':                      //按下 a 或 A 鍵
            case 'A':
                     myServo.write(0);     //伺服馬達轉動至 0° 的位置
                     break;
            case 'b':                      //按下 b 或 B 鍵
            case 'B':
                     myServo.write(45);    //伺服馬達轉動至 45° 的位置
                     break;
            case 'c':                      //按下 c 或 C 鍵
            case 'C':
                     myServo.write(90);    //伺服馬達轉動至 90° 的位置
                     break;
            case 'd':                      //按下 d 或 D 鍵
            case 'D':
                     myServo.write(135);   //伺服馬達轉動至 135° 的位置
                     break;
            case 'e':                      //按下 e 或 E 鍵
            case 'E':
                     myServo.write(180);   //伺服馬達轉動至 180° 的位置
                     break;
     }
}

 

⑵ 設計 Arduino 程式,利用鍵盤控制伺服馬達轉動角度。 當按下 a 鍵時,伺服馬達轉動由 0 ~ 180° 來回擺動;當按下 b 鍵時,伺服馬達轉動由 45 ~ 135° 來回擺動;當按下 c 鍵時,伺服馬達轉動至 90° 後停止。

#include<Servo.h>                          //使用 Servo.h 函式庫
Servo myServo;                             //建立 Servo 資料形態的物件
char  ch;                                  //按鍵值
void setup()
{
     Serial.begin(9600);                   //初始化串列埠,設定鮑率為 9600 bps
     myServo.attach(2);                    //數位接腳連接伺服馬達的信號線
}

void loop()
{
     if(Serial.available())                //鍵盤輸入任意鍵
        ch=Serial.read();                  //讀取按鍵值

     switch(ch)
     {
            case 'a':                      //按下 a 或 A 鍵
            case 'A':
                     motoTurn(0,180);      //伺服馬達 0-180° 來回擺動
                     break;
            case 'b':                      //按下 b 或 B 鍵
            case 'B':
                     motoTurn(45,135);     //伺服馬達 45-135° 來回擺動
                     break;
            case 'c':                      //按下 c 或 C 鍵
            case 'C':
                     myServo.write(90);    //伺服馬達轉動至 90° 的位置
                     break;
     }
}

void motoTurn(int angle1, int angle2)      //伺服馬達來回擺動副程式
{
    int angle;
    for(angle=angle1;angle<=angle2;angle++)//順時針擺動
    {
        myServo.write(angle);
        delay(15);                         //延遲 15ms,降低伺服馬達擺動速度
        if(Serial.available())             //鍵盤輸入任意鍵
        {
           ch=Serial.read();               //讀取按鍵值
           return;
        }
    }
    for(angle=angle2;angle>=angle1;angle--)//逆時針擺動
    {
        myServo.write(angle);
        delay(15);                         //延遲 15ms,降低伺服馬達擺動速度
        if(Serial.available())             //鍵盤輸入任意鍵
        {
           ch=Serial.read();               //讀取按鍵值
           return;
        }
    }
}