영상 스타일 적용 04 | Crayon Picture Book으로 아두이노 PWM을 그림책 영상으로 바꾸기
영상 스타일 적용 · 사례 04 · Crayon Picture Book × 아두이노 PWM
아두이노에서 analogWrite(9, 128)을 쓰면 LED가 반쯤 어두워집니다. 그러면 9번 핀의 전압이 2.5V로 내려간 걸까요? 이 글은 제 교재 115~119쪽의 PWM 내용을 크레용 그림책 스타일의 86초 영상으로 만든 과정과 결과를 정리합니다. 먼저 완성 영상을 보고, 그다음 원작 스타일과 제작 방법을 차례로 살펴봅니다.
완성 영상: 같은 5V인데 LED는 왜 어두워질까
1920×1080 · 24fps · 86.4초 · 음성 내레이션 없음(한국어 자막을 화면에 그려 넣음) · 크레용·종이·붓 효과음과 짧은 오르골/장난감 피아노 음을 직접 합성해 넣음.
영상은 네 장의 그림책 페이지로 넘어갑니다. 첫 장에서 같은 5V 핀에 연결된 LED 두 개가 서로 다른 밝기로 칠해지고, "2.5V로 줄었나?"라는 질문이 적힙니다. 둘째 장에는 교재 117쪽 회로와 118쪽 CODE 2.7이 한 줄씩 그려집니다. 셋째 장에서는 0, 64, 128, 192, 255 다섯 값의 파형이 차례로 그려지는데, 파형의 높이는 언제나 5V 기준선까지 올라가고 켜진 구간을 노랑으로 칠하는 폭만 넓어집니다. 넷째 장에서 128을 크게 그려 "어느 순간이든 5V 아니면 0V"임을 확인한 뒤, 군청 물감이 지나가면서 처음부터 흰 크레용으로 숨겨 두었던 평균 2.5V 점선이 드러납니다. 마지막으로 직류 2.5V와 비교하고 analogWrite(9, 32)의 결과를 예측해 봅니다.
① 이번 사례의 원본 스타일
| 우리 사례 번호 | 사례 04 (AI오토마타 '영상 스타일 적용' 연재 번호이며 원본 사이트의 공식 순번이 아닙니다) |
|---|---|
| 원본 스타일 | Crayon Picture Book · 식별자 crayon-book · 분류 Hand-drawn & Painting |
| 원작 예시 영상 | The Moon Can't Sleep (0:52) |
| 원작자 | Lemomo / LemoLab (Lemo-Opuscar 프로젝트) |
| 확인한 원본 버전 | 저장소 커밋 3961ddb (2026-10-22), 확인일 2026-10-24 |
위 영상은 원작자 Lemomo/LemoLab의 작품입니다(CC BY 4.0). 재업로드하지 않고 원본 공개 주소를 그대로 연결했습니다. 재생이 안 되면 아래 '원본 영상 열기'를 누르세요.
② 왜 PWM에 크레용 그림책을 골랐나
크레용 그림책 스타일의 지침(STYLE.md)이 가장 강조하는 문장은 "그리기와 색칠이 곧 줄거리"라는 것입니다. 원작 영상에서도 집에 노랑을 칠하면 창문에 불이 들어오고, 이불을 칠하면 달이 잠듭니다. 색칠하는 행동이 곧 사건이 되는 셈입니다.
PWM을 처음 배우는 학생은 대개 '밝기 = 전압의 높이'로 생각합니다. 그런데 PWM에서 실제로 바뀌는 것은 높이가 아니라 켜진 시간의 폭입니다. 그래서 이번 영상에서는 펄스가 켜진 구간에만 노랑 크레용을 칠했습니다. 값이 커질수록 칠하는 폭이 넓어지고, 칠할 수 있는 높이는 언제나 5V 기준선에서 멈춥니다. 원작의 '색칠 = 켜짐' 문법을 그대로 개념 설명에 쓸 수 있었던 것이 이 스타일을 고른 이유입니다.
원작에서 가져온 표현 규칙은 다섯 가지입니다. ① 빈 종이에서 시작해 선이 길이를 따라 그려지는 것(Drawn live), ② 색칠이 곧 행동(Colouring is an action), ③ 2프레임마다 선이 미세하게 다시 그려지는 끓음(Boil), ④ 처음부터 흰 크레용으로 숨겨 둔 것을 물감이 드러내는 왁스 레지스트(Wax resist), ⑤ 장면 전환은 디졸브 대신 장 넘김(It is a book)입니다. 이 가운데 왁스 레지스트는 영상에서 가장 중요한 순간, 즉 "평균을 내야 2.5V가 보인다"는 결론에 한 번만 사용했습니다. 물감을 고르게 펴는 동작 자체가 '시간에 걸쳐 고르게 평균을 낸다'는 비유가 되도록 한 것입니다.
③ 입력한 교재 내용
| 교재 | 『주니어 공학 교실 아두이노의 기초』 115~119쪽 |
|---|---|
| 그림·코드 | 그림 2.19 PWM의 원리(115쪽), 그림 2.20 듀티 사이클·그림 2.21 PWM 가능핀(116쪽), 회로 구성 그림(117쪽), CODE 2.7 서서히 밝아지는 LED 코드(118쪽), analogWrite() 문법(119쪽) |
| 회로 | 아두이노 UNO ~9번 핀 → 220Ω 저항 → LED 긴 다리(+) / LED 짧은 다리(−) → GND (117쪽 그림과 대조) |
| 코드 흐름 | setup()에서 analogWrite(9, 0) → 64 → 128 → 192 → 255를 0.5초 간격으로 한 번만 실행하고, loop()는 비어 있어 마지막 255(계속 켜짐)가 유지됨 |
| 학습 목표 | ① PWM에서 바뀌는 것은 전압의 높이가 아니라 켜진 시간의 비율임을 설명한다. ② analogWrite 값 N에 대해 켜진 비율을 N/255로 어림한다. ③ PWM의 평균 2.5V와 직류 2.5V를 구분한다. |
| 바로잡을 오개념 | "128이면 핀 전압의 높이가 2.5V로 반이 된다" |
교재 116쪽 그림 2.20은 "듀티 사이클 50% = 2.5V"처럼 효과(평균)를 적어 두었습니다. 이것을 순간 전압으로 잘못 읽으면 바로 위 오개념이 생깁니다. 그래서 영상에서는 그림 속 펄스 높이를 모두 5V로 고정하고, 2.5V는 물감으로 '평균을 냈을 때만' 드러나는 선으로 따로 표현했습니다.
④ 실제로 쓴 제작 방식과 도구
원본 Lemo-Opuscar 저장소에는 설치형 스킬(lemo-opuscar)이 있지만, 이번 작업에서는 그 스킬을 설치하거나 호출하지 않았습니다. 대신 저장소를 내려받아 원작자가 에이전트용으로 써 둔 순서(AGENTS.md → DIRECTOR.md → TECHNIQUE.md → STYLE.md)를 읽고 따랐습니다. 다시 말해 이 영상은 스타일 지침(STYLE.md)을 첨부해 제작한 것입니다.
원본 라이브러리의 렌더링 도구를 쓰려면 Node 패키지와 헤드리스 브라우저를 설치하는 스크립트를 실행해야 합니다. 그런데 이번 작업 환경에서는 그 설치 스크립트가 '외부 코드 실행'으로 분류되어 차단되었습니다. 그래서 STYLE.md와 DEMO.md에 공개된 수치를 바탕으로 Python 렌더러를 새로 작성했습니다. 종이색 #f4efe3, 왁스가 붙는 조건 '종이 이빨 > 1 − 1.22×압력', 해칭 간격 10.5px, 크레용 12색, 군청 물감 투과율 같은 값이 여기에 쓰였습니다. 원작 데모의 JavaScript 엔진은 실행하지도 복사하지도 않았습니다.
| 항목 | 이번 사례에서 확인된 값 |
|---|---|
| AI | Claude (이 작업 세션 설정 모델 claude-opus-5-5), 원격 작업 환경에서 실행 |
| 그림·영상 | Python 3.13.17, NumPy 2.5.3, OpenCV 5.0.0, Pillow 12.3.0, SciPy 1.18.1, ffmpeg 6.1.1 (libx264, AAC) |
| 코드 검증 | avr-gcc 7.3.0 + Arduino AVR 코어(공식 저장소), simavr 1.6 시뮬레이터 |
| 서체 | Gaegu(자막·손글씨, OFL), 나눔고딕코딩(코드·기호, OFL) |
| 소리 | 음성 없음. 효과음과 짧은 음악은 NumPy로 직접 합성(샘플·원작 음원 미사용) |
| 비용·계정 | 유료 API·결제·새 계정 없음. Claude 사용 요금제 조건은 이 글에서 확인하지 않음(미확인) |
⑤ 따라 하기: 교재 쪽에서 영상까지
- 입력 파일 준비 — 교재 PDF에서 해당 쪽을 이미지로 확인합니다. 텍스트 추출만 믿지 말고 회로 그림의 핀 위치, LED 다리 방향, 코드의 띄어쓰기를 원본 이미지와 직접 대조합니다. 이 교재 PDF는 PDF 쪽 번호와 인쇄 쪽 번호가 같았습니다.
- 지침 첨부 — 원본 저장소에서 STYLE.md를 내려받고 커밋 번호를 기록해 둡니다. 원작자의 안내대로 내 영상의 구성안(TREATMENT.md)을 먼저 쓰고, 원작 데모 설명(DEMO.md)은 그다음에 읽어 기법만 참고합니다. 이 순서를 지켜야 원작 영상을 흉내 내는 데서 그치지 않습니다.
- 프롬프트 실행 — 아래 ⑥의 최초 제작 프롬프트를 사용합니다. 처음에는 정지 화면 몇 장만 렌더링해 글자가 깨지지 않는지, 색이 너무 진하지 않은지 확인합니다.
- 렌더링 — 그림은 초당 12장으로 끓게 하고, 카메라 이동만 초당 24장으로 부드럽게 움직입니다. 소리는 그림 아이템의 시작 시각에 맞춰 합성하고, 전체 음량을 −14 LUFS로 맞춥니다.
- 검증 — ⑥의 점검 프롬프트로 수치·코드·자막·영상 파일을 확인합니다. 실패한 항목은 수정 요청을 낸 뒤 같은 시각의 프레임을 다시 렌더링해 비교합니다.
claude plugin marketplace add lemomo-ai/lemo-opuscar → claude plugin install lemo-opuscar@lemolab)을 따르면 됩니다. 다만 이 글의 영상은 그 방법으로 만들지 않았으므로, 스킬로 만들 때의 결과와 같다고 보장할 수는 없습니다.⑥ 복사해서 쓰는 프롬프트 전문
자체 응용문아래 네 개는 모두 AI오토마타가 이번 사례를 위해 쓴 한국어 요청문입니다. 원본 STYLE.md를 번역한 글이 아닙니다. 원본 지침은 위 링크로 첨부해서 사용하세요.
1. 최초 제작 프롬프트
이 폴더의 lemo-opuscar 저장소(클론)와 styles/crayon-book/STYLE.md를 읽고 작업하라. 먼저 사용한 모델·실행 환경·읽은 파일과 커밋을 밝혀라. 파일을 읽지 못하면 추정으로 대체하지 말라. [교재 입력 — 원문 이미지로 대조할 것] 『주니어 공학 교실 아두이노의 기초』 115~119쪽(그림 2.19 PWM의 원리, 그림 2.20 듀티 사이클, 그림 2.21 PWM 가능 핀), 117쪽 회로(아두이노 UNO ~9번 핀 → 220Ω → LED 긴 다리(+), 짧은 다리(−) → GND), 118쪽 CODE 2.7(setup()에서 analogWrite(9, 0/64/128/192/255)를 0.5초 간격으로 한 번 실행, loop()는 비어 있음). PDF 페이지를 이미지로 렌더링해 그림·코드를 직접 확인하고, 추출 텍스트만으로 코드나 도해를 옮기지 말라. [목표] 입문자의 오개념 "analogWrite(9, 128)이면 핀 전압의 높이가 2.5V로 반이 된다"를 바로잡는 60~90초 영상. - 0/64/128/192/255 단계마다 펄스 높이는 0V와 5V만 유지되고, 켜진 시간의 비율(N/255)만 달라짐을 보인다. - 코드의 실제 간격(0.5초)과 영상에서 늘려 보여 주는 시간을 구분해 화면에 적는다. - 관찰용 느린 파형을 실제 주파수라고 표시하지 않는다(UNO 9번 핀 실제 약 490Hz). - LED 밝기 그림은 실측 광도가 아닌 개념 표현임을 화면에 적는다. - 128 확대 장면에서 어느 순간이든 0V 또는 5V임을 보이고, 평균 2.5V와 직류 2.5V를 구분한다. 마지막에 다음 값을 예측하게 한다. - 장면: 0~10초 질문 → 10~25초 회로·코드 그리기 → 25~50초 다섯 값 비교 → 50~65초 128 확대 → 65~86초 평균·직류 구분·예측. [스타일] STYLE.md를 고정 규칙으로 지킨다: 종이 #f4efe3에 페이지 고정 이빨, 왁스 부착(압력), 선이 길이를 따라 그려짐, 지그재그 색칠과 윤곽 넘침, 12fps로 끓는 선, 크레용 12색 이하(윤곽 남색, 검정 금지), 물감은 한 가지, 디졸브 금지(장 넘김·그리기·물감으로 전환). 장식 필터처럼 얹지 말고 '그리기와 색칠이 곧 설명'이 되게 하라. 정량 파형·기호(0V/5V, N/255, 220Ω, ~9, GND, +/−)는 끓음을 1px 이하로 고정한다. LED를 의인화하지 말라(전자가 행동한다는 오해 방지). [소리·자막] 승인된 음성을 쓸 수 없으면 TTS를 넣지 말고 한국어 자막형으로 만든다. 원작 음악·음원을 쓰지 말라. 자막은 책에 인쇄된 문장처럼, 한글이 있는 손글씨 서체(OFL)로, 빈 종이 패치 위에 쓴다. [산출] 1920×1080, 24fps MP4, 렌더링 소스와 한 번에 다시 만드는 스크립트, TREATMENT.md, 자막 SRT, 대표 프레임 3장, 검산 기록을 같은 폴더에 남겨라. 렌더링하지 않은 결과는 완성이라고 쓰지 말라. TREATMENT.md(후보 구조 3개·샷 리스트·큐 맵)를 먼저 쓰고, 그 뒤에만 DEMO.md를 읽어 기법만 참고하라.
2. 점검 프롬프트
방금 만든 영상과 소스를 다음 순서로 점검하고, 통과/실패를 숫자와 함께 표로 남겨라. 이전 작업의 통과 기록을 가져오지 말라. 1) 소스에서 직접 계산: 각 행 파형의 y값이 5V선·0V선 두 값뿐인가, 켜짐 색칠 길이 비율이 N/255인가, 화면 표기(0%, 약 25%, 약 50%, 약 75%, 100%, 32 → 약 13%)가 계산과 맞는가, 128 확대의 측정점 표시(5V/0V)가 위상과 맞는가, 숨긴 2.5V 점선과 직류선이 눈금의 정확한 중간인가. 2) 화면의 CODE 2.7 15줄을 교재 118쪽과 한 줄씩 대조하라. 3) 코드를 정적으로 검토한 결과와, 실제로 컴파일·시뮬레이션한 결과를 따로 적어라. 하지 않은 실물 실험은 하지 않았다고 적어라. 4) 자막마다 표시 시간과 글자 수를 재고, 장 넘김 중 자막이 없는지 확인하라. 5) 완성 MP4를 ffprobe(크기·fps·길이·오디오), blackdetect, ebur128로 재고, 1초 간격 전 구간 프레임을 모두 보고, 장 넘김·물감 구간은 0.2초 간격으로 확인하라. 6) STYLE.md 항목별로 적용/변형/미적용과 그 이유를 표로 정리하라.
3. 수정 프롬프트 (이번 제작에서 실제로 낸 요청)
다음 문제를 고치고 같은 시각의 프레임을 다시 렌더링해 전후를 비교하라. 1) Gaegu 서체에 없는 기호(· → ← Ω −)가 빈칸으로 나온다 → 없는 글리프만 나눔고딕코딩으로 대체하고 기준선을 맞춰라. 마이너스(−)는 하이픈으로. 2) 파란 보드 위 흰 글자가 읽히지 않고, LED가 제목과 겹친다 → 보드를 옅은 하늘색으로, 글자를 남색으로, 회로를 아래로 재배치하라. 220Ω 표시와 ~9번 핀 표시가 겹치지 않게 하고, 화면 아래 자막 자리를 비워라. 3) 3장 작은 LED와 후광이 이웃 행과 겹치고 카메라 확대 때 왼쪽 라벨이 잘린다 → LED 축소, 열 위치 조정. 4) 4장의 숨긴 흰 크레용이 물감 전에 회색으로 보인다 → 흰 크레용은 어둡게 하지 말고 종이와 거의 같은 값으로. 5) 물감 아래 노랑이 회색 얼룩으로 탁해진다 → 교차 해칭이 첫 해칭을 덮어쓰지 않게 최댓값으로 합치고 압력을 높여라. 6) 자막이 길어 읽을 시간이 부족하다(공백 제외 글자 ÷ 9 + 1초 기준 미달) → 문장을 줄이고 시간을 다시 배치하라. 장 넘김과 자막이 겹치지 않게. 7) 3장 마지막 풀아웃 동안 자막 패치가 255 행을 가린다 → 풀아웃을 앞당겨라. 8) 4장 측정점 라벨 '이 순간 0V'가 '꺼짐' 글자와 겹친다 → '꺼짐'을 0V 축 아래로 옮기고 해당 구간을 다시 렌더링하라. 9) 1장 끝(9~10초) 자막 패치가 '5V 핀에 연결'의 앞부분만 가려 '결'이 남는다 → 카메라 끝 위치를 조정해 라벨이 자막 영역 밖에 있게 하라.
4. 확장 프롬프트 (다음 실습용, 아직 실행 전)
같은 스타일·같은 엔진으로 교재 다음 실습(3색 LED 색 섞기)을 이어서 만들어라. - 교재의 해당 쪽 그림·코드를 먼저 이미지로 대조하고, 핀 번호와 저항(각 다리마다 220Ω 또는 330Ω), 공통 음극 배선을 원문 그대로 쓴다. - R, G, B 세 줄의 PWM 파형을 같은 시간축에 그리고, 각 줄의 켜짐 색칠을 그 색의 크레용으로 칠한다(색칠 = 켜짐). - 섞인 색은 '개념 표현'임을 밝히고, 실제 LED 색은 부품마다 다를 수 있음을 자막으로 적는다. - 숨은 흰 크레용과 물감은 한 번만, 가장 중요한 결론(평균이 만드는 색)에 쓴다. - 길이 60~75초, 자막형, 검산 기록 포함.
⑦ 이번 교재로 만든 영상의 대표 장면
아래 세 장은 직접 만든 영상에서 뽑은 프레임입니다. 원작 영상(위 ①)과는 그림·이야기·음악을 공유하지 않습니다. 종이 결, 크레용 질감, 색칠 방식, 물감과 흰 크레용의 관계 같은 '그리는 방식'만 같습니다.

