작은 로봇에서 나만의 로봇으로
지금까지 만든 로봇은 하나의 완성품이라기보다 로봇을 이해하기 위한 기본 뼈대에 가깝다. 초음파 센서로 장애물을 피하고, 적외선 센서로 선을 따라가며, 블루투스로 명령을 받는 기능을 하나씩 익혔다. 이제 중요한 질문은 이것이다.
"이 기능들을 어떻게 조합하면 내가 원하는 로봇이 될까?"
로봇을 확장하는 일은 장난감 블록을 더 붙이는 것과 비슷하다. 하지만 아무 블록이나 계속 붙이면 무거워지고, 균형이 무너지고, 안쪽 구조가 복잡해진다. 아두이노 로봇도 마찬가지다. 센서를 하나 더 달면 핀이 하나 더 필요하고, 모터를 하나 더 달면 전류가 더 필요하다. 코드도 길어져서 어디에서 무엇을 하는지 헷갈리기 쉽다.
더 똑똑한 로봇을 만들려면 부품을 많이 붙이는 것보다 먼저 구조를 생각해야 한다. 전원은 충분한지, 핀은 남아 있는지, 코드가 나중에도 고치기 쉬운지 확인해야 한다. 이 장에서는 앞으로 스스로 로봇을 설계할 때 필요한 기준을 정리한다.
AI 생성 이미지
오래 움직이는 로봇을 위한 배터리 생각법
로봇이 아무리 좋은 판단을 해도 전원이 부족하면 멈춘다. 배터리는 로봇의 연료통이다. 연료통이 너무 작으면 금방 멈추고, 전압이 맞지 않으면 부품이 제대로 움직이지 않거나 망가질 수 있다.
배터리를 볼 때는 세 가지를 먼저 확인한다.
전압(V): 전기를 밀어주는 힘이다. 모터 드라이버와 모터가 요구하는 전압 범위에 맞아야 한다.
용량(mAh): 얼마나 오래 전류를 공급할 수 있는지를 나타내는 값이다.
방전 특성: 전류를 얼마나 안정적으로 내보낼 수 있는지를 뜻한다.
예를 들어 로봇이 평균 500mA를 사용하고, 배터리 용량이 2000mAh라면 단순 계산으로는 다음과 같다.
예상 사용 시간 = 배터리 용량 ÷ 평균 전류
2000mAh ÷ 500mA = 약 4시간하지만 실제 주행 시간은 이보다 짧다. 모터가 출발할 때 순간적으로 큰 전류를 쓰고, 바닥 마찰이 커지면 전류가 늘어난다. 배터리 전압도 사용하면서 조금씩 떨어진다. 그래서 계산값의 60~70% 정도를 현실적인 기준으로 잡으면 좋다.
배터리를 고를 때는 다음 원칙을 기억하자.
아두이노 보드와 모터 전원은 가능하면 분리한다.
모터 전원과 아두이노는 GND를 공통으로 연결한다.
아두이노의 5V 핀에 모터를 직접 연결하지 않는다.
배터리 전압이 높으면 반드시 모터 드라이버와 보드의 허용 전압을 확인한다.
리튬 이온, 리튬 폴리머 배터리는 충전과 보관에 주의한다.
특히 충전식 리튬 계열 배터리는 작고 힘이 좋지만, 과충전이나 쇼트에 민감하다. 처음에는 AA 배터리 팩이나 USB 보조배터리처럼 다루기 쉬운 전원부터 시작하는 것이 안전하다. 실험대에서 오래 테스트할 때는 규격에 맞는 어댑터를 사용할 수도 있지만, 로봇에 연결하기 전에 전압과 극성을 꼭 확인해야 한다. 더 긴 주행 시간이 필요해지면 그때 전압 조정 모듈, 배터리 보호 회로, 스위치, 퓨즈 같은 전원 부품을 함께 배우면 된다.
부품을 추가할수록 함께 늘어나는 것들
센서를 하나 더 추가하는 일은 단순히 선을 하나 더 꽂는 일이 아니다. 로봇 전체 입장에서는 세 가지 부담이 함께 늘어난다.
첫째, 핀 수가 부족해질 수 있다. 초음파 센서는 TRIG와 ECHO 두 핀이 필요하고, 적외선 센서 여러 개를 쓰면 입력 핀이 빠르게 줄어든다. 블루투스 모듈은 시리얼 통신 핀을 사용한다. 서보 모터와 모터 드라이버도 제어 핀이 필요하다.
둘째, 전류 사용량이 늘어난다. LED 하나는 작은 전류만 쓰지만, 모터와 서보는 훨씬 큰 전류를 쓴다. 전원이 약하면 아두이노가 갑자기 리셋되거나, 센서값이 흔들리거나, 블루투스 연결이 끊길 수 있다.
셋째, 코드 구조가 복잡해진다. 장애물 회피 코드, 라인트레이서 코드, 블루투스 조종 코드를 그냥 이어 붙이면 처음에는 동작할 수 있다. 하지만 문제가 생기면 어디를 고쳐야 할지 찾기 어렵다.
그래서 부품을 추가하기 전에는 작은 설계표를 만들어 보자.
| 항목 | 확인할 내용 |
|---|---|
| 기능 | 이 부품이 로봇에 어떤 입력 또는 출력을 추가하는가? |
| 핀 | 디지털 핀, 아날로그 핀, PWM 핀 중 무엇이 필요한가? |
| 전원 | 5V인지, 별도 전원이 필요한지, 전류는 얼마나 필요한가? |
| 코드 | 어떤 함수에서 값을 읽고, 어떤 조건에서 사용할 것인가? |
| 테스트 | 단독 테스트 후 전체 코드에 합칠 수 있는가? |
가장 좋은 습관은 하나씩 추가하고 하나씩 확인하는 것이다. 새 센서를 연결했다면 먼저 시리얼 모니터에 값이 잘 나오는지만 본다. 그다음 LED로 판단 결과를 확인한다. 마지막에 모터 동작과 연결한다. 이렇게 하면 문제가 생겼을 때 원인을 좁히기 쉽다.
확장 프로젝트 아이디어
이제 책에서 배운 부품과 코드를 조합해 여러 가지 로봇을 만들 수 있다. 아래 아이디어는 완성된 정답이 아니라 출발점이다. 한 번에 모두 만들려고 하지 말고, 작은 기능 하나를 먼저 완성한 뒤 붙여 나가자.
로봇 팔
서보 모터 여러 개를 사용하면 간단한 로봇 팔을 만들 수 있다. 첫 단계는 서보 하나로 집게를 열고 닫는 것이다. 다음에는 두 번째 서보로 팔을 위아래로 움직인다. 마지막에는 가변저항이나 블루투스 명령으로 각도를 조절할 수 있다.
이 프로젝트에서 중요한 것은 전원이다. 서보 모터 여러 개에 필요한 전류를 아두이노 5V 핀에서 모두 공급하려 하면 전원이 부족할 수 있다. 서보에는 별도 5V 전원을 사용하고, 아두이노와 GND를 공유하는 방식이 안전하다.
미로 탈출 로봇
장애물 회피 로봇을 발전시키면 미로 탈출 로봇이 된다. 초음파 센서나 적외선 거리 센서로 앞, 왼쪽, 오른쪽 벽을 감지하고, 어느 방향으로 갈지 규칙을 정한다.
처음에는 단순한 오른손 법칙을 써 볼 수 있다. 오른쪽이 비어 있으면 오른쪽으로 돌고, 오른쪽이 막혔지만 앞이 비어 있으면 앞으로 간다. 오른쪽과 앞이 모두 막혀 있으면 왼쪽으로 도는 방식이다. 복잡한 지도를 저장하지 않아도 간단한 미로에서는 탈출을 시도할 수 있다.
스마트 쓰레기통
초음파 센서로 손이 가까이 온 것을 감지하고, 서보 모터로 뚜껑을 여는 쓰레기통을 만들 수 있다. 여기서는 바퀴 로봇처럼 움직임이 크지 않지만, 입력-처리-출력 구조는 같다.
입력: 초음파 센서가 손과의 거리를 측정한다.
처리: 일정 거리보다 가까운지 판단한다.
출력: 서보 모터가 뚜껑을 연다.
이 프로젝트는 일상 문제를 해결하는 로봇의 좋은 예다. 로봇은 반드시 바퀴로 움직일 필요가 없다. 주변을 감지하고 스스로 동작을 바꾸면 그것도 로봇 시스템이다.
경비 로봇
바퀴 로봇에 초음파 센서, 조도 센서, 부저, 블루투스를 결합하면 간단한 경비 로봇을 만들 수 있다. 어두운 곳에서 움직임이 감지되면 부저를 울리고, 블루투스로 연결된 스마트폰이나 컴퓨터에 경고 메시지를 보내는 식이다.
처음부터 완벽한 경비 로봇을 만들 필요는 없다. 먼저 어두움을 감지해 LED를 켜고, 다음에는 장애물을 감지해 부저를 울린다. 그다음 바퀴 주행을 추가하고, 마지막에 원격 명령을 붙인다. 기능을 단계별로 쌓아 올리는 것이 가장 안전하다.
재사용 가능한 코드로 정리하기
로봇 코드가 길어지면 같은 코드가 여러 곳에 반복된다. 예를 들어 전진, 정지, 좌회전 코드는 장애물 회피 로봇에서도 쓰고, 라인트레이서에서도 쓰고, 블루투스 조종에서도 쓴다. 이런 코드는 함수로 묶어 두면 다시 사용할 수 있다.
void forward(int speedValue) {
setLeftMotor(speedValue);
setRightMotor(speedValue);
}
void turnLeft(int speedValue) {
setLeftMotor(-speedValue);
setRightMotor(speedValue);
}
void stopRobot() {
setLeftMotor(0);
setRightMotor(0);
}함수 이름은 짧고 분명해야 한다. move1()보다 forward()가 좋고, motorStopNow()보다 stopRobot()이 읽기 쉽다. 코드는 컴퓨터만 읽는 것이 아니다. 나중의 나도 읽어야 한다.
프로젝트가 더 커지면 파일을 나눌 수도 있다. 예를 들어 모터 관련 함수는 MotorControl, 센서 관련 함수는 SensorRead, 상태 판단은 RobotBrain처럼 역할별로 정리한다. 이것을 더 발전시키면 라이브러리가 된다. 라이브러리는 자주 쓰는 코드를 묶어 다른 프로젝트에서도 쉽게 불러 쓰는 코드 꾸러미다.
처음부터 라이브러리를 만들 필요는 없다. 다만 다음 기준으로 코드를 정리하는 습관을 들이면 좋다.
핀 번호는 코드 위쪽에 모아 둔다.
같은 동작은 함수로 만든다.
센서 읽기와 모터 제어를 한 함수에 섞지 않는다.
자동 모드, 수동 모드처럼 상태를 변수로 구분한다.
긴
delay()대신 가능한 한millis()로 시간을 관리한다.
이렇게 정리하면 새 기능을 붙일 때 전체 코드를 다시 쓰지 않아도 된다. 로봇을 확장한다는 것은 부품을 더 붙이는 것만이 아니라, 코드를 고치기 쉬운 모양으로 키우는 일이기도 하다.
실패를 기록하는 사람이 더 빨리 만든다
로봇 제작에서 실패는 예외가 아니라 과정이다. 모터가 반대로 돌고, 센서값이 튀고, 배터리가 빨리 닳고, 업로드가 되지 않는 일은 누구에게나 생긴다. 중요한 것은 실패를 그냥 지나치지 않는 것이다.
문제가 생기면 바로 부품을 바꾸기보다 다음 순서로 생각해 보자.
증상 기록: 무엇이 어떻게 이상한가?
원인 가설: 전원 문제인가, 배선 문제인가, 코드 문제인가?
작은 실험: 한 번에 하나만 바꾸어 확인한다.
결과 기록: 바꾼 뒤 무엇이 달라졌는가?
수정 또는 새 가설: 해결되지 않았다면 다른 원인을 세운다.
예를 들어 로봇이 전진하지 않는다면 "고장 났다"라고만 적지 않는다. 다음처럼 구체적으로 적는다.
증상: 왼쪽 바퀴만 돌고 오른쪽 바퀴는 돌지 않음.
가설 1: 오른쪽 모터 배선이 빠졌을 수 있음.
실험: 오른쪽 모터 선을 다시 꽂고 단독 테스트 코드 실행.
결과: 모터는 정상 회전함.
가설 2: 모터 드라이버 입력 핀 번호가 코드와 다를 수 있음.이런 기록은 다음 프로젝트에서 큰 힘이 된다. 같은 실수를 반복하지 않고, 다른 사람이 만든 회로를 볼 때도 문제를 더 빨리 찾을 수 있다.
앞으로의 로봇 설계 기준
더 똑똑한 로봇은 갑자기 만들어지지 않는다. 작은 기능을 안정적으로 만들고, 그 기능을 연결하며, 실패를 고쳐 가는 과정에서 완성된다. 앞으로 로봇을 설계할 때는 다음 질문을 먼저 던져 보자.
이 로봇은 무엇을 감지해야 하는가?
감지한 값을 어떤 기준으로 판단할 것인가?
판단 결과를 어떤 움직임이나 표시로 바꿀 것인가?
필요한 핀과 전류는 충분한가?
문제가 생겼을 때 기능별로 나누어 테스트할 수 있는가?
이 질문들은 모두 이 책에서 반복해 온 입력-처리-출력 구조로 이어진다. 센서가 입력을 만들고, 아두이노가 처리하며, 모터와 LED와 부저가 출력한다. 로봇의 모양이 달라져도 이 흐름은 변하지 않는다.
이제 여러분은 단순히 예제를 따라 하는 단계에서 벗어나, 필요한 기능을 고르고 조합해 자신만의 로봇을 설계할 수 있다. 완벽한 첫 작품을 목표로 삼지 않아도 된다. 오늘은 센서 하나를 더 안정적으로 읽고, 내일은 모터 움직임을 조금 더 부드럽게 만들면 된다. 그 작은 개선들이 모여 로봇은 점점 더 똑똑해진다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.