본문 바로가기
공부하는/GPT, 코딩

택트 스위치로 LED를 켜보자(2) - 신호를 입력받아 LED 제어

by 공부하는이땡땡 2020. 3. 9.
반응형

지난 포스팅에 이어 택트 스위치로 디지털 신호를 입력받아

LED를 켜는 회로를 소개하겠다

 

2020/03/09 - [공부하는 이땡땡/아두이노를 작동해보자] - 택트 스위치로 LED를 켜보자(1) - 택트스위치의 구조

 

택트 스위치로 LED를 켜보자(1) - 택트스위치의 구조

[택트(Tact) 스위치란?] 다리가 네 개인 스위치 아두이노 기본 키트에 들어가있다. (도대체 어따 쓰는지 모르겠는 스위치. 온오프가 편한데 -ㅅ-) 기본이라 하니까 한 번 다루어 보도록 하자 사실 찾아보지 않았..

studylee00.tistory.com

 

먼저 코드부터 소개하고 회로도를 살펴보자

 

 

 

[코드 소개]


int LED=8; // 8번 대신 LED라고 부를게요 
int SW=2; // 2번 대신 LED라고 부를께요 

 

void setup()
{
  pinMode(SW, INPUT); //SW, 2번 핀의 신호를 입력받으세요
  pinMode(LED, OUTPUT); // LED, 8번 핀에 신호를 출력해주세요
}

void loop()
{
  if(digitalRead(SW)==HIGH)  //만일 SW, 2번 핀으로로 전류가 들어온다면
     {digitalWrite(LED, HIGH); // LED 8번 핀으로 전류를 보내주세요
     }
     else{digitalWrite(LED,LOW); // 그게 아니라면 전류를 보내지 마세요
         }
}


[명령어 소개]

int : 변수를 설정해준다. 

if 와 else : if가 어떤 상황에 작동하도록 명령이 되어 있다면, 그 밖의 상황을 else로 명령할 수 있다. 

pinMode(핀,INPUT): 여기서 설정한 핀은 전류를 받아들일 준비를 한다. 

int를 사용하는 이유?

위의 코드에서 LED 대신 그냥 8이라고 써도 정상적으로 작동된다

그런데 만약 내가 회로를 구성했는데 9번에 연결을 했다 치자

(선을 뽑아 8번으로 꽂아도 된다 ㅋㅋㅋㅋㅋㅋㅋ)

그걸 코딩에서 수정하고 싶다면
우리는 3번 수정을 해야 한다. 일일이 찾아서

하지만 int를 사용했다면 맨 윗줄에서
한 번만 int LED=9로 한 번만 바꿔도 된다. 

(그리고 문자로 써놓으면 그 역할을 이해하기 쉽다)

 

코드를 분석해보자면

분석해보자면 2번 핀은 신호를 받을 준비를 하고 

신호를 받으면 8번 핀을 HIGH로,
신호가 없으면 8번 핀에 LOW로 

신호를 출력해준다. 

 

 

그렇다면 택트 스위치의 역할은?

스위치를 누르면 연결이 되므로

스위치를 누르지 않았을 때는 2번 핀으로
들어오는 신호가 없어 8번 핀을 LOW로

스위치를 눌렀을 때는 2번 핀으로 신호가 들어가면서
8번 핀을 HIGH로 만들어 줄 것이다.

 

[회로도]

 

보기만 해도 복잡해

 

(LED 쪽 저항: 220 옴 / 스위치 쪽 저항: 1k옴)

 

 

[버튼을 누르기 전]

 

붉은색 +, 파란색 -, 그렇다면 초록색은?

붉은 라인: (+)로 연결되어 있는 라인이 붉은 라인

파란 라인: (-)로 연결되어 있는 라인이 파란 라인

초록 라인: LED의 플러스와 8번이 연결

현재는 8번과 -가 연결되어 있는 상태이고,

2번과 -가 연결, +는 연결이 되어있지 않은 상태이다.

8번과 -가 연결되어 있다 하더라도

2번의 입력이 LOW 상태이므로 LED는 켜지지 않는다. 

 

☆ 브레드 보드 특징(미리 써놨어야 하는데 깜박.... ㅋ)

더보기

브레드보드

좌우에 +-가 있는 곳이 일자로 연결... 그리고 abcde가 한줄씩 연결

(붉은라인과 파란라인의 연결 상태로 참고해보세요~)

사용하는 이유는 전선끼리 연결하려면 납땜을 해야 하는데 그런 과정을 생략해주는 녀석이다.

이 녀석 덕분에 쉽게 회로를 만들어 볼 수 있다. 

 

 

