반응형

플로팅 현상이란?

직역하면 "떠 있는, 떠다니는"이다.

신호 입력을 받는 핀에서 5V, GND 신호가 아닌 입력 받는 신호가 없을 때 일어난다.

아래 예제를 통해 더 알아보겠다.

 


void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT);
}

void loop() {
  Serial.println(digitalRead(9));
}

위 소스코드를 예제로 진행해 보겠다.

9번 핀을 입력 핀으로 설정하고 입력받은 결과를 출력하는 예제이다.

 

회로는 위와 같이 구성하였다.

스위치를 누르면 5볼트의 전원이 입력 핀에 인가되는 회로이다.

 

예상되는 결과로는 스위치를 누를 때마다 1을 결과로 출력 해야 하는데 중간중간 0과 1을 교차하며 결과를 출력하는 것을 볼 수 있다. 맨손으로 입력 핀 근처 스위치를 대고 있었을 경우 교차하는 횟수는 더 잦았을 것이다.

 

위와 같은 현상이 플로팅 현상이다.

 


플로팅 현상 해결 방법

위와 같이 플로팅 현상은 스위치를 누르고 있지 않는 상태, 즉 입력받는 신호가 없을 때 일어난다.

해결 방법은 스위치를 누르고 있지 않는 상태일 때 입력받는 신호를 저항을 통해 연결해 만들어주는 것이다.

아래 풀다운, 풀업 저항 회로 예제를 통해 더 알아보겠다.

 


저항과 입력받을 핀이 더 생겼다.

이렇게 스위치를 누르고 있지 않는 상태에서는 GND 신호를 읽게 하는 것이다. 이것이 풀다운 저항 회로이다.

그럼 평소에는 0의 값만 입력을 받다가 스위치를 누르면 1의 값을 입력받을 것이다.

전류는 저항이 작은 곳으로 흐르기 때문에 스위치를 누르면 5V가 바로 GND 쪽으로 흐르지 않고 비교적 저항이 작은 입력 핀 쪽으로 흐르게 된다.

 

이렇게 즉각즉각 5V의 1의 값을 입력받는 것을 볼 수 있다.

 

바로 이어서 풀업 저항 회로도 알아보자

풀다운 저항 회로에서 저항과 스위치의 위치가 바뀌었다.

 

풀다운과는 반대로 평소에는 1의 값을 입력받다가 스위치를 누르면 0의 값을 입력받는 것을 볼 수 있다.

 

하지만 아두이노에서는 풀다운 저항 회로를 구성할 필요가 없다.

아두이노 보드에 기본적으로 기능이 탑재되어 있기 때문이다.

 

void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT_PULLUP);
}

void loop() {
  Serial.println(digitalRead(9));
}

원래의 예제 소스코드 핀 모드를 INPUT에서 INPUT_PULLUP으로 바꿔주기만 하면 내장된 풀업 저항을 사용할 수 있다.

 

회로는 위와 같이 구성하였다.

첫 번째 예제는 5V를 직접 입력 핀에 인가하는 회로였는데 지금은 GND를 직접 입력 핀에 인가하는 회로이다.

첫 번째 예제의 결과를 겪었다면 플로팅 현상이 나타날 것이라고 예상할 것이다.

 

하지만 풀업 저항 회로를 구성하지 않았음에도 불구하고 내장된 풀업 저항 기능으로 플로팅 현상 없이 풀업 저항 회로를 구성한 것과 같이 동작하는 것을 볼 수 있다.

 

반응형

+ Recent posts