페이지

2025년 12월 9일 화요일

2.2.2. 버튼의 풀다운 저항 연결

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 버튼의 기본 원리에 대해 알아보았죠? 하지만 아두이노에 버튼을 그냥 연결하기만 하면, 누르지도 않았는데 눌린 것처럼 오작동하는 '플로팅(Floating)' 현상이 발생할 수 있어요. 마치 유령이 버튼을 누르는 것 같다고 해서 '유령 신호'라고도 부르죠.

오늘은 바로 이 지긋지긋한 유령 신호를 잡고, 우리가 원하는 대로 "누르면 ON, 떼면 OFF"가 되도록 버튼 회로를 안정적으로 구성하는 방법을 배워볼 거예요. 그 비법은 바로 '풀다운(Pull-down) 저항' 에 있답니다!

자, 그럼 이론은 완벽하게 마스터했으니, 이제 직접 회로를 만들러 가볼까요?

Slide 1: 2장 2절. 버튼의 풀다운 저항 연결

오늘의 주제는 바로 '버튼의 풀다운 저항 연결' 입니다. 여러 방법 중에서도 '풀다운' 방식을 사용하는 이유는 아주 간단해요. 우리의 상식, 즉 "버튼을 누르면 켜지고(ON), 떼면 꺼진다(OFF)"는 방식과 동작이 정확히 일치해서 이해하기가 정말 쉽거든요!

이제 이 풀다운 저항을 이용해서 안정적인 버튼 회로를 만들어 보겠습니다.

Slide 2: 버튼의 풀다운 저항 연결 실습

자, 이제 이론은 그만! 직접 손으로 회로를 만들면서 원리를 익혀볼 시간이에요.

📌 준비물

먼저 필요한 부품들을 챙겨주세요.

  • 아두이노 UNO 보드
  • 푸시 버튼(Push Button)
  • 10kΩ 저항 1개
  • 브레드보드와 점퍼선

📌 회로 구성

슬라이드에 보이는 그림처럼 회로를 구성해 주세요. 전선 색깔은 달라도 괜찮지만, 연결 위치는 정확해야 해요!

  1. 전원 연결: 버튼의 한쪽 다리를 아두이노의 5V 핀에 연결합니다.
  2. 접지 연결: 10kΩ 저항의 한쪽 다리를 아두이노의 GND 핀에 연결합니다.
  3. 신호선 연결 (⭐가장 중요⭐): 버튼의 나머지 다리와 저항의 나머지 다리가 만나는 지점에서 선을 뽑아 아두이노의 디지털 10번 핀에 연결합니다.

여기서 가장 중요한 포인트는 바로 3번이에요! 아두이노는 '버튼과 저항 사이'의 전압을 읽어서 버튼이 눌렸는지 아닌지를 판단하게 됩니다. 이 지점이 바로 '풀다운 저항' 회로의 핵심이랍니다.

📌 결과 예측

  • 평소 (버튼 안 누름): 회로가 GND에 연결되어 있으므로 아두이노는 0 (LOW) 신호를 읽어요.
  • 버튼 누름: 5V의 전기가 회로에 흐르므로 아두이노는 1 (HIGH) 신호를 읽어요.

Slide 3: 풀다운 저항 소스 코드

회로를 완성했다면, 이제 아두이노에 생명을 불어넣을 코드를 살펴볼 차례예요. 방금 만든 회로가 잘 작동하는지, 아두이노가 버튼 상태를 제대로 읽는지 확인하는 코드입니다.

CODE 2.3 | 버튼의 풀다운 저항 연결 코드
01void setup() {
02  // "컴퓨터와 9600 속도로 대화할 준비 완료!"
03  Serial.begin(9600);
04  
05  // "10번 핀에 버튼을 연결했으니 신호를 읽을게!"
06  pinMode(10, INPUT);
07}
08 
09void loop() {
10  // "10번 핀 상태를 읽어서 컴퓨터 화면에 보여줘!"
11  Serial.println(digitalRead(10));
12}

📌 코드 분석

코드가 정말 간단하죠? 한 줄씩 차근차근 살펴볼게요.

  • Serial.begin(9600); : 아두이노와 컴퓨터가 서로 데이터를 주고받기 위해 통신 채널을 여는 명령어예요. 9600은 통신 속도인데, '우리 이제부터 이 속도로 대화하자!'라고 약속하는 것과 같아요.
  • pinMode(10, INPUT); : 버튼이 연결된 10번 핀을 외부의 신호를 받아들이는 입력(INPUT) 모드로 설정합니다.
  • digitalRead(10); : 10번 핀의 현재 전압 상태를 읽어오는 함수예요. 전기가 들어오면 1(HIGH), 안 들어오면 0(LOW)을 반환하죠.
  • Serial.println(); : () 괄호 안의 값을 컴퓨터 모니터(시리얼 모니터)에 출력해 주는 함수입니다.

