본문 바로가기

아두이노로 장난하기

아두이노 기초지식_스케치의 기본 구조



안녕하세요 고군입니다.

이번시간에는 아두이노 우노를 갖고 놀기 전에 도구가 어떤 원리에 의해 동작하는지를 간단히 알아보고 가겠습니다. 아두이노를 제대로 갖고 놀기 위해서는 전자 공학, 회로 이론, C / C++언어등을 어느정도 알고 있어야 합니다. 물론 모든 이론을 알고 시작하면 더 없이 좋겠지만 아마도 이론만 공부하다 포기를 해버리지 않을까하는 걱정이 듭니다. 아두이노를 하실 때는 그냥 장난감을 갖고 논다고 생각하시면 좋을 것 같습니다. 재미가 생기면 어려운 이론들도 금방 이해가 가실 것이기 때문입니다.


마이크로컨트롤러는 주변 환경으로부터 정보를 획득하고 이를 처리하여 그 결과에 따라 다양한 동작을 수행합니다. 마이크로컨트롤러는 아날로그 및 디지털 형식의 데이터를 받아들일 수 있으면, 출력 역시 아날로그 및 디지털 형식으로 데이터를 출력 할 수 있습니다. 하지만 아날로그 데이터는 내부적으로 디지털 데이터만을 처리할 수 있으므로 입력된 아날로그 데이터는 처리 전에 디지털 데이터로 변환되어야 하며, 이 처리는 ADC(Analog-to-Digital Converter)를 통해 처리되고 그 반대의 처리는 DAC(Digtal-to-Analog Converter)를 통해 처리됩니다. 아두이노에 사용된 ATmaga328는 ADC는 내장되어 있어 아날로그 입력을 받아 들일 수 있으나 DAC는 내장되어 있지 않아 아날로그 출력은 사용할 수 없습니다. 대신 아두이노에서 나오는 모델 중 DAC가 내장 되어 있는 것을 사용하면 됩니다.


아두이노 우노 보드의 구조


아두이노 우노에 사용된 ATmega328는 14개의 디지털 입출력 핀과 6개의 아날로그 입력 핀이 내장되어 있습니다,  6개의 아날로그 입출력핀은 디지털 입출력 핀으로도 사용 할 수 있으므로 최대 20개의 디지털 입출력을 사용 할 수 있습니다.  14개의 입출력 핀 중 6개는 PWM신호 출력을 사용할 수 있도록 구성되어 있습니다.


▶ 스케치의 기본 구조


아두이노로 프로그램을 작성할 때 C언어의 메인 함수 처럼 반드시 작성해야 하는 함수는 setup과 loop의 두가지 입니다. setup은 함수는 아두이노 우노의 입출력 포트나 내장되어 있는 레지스터에 관하여 초기화 해주는 함수이고, loop함수는 프로그램이 중인 동안 반복적으로 호출되는 함수입니다. 아래 이미지는 아두이노 IED 프로그램을 실행 했을 때의 첫 화면으로 이 상태에서 컴파일을 하게되면 오류없이 컴파일이 되나 아무런 동작을 수행 하지 않습니다. 어떤 동작을 하기 원한다면 setup함수와 loop함수에 코드를 작성해서 넣으면 됩니다.



▶ Blink 예제


아두이노 보드에 제일 처음 작동 확인에 사용했던 예제를 다시 한 번 보겠습니다. 각 행의 앞에 주석으로 설명을 붙인 것이 아래 예제입니다. 이 안에는 크게 두 개, setup과 loop라는 함수가 있습니다. setup은 프그램이 시작할 때 한 번만 실행되고 loop는 실행 후 아두이노 보드에 전원이 켜져 있는 동안 무한으로 반복해서 실행하게 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// LED에 연결한 핀 번호
int ledPin = 13;
// setup은 처음에 한 번만 실행된단.
void setup() {
  // LED에 연결한 핀의 모드를 출력으로 설정
  pinMode(ledPin, OUTPUT);
}
 
// loop는 아두이노 보드의 전원이 켜져 있는 동안 반복해서 실행된다
void loop() {
  // LED에 연결한 핀의 값을 HIGH로 설정하고 LED를 켠다
  digitalWrite(LED_BUILTIN, HIGH);   
  // 1000ms(1S) 지연한다
  delay(1000);
  // LED에 연결한 핀의 값을 LOW로 설정하고 LED를 끈다
  digitalWrite(LED_BUILTIN, LOW);
  // 1000ms(1S) 지연한다
  delay(1000);
}
cs


LED에 연결한 핀의 값을 H로 하면 LED를 켜고, L로 하면 끄고, 그 사이에 1000ms(1초)씩 기다려 깜빡이는 주기를 결정합니다.

  디지털 핀 13번(D13)은 보드에 있는 L이라 표기된 LED에 연결되어 있습니다. digitalWrite로 13번 핀을 H로 만들면 그 핀의 전압은 5V가 되어 저항을 거쳐 GND에 연결되어 있는 LED에 불이 켜집니다.

digitalWrite로 13번 핀을 L로 만들면 그 핀의 전앖은 0V가 되어 GND(0V)에 연결된 LED는 전류가 흐르지 않아 LED가 꺼지게 됩니다.