loop()를 짚었습니다.

analogWrite(9, 32) 예측의 답(높이 5V, 켜진 비율 약 13%)입니다.⑧ 원본 규칙을 어떻게 옮겼나
| 원본 규칙(STYLE.md) | 적용한 장면 | 변형과 그 이유 | 실행 확인 |
|---|---|---|---|
| 종이 #f4efe3, 페이지에 고정된 종이 이빨, 엠보스 | 전 장면 | 그대로. 카메라가 움직이면 종이 결도 같이 움직임 | 프레임 확대로 확인 |
| 왁스 부착: 압력에 따라 종이 봉우리에만 붙음 | 모든 선·색칠·글자 | 그대로. 정량 글자(코드·눈금)는 압력을 높여 빈틈을 줄임(가독성) | 1:1 크롭으로 확인 |
| 선이 길이를 따라 0.4~0.9초에 그려짐 | LED, 보드, 파형, 회로선 | 파형은 1.4~1.6초로 늘림(학생이 따라 읽도록) | 1초 간격 전수 프레임 |
| 12fps 끓음(boil) | 전 장면 | 정량 요소는 1px 이하로 제한: 0V/5V 선, 파형, 눈금, 코드가 흔들려 값이 달라 보이면 안 되기 때문 | 소스에서 진폭 값 확인 |
| 색칠 = 행동 | LED 후광, 파형의 켜짐 구간 | '켜진 시간'을 노랑 색칠로만 표현 | 켜짐 폭 비율 = N/255 검산 통과 |
| 크레용 12색 이내, 윤곽은 남색(검정 금지) | 전 장면 | 남색·노랑·주황·빨강·파랑·하늘·모래·갈색·황토·자두·초록·흰색 12색 | 팔레트 소스 확인 |
| 물감은 한 가지, 왁스가 물감을 밀어냄 | 65.4~70.4초 | 군청 1색. 숨긴 대상을 별 대신 평균 2.5V 점선으로 바꿈 | 물감 전 비가시 · 물감 후 가시 확인 |
| 자막 = 인쇄된 문장, 손글씨체, 빈 종이 패치 | 전 자막 | Patrick Hand는 한글이 없어 Gaegu로, 없는 기호(· → Ω)는 나눔고딕코딩으로 대체 | 글리프 누락 0건(수정 후) |
| 전환은 그리기·색칠·물감·장 넘김, 디졸브 금지 | 10.0초, 25.0초, 50.2초 | 세 번의 장 넘김 + 한 번의 물감 | 0.2초 간격 확인 |
| 소리: 작은 나무·금속 악기, 재료에 맞는 효과음 | 전 구간 | 음성 없이 합성 효과음·오르골·장난감 피아노만 사용(승인 음성을 쓸 수 없어서) | 음량 측정 |
| 캐릭터·의인화 | 없음 | 과학적 오해를 막기 위해 의도적으로 쓰지 않음 | — |
⑨ 실제 오류와 해결, 연습 과제, 한계, 출처
제작 중 실제로 생긴 오류 9건
| 오류 | 원인 | 해결과 재실행 결과 |
|---|---|---|
| 자막과 라벨의 '·', '→', 'Ω', '−'가 빈칸으로 나옴 | 손글씨 서체 Gaegu에 해당 글리프가 없음 | 없는 글자만 나눔고딕코딩으로 대체하고 기준선을 맞춤. '−'는 두 서체 모두에 없어 하이픈으로 바꿈 → 재렌더링 후 누락 0건 |
| 파란 보드 위 흰 핀 이름이 읽히지 않음, LED가 제목과 겹침 | 진한 파랑 위 흰 왁스가 종이 결 때문에 끊겨 보임 | 보드를 옅은 하늘색, 글자를 남색으로 바꾸고 회로 전체를 다시 배치 |
| 220Ω와 '~9번 핀(PWM)' 표시가 겹침 | 저항 아래 공간이 좁음 | 핀 라벨을 빨간 선 왼쪽으로, 보드를 위로 올려 화면 아래를 자막 자리로 비움 |
| 셋째 장 작은 LED 후광이 이웃 줄과 겹치고 왼쪽 라벨이 잘림 | 후광 크기를 LED 크기와 함께 줄이지 않았음 | LED·후광 축소, 열 위치 조정 |
| 숨겨 둔 흰 크레용 글자가 물감 전에 회색으로 보임 | 세게 누를수록 어두워지는 규칙이 흰색에도 적용됨 | 흰 크레용은 어두워지지 않게 예외 처리 → 물감 전에는 보이지 않고 물감 후에만 드러남 |
| 물감 아래 노랑이 회색 얼룩으로 탁해짐 | 두 번째 교차 해칭이 첫 해칭 압력을 덮어써 빈틈이 생김 | 두 해칭을 최댓값으로 합치고 압력을 높임 → 노랑이 물감을 밀어냄 |
| 자막 19개 중 19개가 자체 읽기 시간 기준 미달 | 문장이 길었음 | 문장을 줄이고 시간을 다시 배치, 셋째 장 넘김을 49.8초→50.2초로 옮김 → 19개 모두 통과, 장 넘김 중 자막 0건 |
| 128 확대 장면에서 '이 순간 0V' 라벨이 '꺼짐' 글자와 겹침 | 측정점과 '꺼짐' 라벨이 같은 꺼짐 구간 가운데에 놓임 | 최종 파일 1초 간격 전수 확인에서 발견 → '꺼짐'을 0V 축 아래로 옮기고 뒤쪽 절반을 다시 렌더링 |
| 9~10초에 '결' 한 글자가 자막 옆에 떠 보임 | 카메라가 LED B로 다가가며 '5V 핀에 연결' 라벨이 자막 자리로 내려옴. 자막 종이 패치가 앞부분만 덮음 | 0.2초 간격 장 넘김 확인에서 발견 → 다가가는 카메라의 끝 위치를 낮춰 라벨이 자막 위에 머물게 하고 앞쪽 절반을 다시 렌더링 |
검증 결과 요약
- 내용 검산(렌더링 소스에서 직접 계산): 다섯 값 모두 파형 높이가 0V선·5V선 두 값뿐, 켜짐 색칠 폭 비율 = N/255(64→25.1%, 128→50.2%, 192→75.3%), 32→12.5%를 '약 13%'로 표기, 숨긴 점선과 직류선은 눈금의 정확한 중간(2.5V), 측정점 6개의 5V/0V 표시가 위상과 일치.
- 코드 대조: 화면의 CODE 2.7 15줄이 교재 118쪽과 한 줄씩 일치.
- 컴파일: Arduino AVR 코어와 함께 avr-gcc로 UNO(ATmega328P, 16MHz)용 컴파일 성공(프로그램 2,628바이트).
- 시뮬레이션(simavr): 각 단계 중간에 OCR1A = 64/128/192, 위상 정정 8비트 PWM과 분주 64 설정을 확인했습니다. 0은 LOW, 255는 HIGH로 처리되며 2.0초 뒤 9번 핀이 HIGH로 유지되었습니다. 단, 이 시뮬레이터는 PWM 파형 자체를 핀 신호로 내보내지 않아 파형 주파수(약 490Hz)는 코어 소스에서 계산한 값입니다.
- 하지 않은 것: 실물 보드 실험, 회로(전류) 시뮬레이션, LED 광도 측정은 하지 않았습니다. 영상 속 LED 밝기는 개념 표현입니다.
독자 연습과 평가 기준
analogWrite(9, 32),analogWrite(9, 200)의 켜진 비율을 N/255로 어림하고, 펄스 높이가 얼마인지 쓰세요. (기준: 약 13%와 약 78%, 높이는 둘 다 5V)- CODE 2.7의
loop()안에 같은 다섯 줄을 옮기면 LED가 어떻게 바뀔지 예측하세요. (기준: 0→255 단계가 2.5초마다 되풀이됨을 설명) - LED를 8번 핀(물결 표시 없음)으로 옮기면 어떻게 될지 교재 116쪽을 근거로 쓰세요. (기준: 밝기 조절이 안 되고 켜짐/꺼짐만 된다고 설명)
- 교수자용: 위 최초 프롬프트에서 교재 쪽과 오개념만 바꿔 다른 단원 영상을 만들고, ⑥의 점검 프롬프트로 검산표를 받아 보세요. (기준: 수치·코드 대조가 표로 남아 있을 것)
한계
이 영상은 원본 라이브러리의 WebGL 엔진이 아니라 지침을 따라 새로 작성한 Python 렌더러로 만들었습니다. 그래서 원작보다 선의 떨림과 물감 번짐이 단순합니다. 내레이션이 없으므로 수업에서는 교수자가 직접 설명하며 틀거나 자막을 읽게 하는 방식을 권합니다. 9번 핀의 N/255 관계는 UNO의 9번 핀(Timer1 위상 정정 모드) 기준입니다. 5·6번 핀은 동작 방식이 달라 비율이 아주 조금 다를 수 있으며, 이 영상에서는 다루지 않았습니다.
원출처·권리 확인 (확인일 2026-10-24)
- 원작 스타일·예시 영상: Lemo-Opuscar 저장소 · 공식 갤러리 — 원작자 Lemomo / LemoLab. 코드·문서 MIT License, 데모 영상·스틸 CC BY 4.0(저장소 README 'Licence' 절). 확인 커밋 3961ddb.
- 스타일 지침: styles/crayon-book/STYLE.md — 요약해 적용했으며 전문을 옮기지 않았습니다.
- Arduino 동작 확인: Arduino AVR 코어 공식 저장소 (wiring_analog.c, wiring.c, pins_arduino.h)
- 서체: Gaegu, 나눔고딕코딩 (SIL Open Font License 1.1)
원작 영상은 Lemomo/LemoLab의 작품이며 공개 주소로 연결만 했습니다. 이 글의 영상·도식·한국어 프롬프트는 AI오토마타가 새로 만들었고, 원작의 그림·이야기·음악은 쓰지 않았습니다. 원작의 표현 문법(종이·크레용·물감·장 넘김)을 참고해 교육용으로 바꾸었습니다.
자료 ID: ART-STYLE-04 · 영상 스타일 적용 사례 04
댓글
댓글 쓰기