11-1 認識聲音 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/aeh001831.pdf11-2...

11
11-2 Arduino 最佳入門與應用 打造互動設計輕鬆學 Arduino 最佳入門與應用 打造互動設計輕鬆學 11-1 認識聲音 聲音是一種波動,聲音的振動會引起空氣分子有節奏的振動,使周圍的空氣產 生疏密變化,形成疏密相間的縱波,因而產生了聲波。人耳可以聽到的聲音頻率範 圍在 20Hz~20kHz 之間。如圖 11-1(a) 所示正弦波為組成聲音的基本波形,音量與振 幅成正比,而音調與週期成反比。Arduino 利用 tone()函式產生如圖 11-1(b)所示方波 聲音信號來模擬真實的聲音,一次只能輸出一個音調,如果需要產生更複雜的音效, 必須使用外接音效裝置。 週期T V m V m ) (t v t 週期T V m V m V m V m ) (t v t 週期T ) (t v t 5V 0 週期T ) (t v t 5V 0 (a) 正弦波 (b) 方波 11-1 聲音信號 11-2 函式說明 11-2-1 tone( ) 函式 tone( )函式的功能是輸出特定頻率的方波至指定數位接腳。tone( )函式的格式如 下,有三個參數必須設定,pin 參數指定聲音輸出的數位接腳,輸出可連接至壓電式 蜂鳴器或其他揚聲器。frequency 參數設定聲音輸出頻率,單位為赫芝(Hz)。duration 參數設定聲音持續時間,單位為毫秒(ms)。如果沒有指定 duration 參數,則必須使 noTone( )函式關閉聲音。Arduino 板一次只能輸出一種音調,這是因為 tone( )函式 使用計時器(timer2)來產生音調,如果您想輸出聲音至另一數位接腳,您必須先使 noTone( )函式將目前數位接腳的輸出音調關閉,否則將沒有任何效果。 格式: tone(pin,frequency) tone(pin,frequency,duration) 範例: tone(2,1000,500) //數位接腳2輸出1000Hz方波,時間0.5秒。

Upload: trankhue

Post on 23-Jan-2019

264 views

Category:

Documents


2 download

TRANSCRIPT

  • 11-2

    Arduino

    Arduino

    11-1

    20Hz~20kHz 11-1(a)

    Arduino tone() 11-1(b)

    T

    Vm

    Vm

    )(tv

    t

    T

    VmVm

    VmVm

    )(tv

    t

    T

    )(tv

    t

    5V

    0T

    )(tv

    t

    5V

    0

    (a) (b)

    11-1

    11-2

    11-2-1 tone( )

    tone( )tone( )

    pin

    frequency Hzduration

    ms duration

    noTone( )Arduino tone( )

    timer2

    noTone( )

    tone(pin,frequency)

    tone(pin,frequency,duration)

    tone(2,1000,500) //21000Hz0.5

  • chapter 11

    11-3

    11-2-2 noTone( )

    noTone( )noTone( )

    pin

    noTone(pin)

    noTone(2); //2

    11-3

    11-3-1

    Arduino 11-2 ringer

    1 2

    1 21 2

    1 2

    11-2

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10

    ~9 8 7 ~6 ~5 4 ~3 2TX

    1R

    X 0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz

    +

    100F/25V

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10

    ~9 8 7 ~6 ~5 4 ~3 2TX

    1R

    X 0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10

    ~9 8 7 ~6 ~5 4 ~3 2TX

    1R

    X 0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz16MHz

    + +

    100F/25V

    11-3

  • 11-4

    Arduino

    Arduino

    11-4

    ch11-1.ino const int speaker=2; //2

    void setup()

    {}

    void loop()

    {

    for(int i=0;i

  • chapter 11

    11-5

    11-3-2

    Arduino CDEFGAB C 8 tonebeat 11-1 C 12 2 f 1.059

    = )1n(059.1)1n(2)n( 121

    = fff 12~1n =

    11-1 C

    n 1 2 3 4 5 6 7 8 9 10 11 12

    C

    (Do)

    C#

    (Do#)

    D

    (Re)

    D#

    (Re#)

    E

    (Mi)

    F

    (Fa)

    F#

    (Fa#)

    G

    (So)

    G#

    (So#)

    A

    (La)

    A#

    (La#)

    B

    (Si)

    (Hz) 262 277 294 311 330 349 370 392 415 440 466 494

    (Hz) 523 554 587 622 659 698 740 784 831 880 932 988

    (Hz) 1046 1109 1175 1245 1318 1397 1480 1568 1661 1760 1865 1976

    11-3 11-4

    ch11-2.ino const int speaker=2; //2

    const int toneTable[8]={523,587,659,694,784,880,988,1046};//

    void setup()

    {}

    void loop()

    { for(int i=0;i

  • 11-6

    Arduino

    Arduino

    delay(500); //0.5

    }

    noTone(speaker); //

    }

    1 Arduino CBAGFED C 8

    2 Arduino 0 10k CDEFGAB C 8

    11-3-3

    Arduino 8 11-5 8 TACK CDEFGAB C 8

    C D E F G A B

    C# D# F# G# A#

    C D E F G A B

    C# D# F# G# A#

    11-5

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10 ~9 8 7 ~6 ~5 4 ~3 2

    TX 1

    RX

    0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz

    +

    100F/25V

    C D E F G A B C()

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10 ~9 8 7 ~6 ~5 4 ~3 2

    TX 1

    RX

    0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10 ~9 8 7 ~6 ~5 4 ~3 2

    TX 1

    RX

    0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz16MHz

    + +

    100F/25V

    C D E F G A B C()

    11-6

  • chapter 11

    11-7

    11-7

    ch11-3.ino const int speaker=2; //2

    const int sw[8]={4,5,6,7,8,9,10,11}; //4~11

    const int frequcncy[8]={523,587,659,694,784,880,988,1046};//

    int i; //

    int val; //

    void setup()

    {

    for(i=0;i

  • 11-8

    Arduino

    Arduino

    1 Arduino 8 8 TACK

    CDEFGAB C 8

    2 Arduino 1~8 8

    11-3-4

    Arduino Little Bee 11-2 1~5 CDEFG 4 4 180 60/180 =60000/180

    11-2

    5 3 3 4 2 2 1 2 3 4 5 5 5

    5 3 3 4 2 2 1 3 5 5 3

    2 2 2 2 2 3 4 3 3 3 3 3 4 5

    5 3 3 4 2 2 1 3 5 5 1

    11-3 11-4

    ch11-4.ino const int speaker=2; //2

    unsigned int frequency[7]={523,587,659,694,784,880,988};//

    char toneName[]="CDEFGAB"; //

    char beeTone[]="GEEFDDCDEFGGGGEEFDDCEGGEDDDDDEFEEEEEFGGEEFDDCEGGC";

    byte beeBeat[]={1,1,2,1,1,2,1,1,1,1,1,1,2,

    1,1,2,1,1,2,1,1,1,1,4,

    1,1,1,1,1,1,2,1,1,1,1,1,1,2,

    1,1,2,1,1,2,1,1,1,1,4};

    const int beeLen=sizeof(beeTone); //

  • chapter 11

    11-9

    unsigned long tempo=180; //180

    int i,j;

    void setup()

    {}

    void loop()

    {

    for(i=0;i

  • 11-10

    Arduino

    Arduino

    11-3-5

    Arduino Little BeeLittle Star 1 TACK SW SWLittle BeeLittle Star 180

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10 ~9 8 7 ~6 ~5 4 ~3 2

    TX 1

    RX

    0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz

    +

    100F/25V

    SW

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10 ~9 8 7 ~6 ~5 4 ~3 2

    TX 1

    RX

    0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz

    ATMEGA328P

    UNOONL

    IOR

    EFR

    ESET

    3.3V

    5V GN

    DG

    ND

    Vin

    ANALOG IN

    A0

    A1

    A2

    A3

    A4

    A5

    AR

    EFG

    ND 13 12 ~11

    ~10 ~9 8 7 ~6 ~5 4 ~3 2

    TX 1

    RX

    0

    RXTX

    RES

    ET

    DIGITAL (PWM~)

    POWER

    SCL

    SDA

    16MHz16MHz

    + +

    100F/25V

    SW

    11-8

    11-9

  • chapter 11

    11-11

    ch11-5.ino const int speaker=2; //2

    const int sw=4; //4SW

    const int debounce=20; //20ms

    char toneName[]="CDEFGAB"; //

    unsigned int frequency[7]={523,587,659,694,784,880,988};//

    char beeTone[]="GEEFDDCDEFGGGGEEFDDCEGGEDDDDDEFEEEEEFGGEEFDDCEGGC";

    char starTone[]="CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC";

    byte beeBeat[]={1,1,2,1,1,2,1,1,1,1,1,1,2, //

    1,1,2,1,1,2,1,1,1,1,4,

    1,1,1,1,1,1,2,1,1,1,1,1,1,2,

    1,1,2,1,1,2,1,1,1,1,4};

    byte starBeat[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2, //

    1,1,1,1,1,1,2,1,1,1,1,1,1,2,

    1,1,1,1,1,1,2,1,1,1,1,1,1,2};

    unsigned long tempo=180; //180

    const int beeLen=sizeof(beeTone); //

    const int starLen=sizeof(starTone); //

    int len=0; //

    int num; //

    int keyVal=0; //

    void setup()

    { pinMode(sw,INPUT_PULLUP); //4

    }

    void loop()

    {

    if(digitalRead(sw)==0) //?

    {

    delay(debounce); //

    while(digitalRead(sw)==0) //?

    ; //?

    keyVal++; //1

    if(keyVal>2) //2?

    keyVal=0; //

    num=0; //

    if(keyVal==1) //1?

    len=beeLen; //

  • 11-12

    Arduino

    Arduino

    else if(keyVal==2) //2?

    len=starLen; //

    }

    if(keyVal==1 && len>0) //1len>0?

    { playTone(beeTone[num],beeBeat[num]); //

    num++; //

    len--; //1

    }

    else if(keyVal==2 && len>0) //2len>0?

    { playTone(starTone[num],starBeat[num]); //

    num++; //

    len--; //1

    }

    }

    void playTone(char toneNo,byte beatNo) //

    {

    unsigned long duration=beatNo*60000/tempo; //(:)

    int i;

    for(i=0;i /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 300 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile () /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName () /PDFXTrapped /False

    /Description > /Namespace [ (Adobe) (Common) (1.0) ] /OtherNamespaces [ > /FormElements false /GenerateStructure false /IncludeBookmarks false /IncludeHyperlinks false /IncludeInteractive false /IncludeLayers false /IncludeProfiles false /MultimediaHandling /UseObjectSettings /Namespace [ (Adobe) (CreativeSuite) (2.0) ] /PDFXOutputIntentProfileSelector /DocumentCMYK /PreserveEditing true /UntaggedCMYKHandling /LeaveUntagged /UntaggedRGBHandling /UseDocumentProfile /UseDocumentBleed false >> ]>> setdistillerparams> setpagedevice