로봇을 만들기 전, 대화할 준비부터
로봇을 만들려면 먼저 로봇의 두뇌가 될 아두이노와 컴퓨터가 서로 대화할 수 있어야 합니다. 사람이 로봇에게 직접 말로 명령을 내릴 수는 없습니다. 대신 컴퓨터에서 코드를 작성하고, 그 코드를 아두이노 보드에 보내야 합니다.
이때 컴퓨터는 작업대이고, 아두이노는 작은 두뇌입니다. 우리는 컴퓨터에서 "LED를 켜라", "센서 값을 읽어라", "모터를 돌려라" 같은 명령을 코드로 적습니다. 아두이노는 그 명령을 기억한 뒤, 전원이 들어와 있는 동안 계속 실행합니다.
이번 장의 목표는 거창하지 않습니다. 아두이노 보드가 어떤 부분으로 이루어져 있는지 살펴보고, 개발 환경을 설치한 뒤, 가장 첫 번째 프로그램인 LED 깜빡이기를 실행해 보는 것입니다. 이 준비가 끝나면 다음 장부터 회로와 센서, 모터를 하나씩 연결할 수 있습니다.
AI 생성 이미지
아두이노 우노 보드 둘러보기
이 책에서는 가장 널리 쓰이는 아두이노 우노 보드를 기준으로 설명합니다. 보드 위에는 여러 단자와 부품이 촘촘히 붙어 있지만, 처음부터 모두 외울 필요는 없습니다. 자주 쓰는 부분부터 구분하면 됩니다.
USB 포트
USB 포트는 컴퓨터와 아두이노를 연결하는 입구입니다. 스마트폰을 컴퓨터에 연결하듯이 USB 케이블을 꽂으면 두 가지 일이 일어납니다.
첫째, 컴퓨터에서 아두이노로 전원이 공급됩니다. 간단한 LED 실습 정도는 USB 전원만으로 충분합니다.
둘째, 컴퓨터에서 작성한 코드가 USB 케이블을 통해 아두이노로 전달됩니다. 이 과정을 업로드라고 부릅니다. 업로드는 "컴퓨터에 있는 프로그램을 아두이노 안으로 넣는 일"이라고 이해하면 됩니다.
전원 단자
아두이노에는 USB 말고도 외부 전원을 연결할 수 있는 전원 단자가 있습니다. 로봇이 컴퓨터와 떨어져 움직이려면 건전지나 배터리 같은 전원이 필요합니다. 이때 전원 단자를 사용합니다.
다만 처음 실습에서는 USB 전원만 사용합니다. 외부 전원은 전압을 잘못 연결하면 보드나 부품이 고장 날 수 있습니다. 전기는 눈에 보이지 않기 때문에, 처음에는 "전원을 연결하기 전에 한 번 더 확인한다"는 습관이 중요합니다.
보드에는 5V, 3.3V, GND 같은 전원 핀도 있습니다. 여기서 GND는 회로의 기준이 되는 지점입니다. 아주 단순하게 말하면 전기가 다시 돌아오는 길이라고 생각할 수 있습니다. 앞으로 LED, 센서, 모터 드라이버를 연결할 때 GND는 자주 등장합니다.
디지털 핀
아두이노 우노의 한쪽에는 0번부터 13번까지 숫자가 적힌 핀이 있습니다. 이것을 디지털 핀이라고 부릅니다. 디지털은 값을 크게 두 가지로 나누는 방식입니다. 아두이노에서는 보통 HIGH와 LOW로 표현합니다.
HIGH는 전압이 높은 상태, LOW는 전압이 낮은 상태입니다. 아두이노 우노에서는 보통 HIGH가 5V, LOW가 0V에 가까운 상태라고 생각하면 됩니다. 예를 들어 LED를 디지털 핀에 연결하면, HIGH일 때 켜지고 LOW일 때 꺼집니다.
디지털 핀은 로봇의 출력에 자주 사용됩니다. LED를 켜거나, 부저를 울리거나, 모터 드라이버에 방향 신호를 보낼 때 사용합니다. 또 버튼처럼 켜짐과 꺼짐이 분명한 입력 장치를 읽을 때도 사용할 수 있습니다.
핀 번호 0번과 1번은 컴퓨터와 통신할 때도 사용되므로 초보 실습에서는 되도록 다른 핀부터 사용하는 것이 좋습니다.
아날로그 핀
보드의 다른 쪽에는 A0, A1, A2처럼 A가 붙은 핀이 있습니다. 이것을 아날로그 핀이라고 부릅니다. 아날로그는 켜짐과 꺼짐처럼 딱 둘로 나누기 어려운 값을 다룰 때 사용합니다.
예를 들어 밝기는 "밝다"와 "어둡다"만 있는 것이 아닙니다. 아주 어두움, 조금 어두움, 보통, 밝음, 아주 밝음처럼 중간값이 많습니다. 거리, 온도, 조도처럼 변화가 부드러운 값을 읽을 때 아날로그 핀이 유용합니다.
앞으로 센서를 다룰 때 아날로그 핀은 로봇의 입력 통로가 됩니다. 센서가 주변 정보를 전기 신호로 바꾸면, 아두이노는 그 신호를 숫자로 읽고 판단에 사용합니다.
개발 환경 설치하기
아두이노에 명령을 넣으려면 코드를 작성하고 업로드할 프로그램이 필요합니다. 이 프로그램을 Arduino IDE라고 부릅니다. IDE는 통합 개발 환경이라는 뜻입니다. 쉽게 말해 코드를 쓰고, 검사하고, 보드에 보내는 도구입니다.
설치 과정은 다음 순서로 진행합니다.
Arduino IDE를 내려받아 설치합니다.
USB 케이블로 아두이노 우노와 컴퓨터를 연결합니다.
Arduino IDE를 실행합니다.
사용할 보드를 Arduino Uno로 선택합니다.
컴퓨터가 인식한 포트를 선택합니다.
예제 코드를 열거나 직접 코드를 작성합니다.
업로드 버튼을 눌러 아두이노에 코드를 보냅니다.
처음에는 이 순서가 낯설 수 있습니다. 하지만 매번 같은 흐름입니다. 보드 선택, 포트 선택, 업로드. 이 세 가지만 기억해도 대부분의 첫 설정 문제를 해결할 수 있습니다.
보드와 포트 선택하기
아두이노 IDE를 열면 먼저 어떤 보드를 사용할지 알려 주어야 합니다. 아두이노에는 우노, 나노, 메가처럼 여러 종류가 있습니다. 보드마다 사용하는 칩과 핀 구성이 조금씩 다르기 때문에, IDE가 정확한 보드를 알아야 코드를 올바르게 준비할 수 있습니다.
메뉴에서 보드를 Arduino Uno로 선택합니다. 그다음 포트를 선택합니다. 포트는 컴퓨터가 아두이노와 통신하는 통로입니다. USB 케이블을 꽂았을 때 새로 나타나는 항목이 보통 아두이노 포트입니다.
여기서 중요한 점은 보드와 포트가 서로 다른 개념이라는 것입니다.
보드 선택: "내가 사용하는 아두이노 종류는 무엇인가?"
포트 선택: "컴퓨터가 어느 통로로 아두이노와 연결되어 있는가?"
보드를 맞게 선택해도 포트가 틀리면 업로드가 되지 않습니다. 반대로 포트가 맞아도 보드 종류가 틀리면 오류가 날 수 있습니다. 업로드 전에 이 두 가지를 확인하는 습관을 들이면 좋습니다.
첫 프로그램: LED 깜빡이기
이제 첫 프로그램을 실행해 보겠습니다. 아두이노 우노에는 보드 위에 작은 LED가 하나 달려 있습니다. 보통 13번 핀과 연결되어 있으며, 보드에 L이라고 표시되어 있습니다. 그래서 별도의 부품을 연결하지 않아도 LED 깜빡이기 실습을 할 수 있습니다.
아래 코드를 입력합니다.
const int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}코드를 입력한 뒤 업로드 버튼을 누릅니다. 잠시 기다리면 보드 위의 L LED가 1초 켜지고, 1초 꺼지는 동작을 반복합니다.
이 간단한 예제에도 로봇의 기본 구조가 들어 있습니다. 아두이노가 코드를 처리하고, LED라는 출력 장치에 신호를 보내며, LED가 눈에 보이는 행동으로 결과를 보여 줍니다. 아직 센서 입력은 없지만, 처리와 출력의 흐름을 확인한 셈입니다.
setup 함수와 loop 함수
아두이노 코드는 크게 두 부분으로 나누어 생각할 수 있습니다. setup()과 loop()입니다.
setup()은 처음 한 번만 실행되는 부분입니다. 전원을 켜거나 리셋 버튼을 눌렀을 때 한 번 실행됩니다. 여기에는 준비 작업을 적습니다. 위 코드에서는 pinMode(ledPin, OUTPUT);이 준비 작업입니다. 13번 핀을 출력으로 사용하겠다고 아두이노에게 알려 주는 것입니다.
loop()는 계속 반복되는 부분입니다. 아두이노가 켜져 있는 동안 멈추지 않고 반복 실행됩니다. 위 코드에서는 LED를 켜고, 1초 기다리고, LED를 끄고, 다시 1초 기다립니다. 이 과정이 끝나면 다시 처음으로 돌아가 같은 일을 반복합니다.
생활 속 비유로 생각해 봅시다. 가게를 열 때 한 번 하는 준비가 있습니다. 간판을 켜고, 문을 열고, 계산대를 준비합니다. 이것이 setup입니다. 그다음 손님을 맞이하고, 계산하고, 정리하는 일은 영업시간 동안 계속 반복됩니다. 이것이 loop입니다.
아두이노 로봇도 마찬가지입니다. 처음에는 핀과 센서를 준비하고, 이후에는 센서 값을 읽고 판단하고 움직이는 일을 계속 반복합니다.
코드 한 줄씩 살펴보기
const int ledPin = 13;은 13이라는 핀 번호에 ledPin이라는 이름을 붙이는 코드입니다. 숫자 13을 계속 쓰는 대신 ledPin이라고 쓰면 코드의 뜻이 더 잘 보입니다.
pinMode(ledPin, OUTPUT);은 ledPin을 출력으로 사용하겠다는 뜻입니다. 출력은 아두이노가 바깥 부품에 신호를 보내는 방향입니다. LED를 켜려면 아두이노가 전기 신호를 내보내야 하므로 OUTPUT으로 설정합니다.
digitalWrite(ledPin, HIGH);은 ledPin에 HIGH 신호를 보내는 코드입니다. LED가 켜집니다.
delay(1000);은 1000밀리초 동안 기다리는 코드입니다. 1000밀리초는 1초입니다.
digitalWrite(ledPin, LOW);은 ledPin에 LOW 신호를 보내는 코드입니다. LED가 꺼집니다.
이 구조를 조금 바꾸면 깜빡이는 속도도 바꿀 수 있습니다. delay(1000)을 delay(200)으로 바꾸면 더 빠르게 깜빡입니다. 반대로 delay(2000)으로 바꾸면 2초 간격으로 천천히 깜빡입니다.
실습할 때는 숫자를 바꾼 뒤 다시 업로드해 보세요. 코드가 바뀌어도 업로드하지 않으면 아두이노 안의 프로그램은 바뀌지 않습니다. 코드를 수정한 뒤에는 항상 업로드가 필요합니다.
업로드 과정에서 자주 만나는 문제
처음 아두이노를 사용할 때는 오류가 나는 일이 흔합니다. 오류가 났다고 해서 보드가 고장 난 것은 아닙니다. 대부분은 연결, 선택, 입력 실수에서 생깁니다.
포트가 보이지 않을 때
USB 케이블이 제대로 꽂혀 있는지 확인합니다. 케이블을 뺐다가 다시 꽂아 보고, 다른 USB 단자에 연결해 봅니다. 컴퓨터에 따라 포트가 나타나는 데 몇 초가 걸릴 수 있습니다.
또 하나 자주 있는 원인은 충전 전용 케이블입니다. 일부 USB 케이블은 전원만 보내고 데이터를 주고받지 못합니다. 이런 케이블을 사용하면 보드에 전원 LED는 켜지지만 포트가 나타나지 않습니다. 가능하면 데이터 전송이 되는 USB 케이블을 사용해야 합니다.
호환 보드를 사용하는 경우에는 USB-시리얼 드라이버가 필요할 때도 있습니다. 케이블을 바꾸어도 포트가 보이지 않는다면, 사용하는 보드 설명서나 판매 페이지에서 드라이버 안내를 확인해 보세요.
업로드가 실패할 때
먼저 보드가 Arduino Uno로 선택되어 있는지 확인합니다. 그다음 포트가 올바른지 확인합니다. 보드와 포트가 맞지 않으면 코드가 정상이어도 업로드가 실패합니다.
업로드 중에 다른 프로그램이 포트를 사용하고 있는 경우도 있습니다. 예를 들어 시리얼 모니터나 다른 개발 프로그램이 같은 포트를 잡고 있으면 업로드가 되지 않을 수 있습니다. 이때는 관련 창을 닫고 다시 시도합니다.
코드에서 오류가 날 때
괄호, 세미콜론, 대소문자를 확인합니다. 아두이노 코드는 setup과 Setup을 다르게 봅니다. digitalWrite처럼 정해진 이름은 대소문자가 맞아야 합니다.
또한 문장 끝의 세미콜론 ;을 빠뜨리면 컴파일 오류가 납니다. 컴파일은 사람이 쓴 코드를 아두이노가 이해할 수 있는 형태로 바꾸는 과정입니다. 업로드 전에 IDE는 먼저 컴파일을 시도합니다. 코드 문법에 문제가 있으면 이 단계에서 멈춥니다.
LED가 깜빡이지 않을 때
업로드가 성공했는데도 LED가 깜빡이지 않는다면 보드 위의 L LED를 보고 있는지 확인합니다. 외부 LED를 연결한 경우라면 핀 번호, LED 방향, 저항 연결을 점검해야 합니다. 하지만 이번 실습은 보드 내장 LED를 사용하므로, 코드의 핀 번호가 13인지 먼저 확인하면 됩니다.
실습을 마치기 전에 확인할 것
이번 장에서 가장 중요한 것은 멋진 코드를 많이 쓰는 것이 아닙니다. 아두이노와 컴퓨터가 서로 대화할 준비를 끝내는 것입니다. 다음 항목을 스스로 확인해 보세요.
아두이노 우노에서 USB 포트, 전원 단자, 디지털 핀, 아날로그 핀을 구분할 수 있다.
Arduino IDE에서 보드를 Arduino Uno로 선택할 수 있다.
포트를 선택하고 코드를 업로드할 수 있다.
setup()은 처음 한 번 실행되고,loop()는 계속 반복된다는 것을 설명할 수 있다.LED 깜빡이기 코드에서 기다리는 시간을 바꾸어 동작을 바꿀 수 있다.
포트 인식 실패나 업로드 오류가 났을 때 케이블, 보드 선택, 포트 선택을 먼저 점검할 수 있다.
이제 아두이노는 우리의 명령을 받을 준비가 되었습니다. 다음 장에서는 이 명령이 실제 부품을 움직이기 위해 필요한 전기의 기본을 배웁니다. 전압, 전류, 저항 같은 말이 낯설 수 있지만, 로봇 회로를 안전하게 만들기 위해 꼭 필요한 기초입니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.