본문 바로가기

아두이노

아두이노프로그램 버튼 사용하기

반응형

아두이노프로그램 포스팅을 시작합니다

이번 아두이노프로그램 포스팅은 버튼을 사용하는 방법을 배우겠습니다. 버튼을 누르면 LED가 켜지는 프로그램을 만들어 보겠습니다. 아두이노프로그램 포스팅에서는 버튼을 사용할 때 중요한 개념이 풀다운 저항에 대해서 설명합니다. 그리고 시니얼 모니터를 사용하는 방법도 살펴보겠습니다. 

 

아두이노프로그램 버튼 이해하기

디지털이라는 것은 앞에 있는 LED 실습에서 보았듯이 켜다(5V)와 끄다(0V)와 같이 어떤 상태를 숫자나 문자로 나타내는 것을 말합니다. 아두이노프로그램에서 켜다를 1로, 끄다는 0로 나타냅니다.


디지털 입력은 외부에서 오는 디지털 값(5V 또는 0V)을 아두이노 디지털 핀에서 받는다는 뜻입니다.

 

디지털 8번 핀에 디지털 값이 입력되면, 2번 핀에서 LED를 켜는 작품을 만들어 보겠습니다. 디지털 입력 장치로 버튼을 사용하겠습니다. 버튼을 누르면 5V, 떼면 0V가 8번 핀에 공급되도록 회로를 만들어야 합니다.

아두이노프로그램 버튼

[그림 3-12]에 있는 스케치를 살펴보겠습니다. 셋업(setup)에서 LED를 켜기 위한 2번 핀은 출력으로, 디지털 값을 받을 8번 핀은 입력으로 핀모드를 정했습니다. 디지털 값을 받을 때는 INPUT으로 핀모드를 정해야 합니다. 

 

루프(loop)에서 8번 핀에 들어오는 입력 값을 읽는 명령은 digitaRead(디지털 읽기)입니다. 괄호 안에는 디지털 값을 받을 핀 번호를 적습니다. digitaRead(8)을 하면 8번 핀에서 값을 읽는습니다.


읽은 값은 val이라는 변수에 저장합니다. val 앞에 쓰여진 int는 정수(integer)라는 뜻입니다. 즉 val이라는 변수에는 소수점이 없는 1, 2, 3, …와 같은 정수를 저장할 수 있습니다. 변수 이름 앞에 어떤 값을 저장할지 알려줘야 합니다. 

[그림 3-12] 아두이노프로그램 버튼 스케치

val==1과 val=1은 전혀 다른 뜻입니다. val==1은 val에 있는 값과 1 을 비교해서 같으면 참, 다르면 거짓이라고 알려줍니다. val=1은 1 을 val이라는 이름으로 저장하라는 뜻입니다. 

 

if는 조건문입니다. if 다음에 괄호의 조건이 참이면 이어지는 중괄호 { } 안에 있는 명령을 실행합니다. 즉 디지털 2번 핀에 전기를 보내서 LED를 켭니다. 그렇지 않고 if(거짓)이면 else로 가서 이어지는 중괄호 { } 안에 있는 명령을 실행합니다. LED를 끄는 것이죠.

 

회로는 [그림 3-13]과 같이 디지털 2번 핀에 LED +극을 연결합니다. LED -극에 220옴 저항을 연결하고 저항의 다른 끝은 GND에 연결합니다. 버튼의 한 쪽은 5V에, 다른 한쪽은 디지털 8번 핀에 연결합니다.

[그림 3-13] 아두이노프로그램 회로도


업로드 후에, 스위치의 버튼을 누르면 8번 핀에 5V가 공급되어 디지털 입력 값이 1이 되면서 LED가 켜집니다. 

 

버튼을 누르지 않으면 8번 핀에 전지가 공급되지 않아서 입력 값은 0이 되고 LED가 꺼집니다. 이 회로에서 버튼을 누르고 풀기를 반복하다 보면 어떤 때는 누르지 않았는데도 LED가 켜져 있는 것을 볼 수 있습니다. 이것은 프로그램의 에러가 아니라 회로에 문제가 있는 것입니다.

 

아두이노프로그램 시리얼 모니터로 확인하기

아두이노의 스케치 또는 회로의 문제점을 파악할 때 편리하게 사용할 수 있는 방법을 이 포스팅에서 알려드리겠습니다. 

 

