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

우리는 디지털 입출력방법에 대해 배웠으므로 이번시간에는 부저를 사용하여 소리를 내어보도록 하겠습니다.

그렇다면 부저는 무엇일까요?

부저는 TV, 세탁기, 에어컨 등에서 Alarm음으로 사용되기도 하고 도난 경보기, 디지털 도어 록등에서 사용되는 작은 스피커라고 생각하면 됩니다.


디지털 출력으로 부저 울리기

1초에 한번씩 부저를 켰다 껐다 반복하도록 제작

디지털핀 8번으로 출력을 주어 부저를 동작하게하는 구조입니다.

int buzzer = 8;

void setup()

{

pinMode(buzzer, OUTPUT);

}

 

void loop()

{

digitalWrite(buzzer, HIGH); // Buzzer on

delay(1000);

digitalWrite(buzzer, LOW); // Buzzer off

delay(1000);

}

pinMode로 8번핀을 출력으로 설정하였습니다.

digitalWrite를 사용하여 부저를 on한뒤 1초뒤에 off하는것을 반복합니다.


코드를 업로드한뒤 동작을 확인하여보면 1초에 한번씩 부저가 켜졌다 꺼졌다 하는것을 볼수 있습니다.


실습예제

1. 버튼으로 디지털입력을 받아서 부저를 울리도록 구현

회로구성 - 버튼에 5v연결후 반대쪽을 입력핀으로 연결, 부저는 출력핀에 연결

int buzzer = 8;

int button =9;

void setup()

{

pinMode(buzzer, OUTPUT);

pinMode(button, INPUT);

}

 

void loop()

{

if(digitalRead(button)==HIGH)

digitalWrite(buzzer,HIGH);

else

digitalWrite(buzzer,LOW);

}

2. 버튼으로 디지털입력을 받으면 LED는 켜져있고 부저는 ON/OFF반복 구현 

회로구성 - 버튼에 5v연결후 반대쪽을 입력핀으로 연결, 부저, led는 출력핀에 연결

int led=7;

int buzzer = 8;

int button =9;

int buzzer_count=0;

int buzzer_flag=0;

void setup()

{

pinMode(led, OUTPUT);

pinMode(buzzer, OUTPUT);

pinMode(button, INPUT);

}

 

void loop()

{

if(digitalRead(button)==HIGH)

digitalWrite(led,HIGH);

else

digitalWrite(led,LOW);


if(buzzer_count<200)

{

buzzer_count++;

}

else

{

buzzer_count=0;

if(buzzer_flag==0)

buzzer_flag=1;

else

buzzer_flag=0;

}

if(buzzer_flag)

digitalWrite(buzzer.HIGH);

else

digitalWrite(buzzer,LOW);

}

코드를 꼭 이해하시고 더좋은 방향을 바꾸어 보시길 바랍니다.

다음시간에는 시리얼 통신에 대해 알아보도록 하겠습니다.

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

이번시간에는 버튼을 이용하여 디지털 입력에대해 알아보도록 하겠습니다.

디지털 출력을 이용하여 LED를 제어할때 우리는 pinMode(포트번호, OUTPUT)를 사용하였죠.

디지털 입력은 그와 반대로 pinMode(포트번호, INPUT)입니다. 

정말 간단 합니다. 출력은 OUTPUT 입력은 INPUT

또한 출력문은 DigitalWrite(포트번호,HIGH/LOW), 입력문은 DigitalRead(포트번호)를 사용한다는 차이점이 있습니다. 자세한 내용은 아래에서 설명하도록 하겠습니다.

하지만 디지털 입력을 실습해보기 전에 전원을 차단하는 방식으로 LED를 제어해보도록 하겠습니다.


버튼을 눌렀을때 LED를 킬수 있도록 회로를 구성해 보도록 합시다.

버튼 2개를 5v전원과 연결하고 각각 LED와 연결되도록 하였습니다.

버튼을 통해서 눌렀을때는 회로가 연결되어 LED에 전원이 들어가고 떼면 회로도 떨어져 LED가 꺼지는 원리 입니다. 아래 그림의 S1, S2가 스위치 입니다. 참고 해주세요.


이렇게 회로를 구성한뒤 스위치를 눌러보면 아두이노에 코딩을 하지 않아도 LED가 켜지는 것을 확인할 수 있습니다. 그럼 이제 디지털입력을 통해 LED를 제어해 보도록 합시다. 아래 회로도를 보시죠.

전과 달라진 점이 있습니다. 5v전원은 아까와 같이 스위치에 연결되어 있습니다.

그런데 노란선(D6, D12)가 보이시나요? 저 2개의 선이 디지털입력을 하기위한  선입니다.

쉽게 생각하면 이런것이죠.(스위치 누른다. -> 디지털 입력으로 신호가 들어간다. -> 아두이노가 입력신호를 받는다. -> 받은 신호에 따라 LED에 연결된 포트로 디지털 출력을 보낸다.)


회로를 다 구성하였으면 소스코드를 추가하여 봅시다.

int led1 = 7;

int led2 = 6;

int key1 = 13;

int key2 = 12;

 

void setup()

{

pinMode(led1, OUTPUT);

pinMode(led2, OUTPUT);

pinMode(key1, INPUT);

pinMode(key2, INPUT);

}

void loop()

{

if( digitalRead(key1) == HIGH )

digitalWrite(led1, HIGH);

else

digitalWrite(led1, LOW);

 

if( digitalRead(key2) == HIGH )

digitalWrite(led2, HIGH);

else

digitalWrite(led2, LOW);

 

delay(100);

}

각각 포트번호를 led1,2 key1,2라는 변수로 선언해주고 

setup()부분에서 입력인지 출력인지를 설정해주었습니다. 출력:OUTPUT 입력:INPUT

if문을 통하여 digitalRead(key1)로 읽은 신호가 HIGH인지 LOW인지 판단을 합니다. HIGH=스위치 누름

스위치가 눌렸다면 digitalWrite를 통해 LED를 켜고 떼면 신호가 LOW로 떨어지면 LED를 끕니다.


다 작성한 후 코드를 업로드하고 동작하여보면 어떻게 된것인지 더 확실히 이해하실수 있을 것입니다.

또한 위의 코드를 조금 수정하여 

디지털 입력(버튼)LED가 주기적으로 ON/OFF 반복하도록 바꾸어 보세요.

여기까지 디지털 입력 버튼으로 LED제어하기를 해보았습니다. 

다음시간에는 부저를 사용해 소리를 내보도록 합시다.


+ Recent posts