2016년 7월 1일 금요일

아두이노 프로그래밍 기초

아두이노 프로그래밍에 있어서 기초는 다음의 함수 역할을 이해하는 것입니다.
  • setup
  • loop
  • pinMode
  • digitalWrite
  • digitalRead
  • analogWrite
  • analogRead

setup/loop
아두이노 스케치는 항상 다음과 같은 모습으로 시작됩니다.

void setup()
{  
}

void loop()
{  
}

setup은 보드 작동 시 최초 한번만 수행되고, loop는 이후 반복적으로 수행됩니다. 따라서, 주로 setup에는 설정과 관련된 코드를 넣고, loop에는 반복적으로 해야 할 코드를 넣어야 합니다.


pinMode
pinMode 함수는 아두이노 보드의 핀 상태를 결정합니다. (자세한 정보)
pinMode 함수를 사용하기 위해서는 2가지 정보가 필요합니다.
  • pin : 설정할 핀
  • mode : 사용할 용도
mode는 INPUT, INPUT_PULLUP, OUTPUT의 3가지로 선택할 수 있습니다. INPUT과 INPUT_PULLUP은 입력 용도로 동일하지만 PULL UP이란 옵션을 사용하느냐의 차이입니다. PULL UP에 대해서는 향후에 다루겠습니다.
결국 크게 보면 INPUT과 OUTPUT으로 용도를 2가지로 볼 수 있으며, INPUT은 센서 용도이고 OUTPUT은 제어 용도입니다.


Digital과 Analog
먼저, 전자 회로에서 Digital과 Analog의 개념을 이해할 필요가 있습니다.
Digital은 TTL(Transistor-Transistor Logic)에서 나온 개념으로 0V와 5V 2가지 상태로 정보를 교환하는 것을 의미합니다.
Digital은 2진법의 0과 1로도 대체될 수 있으며 부울(BOOL) 대수에 있어서 TRUE, FALSE의 개념으로도 사용됩니다.

반면에 Analog는 0 ~ 5V 사이의 모든 상태를 사용합니다.
0 ~ 5V 사이의 상태를 숫자화하는 것을 양자화(Quantization)라 부르며 양자화의 세밀함을 해상도(Resolution)라 합니다.
전자 회로에서 많이 사용되는 해상도는 다음과 같습니다.
  • 8 bit : 256 단계
  • 10 bit : 1024 단계
  • 12 bit : 4096 단계
정리하면 Digital은 2가지 상태로 정보를 사용한다는 것이고, Analog는 해상도 만큼의 단계로 정보를 사용한다는 의미입니다.


digitalWrite
digitalWrite는 말 그대로 Digital(2가지 상태) 방식으로 Write(OUTPUT)를 하겠다는 뜻입니다.
digitalWrite 함수를 사용하기 위해서는 2가지 정보가 필요합니다.
  • pin : 제어할 핀
  • value : 핀의 상태 값
Digital은 2가지 상태이므로 아두이노에서는 LOW, HIGH로 사용합니다.
digitalWrite를 사용하기 위해서는 해당 핀이 pinMode에 의해 OUTPUT으로 이미 설정되어 있어야 하며, 이 함수를 통해 핀의 상태를 0V, 5V로 바꿀 수 있으므로 회로적으로 연결된 전자 부품을 제어할 수 있는 것입니다.


digitalRead
digitalRead는 Digital(2가지 상태) 방식으로 Read(INPUT)를 하겠다는 뜻입니다.
digitalRead 함수를 사용하기 위해서는 1가지 정보가 필요하며, 반환 값이 있습니다.
  • pin : 사용할 핀
  • 반환 값 : 핀의 상태 값
Digital은 2가지 상태이므로 LOW, HIGH로 값이 반환됩니다.
digitalRead를 사용하기 위해서는 해당 핀이 pinMode에 의해 INPUT으로 이미 설정되어 있어야 하며, 이 함수를 통해 핀에 연결된 다른 전자 부품의 상태를 알 수 있는 것입니다.


analogWrite
analogWrite는 Analog(Resolution 단계) 방식으로 Write(OUTPUT)를 하겠다는 뜻입니다.
이 말은 0V, 5V뿐 아니라 1.7V, 2.45V와 같은 중간 단계도 사용할 수 있다는 의미입니다.
아두이노는 Analog 신호 출력을 위해 PWM(Pulse Width Modulation)이란 특수한 방식을 사용합니다.

이 방식은 진짜 Analog가 아닌 Digital을 이용한 일종의 트릭입니다. 이렇게 하는 이유는 DAC(Digital-to-Analog Converter)라 부르는 하드웨어가 비싸서 아두이노 보드에는 포함되어 있지 않기 때문이며 PWM을 이용해서 Analog 출력을 흉내내고 있는 것입니다.
아두이노 Uno의 경우 PWM Resolution은 8bit이기에 0 ~ 255 범위의 수를 사용합니다.
PWM을 만들 수 있는 핀은 정해져있기 때문에 아무 핀이나 이것을 할 수 없으며 아두이노에서는 ~표시로 PWM이 가능한 핀을 알려주고 있습니다.

analogWrite를 사용하기 위해서는 해당 핀이 pinMode에 의해 OUTPUT으로 설정되어야 합니다.


analogRead
analogRead는 Analog(Resolution 단계) 방식으로 Read(INPUT)를 하겠다는 뜻입니다.
아두이노에는 ADC(Analog-to-Digital Converter)라 부르는 장치가 내장되어 있어서 0 ~ 5V 사이의 상태를 모두 입력받을 수 있습니다.
아두이노 Uno의 경우 ADC Resolution은 10bit이기에 0 ~ 1023 범위의 수를 사용합니다.
ADC를 사용할 수 있는 핀은 정해져있기 때문에 아무 핀이나 이것을 할 수 없으며 아두이노에서는 A표시로 ADC가 가능한 핀을 알려주고 있습니다.

대부분의 센서들은 ADC 핀에 연결되므로 아두이노에서 analogRead 함수를 이용해서 센서 정보를 값으로 받을 수 있습니다.



댓글 없음:

댓글 쓰기