아두이노가 작업하는 내용을 시리얼 모니터에서 볼 수 있습니다. 디지털 0번과 1번 핀은 아두이노 보드와 컴퓨터 사이에 프로그램을 업로드하거나 데이터를 주고받을 때 사용하는 핀이라고 앞에서 설명했습니다.

 

데이터를 일렬로 보내거나 받는 방법을 시리얼(일렬, Serial) 통신이라고 합니다. 이 시리얼 통신 방법을 활용하면 아두이노가 작업하는 내용을 컴퓨터 모니터에서 직접 볼 수 있습니다.

 

방법은 셋업에서 Serial.begin(9600) 해주고 루프 안에서 Serial.print(값)을 사용하면 됩니다. 

 

[그림 3-14]에 있는 프로그램은 앞에서 사용한 [그림 3-12]에서 시리얼(Serial) 관련된 코드만 추가한 것입니다. 셋업(setup)에서 Serial.begin(9600) 명령으로 시리얼 통신을 준비하게 하였습니다. 9600은 초당 통신속도를 말합니다.


loop( ) 안에서 Serial.print( ) 하면 ( ) 안에 있는 값이 시리얼 모니터 창에 프린트 됩니다. Serial.print(“val=”) 하면 “ ” 안에 있는 글자 그대로 프린트 됩니다. print에 ln을 붙여서 Serial.println(val) 하면 변수 val 값을 프린트하고 줄을 바꿉니다. 

[그림 3-14] 시리얼 모니터 열기

 

스케치 업로드가 완료된 후에 IDE 오른쪽 위에 있는 시리얼 모니터 아이콘을 클릭하면, [그림 3-15]와 같은 시리얼 모니터 창이 컴퓨터에 나타납니다. 스위치를 누르지 않았는데도 val 값이 0이 되었다 1이 되었다 하면서 LED도 깜박거립니다. 

[그림 3-15] 아두이노프로그램

 

아두이노프로그램 풀다운 저항 이해하기

이렇게 된 원인은 스위치를 누르지 않았을 때 8번과 연결된 선이 안테나 역할을 하여 주위에 있는 노이즈 때문에 잘못된 정보를 8번 핀에 공급하기 때문입니다.

 

해결 방법은 8번 핀과 GND 사이에 10K옴 정도의 큰 저항을 연결해주면 됩니다. 이렇게 하면 버튼을 누르지 않았을 때는 0V가 되고 스위치를 누르면 5V가 공급된다. 아래 스크래치 버튼 사용하기 포스팅에서 자세한 내용이 나와 있습니다. 

스크래치 버튼 사용하기

 

스크래치 아두이노 스위치

스위치 사용방법 알기 디지털이라는 것은 3장의 엘이디(LED) 코딩에서 보았듯이 켜다(5볼트(V))와 끄다(0볼트(V))처럼 어떤 것을 나눠서 표현하는 것을 말합니다. 디지털 값을 숫자로 표현하면 켜다는 1이 되고,..

www.itple.co.kr

 

바뀐 회로 [그림 3-16]는 스위치를 눌러 5V가 연결되면, 큰 저항이 앞에 있는 GND 쪽으로 전기가 가지 않고 저항이 없는 8번 핀으로 전기가 흘러가게 됩니다. 이렇게 저항을 GND에 연결해서 문제를 해결하는 방법을 풀다운 저항방법이라고 부릅니다. 

[그림 3-16] 바꾼 회로도

 

이제 시리얼 모니터 [그림 3-17]를 열어 보면, 스위치를 누르지 않았을 때 정확하게 0이 나오는 것을 볼 수 있습니다. 


시리얼 모니터 통신 속도도 바꿀 수 있습니다. [그림 3-17]의 모니터 창 오른쪽 아래를 보면 9600 baud가 있고 오른쪽 옆에 있는 업/다운 표시를 클릭하면 선택할 수 있는 속도 숫자들이 나옵니다. 

[그림 3-17] 통신속도 바꾸기


300에서부터 250000까지 다양하게 선택할 수 있습니다. baud는 초당 속도로 이해하면 된다. 연결하는 부품의 성능에 따라 속도를 선택하면 됩니다. 단 스케치에서 정한 속도와 모니터에서 보는 속도는 같아야 합니다.

반응형