IT개발및프로그래밍/아두이노

아두이노 4: 디지털과 아날로그 신호

devgodmj 2024. 10. 22. 08:24

 

1. 디지털 신호란?

디지털 신호는 주로 0(OFF)와 1(ON), 두 가지 상태로만 표현됩니다. 아두이노에서는 이를 통해 장치의 작동을 제어할 수 있습니다.

  • 디지털 핀: 아두이노에는 0번부터 13번까지의 디지털 핀이 있습니다. 이 핀들은 디지털 신호를 입출력할 수 있으며, 특정 핀을 입력용으로 사용할지, 출력용으로 사용할지 설정해야 합니다.
  • pinMode:  디지털 핀의 용도를 설정하는 명령어 
    • 매개변수: 핀의 이름, 입력 또는 출력
    • INPUT: 0, 입력으로 설정
    • OUTPUT: 1, 출력으로 설정
pinMode(13, OUTPUT);  // 13번 핀을 출력 모드로 설정

2. 디지털 출력

  • 디지털 출력: 디지털 핀에서 전압을 출력하여 전자 기기를 제어하는 방식입니다. 예를 들어, LED를 제어할 때 전압을 0V에서 5V로 바꾸어 LED를 켜고 끌 수 있습니다.
  • digitalWrite: 디지털 신호를 출력할때 사용하는 명령어 
    • 매개변수: 디지털 신호를 출력할 핀 번호, 디지털 신호를 내보낼지 안 내보낼지 알려주는 값
    • LOW: 0, 전압 0V
    • HIGH: 1, 전압 5V
pinMode(13, OUTPUT);  // 13번 핀을 출력으로 설정
digitalWrite(13, HIGH);  // 13번 핀에서 5V 출력 (LED ON)
digitalWrite(13, LOW);   // 13번 핀에서 0V 출력 (LED OFF)

 

 

 

 

 

 


3. 디지털 입력

  • 디지털 입력: 버튼과 같은 입력 장치의 상태를 확인할 때 사용됩니다. 버튼이 눌렸는지 여부를 확인하여 프로그램에서 특정 동작을 수행할 수 있습니다.
  • digitalRead: 디지털 신호 입력 값을 읽는 명령어 
    • 매개변수: 디지털 신호 입력 값을 읽을 핀 번호
  • 함수를 호출하면 해당 핀 번호의 입력 값을 반환 값으로 돌려준다.
  • 반환값을 HIGH, LOW와 비교해 전압이 무슨 상태인지 확인
pinMode(13, INPUT);  // 13번 핀을 입력으로 설정
int buttonState = digitalRead(13);  // 버튼 상태 읽기 (HIGH 또는 LOW)
if(buttonState == HIGH){
  // 전압이 HIGH인 경우
} else {
  // 전압이 LOW인 경우
}

 


 

  • pinMode 함수를 이용해 디지털 핀을 입력 용도로 쓸지 출력 용도로 쓸지 결정한다.
  • 출력인 경우 digitalWrite 함수를 이용해 출력을 제어한다.
  • 입력인 경우 digitalRead 함수를 이용해 입력 값을 읽는다.

 

 

 


 

4. 플로팅 현상과 풀업/풀다운 저항

 

디지털 핀을 입력으로 사용할 때는 플로팅 현상이 발생할 수 있습니다. 이는 핀이 HIGHLOW 사이에서 전압이 불안정하게 왔다 갔다 하는 현상입니다. 디지털 핀을 입력으로 설정하면 입력 핀 주위에 아주 작은 전류가 흐르기 때문입니다. 이 문제를 해결하기 위해 풀업 또는 풀다운 저항을 사용하여 입력 핀의 전압을 안정시킵니다.

 

  • 풀다운 저항: 입력 핀을 기본적으로 LOW 상태에 고정시키고, 버튼을 눌렀을 때 HIGH 상태로 전환합니다.
  • 풀업 저항: 입력 핀을 기본적으로 HIGH 상태에 고정시키고, 버튼을 눌렀을 때 LOW 상태로 전환합니다.

 

