본문 바로가기
Project/혼술 키트

혼술키트 - 5

by 알파쿼카 2022. 4. 21.

혼술 키트 제작 -5



<버튼으로 동작하는 led 연결>

 

아두이노에 버튼을 누르면 LED가 켜지는 방식을 추가하는 과정에서

bouncing 현상이 일어나 버튼을 누르지 않아도 LED가 깜빡거리는 현상이 발생했습니다... ㅠㅠ

그래서 debouncing을 해주었습니다.


  • Bounce 현상이란?

스위치의 접점이 붙고 떨어지는 순간의 짧은 시간중에 (약 100ms)

스위치가 고속으로 접점이 붙고 떨어지며 ON/OFF가 반복되는 (LED가 깜빡이는) 현상

 

바운스 현상은 약 100ms정도의 시간동안 발생하므로

인터럽트가 발생한 뒤 100ms가 지났을 때를 한번 더 체크함으로 방지가 가능합니다.


 

이런식으로 100ms가 지난뒤에도 한번 더 체킹하는 디바운싱을 추가하였습니다.

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  pinMode(7, INPUT);

  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:

  //디바운싱
  if (digitalRead(7) == HIGH)
  {
    delay(100);
    if (digitalRead(7) == HIGH)
    {
      
      Serial.println("push");
      digitalWrite(8, HIGH);
      delay(10);
    }
  }
  else
  {
    digitalWrite(8, LOW);
          Serial.println("no push");
    delay(10);
  }
}

디바운싱을 추가하였는데도 바운싱 현상이 계속 발생해서 알아보니

10㏀의 저항을 끼지 않아서 바운싱이 일어나는 것이었습니다.


  • LED가 누르지않아도 깜빡거려요 -> 해결법은?

1. 10㏀의 저항을 연결 (정석)

2. pinMode(7, INPUT_PULLUP); 으로 변경 (풀업)


풀업에 대해 알기 위해서는 우선 플로팅에 대해 아셔야합니다.

 

  • FLOATING (플로팅) 이란?

pinMode()를 통해 INPUT을 설정한 핀에는 5V나 0V(GND)의 전압을 입력하는 것이 일반적입니다.

digitalRead()함수로 값을 읽어오면 HIGH (5V) 나 LOW (0V) 로 인식합니다.

왼쪽 회로는 INPUT에 0V의 전압이 입력되나 오른쪽 회로는 INPUT에 아무 전압도 입력되지 않습니다.
그럼 INPUT이 HIGH인지 LOW인지는 아무도 알 수 없습니다.

이 상태를 아무것도 연결되지 않고 떠있다는 의미로 FLOATING (플로팅) 되었다고 합니다.

플로팅 상태에서는 아주 미세한 노이즈가 있어도 HIGH와 LOW 사이를 빠르게 반복하기 때문에 아두이노의 오작동을 유발합니다.


  • PULLUP(풀업) 이란?

이 플로팅을 방지하기 위한 것이 풀업입니다.

아까 봤던 그림에서 INPUT에 저항을 통해 5V로 연결되는 선이 추가되었습니다.

 

오른쪽 회로를 보면 아까는 Floating 상태였지만 5V로 연결되는 선이 추가됨으로서
INPUT에는 결국 5V가 입력되어 플로팅 문제가 해결되었습니다.

 

왼쪽 회로는 INPUT에 5V와 0V가 둘다 연결되지만 5V는 저항을 거치고

0V는 저항이 없이 연결되므로 INPUT에는 0V가 입력됩니다.

 

이 회로는 아두이노에 스위치를 연결할 때 많이 사용됩니다.

스위치의 개폐에 따라 핀의 전압이 바뀌기 때문입니다.

 

풀업저항으로는 보통 10㏀을 사용합니다.

 

아까의 두가지 해결법이 이해가 가시나요?

첫번째 방법은 10㏀ 저항을 추가하는 것이고,

두번째 방법은 PULLUP을 추가해서 10㏀ 저항이 없어도 코드 내에서 추가해주는 방법입니다.

 

  • 내부 풀업이란?

아두이노에 스위치를 연결할 때마다 풀업회로를 구성해야한다면 매우 번거로우니

아두이노에 내부 풀업이라는 기능을 사용하는 것입니다.

아두이노의 각 핀마다 내부에 자체적으로 풀업 저항을 가지고 있으며,

따로 풀업저항을 연결하지 않아도 이를 사용할 수 있도록 되어 있습니다.

pinMode(핀번호, INPUT_PULL_UP) 함수를 통해 사용할 수 있습니다.

 

아래는 풀업 회로입니다.

  • PULL DOWN (풀다운) 이란?

풀업과 비슷한 풀다운도 있습니다.

풀다운 회로는 풀업회로와 반대로 0V쪽에 저항을 연결하는 것입니다.

이 회로도 풀업과 같이 플로팅을 방지하기 위한 이유이며,

스위치의 개폐에 따른 INPUT전압이 풀업과 반대입니다.

 

아래는 풀다운 회로입니다.

 

풀업은 아두이노 내부에 존재하지만, 풀다운은 존재하지 않습니다.


저는 10㏀의 저항을 추가하여 LED를 해결했습니다!

 

[버튼 누르기 전]

[버튼 누른 후] 

       

'Project > 혼술 키트' 카테고리의 다른 글

혼술 키트 - 4  (0) 2022.04.19
혼술키트-3  (0) 2022.04.19
혼술 키트 - 2  (0) 2022.04.19
혼술 키트 - 1  (0) 2022.04.16