[아두이노 기초] 전체 글 목록

2017/07/27 - [분류 전체보기] - [아두이노 기초] 전 과정 목록

우리는 저번에 디지털입출력을 통해 아두이노가 동작을 할수 있도록 해 보았습니다. 장치를 on 하거나 off 하는일은 세밀한 정보가 필요하지 않았죠. 0이거나 1이거나 둘중하나만 있으면 충분했습니다.

하지만 이런경우는 어떨까요?

단지 led가 켜지고 꺼지는 것이 아니라 led의 밝기를 조절해야 한다면 디지털입출력을 사용해서는 쉽지않을 것입니다.

이럴때 사용해야하는 것이 바로 아날로그 입출력입니다.

그럼 입출력중에서 아날로그 출력에 대해 알아보도록 하겠습니다.

우선 알아야 할것이 아두이노 자체에서 전압을 조절하는 능력은 없습니다. 그렇기 때문에 PWM(Pulse Width Modulation) 펄스폭변조 이란 방법을 사용하는 것이죠.

PWM은 펄스폭을 조절해서 전류를 조정하는 것으로 간단한 무드등을 제어하거나 부저의 음계 제어, 스마트 폰등에서 화면의 밝기를 조정하는 것 등등 많은 곳에서 사용됩니다.


이 그림을 보시면PWM이 어떤 식으로 전류를 조정하는지 알수 있습니다.

5v출력의 on/off반복을 통해서 평균전압을 낮추는 방법입니다. 간단하게 생각해서 100번 동안 5v출력이 100번 = 5v, 100번 동안 5v출력이 50번 = 2.5v가 되는것이죠. 이과정을 빠르게 반복하므로 아날로그 출력이 가능해 지는 것입니다.


아두이노 UNO에서 PWM기능을 가진 핀은 핀번호 앞에 (~)표시가 써져있습니다.  3,5,6,9,10,11번 핀이 PWM핀입니다.

그럼이제 PWM을 이용하여 LED밝기를 조절해보도록 하겠습니다.

1. PWM을 이용한 LED의 밝기 조절

간단한 회로를 구성해 봅시다. 빨간선은 신경쓰지 않으셔도 됩니다.

회로구성후 아래의 코드를 작성하고 실행시켜 보도록 하죠.

int led = 9; // the pin that the LED is attached to

int brightness = 0; // how bright the LED is

int fadeAmount = 5; // how many points to fade the LED by

 

void setup()

{

    pinMode(led, OUTPUT);

}

 

void loop()

{

analogWrite(led, brightness);

brightness = brightness + fadeAmount;

if (brightness == 0 || brightness == 255)

{

    fadeAmount = -fadeAmount ;

}

delay(30);

}

brightness라는 변수를 정해주어 0에서 255가 될때까지는 5씩 brightness값이 증가하고 255가 되면 반대로 5씩 brightness값을 감소시켜 LED가 천천히 켜지고 천천히 꺼지는 동작을 구현 할수 있습니다.

이번에는 펄스(PWM)을 이용하여 부저를 연주해보도록 하겠습니다.

2. 펄스(PWM)으로 부저 연주하기

회로를 보시면 새로운 부품이 보일겁니다. 아날로그회로에서 증폭기 역할을 해주는 npn트랜지스터입니다. 

int speakerPin = 8;

int numTones = 10;

int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};

// mid C C# D D# E F F# G G# A

void setup()

{

}

 

void loop()

{

    for (int i = 0; i < numTones; i++)

{

tone(speakerPin, tones[i]);

delay(500);

}

noTone(speakerPin);

delay(1000);

}

 

새로운 함수가 보입니다. tone(pin,frequency)함수입니다.

tone(pin,frequency)는 pin번호에  frequncey값에 맞는 주파수를 출력하여 소리를 내게해주는 함수입니다. 이때 tone(pin,frequency,duration)으로 시간(ms)까지 설정이 가능 합니다. 또한 tone함수는 아두이노3번핀과 11번핀에서는  사용이 불가능 하며 31~65545의 주파수를 재생 가능합니다.

소리를 끄고 싶을때는 notone()함수를 사용하시면 됩니다.

소스코드 설명 : tones배열의 각각의 음계에 맞는 주파수를 저장한뒤 for문을 통해서 해당음계를 하나씩 소리냄


이것을 응용하면 녹음이 가능한 간단한 연주기계를 만드는 것도 가능합니다.

녹음기능 피아노에 대한 내용한 후에 포스팅 하도록 하겠습니다. 

+ Recent posts