전자, 전기, 소프트웨어, 기계, 3D 프린터, 아두이노, 라즈베리파이, 쇼핑몰 창업

전체 페이지뷰

이 블로그 검색

최신글

[Blender] 3D viewport 사용법

[강좌] 12. 아두이노 시리얼 모니터로 아날로그 신호 읽어오기


무작정 보고 따라하며 배우는 아두이노 강좌입니다.
아두이노 공식 사이트에서 제공하는 강좌를 바탕으로 작성되었습니다.
해당 게시글은 Arduino UNO 보드를 기준으로 작성되었습니다.



12. 시리얼 모니터로 아날로그 신호 읽어오기


아두이노에서 여러 센서를 활용하여 작동하는 것을 만들기 위해서는 센서의 값을 읽어올 수 있어야 합니다. 기존 6번 강좌 '아두이노에서 시리얼 모니터로 디지털 신호 읽어오기' 에서 알려드린 내용 만으로도 0과 1의 값만 알려주는 센서를 사용이 가능하지만, 세상에는 수많은 센서가 존재하며, 저항의 변화값으로 제어해야 하는 센서도 많이 존재합니다. 예를들어 가변저항만 보아도, 이름 그대로 저항값이 변화합니다. 이 저항값에 기준을 지정하여 코드를 제어하지요.

저항의 변화값을 알고 기준점을 정하여 하드웨어가 어찌 작동해야할지 정해야 하는 경우가 생기면, 환경에 따라 바뀌는 저항 값을을 읽어와서 테스트를 해 보며 기준치를 정할 수 있어야 합니다. 

이 경우 디지털 신호를 시리얼 모니터로 확인했던 것 처럼 아날로그 신호도 시리얼 모니터로 확인하면 됩니다.


준비물 ( 아두이노와 PC는 기본입니다 )

브레드보드, 점퍼케이블, 10k 옴 가변저항


준비물이 모두 준비되면 아래 이미지와 같이 부품과 아두이노를 연결해 줍니다. 3개의 선을 이용하여 가변저항과 보드가 사진처럼 연결되도록 장착해 주세요.

가변저항의 1번핀은 GND, 2번핀은 5V, 3번핀은 A0에 연결해 주세요.



가변저항을 돌리게 되면, 가운데 단자와 연결된 양 단자의 저항값이 달라지게 됩니다. 예를 들어 5V와 가운데 핀의 저항이 0에 가까워 지면, 가운데 핀의 전압은 5V에 근접할 것이고, 그 반대의 경우에는 가운데 핀의 전압이 0V 즉, GND에 가까워 질 것입니다.

아두이노 보드에는 특별한 회로가 있지요. ADC라고 불리는 회로는 Analog-to-Digital Converter입니다. 아날로그 전압을 읽어와서 디지털 숫자 0~1023으로 변환해 줍니다. 아까 경우와 조합해 보면, 가운데 핀의 전압이 0V에 근접해지면 아두이노에서는 0의 입력값을 보여주고, 5V에 가까워지면 1023의 값을 보여줍니다.

이러한 0~1023의 값을 읽어오는 명령어는 무엇일까요?
analogRead()를 사용하여 코드 내에서 값을 불러올 수 있습니다.


코드설명 


기본 강좌에 등장하는 코드는 아두이노 파일->예제 에서 불러올 수 있습니다.

코드는 매우 짧고 간단합니다.
시리얼 통신 설정을 하고, 아날로그 값을 읽어와서, 시리얼 모니터로 출력을 하지요.

Serial.begin(9600);
시리얼 통신 속도를 설정합니다.

int sensorValue = analogRead(A0);
A0핀의 값을 센서 값으로 저장합니다.

Serial.println(sensorValue);
센서값을 시리얼 모니터에 띄워줍니다.

delay(1);
지연 없이 너무 빠른 간격으로 시리얼 모니터에 값을 출력하게 되면, 값을 제대로 읽어오지 못해 안정된 값을 출력하지 못하게 됩니다. 딜레이를 넣어 안정된 값을 출력할 수 있도록 합니다.




/*
  AnalogReadSerial
  Reads an analog input on pin 0, prints the result to the serial monitor.
  Graphical representation is available using serial plotter (Tools > Serial Plotter menu)
  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
}