아두이노 우노에는 실습용 LED가 실장되어 있는데 이것은 13번 핀과 연결되어 있다. 아래 그림과 같이 아두이노마크 근처에 위치하고 있다.(빨간 원 안)


[그림 1] 아두이노 우노의 내장 LED


이것을 이용하여 깜박이는 예제는 아두이노 IDE에 미리 탑재되어서 제공되는데 다음과 같이 예제파일을 선택하여 읽어들일 수 있다.


[그림 2] Blink 예제 읽어들이기


소스코드는 다음과 같다. (주석문은 삭제하였다.)


int led = 13;
void setup() {
   pinMode(led, OUTPUT);
}
void loop() {
   // turn the LED on (HIGH is the voltage level)
   digitalWrite(led, HIGH);
   delay(1000); // wait for a second

   // turn the LED off by making the voltage LOW

   digitalWrite(led, LOW);
   delay(1000); // wait for a second
}


이 예제의 구조를 살펴보면 먼저 눈에 띄는 것이 있는데 setup() 함수와 loop() 함수이다. 이 두 함수는 아두이노 프로그램의 전체적인 구조를 잡아주는 역할을 한다.


    ⁎ setup() 함수

       • 아두이노 프로그램이 실행될 때 맨 처음에 단 한 번 호출되어 수행된다.

       • 따라서 여기에 각종 장치를 초기화하거나 초기값을 설정하는 코드가 오게 된다.


    ⁎ loop() 함수

        • setup()함수 실행 후 수행되면 계속 반복 수행된다.

        • 아두이노에 연결된 장치들을 구동시키는 코드가 위치한다.


setup()함수 내에서 pinMode()함수를 사용하는데 이 함수는 핀을 입력(INPUT) 혹은 출력(OUTPUT)으로 사용할 지를 설정하는 함수이다. 첫 번째 인자로 핀의 번호가 두 번째 인자로 INPUT, 혹은 OUTPUT이라는 상수를 넘겨주면 된다. pinMode(led, OUTPUT) 은 led(13번)을 출력(OUTPUT)으로 사용하겠다고 설정하는 것이다.


   ⁎ pinMode(pinNumber, INPUT/OUTPUT) 함수

       • pinNumber 핀을 입력(INPUT) 혹은 출력(OUTPUT)으로 사용할 지를 지정한다.

       • pinNumber는 우노의 경우 0,1,2, … 13, A0, A1, ...A6 중 하나이다.


loop()함수에서는 digitalWrite()함수를 사용했는데 이 함수는 핀으로 출력값을 내보내는 작업을 수행한다. 첫 번째 인자로 핀 번호를 받고 두 번째 인자로 HIGH 혹은 LOW 상수를 받는다. digitalWrite(led, HIGH) 명령은 led 핀에 HIGH 신호를 내보내므로 LED가 켜지게 된다. 반대로 digitalWrite(led, LOW) 명령은 led 핀에 LOW 신호를 내보내므로 LED가 꺼지게 된다.


    ⁎ digitalWrite(pinNumber, HIGH/LOW) 함수

         • pinNumber 핀이 출력일 경우에 사용한다.

         • 1값을 내보낼지 (HIGH) 0값을 내보낼지(LOW)를 지정한다.


delay()함수는 입력된 시간만큼 아무 일도 안하고 멈춰있는 동작을 수행한다. delay(1000)은 1000ms 동안 지연시키는 것이다. 입력받는 숫자는 ms 단위이다.


    ⁎ delay(time) 함수

         • time ms 만큼 지연 (아무런 일도 안 하고 멈춰있음)한다.


이 함수의 입력 인자가 밀리세컨드(ms) 단위임을 유의해야 한다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad007}

Posted by 살레시오
,

 디지털 입출력 포트(digital I/O port, 혹은 그냥 포트)는 디지털 신호를 출력하거나 입력받을 수 있는 통로(물리적으로는 핀)이다. 디지털 신호는 0과 1 두 가지 상태만을 표현하므로 포트를 통해서 0 또는 1신호를 내보내거나 입력받을 수 있다. 아두이노 우노에는 13개의 디지털핀이 있는데 이것들이 포트에 해당된다.


 앞으로의 설명을 위해서 약간의 전기회로 지식이 필요하다. 먼저 전압(voltage)과 전류(current)의 개념을 설명하면 다음과 같다. 마트에서 흔히 살 수 있는 AA나 AAA사이즈 건전지 하나의 '전압'은 1.5V (V는 Volt 볼트, 전압의 단위) 라는 것은 알고 있을 것이다. 이 의미는 음극과 양극의 '전위차'가 1.5V라는 의미이며 일단 '전압은 전류를 흘릴 수 있는 힘' 정도로 이해하면 된다. 이 전위차가 있는 두 부분을 도선으로 연결하면 전자가 도선을 따라서 흐르게 되는데 이 전자의 흐름이 전류이다. 전자는 음극에서 양극으로 흐른다. 전압(또는 전위차)이 높을 수록 전자가 더 많이 흐르고 전류값도 높아진다. 전자의 흐름인 전류의 단위는 암페어(Ampere, A로 표시함)이다. 전류는 '양전하의 흐름'이다.


  • 전류(단위는 암페어, A) : 양전하의 흐름

  • 전압(단위는 볼트, V) : 전류를 흘릴 수 있는 힘



