안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
지난 시간에는 아두이노가 무엇인지, 그리고 앞으로 우리가 함께할 가상 실험실 '틴커캐드(Tinkercad)'에 대해 알아보았죠. 이론 공부는 이제 충분해요! 오늘은 드디어 여러분의 손으로 직접 첫 번째 전자회로를 만들고 코딩까지 해보는 시간입니다.
전자공학의 "Hello, World!"라고 불리는 LED 깜빡이기(Blink), 저와 함께 차근차근 따라오시면 누구나 성공할 수 있으니 걱정 말고 시작해 볼까요?
Slide 1: 02. LED 깜빡이기
오늘의 주제는 바로 'LED 깜빡이기' 입니다. 2장의 '기본 부품과 C언어 체험하기' 파트에서 첫 번째로 다뤄볼 실습이에요. 가장 기본이면서도, 아두이노의 핵심 동작 원리를 모두 담고 있는 아주 중요한 예제랍니다!
Slide 2: 준비물
실습에 앞서 준비물을 챙겨볼까요? 틴커캐드라는 가상 실험실을 이용하기 때문에, 마우스 클릭 몇 번이면 모든 준비가 끝나요. 오른쪽 부품 상자에서 아래 부품들을 찾아 작업 화면으로 끌어와 주세요.
- 아두이노 우노 (Arduino Uno): 우리 프로젝트의 두뇌 역할을 할 마이크로컨트롤러 보드예요.
- 작은 브레드보드 (Breadboard): 부품들을 꽂아서 서로 연결할 수 있게 해주는 만능 기판이죠. 납땜 없이 부품을 꽂기만 하면 되니 정말 편리해요!
- LED 1개: 빛을 내는 작은 전구, 오늘의 주인공입니다.
- 저항 (Resistor) 1개: LED에 너무 강한 전류가 흘러 타버리지 않도록 보호해 주는 보디가드 역할을 해요. 우리는 220Ω(옴) 저항을 사용할 거예요.
- 점퍼 와이어 (Jumper Wires): 아두이노와 브레드보드의 부품들을 연결해 줄 전선입니다.
Slide 3: 회로 구성 1단계 - 부품 배치하기
자, 이제 본격적으로 회로를 조립해 봅시다! 첫 단계는 부품들을 제자리에 배치하는 거예요.
- 아두이노와 브레드보드 배치: 작업 화면에 아두이노와 브레드보드를 나란히 보기 좋게 놓아주세요.
- LED 꽂기:
- LED를 브레드보드의 e열 아무 곳에나 꽂아주세요. (예: e15, e16)
- LED 다리는 길이가 다른데요, 긴 다리가 플러스(+)극인 '양극', 짧은 다리가 마이너스(-)극인 '음극'이에요. 틴커캐드에서는 살짝 꺾인 다리가 양극이죠. 양극(꺾인 다리)이 오른쪽을 향하도록 꽂으면 나중에 연결하기 편해요!
- 저항 꽂기:
- 저항을 가져와 LED의 양극과 같은 세로줄에 연결되도록 꽂아주세요. (예: LED 양극이 16번 줄에 있다면, 저항의 한쪽 다리도 16번 줄에 꽂으면 돼요.)
- 꿀팁! 저항을 클릭하고 키보드의 `R` 키를 누르면 저항을 회전시킬 수 있어요. 가로로 눕히면 연결하기가 훨씬 수월하답니다!
Slide 4: 회로 구성 2단계 - 저항 값 변경하기
⭐ 아주 중요한 단계예요! ⭐
틴커캐드에서 저항을 처음 꺼내면 기본적으로 1kΩ(킬로옴)으로 설정되어 있어요. 이 저항은 우리가 사용하기에 너무 커서 LED 불빛이 아주 희미하거나 켜지지 않을 수 있답니다. 그래서 우리가 계산한 220Ω으로 값을 바꿔줘야 해요.
- 브레드보드에 꽂아둔 저항을 클릭하세요.
- 오른쪽 위에 설정창이 나타나면, 저항 값을 `1`에서 `220`으로 바꿔주세요.
- 단위가 `kΩ`으로 되어있는 것을 클릭해서 `Ω` (옴)으로 변경해주세요.
성공적으로 변경했다면, 저항의 색 띠가 [빨강-빨강-갈색]으로 바뀐 것을 확인할 수 있을 거예요. 이 색 띠는 저항 값을 눈으로 식별할 수 있게 해주는 약속이랍니다.
Slide 5: 회로 구성 3단계 - 전선 연결하기
이제 아두이노와 부품들을 전선으로 이어줄 차례입니다. 전기의 길을 만들어 주는 과정이죠!
- GND 연결 (검은색 또는 파란색 선):
- GND는 'Ground(접지)'의 약자로, 전기가 흘러나가는 (-)극 역할을 해요.
- 아두이노 보드의 `GND` 핀을 클릭해서, 브레드보드에 꽂힌 LED의 음극(짧은 다리)과 같은 세로줄에 연결해주세요.
- 전선 색상은 보통 GND는 검은색으로 하지만, 구분을 위해 파란색으로 해도 괜찮아요!
- 신호선 연결 (빨간색 선):
- 이제 LED를 제어할 신호를 보낼 길을 만들 거예요.
- 아두이노 보드의 디지털 `13`번 핀을 클릭해서, 저항의 반대쪽 다리와 같은 세로줄에 연결해주세요.
연결을 마쳤다면, 전기의 흐름을 한번 상상해 보세요.
`13번 핀` → `저항` → `LED 양극` → `LED 음극` → `GND`
이렇게 전기가 끊어지지 않고 하나의 고리(회로)처럼 잘 연결되었나요? 그럼 성공입니다!
Slide 6: 시뮬레이션 실행 및 결과 확인
드디어 모든 준비가 끝났습니다! 오른쪽 위에 있는 [시뮬레이션 시작] 버튼을 힘차게 눌러보세요!
버튼을 누르면 아두이노 보드에 가상의 USB 케이블이 꽂히면서 전원이 공급되고, 우리가 만든 회로에 생명이 불어넣어집니다. 잠시 후, LED가 1초 간격으로 깜빡이는 것이 보이나요? 축하합니다! 여러분의 첫 아두이노 프로젝트가 성공적으로 작동하는 순간이에요!
그런데 여기서 드는 궁금증 하나!
"어? 저는 코드를 한 줄도 안 짰는데 어떻게 LED가 깜빡이죠?"
정말 좋은 질문이에요! 이건 틴커캐드의 숨겨진 배려랍니다. 우리가 새 아두이노를 꺼내면, 틴커캐드는 가장 대표적인 예제인 'blink(깜빡이기)' 코드를 13번 핀에서 작동하도록 미리 넣어줘요. 마치 새 스마트폰을 사면 기본 앱이 깔려있는 것과 같죠. 덕분에 우리는 코딩을 배우기 전에도 "아, 내가 회로를 올바르게 연결했구나!"하고 바로 확인할 수 있답니다. 정말 편리하죠?
회로를 수정하거나 코드를 바꾸고 싶을 땐, [시뮬레이션 중지] 버튼을 먼저 누르는 것 잊지 마세요!
Slide 7: LED 깜빡이기 코드 살펴보기
이제 보이지 않는 곳에서 LED를 깜빡이게 만들었던 '코드'를 만나볼 시간입니다. 틴커캐드 화면의 [코드] 버튼을 누르면 이 코드를 볼 수 있어요. (만약 블록 코딩 화면이 나온다면, '문자' 모드로 바꿔주세요!)
| 01 | void setup() { |
| 02 | pinMode(13, OUTPUT); |
| 03 | } |
| 04 | |
| 05 | void loop() { |
| 06 | digitalWrite(13, HIGH); // LED 켜기 (전기 쏴!) |
| 07 | delay(1000); // 1초 기다리기 |
| 08 | digitalWrite(13, LOW); // LED 끄기 (전기 끊어!) |
| 09 | delay(1000); // 1초 기다리기 |
| 10 | } |
코드가 영어로 되어 있어 조금 낯설 수 있지만, 걱정 마세요. 각 줄이 어떤 의미인지 제가 쉽게 설명해 드릴게요!
- `pinMode(13, OUTPUT);`: 13번 핀을 '출력(OUTPUT)' 모드로 사용하겠다고 아두이노에게 알려주는 설정이에요. 즉, "13번 핀아, 너는 이제부터 LED를 켜고 끄는 신호를 내보내는 역할을 할 거야!"라고 임명장을 주는 거죠.
- `digitalWrite(13, HIGH);`: 13번 핀에 'HIGH' 신호, 즉 5V 전기를 보내라는 명령이에요. 이 명령으로 LED가 환하게 켜집니다!
- `delay(1000);`: 1000밀리초, 즉 1초 동안 잠시 프로그램을 멈추고 기다리라는 뜻이에요. 이 덕분에 우리는 LED가 켜진 상태를 1초 동안 볼 수 있죠.
- `digitalWrite(13, LOW);`: 이번엔 13번 핀에 'LOW' 신호, 즉 0V 전기를 보내(전기를 끊어)라는 명령이에요. LED가 꺼지겠죠?
- `delay(1000);`: 다시 1초를 기다립니다. LED가 꺼진 상태를 1초간 유지해요.
이 `loop()` 함수 안의 네 줄이 계속해서 무한히 반복되면서 LED가 1초마다 켜지고 꺼지는 동작을 만들어내는 거랍니다.
Slide 8: 코드 구조
방금 본 아두이노 코드는 크게 두 개의 덩어리로 나뉘어 있어요. 바로 `setup()` 함수와 `loop()` 함수입니다. 모든 아두이노 코드는 이 두 가지 기본 구조를 가지고 있답니다.
- `setup()` 함수:
- 아두이노에 전원이 처음 켜질 때 '딱 한 번만' 실행되는 부분이에요.
- 주로 초기 설정을 담당해요. 우리 예제에서는 13번 핀을 출력 모드로 설정하는 `pinMode()` 함수가 여기에 있었죠.
- `loop()` 함수:
- `setup()` 함수가 끝난 뒤, 전원이 꺼질 때까지 '무한히 반복' 되는 부분이에요.
- 실질적인 프로그램의 모든 동작이 여기서 이루어져요. LED를 켜고, 기다리고, 끄고, 기다리는 핵심 동작이 모두 `loop()` 안에 있었죠?
옷을 입을 때 단추를 한 번만 채우고(`setup`), 하루 종일 숨 쉬고 활동하는 것(`loop`)과 비슷하다고 생각하면 쉬워요!
Slide 9: 코드 작성 모드 변경 (블록 → 문자)
앞서 잠깐 언급했지만, 틴커캐드에서 [코드] 버튼을 처음 누르면 아이콘을 끌어다 놓는 '블록' 코딩 화면이 나타날 수 있어요. 하지만 우리는 진짜 엔지니어처럼 텍스트 코드를 직접 다룰 거니까, 이 화면을 바꿔줘야 해요.
- [코드] 버튼을 클릭하세요.
- 왼쪽 위에 있는 '블록'이라고 적힌 드롭다운 메뉴를 클릭하세요.
- 메뉴에서 [문자]를 선택하세요.
- "블록 편집기를 닫겠습니까?"라는 경고창이 떠도 놀라지 마세요! [계속] 버튼을 용감하게 눌러주면 됩니다.
짜잔! 이제 진짜 프로그래머들이 사용하는 것과 같은 텍스트 기반 코드 편집창이 나타났을 거예요.
Slide 10: setup() 함수 자세히 알기
`setup()` 함수에 대해 좀 더 깊이 알아볼까요?
- 역할:
- 프로그램이 시작될 때 단 한 번만 실행돼요.
- 전원이 켜지거나, 리셋 버튼을 눌렀을 때 가장 먼저 실행되는 '첫 단추' 같은 존재죠.
- 주요 작업:
- 핀 역할 정하기: `pinMode()` 함수를 사용해 각 핀을 입력(INPUT)으로 쓸지, 출력(OUTPUT)으로 쓸지 정해요.
- 통신 준비: `Serial.begin()`처럼 컴퓨터와 데이터를 주고받기 위한 통신 설정을 하기도 해요. (이건 나중에 배워볼게요!)
- 1회성 동작: "시스템 시작!" 같은 메시지를 한 번만 출력하거나, 부팅 알림음을 울리는 등 처음에 딱 한 번만 필요한 동작을 여기에 넣어요.
`setup()`은 본격적으로 달리기를 시작하기 전에 신발 끈을 묶는, 아주 중요한 준비 단계라고 할 수 있습니다.
Slide 11: loop() 함수 자세히 알기
이번엔 아두이노의 심장, `loop()` 함수입니다!
- 역할:
- `setup()`이 끝난 직후부터 무한 반복 실행돼요.
- 아두이노의 전원이 꺼지거나 고장 나기 전까지는 절대 멈추지 않는 에너자이저랍니다!
- 주요 작업:
- 끊임없는 감시 (Input): 버튼이 눌렸는지, 센서 값에 변화가 있는지 등 주변 상황을 계속해서 살펴봐요.
- 부품 제어 (Output): 감지된 상황에 맞춰 LED를 켜거나, 모터를 돌리는 등 실제적인 행동을 명령해요.
`loop()`는 CCTV처럼 24시간 쉬지 않고 주변을 감시하고, 정해진 규칙에 따라 행동하는 역할을 담당합니다.
Slide 12: pinMode() 함수
코드에서 봤던 핵심 함수들을 하나씩 자세히 살펴볼게요. 첫 번째는 `pinMode()` 함수입니다.
아두이노의 디지털 핀들은 처음에는 아무 역할도 없는 '백지' 상태예요. `pinMode()` 함수는 이 핀들에게 "너의 역할은 이거야!"라고 임명장을 주는 역할을 합니다.
- 형식: `pinMode(핀번호, 모드);`
- 모드 종류:
- `OUTPUT`: '출력'. 전기를 내보내서 부품을 작동시키는 역할 (예: LED, 모터)
- `INPUT`: '입력'. 외부의 전기 신호를 감지하는 역할 (예: 버튼, 센서)
- `INPUT_PULLUP`: `INPUT`과 비슷하지만, 아두이노 내부의 저항을 사용해서 회로를 더 간단하게 만들 수 있는 특별한 입력 모드예요. (나중에 버튼 실습에서 자세히 다룰게요!)
- 사용 예: `pinMode(13, OUTPUT);`
- 의미: "13번 핀을 출력 모드로 설정하겠습니다!"
Slide 13: digitalWrite() 함수
`pinMode()`로 핀의 역할을 정했다면, `digitalWrite()` 함수로 실제 행동을 명령할 수 있어요. `OUTPUT`으로 설정된 핀에 "전기를 내보내!" 또는 "전기를 끊어!"라고 지시하는 함수죠.
- 형식: `digitalWrite(핀번호, 상태);`
- 상태 종류:
- `HIGH` (또는 숫자 `1`): 5V 전기를 '발사'하라는 뜻. 부품이 켜집니다(ON).
- `LOW` (또는 숫자 `0`): 0V 전기를 '차단'하라는 뜻. 부품이 꺼집니다(OFF).
- 사용 예: `digitalWrite(13, HIGH);`
- 의미: "13번 핀, 전기를 내보내서 연결된 부품을 켜라!"
잠깐! 1, 0 대신 HIGH, LOW를 쓰는 이유?
물론 숫자 1과 0이 쓰기 편할 수 있어요. 하지만 코드가 길어지고 복잡해지면, `digitalWrite(13, 1)`이라고 쓰인 코드를 보고 '이게 켜라는 뜻이었나, 아니면 그냥 숫자 1을 의미하는 건가?' 헷갈릴 수 있겠죠? 그래서 사람이 읽기 쉽도록 `HIGH`(켜짐), `LOW`(꺼짐)라는 의미가 명확한 이름표를 붙여준 거랍니다. 둘 중 편한 것을 쓰셔도 괜찮아요!
Slide 14: delay() 함수
`delay()` 함수는 '기다림의 미학'을 가르쳐주는 함수예요. 아두이노는 동작 속도가 엄청나게 빨라서, 이 함수가 없다면 LED가 켜지자마자 눈 깜짝할 사이에 꺼져버려서 우리 눈에는 계속 켜져 있는 것처럼 보일 거예요. `delay()`는 프로그램의 실행을 잠시 멈춰서 우리가 변화를 눈으로 확인할 시간을 벌어줍니다.
- 형식: `delay(시간);`
- 시간 단위:
- ⭐중요!⭐ 단위는 '초(second)'가 아니라 '밀리초(millisecond, ms)' 입니다.
- 1초를 1000개로 쪼갠 아주 작은 시간 단위예요.
- `1000ms = 1초`
- `500ms = 0.5초`
- 주의사항:
- `delay()`가 실행되는 동안 아두이노는 정말 아무것도 안 하고 '얼음' 상태가 됩니다.
- 마치 "무궁화 꽃이 피었습니다" 놀이에서 술래가 뒤를 돌아보는 동안 다른 모든 것이 멈추는 것과 같아요. `delay(1000);`이 실행되는 1초 동안에는 버튼을 눌러도 아두이노는 전혀 알아채지 못한답니다. 이 점은 나중에 더 복잡한 프로젝트를 할 때 꼭 기억해야 해요!
Slide 15: 주석의 활용
코드 중간중간에 `// LED 켜기` 와 같이 한글로 된 설명을 보셨을 거예요. 이걸 '주석(Comment)' 이라고 불러요.
- 주석의 특징:
- 컴퓨터는 주석을 무시해요! `//` 표시가 나오면 그 뒤에 있는 내용은 없는 셈 치고 다음 줄로 넘어가 버리죠. 그래서 주석 안에 한글을 쓰든, 그림을 그리든 프로그램 실행에는 아무런 영향을 주지 않아요.
- 주석을 왜 쓸까요?
- 오직 '사람'을 위한 메모장이에요.
- 코드 설명 추가: 이 코드가 어떤 역할을 하는지 설명을 남겨서 다른 사람이 쉽게 이해할 수 있도록 도와줘요.
- 미래의 나를 위한 기록: 지금은 이 코드가 완벽하게 이해되지만, 몇 달 뒤에 다시 보면 "내가 이걸 왜 이렇게 짰지?" 하고 기억이 안 날 수 있어요. 그럴 때를 대비한 친절한 메모랍니다.
- 주석 다는 법:
- 한 줄 주석: `//` 뒤에 쓰는 내용은 그 줄 끝까지 주석 처리됩니다. (가장 많이 사용돼요!)
CODE X.X | 한 줄 주석 예시
01 delay(1000); // 여기서부터는 컴퓨터가 못 읽어요! - 여러 줄 주석: `/*` 로 시작해서 `*/` 로 끝나요. 그 사이에 있는 모든 내용이 주석 처리됩니다. 긴 설명을 쓸 때 유용해요.
CODE X.X | 여러 줄 주석 예시
01 /* 02 제목: LED 깜빡이기 03 작성자: TECH79 04 날짜: 2026년 5월 1일 05 */
- 한 줄 주석: `//` 뒤에 쓰는 내용은 그 줄 끝까지 주석 처리됩니다. (가장 많이 사용돼요!)
와, 정말 수고 많으셨습니다! 🎉
오늘은 아두이노의 첫걸음, LED 깜빡이기를 함께 해봤어요. 직접 부품을 배치하고, 전선을 연결해서 회로를 완성하고, 시뮬레이션을 통해 LED가 살아 움직이는 것을 확인했죠. 그리고 그 뒤에서 작동하는 코드의 기본 구조(`setup`, `loop`)와 핵심 함수들(`pinMode`, `digitalWrite`, `delay`)까지 속속들이 파헤쳐 보았습니다.
오늘 배운 내용이 앞으로 우리가 만들어갈 모든 프로젝트의 뼈대가 될 거예요. 첫 단추를 아주 잘 끼우셨으니, 다음 시간에는 오늘 배운 내용을 응용해서 더 재미있는 실습으로 돌아오겠습니다.
오늘의 성취감을 마음껏 즐기세요! 다음 강의에서 뵙겠습니다. 감사합니다! 😊
이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.
댓글 없음:
댓글 쓰기