빵판놀이1
1) 하드웨어 구성 이해
- 브레드보드(빵판) 기본 구조와 전원 레일(+/–) 개념을 확인함.
- MB102 계열 브레드보드 전원모듈을 사용했고,
- 입력은 보통 DC 7~12V(VIN) 범위(예: 9V/12V)로 넣을 수 있으며,
- 출력은 점퍼로 3.3V / 5V를 선택해 브레드보드 레일로 공급함.
- USB 포트/외부 전원 동시 연결 등 역류/발열/안전 이슈가 있을 수 있음을 학습함(전원은 한쪽 기준으로 단순하게 운용하는 것이 안전).
2) LED 기본 회로(가장 중요한 실습)
- LED는 극성이 있음:
- 긴 다리 = +, 짧은 다리 = –(GND 쪽)
- LED에는 반드시 저항을 직렬로 넣어야 함(과전류로 LED 손상 방지).
- 저항 위치는 +쪽이든 –쪽이든 상관없고, 핵심은 직렬 연결임.
- 3.3V에서 저항 값에 따라 밝기가 달라짐:
- 1kΩ는 안전하지만 어두울 수 있음, 값이 너무 크면 거의 안 보일 수 있음.
3) Arduino IDE 및 보드 업로드 흐름
- Arduino IDE 설치/실행 과정에서 보안/드라이버/보드 인식 문제를 해결함.
- COM 포트 인식, 보드 선택(코어 설치 등) 문제를 단계적으로 해결함.
- 예제 스케치(내장 LED Blink)를 업로드하고,
- 컴파일/라이브러리 인덱스 다운로드 등 “처음 환경 셋업” 과정이 오래 걸릴 수 있음을 경험함.
- 업로드 완료 후 LED 동작을 확인하며 개발 흐름을 익힘.
4) Beetle Leonardo(ATmega32U4) 핀 사용법
- 보드에 “D4”처럼 표기가 없더라도, 실제로는 보드에 인쇄된 핀명(D9/D10/D11/A0/A1/A2 등)을 코드에서 사용 가능함.
- D9를 사용해 외부 LED를 제어하는 회로를 구성함.
5) GPIO 제어 핵심(출력/입력)
출력(LED 제어)
pinMode(pin, OUTPUT)후digitalWrite(pin, HIGH/LOW)로 LED를 켜고 끔.delay()또는millis()기반으로 깜빡임/패턴을 만들 수 있음.
입력(버튼)
- 버튼은
INPUT_PULLUP방식으로 간단하고 안정적으로 연결:- 버튼 한쪽은 GND, 다른 쪽은 입력 핀
- 평소 HIGH, 누르면 LOW로 읽힘
- 버튼 입력은 물리적 튐(바운스)이 있으므로 디바운스가 필요함.
6) 동작 구현(오늘 만든 기능들)
- 버튼 1개로 LED 깜빡임 속도 토글
- 한 번 누를 때마다 1초 ↔ 0.1초로 번갈아 바뀌게 구현함.
- 버튼 이벤트 확장 가능성 확인
- 더블클릭/싱글클릭 같은 “시간 규칙”을 추가하면
- 예: 천천히 1번 = 0, 빠르게 2번 = 1 같은 입력 해석이 가능함.
- 더블클릭/싱글클릭 같은 “시간 규칙”을 추가하면
- “핀 개수”와 “전류 한계” 때문에, 연결 가능한 LED/버튼 수가 제한되며,
- 핀 6개면 기본적으로 LED/버튼 합쳐 독립 제어는 대략 6개 수준이라는 감을 잡음.
- 더 많아지면 시프트 레지스터/확장칩/직렬 전송 등으로 확장 가능함.
7) 확장 방향(다음 단계로 이어지는 개념)
- 모터는 보드 핀에서 직접 구동하지 않고, 드라이버/별도 전원과 조합해 “신호(PWM/펄스)”로 제어한다는 큰 그림을 이해함.
- “각도 제어”가 필요하면 서보모터(가장 쉬움) 또는 **스테퍼(정밀 제어)**가 적합하다는 점을 정리함.
코드예제 - 코드1 요약: LED 기본 깜빡이기(Blink)
목적
- D9에 연결된 LED를 0.5초 간격으로 켜고/끄기
- 가장 기본적인 GPIO 출력 실습
필요한 배선
- D9 → 저항(1kΩ) → LED 긴다리(+)
- LED 짧은다리(-) → GND
코드 핵심
pinMode(LED_PIN, OUTPUT)로 D9을 출력으로 설정digitalWrite(HIGH/LOW)로 전압을 내보내 LED를 켜고 끔delay(500)으로 0.5초 대기 (이 동안 CPU는 다른 일을 못 함: “블로킹”)
코드2 요약: 버튼으로 깜빡임 속도 토글(1초 ↔ 0.1초)
목적
- LED는 계속 깜빡이되,
- 버튼(D10)을 한 번 누를 때마다 깜빡임 속도를
1000ms(1초) ↔ 100ms(0.1초) 로 번갈아 변경
필요한 배선
LED (코드1과 동일)
- D9 → 저항(1kΩ) → LED 긴다리(+)
- LED 짧은다리(-) → GND
버튼(스위치)
- 버튼 한쪽 → GND
- 버튼 반대쪽 → D10
- 코드에서
INPUT_PULLUP을 쓰므로 외부 저항 필요 없음
즉 버튼 회로는:
- 평소: D10 = HIGH(내부 풀업)
- 누름: D10 = LOW(GND로 연결)
코드 핵심 개념 3가지
- INPUT_PULLUP
- 버튼 입력을 안정적으로 처리
- “눌렀을 때 LOW”라는 논리로 동작
- 디바운스(debounce)
- 버튼은 물리적으로 튕겨서 한 번 눌러도 여러 번 눌린 것처럼 보일 수 있음
- 변화가 생기면 시간을 기록하고(
lastDebounceAt), 일정 시간(debounceMs=30ms) 안정되면 “진짜 변화”로 인정
- 논블로킹(Non-blocking) LED 깜빡임
delay()대신millis()로 시간 비교- 깜빡임 중에도 버튼 입력을 계속 읽을 수 있음
- 즉, “LED 깜빡임 + 버튼 처리”를 동시에 굴릴 수 있는 기본 패턴
동작 흐름(한 줄 요약)
- 버튼 입력을 디바운스해서 “눌림 이벤트”를 잡고 →
blinkMs를 1000 ↔ 100으로 토글 millis()타이머로 LED 상태를 주기적으로 반전시켜 깜빡임 유지
오늘 실습에서 얻은 핵심 포인트(코드1/2 공통)
- 핀 출력 제어(OUTPUT + digitalWrite)
- 버튼 입력 처리(INPUT_PULLUP)
- 디바운스 필요성
- delay() 방식(간단) vs millis() 방식(확장성 좋음)
원하시면, 위 두 코드를 “연습용 프로젝트 폴더/스케치 제목”까지 포함해서
01_blink.ino02_button_toggle_blink.ino
형태로 정리해드리고, 다음 단계(버튼 더블클릭/롱프레스/LED 4개 시퀀스)로 확장하는 템플릿도 같이 드리겠습니다.
코드에대한 하드웨어 연결
코드1 하드웨어 연결 (D9 LED 깜빡이기)
준비물
- Beetle Leonardo(ATmega32U4)
- 브레드보드
- LED 1개
- 저항 1개 (1kΩ 권장)
- 점퍼선 2~3개
전원
- Beetle을 USB로 PC에 연결 (보드 전원 공급)
- 별도 브레드보드 전원모듈은 없어도 됨(LED 1개는 보드로 충분)
배선(표준 방식)
- Beetle GND → 브레드보드 GND 레일(파란 줄)
- LED를 브레드보드에 꽂기
- LED **긴 다리(+)**와 **짧은 다리(-)**가 서로 다른 줄(다른 행)에 들어가게
- **LED 짧은 다리(-)**가 있는 줄 → GND 레일(파란 줄) 로 연결
- **Beetle D9 → 저항(1kΩ) → LED 긴 다리(+)**가 있는 줄로 연결
- 저항은 D9 쪽에 있어도 되고 LED 쪽에 있어도 됨(중요: 직렬)
최종 연결 형태(한 줄)
D9 → 저항(1k) → LED(+) → LED(-) → GND
코드2 하드웨어 연결 (D9 LED + D10 버튼으로 속도 토글)
준비물
- 코드1 준비물 전부 +
- 버튼(택트 스위치) 1개
- 점퍼선 2개 추가(버튼용)
전원
- Beetle을 USB로 PC에 연결해서 전원 공급
LED 배선
- 코드1과 완전히 동일
- Beetle GND → 브레드보드 GND 레일
- D9 → 저항(1k) → LED(+)
- LED(-) → GND 레일
버튼 배선(INPUT_PULLUP 방식, 외부 저항 없음)
버튼(택트 스위치 4핀)은 보통 같은 쪽 2핀끼리 내부적으로 연결되어 있습니다.
그래서 브레드보드에 꽂을 때는 반드시:
버튼 꽂는 법
- 버튼을 브레드보드 가운데 홈(중앙 절연 홈)을 가로질러 꽂습니다.
(즉, 버튼의 네 다리가 좌우로 나뉘어 다른 영역에 꽂히게)
버튼 연결
- 버튼의 한쪽(한 편) 핀(또는 그쪽과 연결된 행) → GND 레일
- 버튼의 반대쪽(반대 편) 핀(또는 그쪽과 연결된 행) → Beetle D10
최종 버튼 연결 형태(한 줄)
D10 —(버튼 누르면 연결)— GND
(평소에는 내부 풀업 때문에 D10이 HIGH, 누르면 LOW가 됨)
전체 회로 요약(코드2 기준)
- LED: D9 → 저항 → LED → GND
- 버튼: D10 ↔ 버튼 ↔ GND
- 공통: Beetle GND는 브레드보드 GND 레일과 반드시 연결
자주 발생하는 실수 체크(특히 버튼)
- 버튼을 브레드보드에 “같은 영역”에만 꽂으면 내부적으로 같은 쪽이 이미 연결이라 동작이 이상해질 수 있음
→ 반드시 중앙 홈을 가로질러 꽂기 - D10과 GND를 버튼의 “같은 쪽 2핀”에 연결하면 항상 연결된 것처럼 보일 수 있음
→ 서로 반대편에 연결하기