아두이노의 장점은 저렴한 보드와 편리한 IDE제공이라고 할 수 있다. 이 두가지가 있기 때문에 "쉽게"라는 단어가 사용될 수 있다고 생각된다. IDE(Integrated Development Environment)란 한국말로 직역하면 통합개발환경이라고 한다. 통합개발환경이란 프로그램을 작성하고 디버깅(버그잡기)하고, 컴파일과 빌드(실행파일 생성)를 하여, 보드에 업로드할 수 있는 일련의 개발환경을 말한다. 이 모든 동작을 쉽게 할 수 있는 통합적인 개발툴을 제공한다는 것이다.
그럼, 아두이노 소프트웨어를 설치해보자!
아두이노 공식 사이트로 접속 > http://www.arduino.cc
상단메뉴에서 Download 메뉴에서 자신의 OS에 적합한 버전을 다운로드 한다.
다운로드한 압축파일의 압축을 풀면 설치 없이 사용할 수 있다.
그럼 아두이노 소프트웨어를 살펴보자. 아직은 아두이노 보드는 필요없다.
v1.0.1에서는 (mac에서는) 별도의 드라이버나 설치가 필요없는 것 같다. 그냥 실행하면 된다.
실행하면 메모장 같은 심플한 화면이 나타난다.
중앙에 보이는 하얀창이 프로그램을 작성하는 부분이다. 아두이노에서는 프로그램을 작성을 스케치(sketch)라고 부른다.
프로그램이라는 용어가 어렵게만 느껴진다면, "동작을 정의한다"라고 생각해도 된다.
아무것도 작성하지 말고 스케치 > 확인 / 컴파일 (Ctrl + R)을 실행한다. (또는 확인[] 버튼 클릭)
오류가 발생한다!? 아무것도 안했는데, 오류가 발생한다면 아무것도 안한게 문제겠지..
아두이노 하단에 프로그램의 오류내용이 표시된다. main함수에 setup과 loop가 없다는 내용이다.
자, 그럼 해결해 볼까? 아두이노 IDE에는 예제 프로그램이 포함되어 있다.
파일 > 예제 > 01.Basics > BareMinimum 을 선택
새로운 창이 열리면서 아래와 같은 프로그램이 자동으로 작성되어 있다.
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
다시 한번 아무것도 작성하지 말고 스케치 > 확인 / 컴파일 (Ctrl + R)을 실행 (또는 확인[] 버튼 클릭)
"컴파일 완료"라는 문구를 볼 수 있다. 이제 setup()과 loop() 두가지 함수가 필수라는 것을 알게 되었다.
BareMinimum 스케치는 기본적인 뼈대로, 새로운 프로그램을 작성할 때 BareMinimum을 불러와 사용하면 편리하다.
- void setup() {} : 프로그램 시작전 아두이노가 알고 있어야 할 사항을 명시 (Pin mode, 시리얼통신 속도, 라이브러리 등)
- void loop() {} : 아두이노에 의해서 반복적으로 실행되는 구문(함수)
대충 감이왔으면 LED를 제어해 보자. 기본적으로 보드에 붙어있는 LED(Digital 13번 Pin에 연결)를 제어한다.
파일 > 예제 > 01.Basics > Blink 를 선택합니다.
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
이제 케이블을 이용해 아두이노 보드를 PC와 연결한다. 보드의 ON에 불이 들어온 것을 확인한다.
확인[]버튼을 눌러 컴파일을 하고, 업로드[
] 버튼을 눌러 프로그램을 아두이노 보드에 업로드를 한다.
L이라고 표시된 노란색 LED가 확인용 LED 이다. 대부분의 아두이노 보드에 장착되어 있다.
1초간격으로 확인용 LED가 깜박이는게 보이는가? (확인용 LED는 13번 Pin에 연결되어 있다)
드디어, 아두이이노를 스케치 프로그램으로 제어하고 있다.
loop()함수 안에 작성된 내용은 계속 반복적으로 실행된다. 따라서 LED는 무한히 깜박이게 된다.
led라는 문자를 13이라는 숫자로 사용하겠다 ==> int led = 13;
13번 Pin을 OUTPUT 모드로 사용하겠다. ==> pinMode(led, OUTPUT);
led번 Pin에 HIGH(1) 값을 써 주겠다 ==> digitalWrite(led, HIGH);
1초동안 쉬겠다 (1000 ms) ==> delay(1000);
led번 Pin에 LOW(0) 값을 써 주겠다 ==> digitalWrite(led, LOW);
1초동안 쉬겠다 (1000 ms) ==> delay(1000);
* digital pin에 HIGH(1)을 쓴다라는 것은 5V 전류를 흘려보내겠다는 의미. 즉, LED가 On되고, 반대로 LOW(0)을 쓴다는 의미는 0V 전류를 흘려보내겠다는 의미. 즉 LED가 Off된다.
그럼, 이제 브레드보드에 LED를 장착하고 직접 LED를 제어해 보도록 하자. 이번에는 흔히 빵판이라고 불리는 브레드보드에 부품을 꽂아서 사용한다. 브레드보드는 각종 부품을 꽂아서 테스트해 볼 수 있는 구멍이 여러개 뚫려있는 회로이다. 납땜없이도 간단히 회로를 구성할 수 있다. 지금은 학습중이기 때문에 회로를 자주 변경하고 부품을 반복해서 사용하기 때문에 아주 유용하다. 회로가 확정되면 진짜 보드에 납땜을 하거나 PCB로 제작하면 된다.
이번 실험에서는 Digital 5, 6, 7번 Pin에 LED를 연결하고 1초간격으로 하나씩 켜보도록 하겠다. 지난 시간에서는 LED를 5V와 GRD(그라운드)에 직접 연결했었다. 브레드보드에 270Ω 저항과 LED를 연결해 함께 사용할 건데, 저항을 사용하는 이유는 LED에 과도한 전류가 흘려 LED가 망가지는 것을 방지하기 위함이다. 저항을 연결하면 전류의 흐름을 방해해 전류가 덜 흐른다고 대략적으로 이해하면 된다. 저항을 사용하면 LED의 밝기가 줄어드는 것을 느낄 수 있는데, 저항에 대해서는 다음 기회에 다시 정리하겠다.
아래와 같이 회로를 구성한다. 저항을 겹쳐서 사용해서 알아보기 어렵게 되었다. 흠ㅡㅡ 사진을 보면 좀 더 이해가 쉬울 것 같다.
브레드보드에 LED와 저항의 배치를 마쳤으면 스케치 프로그래밍에 들어간다.
BareMinimum 스케치 예제를 열고 파일 > 다른 이름으로 저장한다. 아래와 같이 스케치 프로그램을 작성한다. 이번에는 5, 6, 7번 Pin을 output mode로 사용할 것이고, 1초간격으로 5번, 6번, 7번을 차례로 켜고 나머지는 모두 끄는 동작을 할 것 이다.
int led_1 = 5; int led_2 = 6; int led_3 = 7; void setup() { pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); pinMode(led_3, OUTPUT); } void loop() { //Digital 5번 Pin만 켜고, 1000ms동안 쉰다 digitalWrite(led_1, HIGH); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); delay(1000); //Digital 6번 Pin만 켜고, 1000ms동안 쉰다 digitalWrite(led_1, LOW); digitalWrite(led_2, HIGH); digitalWrite(led_3, LOW); delay(1000); //Digital 7번 Pin만 켜고, 1000ms동안 쉰다 digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, HIGH); delay(1000); }
스케치 프로그램의 작성이 완료되었으면, 상단의 확인[]버튼을 눌러 컴파일을 하여 오류가 발생하는지 확인한다. 오류의 내용은 하단에 표시되므로 오류가 있다면 수정하여, "컴파일 완료"가 표시되는 것을 확인한다. 이제, 업로드[
] 버튼을 눌러 아두이노 보드에 업로드를 한다.
아래 동영상과 같이 동작하면 성공!!
다음에는 버튼을 이용해 LED를 제어하는 방법과 저항에 대해 좀 더 다루도록 하겠다.
[Arduino Uno R3]
우선, UNO R3 보드에 대해 좀 살펴보자. 전산이나 전기/전자관련하여 완전 초보자라면 조금은 어려울 수 있는 내용인데, 이해가 안되어도 한번쯤은 읽어보는게 좋겠다. 생소하더라도 용어라도 읽히는게 좋기 때문이다.
UNO R3은 Micro Controller Unit(MCU)으로 ATmega328를 사용한다. MCU가 무엇이냐? 보통 MCU는 컴퓨터의 CPU라고 생각하면 되고 흔히, 컴퓨터의 두뇌라고 표현을 하며, 계산을 하고 프로그램을 돌려주는 역할을 한다. 최종적으로 완성된 프로그램을 아두이노에 올리고, 이 MCU를 복사해서 제품을 만들 수 있다. 프로그램이 저장되는 공간과 메모리 CPU, I/O핀 모두 들어있는 아두이노의 핵심이라고 볼 수 있겠다.
UNO R3에 사용된 ATmega328에는 여러가지 특징들이 있겠지만, 특별히 알고 있어야 할 점은..
- Clock Speed 16MHz = 1초에 16000번 동작한다로 이해
- Flash memory 32K = 프로그램 저장공간(부트로더가 0.5K정도 차지), 최대 30Kbyte 크기의 프로그램을 사용 가능
- SRAM 2K = 프로그램 실행시 사용되는 저장역공간(부족하다면 PROGMEM을 사용하여 Flash에 저장 가능)
- EEPROM 1K = 아두이노의 전원이 꺼져도 데이터가 보존되는 메모리 공간
* 부트로더는 아두이노가 동작시키고 우리가 작성한 프로그램을 동작시키는 기본 프로그램이라고 생각하면 됩니다. 작성된 sketch를 USB를 통해 아두이노에 업로드 할 수 있는 것도 부트로더가 실행되고 있기 때문이다. (정확히는 부팅시 일종의 OS를 메모리영역에 올리고 실행시킨다)
이 정도면 정상적으로 작성된 프로그램이 아두이노에서 동작하지 않을 때, 의심해 볼 수 있는 원인을 하나 더 알게 되었다
마지막으로 주로 사용하게 될 PIN에 대해 살펴보자. Digital I/O Pin 14개와 Analog Input Pin 6개가 있습니다.
Digital 0번은 Rx라고 써있는데 PC에서 데이터를 받는 Pin이다. 프로그램 업로드에 실패한다면 0번에 연결된 선을 뽑고 다시 시도해 보는게 좋다. Digital 1번은 Tx라고 써있는데 아두이노가 PC로 데이터를 전달하는 Pin이다. Pin번호 앞에 ~표시가 되어있는 Pin은 PWM(Pulse Width Modulation) Pin으로, analogWrite(0~255)를 사용할 수 있는(=출력전압을 조절할 수 있는) digital Pin이라고 이해하고 있으면 된다. 이번 Blink 실험에서 13번 Pin에 확인용 LED가 붙어 있는 것을 확인했다. LED가 장착되어 있기 때문에 Input으로 사용시 좀 부적절한 부분이 있다. 설계중 문제가 생긴다면 13번 Input을 다른 Pin으로 대체해보는게 좋다.
Analog Input은 0~1023까지의 값을 읽을 수 있다. 주로 가변저항 같은 값을 읽는데 사용된다.
[출처] 아두이노 배우기 7 - 아두이노 UNO|작성자 더파
'ARDUINO' 카테고리의 다른 글
Arduino #04 Switch (작성중) (0) | 2013.02.09 |
---|---|
Arduino #02 LED 다루기 (0) | 2012.08.12 |
Arduino #01 시작하기 (2) | 2012.08.11 |