결론적으로 이 코드는 "10번 핀의 상태를 계속 읽어서 그 결과(0 또는 1)를 컴퓨터 화면에 계속 보여줘!" 라는 의미가 됩니다.

Slide 4 & 5: 핵심 함수 파헤치기

방금 본 코드에 사용된 핵심 함수들을 조금 더 자세히 알아볼까요? 이 함수들은 앞으로 아두이노를 사용하면서 정말 자주 만나게 될 친구들이에요.

1. Serial.begin(속도); : 대화 채널 맞추기

  • 컴퓨터와 시리얼 통신을 시작하기 위해 통신 속도(Baud Rate)를 설정하는 함수예요.
  • 마치 무전기 채널을 맞추는 것과 같죠. 둘의 속도가 같아야 제대로 대화할 수 있어요.
  • 특별한 이유가 없다면 9600을 사용하는 것이 일반적이며, setup() 함수 안에서 딱 한 번만 실행해 주면 됩니다.

2. Serial.println(데이터); : 화면에 보여줘!

  • 괄호 안의 데이터를 컴퓨터의 시리얼 모니터에 출력해 주는 아주 유용한 함수예요.
  • 함수 이름 끝에 붙은 lnLine의 약자로, 데이터를 출력한 뒤 줄 바꿈(Enter)을 해줘서 결과를 보기 좋게 만들어 줘요. (ln이 없는 Serial.print()는 줄 바꿈 없이 옆으로 계속 출력해요.)

3. digitalRead(핀번호); : 지금 전기 들어왔니?

  • 지정한 핀번호의 디지털 상태(전압이 있는지 없는지)를 읽어오는 함수입니다.
  • 결과값은 둘 중 하나예요.
    • HIGH (1): 전기가 들어오고 있는 상태 (버튼 누름)
    • LOW (0): 전기가 안 들어오는 상태 (버튼 안 누름)
  • 예를 들어 int buttonState = digitalRead(10); 처럼 코드를 짜면, 10번 핀의 상태(0 또는 1)를 buttonState라는 변수에 저장할 수 있답니다.

Slide 6 & 7: 아두이노의 목소리, 시리얼 모니터 사용법

"코드를 업로드했는데, 대체 결과는 어디서 보나요?" 라고 궁금해하실 수 있어요. 아두이노는 자체 화면이 없기 때문에 컴퓨터의 모니터를 빌려서 자신의 상태를 보여주는데요, 이 창이 바로 '시리얼 모니터' 입니다. 아두이노와 나누는 카톡 채팅방이라고 생각하면 쉬워요!

💻 틴커캐드(Tinkercad)에서 열기

  • 코드 창을 연 상태에서, 창 맨 아래에 있는 [시리얼 모니터] 버튼을 클릭하면 서랍처럼 스르륵 열립니다.

💻 실제 아두이노 IDE에서 열기

  • 아두이노 스케치 프로그램 오른쪽 상단의 돋보기 모양 아이콘을 클릭하세요.
  • 또는 단축키 Ctrl + Shift + M 을 눌러도 바로 열 수 있습니다.

🚨 가장 중요한 체크포인트!

시리얼 모니터를 열었는데 글자가 ?!@# 같은 외계어로 깨져 보이나요? 그건 아두이노와 컴퓨터의 대화 속도가 맞지 않아서 그래요!

시리얼 모니터 창의 오른쪽 아래를 보면 숫자를 설정하는 곳이 있어요. 이 값을 우리 코드에서 설정한 9600 보드(baud)로 꼭 맞춰주세요. 약속된 통신 속도가 서로 같아야만 글자가 깨지지 않고 정상적으로 보인답니다!

이제 시리얼 모니터를 열고 버튼을 눌러보세요. 평소에는 0이 계속 출력되다가, 버튼을 꾹 누르는 동안에는 1이 출력되는 것을 확인하실 수 있을 거예요!

어떤가요? 오늘은 아두이노의 고질적인 문제였던 '플로팅' 현상을 '풀다운 저항'을 이용해 해결하는 방법을 배워봤어요. 더불어 아두이노의 상태를 눈으로 확인할 수 있게 해주는 시리얼 통신과 핵심 함수들까지 익혔네요.

오늘 배운 내용은 앞으로 센서를 다루거나 외부 입력을 받을 때 계속해서 사용될 아주 기본적이면서도 중요한 개념이에요. 이제 여러분은 버튼 신호를 안정적으로 읽어올 수 있는 튼튼한 기초를 다지게 되었습니다. 정말 수고 많으셨어요!

다음 시간에는 더 재미있는 프로젝트로 돌아올게요! 궁금한 점이 있다면 언제든지 댓글로 남겨주세요. 😊

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.

댓글 없음:

댓글 쓰기