아두이노 센서 사용법: 디지털·아날로그 입력, 온습도·초음파 센서, 시리얼 모니터
TUREFF• •0
LED를 켜 봤다면 다음은 바깥 세상을 읽을 차례입니다. 버튼이 눌렸는지, 방이 얼마나 밝은지, 앞에 물건이 얼마나 떨어져 있는지. 센서를 다루는 기본 개념과 값이 제대로 들어오는지 확인하는 방법을 정리했습니다.
디지털 입력과 아날로그 입력의 차이
- 디지털 입력: 켜짐과 꺼짐, 두 가지 상태만 읽습니다. 버튼, 기울기 스위치, 움직임 감지 센서처럼 있다·없다로 답하는 부품에 씁니다. 코드에서는 digitalRead를 쓰고 결과는 HIGH 또는 LOW입니다.
- 아날로그 입력: 전압의 크기를 숫자로 읽습니다. 가변저항, 조도 센서(빛에 따라 저항이 바뀌는 부품)처럼 값이 연속적으로 변하는 부품에 씁니다. 우노에서는 A0~A5 핀과 analogRead를 쓰고, 우노 R3 기준으로 0부터 1023 사이 숫자로 들어옵니다.
아날로그 핀은 디지털 핀처럼 쓸 수도 있지만, 디지털 핀으로는 아날로그 값을 읽을 수 없습니다. 센서를 연결할 때 어느 핀에 꽂아야 하는지부터 확인하세요.
버튼을 읽을 때 꼭 알아야 할 것: 떠 있는 입력
버튼을 핀에 연결만 하면 누르지 않았을 때 핀이 어디에도 연결되지 않은 상태가 됩니다. 이 상태의 핀은 주변 잡음에 따라 HIGH와 LOW를 마구 오가서 버튼을 누르지 않았는데도 눌린 것처럼 읽힙니다.
해결 방법은 풀업 또는 풀다운 저항으로 기본 상태를 정해 주는 것입니다. 아두이노는 칩 안에 풀업 저항이 있어서 pinMode에 INPUT_PULLUP을 쓰면 외부 저항 없이도 해결됩니다. 이 경우 버튼을 누르면 LOW, 떼면 HIGH가 되니 논리가 반대라는 점만 기억하세요.
버튼은 누르는 순간 접점이 미세하게 여러 번 붙었다 떨어지는 채터링도 있습니다. 한 번 눌렀는데 여러 번 눌린 것으로 세어진다면, 짧은 시간 동안 변화를 무시하는 디바운싱 처리를 찾아보세요.
시리얼 모니터: 센서 값을 눈으로 확인하기
센서를 다룰 때 가장 먼저 익혀야 할 도구입니다. 보드가 읽은 값을 USB를 통해 컴퓨터 화면에 글자로 보내 줍니다.
- setup에서 Serial.begin(9600)처럼 통신 속도를 정합니다.
- loop에서 Serial.println으로 읽은 값을 출력합니다.
- IDE 오른쪽 위의 시리얼 모니터를 열고, 아래쪽 속도 설정을 코드와 같은 값으로 맞춥니다.
속도가 다르면 글자가 깨져 보입니다. IDE에는 값을 그래프로 그려 주는 시리얼 플로터도 있어서 조도나 거리처럼 계속 변하는 값을 볼 때 편합니다. 회로가 이상할 때도 값을 출력해 보면 센서 문제인지 코드 문제인지 금방 가려낼 수 있습니다.
자주 쓰는 센서 예시
- 온습도 센서: 입문 키트에 흔히 들어 있는 온습도 모듈은 디지털 신호 한 가닥으로 온도와 습도를 함께 보내는 방식이 많습니다. 통신 규칙이 정해져 있어 보통 해당 센서용 라이브러리를 설치해 씁니다. IDE의 라이브러리 매니저에서 센서 이름으로 검색하면 됩니다. 값을 너무 자주 읽으면 오류가 나는 센서도 있으니 예제의 대기 시간을 지키세요.
- 초음파 거리 센서: 사람 귀에 들리지 않는 소리를 쏘고, 물체에 맞고 돌아오기까지 걸린 시간을 재서 거리를 계산합니다. 소리 속도를 이용한 계산이라 온도에 따라 조금씩 오차가 생기고, 부드러운 천이나 비스듬한 면은 소리를 잘 반사하지 않아 값이 튈 수 있습니다.
- 조도 센서와 가변저항: 아날로그 입력 연습에 가장 좋습니다. 손으로 가리거나 노브를 돌리며 시리얼 플로터의 그래프가 움직이는 것을 보면 아날로그 입력이 바로 이해됩니다.
센서를 연결할 때 확인할 것
- 동작 전압: 우노는 5V 보드지만 3.3V에서만 동작하는 센서 모듈도 많습니다. 모듈 설명서에서 전원 전압과 신호 전압을 꼭 확인하세요.
- VCC와 GND 순서: 모듈마다 핀 순서가 다릅니다. 전원을 거꾸로 넣으면 센서가 바로 망가질 수 있습니다.
- 값이 이상하면 하나씩: 센서 여러 개를 한꺼번에 연결하지 말고, 하나씩 연결해 시리얼 모니터로 확인한 뒤 다음 것을 추가하세요.
값이 튈 때는 평균을 내 보세요
센서 값은 잡음 때문에 조금씩 흔들리는 것이 정상입니다. 값 하나로 바로 동작을 결정하면 경보가 켜졌다 꺼졌다를 반복할 수 있습니다. 여러 번 읽어 평균을 내거나, 켜는 기준과 끄는 기준을 조금 다르게 두면 동작이 훨씬 안정적입니다. 선이 길면 잡음이 늘어나니 센서와 보드 사이 선은 가능한 짧게 하세요.
센서 값을 받아 LED나 부저를 켜는 것까지 해 보면 자동 조명, 주차 거리 경보기 같은 작은 장치가 금방 만들어집니다. 써 보신 센서 중 추천하거나 값이 잘 안 나와 고생한 것이 있다면 댓글로 공유해 주세요.