아두이노를 위한 프로그래밍 기초 5 – 복습
이 문서는 아두이노 보드를 사용하기 위해 필요한 프로그래밍 기초 지식이 없는 분들을 위한 가이드 문서입니다. 따라서 이미 프로그래밍에 대한 경험이 있다면 이 강좌 시리즈는 넘어가셔도 좋습니다.
=============================================================
이번 강좌에서는 이전 강좌와 비슷한 예제를 가지고 복습을 해보도록 하겠습니다. 간단히 아두이노 회로 구성을 살펴보고 어떻게 동작하는게 목표인지 보도록 하죠. 예제는 아두이노 공식 홈페이지에 소개된 포텐셔미터 입력(AnalogReadSerial) 예제입니다.
http://arduino.cc/en/Tutorial/AnalogReadSerial
간단하죠. 5V, GND를 포텐셔미터에 연결하고 포텐셔미터의 가운데 핀을 아날로그 0번 핀으로 연결합니다. 포텐셔미터는 동그란 손잡이를 시계, 반시계 방향으로 돌릴 때 마다 내부의 저항이 바뀌는 장치입니다. 그래서 가운데 핀(아날로그 0번 핀)으로 들어가는 전압이 바뀝니다. 즉, 아날로그 0번 핀으로 입력받는 전압이 0V ~ 5V 사이에서 변화하는데 이 값을 읽어서 입력 장치처럼 사용하는 것입니다.
지난 시간에는 버튼의 on/off 를 읽었기 때문에 digitalRead() 함수를 사용했죠. 이제는 0V~5V 사이에서 변화하는 값을 읽어야 하기 때문에 analogRead() 함수를 사용할 것입니다. 이름처럼 analogRead() 함수는 입력된 전압에 따라 0~1023 까지의 값을 반환해주는 함수입니다.
즉, 아두이노는 0V에서 동작전압 5V 까지를 1024등분해서 값을 알려준다는 얘기입니다. 이렇게 Analog 값(전압 입력 값)을 digital 값(0~1023)으로 변환해주는 모듈을 ADC(Analog to Digital Converter)라고 부르고 아두이노가 자체적으로 가지고 있습니다. 아두이노는 ADC 가 1024 단계(2^10)로 구분할 수 있기 때문에 10비트의 분해성능을 가지고 있다고 합니다.
analogRead() 함수로 읽은 값은 이전 예제와 마찬가지로 USB serial 로 출력합니다. Serial Monitor로 확인하면 0부터 1023 사이의 값이 주르륵 나오고 포텐셔미터를 돌릴 때마다 그 값이 변화해서 나올겁니다.
이정도 사전 지식을 가지고 아래 코드를 들여다보시면 대충 어떻게 돌아가는지 감을 잡으실 수 있을겁니다.
/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor. Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain. */ // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(1); // delay in between reads for stability }
예제에서 아래 라인만 부가 설명을 조금 하겠습니다. analogRead() 함수를 사용하는 부분입니다.
int sensorValue = analogRead(A0);
여기 보시면 analogRead 함수에 입력값으로 A0를 사용했습니다. 기존에는 핀 번호를 변수에 넣어둔 다음 변수 이름을 사용해서 전달했는데 여기서는 아두이노가 미리 정의해 둔 A0 라는 상수(=값이 변하지 않는 변수)를 사용했습니다. A0가 의미하는 것이 아날로그 0번 핀입니다.
이 예제가 이해가 안되시면 앞선 강좌부터 차근차근 다시 복습하는 것이 좋겠습니다. 프로그래밍에 왕도는 없습니다. 다만 자주 보다보면 익숙해지고 어느순간 이해가 됩니다.
# 강좌의 내용이 명확하지 않거나 이해가 힘든 부분이 있으시면 댓글로 말씀해 주세요. 해당 부분을 지속적으로 업데이트 하겠습니다.
=============================================================
이 문서는 작성자의 동의없이 개인적인 목적 외의 상업적인 목적으로 활용되어서는 안됩니다.
이 문서의 일부 혹은 전체를 수정, 삭제, 재배포 하여서는 안됩니다.
작성자 : GodsTale (godstale@hotmail.com)