위 그림을 보면 건전지의 +극과 -극을 저항 $R$로 연결하였다. (왼쪽은 건전지와 저항의 모양을 그대로 그렸고 오른쪽은 이것을 기호로 표시한 것이다.) 이 경우 전류가 도선을 따라 흐르게 되는데 전지의 전압을 $v$, 저항을 $R$이라고 하면 전류의 크기는 $\frac{v}{R}$로 계산된다. 이것을 오옴의 법칙이라고 한다. 저항의 단위는 오옴(ohm)이다. '저항은 전류의 흐름을 제한하는 역할을 하는 소자'이다.


  • 저항(단위는 오옴 Ω) : 전류의 흐름을 제한하는 역할을 하는 소자

  • 오옴의 법칙 : $v = i R$


 디지털 시스템의 디지털 신호는 '전압'으로 표현된다. 신호 0(LOW)은 0V (GND, 그라운드라고 읽는다)가 사용되고 1신호는 주로 5V, 3.3V 혹은 1.8V이다. 아두이노의 경우 동작 전압이 대부분 5V이므로 신호 1 (HIGH) 은 전압으로 5V가 되는 것이다.


포트를 이용한 출력 내보내기


 포트를 출력으로 사용하는 경우는 스위치를 생각하면 간단히 이해할 수 있다. 건전지와 연결된 전구사이에 스위치가 있는 간단한 실험장치를 생각해 보면 된다. 스위치를 손가락으로 눌러서 연결(on 되었다고 한다)되면 전구에 전압이 걸려서 켜질 것이고 손가락을 떼면 (off되었다고 한다.) 전구가 꺼지게 된다.



포트는 이와 같이 핀에 연결된 회로에 전압을 인가하거나(1, HIGH 신호) 인가하지 않을 (0, LOW 신호) 수 있는 스위치의 역할을 하는데 아두이노의 경우 이 스위치를 프로그램을 통해서 on시키거나 off시킬 수 있다. 사용자가 원하는 타이밍, 주기, 속도를 가지고 스위치를 켰다 끌 수 있는 것이다. 따라서 손으로 스위치를 조작하는 것과는 비교할 수 없는 정밀도와 속도로 개폐를 제어할 수 있다.


포트를 이용한 입력신호 받기


 입력의 경우에는 출력과 반대로 이 물리적인 핀과 연결된 부분의 전압이 0V(LOW)이냐 혹은 5V이냐(HIGH)를 읽어들이는 기능을 한다. 보통 디지털 입력 실험을 할 때 처음으로 접하는 부품이 택스위치 회로인데 택스위치가 눌려졌는지 혹은 떼어졌는지를 포트의 입력 기능으로 판별할 수 있다.


 위 그림 (a)에서 화살표 표시된 곳의 전압은 5V인데 저항에 전류가 흐르지 않아 저항 양단에 전위차가 발생하지 않기 때문이다. 반면에 (b)를 보면 화살표 된 곳의 전압은 0V인데 GND와 직결되어 있기 때문이다.


 이제 (c) 그림을 보면 스위치를 안 눌렸을 때 (a)와 같고 스위치를 누르면 (b)그림과 같다는 것을 알 수 있다. 따라서 스위치를 눌렀을 때와 안 눌렸을 때의 전압값이 달라지므로 포트에서 이 전압값을 읽어 들여서 스위치의 상태를 검출할 수 있다. 여기에선 사용된 저항 $R$을 '풀업(pull-up) 저항'이라고 한다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad006}

Posted by 살레시오
,

 프로그램을 작성/편집 하고 컴파일/디버깅 할 수 있는 통합 환경을 IDE(Integrated development envirionment)라고 한다. processing 이라는 JAVA 기반의 흥미로운 오픈소스 그래픽 개발 환경이 있는데 GUI 구현을 위해서 종종 아두이노와 같이 사용되기도 한다. ( processing.org 홈페이지에 자세한 내용이 있다.) 아두이노는 바로 이 processing 의 IDE를 이용하여 개발된 전용 IDE를 무료로 제공하고 있어서 편리하게 사용할 수 있다. 그래서 processing IDE의 외관과 아두이노 IDE의 그것과 매우 비슷하다. 아래의 공식 다운로드 링크에서 OS에 맞는 프로그램을 다운받아서 설치한다.


아두이노 IDE 공식 다운로드 페이지


설치한 후 실행시키면 아래와 같은 조금은 단순해 보이는 화면이 뜰 것이다. 이 프로그램을 이용하여 아두이노 프로그램을 입력하고 컴파일한 후 (USB로 아두이노 보드와 연결되어 있다면) 다운로드까지 수행할 수 있다.



 만약 사용자가 C++에 익숙하다면 물론 좋겠지만 그렇지 않더라도 라이브러리가 사용하기 편하게 잘 갖추어져 있으므로 익히는 시간이 그리 많이 걸리진 않는다. 사실 사용하는 언어는 C++ 이지만 잘 모른다고 미리 겁먹을 필요는 없다. 어차피 아두이노라는 플랫폼 자체가 비전공자(디자이너, 예술가 등)들이 깊은 전공 지식 없이 개발을 할 수 있도록 설계가 된 것이기 때문이다.


 아두이노 보드를 PC와 USB로 연결하고 IDE를 실행한 다음, 메뉴에서


  • 도구>보드 항목 : 연결된 보드의 종류를 선택

  • 도구>포트 항목 : 가상 시리얼 포트의 번호를 선택


위의 두 항목만 올바르게 선택했다면 일단 개발 환경은 다 갖춘 셈이다. 아두이노 포트 번호는 윈도우즈의 경우 장치관리자에서 확인할 수 있다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad005}

Posted by 살레시오
,