1) 풀다운 저항

  • 입력 핀의 전압을 평상시 LOW로 고정시킨다.
  • 버튼이 안 눌렸을 때 입력 핀과 그라운드 핀이 저항을 사이에 두고 연결된다. 
  • 평상시 입력 핀에 흐르는 작은 전류가 모두 그라운드 핀으로 빠져나가 입력 핀의 전압이 LOW가 된다.
  • 버튼을 눌렀을 때는 5V 전원 핀에서 전류가 흘러 입력 핀으로 들어가고 이 때문에 입력 핀의 전압이 HIGH가 된다.
  • 그라운드 핀으로 전류가 흐르지 않는 이유
    - 버튼을 눌렀을 때 5V 전원 핀에서 전류가 출발
    - 전류는 전선을 통해 가다 두 갈래길에 도착
    - 한쪽은 곧바로 입력 핀으로 들어가는 길, 한 쪽은 중간에 저항이 있고 그라운드 핀으로 가는 길 
    - 전류는 큰저항(10k 옴)이 중간에 있는 그라운드 핀보다 입력 핀으로 흐름 

 

 

 

2) 풀업 저항

  • 입력 핀의 전압을 평상시 HIGH로 고정시킨다.
  • 평상 시 5V 전원 핀과 입력 핀이 중간에 저항을 두고 연결된다. 
  • 풀다운때와 마찬가지로 10k 옴 정도의 큰 저항 사용
  • 5V 전원 핀과 연결되어 있기 때문에 전압은 HIGH가 된다.
  • 버튼을 눌렀을 때 5V 전원 핀에서 전류가 흘러 그라운드 핀으로 들어가고 이 때문에 입력 핀의 전압이 LOW가 된다.
    - 버튼을 눌렀을 때 5V 전원 핀에서 전류가 출발하고 저항을 지난다.
    - 두 갈래길에 도착하는데 한 쪽은 입력 핀으로 가는 길, 한 쪽은 그라운드 핀으로 가는 길 
    - 그라운드 핀의 전압이 완전 0V이기 때문에 전류는 입력 핀 쪽이 아닌 그라운드 핀 쪽으로 흐른다.
    - 입력 핀에 흐르는 작은 전류도 마찬가지로 그라운드 핀 쪽으로 흐른다.


5. 아날로그 신호란?

아날로그 신호0V부터 5V 사이의 다양한 전압 값을 처리할 수 있는 신호입니다. 이는 전압이 연속적으로 변하는 것을 측정하거나 제어할 때 유용합니다.

  • 아날로그 입력: 아두이노에는 A0부터 A5까지의 아날로그 핀이 있으며, 이 핀을 통해 입력되는 전압 값을 읽을 수 있습니다.
int sensorValue = analogRead(A0);  // A0 핀의 아날로그 신호 읽기 (0 ~ 1023)

  • 아날로그 출력: 아두이노에서는 아날로그 출력 핀을 통해 PWM(펄스 폭 변조) 방식을 사용하여 0V와 5V 사이의 전압을 출력할 수 있습니다. 전압의 값: 0(0V)~255(5V)
analogWrite(9, 127);  // 9번 핀에 약 2.5V 출력 (0~255 범위)

아날로그 신호는 조도 센서, 온도 센서 등에서 값을 읽어와 LED 밝기를 제어하거나 모터 속도를 조절하는 데 활용할 수 있습니다​.

5. PWM(펄스 폭 변조)

아두이노의 PWM 방식은 디지털 신호를 사용하여 아날로그처럼 출력할 수 있는 방법입니다. 이는 일정 시간 동안 신호를 켜고 끄는 방식으로 전압을 조절하는 기술입니다. PWM을 통해 전류의 흐름을 조절하며, High와 Low 비율(튜티 사이클,Duty Cycle)을 이용해 평균 전압을 제어합니다.

 

  • PWM의 원리와 특징
    • 듀티 사이클(Duty Ctcle): 단위 시간 동안 높은 전압이 차지하는 비율로, PWM 신호의 출력 전압을 결정하는 요소입니다.
    • 아두이노의 한계: 아두이노의 디지털 GPIO 핀은 단일 비트 신호(0 또는 1)만 출력할 수 있어 높이를 조절할 수 없습니다. 대신 ~ ~3, ~5, ~6, ~9, ~10, ~11번 핀('~' 틸트 표시)을 통해 PWM을 사용하여 아날로그와 비슷한 출력을 만듭니다.
  • 응용 분야
    • PWM은 무드 등 조명 조절, 부저의 음계 조절, LCD 밝기 조절과 같은 다양한 응용에서 사용됩니다.
  • 사용 방법
    • 아두이노에서 PWM을 사용할 때는 analogWrite(0~255) 함수를 이용해 듀티 사이클을 설정하며 이를 통해 출력 강도를 제어할 수 있습니다.
    • 예를 들어, analogWrite(9, 127)은 9번 핀에서 절반의 시간 동안 신호를 켜고 나머지 절반 동안 신호를 꺼서 평균적으로 2.5V의 전압을 출력하는 것과 같습니다.