[버튼을 눌렀을 때]

 

스위치 온! 전류의 흐름

 

 

스위치를 누른다면 2번과 (+)가 연결되어 신호가 전달된다. 

그 신호를 인식한 아두이노는 8번이 HIGH가 되고 

LED가 켜지는 원리이다. 

 

 

최대한 비슷하게 만들어보았다. 오늘도 보라 통을 바탕으로 ㅋㅋㅋㅋㅋㅋㅋ

 

 

 

ㅋㅋㅋ 마구 눌러대는 성미 급한 김빵빵

 

 

 

 

[갈색 흐름은 뭐예요?]

플로팅 현상을 예방하기 위해 연결하였다. 

 

플로팅 현상

디지털 신호는 0과 1. HIGH와 LOW 두 가지뿐이다. 

(아날로그가 가진 섬세한 감성이 없다 ㅋㅋ 메마른 녀석)

이렇게 명확하면 좋은데 회로에서 디지털 신호가 0과 1사이의 

애매모호한 상태가 있다. 

이러한 상태를 플롯(float, 떠있다)이라고 한다. 

 

 

 

호기심 많은 이땡땡은 해보았다 ㅋㅋㅋ

스위치쪽 저항의 (-)로 들어가는 선을 제거
툭툭 건드리면 들어왔다 꺼졌다 한다(흔들리는 이유는 건드리느라 ㅠㅠㅠ)

오 진짜 신기했다 ㅎㅎㅎㅎㅎㅎㅎㅎ

 

 

 

그래서 저항을 연결해주는 이유?

저항을 연결해주지 않는다면 신호가 0과 1 사이 애매한 상태가 되어

회로가 정상적으로 작동하지 않을 수도 있다. 

 

저항을 연결해준다면 전류는 저항이 낮은 곳으로 이동하려는 성질 때문에

안정화 되고 잘 흐르게 된다. 

 

디지털 입력 핀을 (-), (-)에 저항을 연결하면 풀다운 저항

디지털 입력 핀을 (+), (+)에 저항을 연결하면 풀업 저항이라고 한다. 

 

 

 

지금의 회로도는?

디지털 입력 핀과 저항을 (-)에 연결했으니 풀다운 저항

스위치를 누르지 않으면 전류가 GND로 흐르고 항상 LOW상태를 유지

버튼을 누를 경우 HIGH상태가 되어 LED의 불이 들어온다.

 

 

 

 

사실 이전 포스팅으로 LED를 제어하기 충분하다.

하지만 센서를 사용한다면
언젠가는 신호를 받아들여야 하고

플로팅 현상을 벗어나기 위해..
풀업, 풀다운에 대한 이해를 돕고자
이 포스팅을 작성하였다. 

 

 

 

 

여담)

사실 택트 스위치 (1)번 글 보다 (2)번 글을 먼저 작성했다 ㅋㅋㅋㅋ

(이렇게 해야 택트로 LED를 제어할 수 있다고 생각했다.) 

 

그런데 택트 스위치의 원리를 보고

풀업이나 풀다운 없이 되겠는데? 라는 생각이 들었다. 

(그런데 물론 그거 역시 예제에서 찾았다...ㅠㅠㅠㅠㅠㅠ)

그래서 포스팅을 두 가지로 나누어서 작성하였다.

그러니까 궁금한 거, 모르는 거 있으면 검색을 생활화하자!! ㅋㅋ

 

사실 회로도를 미리 그려놔서 아까워서 포스팅을 한 건 비밀

 

 

 

 

[오늘의 창의력 문제]

풀다운이 있으니 반대되는 풀업도 있다. 

지금 회로를 풀업 저항 연결로 바꾸어보자!

풀업 저항으로 바꾸면 어떤 차이가 생길지 이야기 해보자

 

 

정답은???  (▽▽ 정답이라기보다는 내 생각)

더보기

 

+쪽에 저항을 연결

 

정답은 뭐 여러 가지가 있지 않을까?

+와 연결된 경우는 붉은색으로 표시했으니 참고하시기 바란다.

 

풀업 저항: 디지털 입력 핀을 (+), 저항을 (+)에 연결

사진에서 잘 보이지 않지만

이 경우에 전류가 항상 5V쪽으로 흐르기 때문에

스위치를 누르지 않으면 HIGH신호(불이 들어옴)를 갖게 되며

스위치를 누를 경우 LOW상태(불이 꺼짐)가 된다.

 

 

이 경우처럼

5v의 전압과 2번 핀이 저항을 거쳐 연결되므로

저항은 1k옴으로 사용했을 것이라 추측한다.

반응형

댓글