ATtiny13으로 만드는 초소형 LED 손전등 DIY 프로젝트: 작은 칩으로 큰 빛을 만들어보자! 🔦✨

콘텐츠 대표 이미지 - ATtiny13으로 만드는 초소형 LED 손전등 DIY 프로젝트: 작은 칩으로 큰 빛을 만들어보자! 🔦✨

 

 

안녕하세요 여러분! 오늘은 정말 재밌는 DIY 프로젝트를 소개해드릴게요. 바로 초소형 마이크로컨트롤러 ATtiny13을 이용해서 나만의 LED 손전등을 만드는 방법이에요! 작은 칩 하나로 빵빵한 빛을 내는 손전등을 직접 만들 수 있다니, 너무 쿨하지 않나요? ㅋㅋㅋ 이 글을 통해 전자공학의 기초부터 프로그래밍까지 한 번에 배워볼 수 있는 좋은 기회가 될 거예요! 😎

📅 작성일: 2025년 03월 20일 기준 최신 정보

📚 목차

  1. ATtiny13 소개 및 특징
  2. 프로젝트에 필요한 부품 및 준비물
  3. 회로 설계 및 연결 방법
  4. ATtiny13 프로그래밍 방법
  5. LED 손전등 코드 작성하기
  6. 케이스 제작 및 조립 방법
  7. 문제 해결 및 개선 방안
  8. 확장 아이디어 및 응용 프로젝트

1. ATtiny13 소개 및 특징 🧠

여러분, ATtiny13이라는 이름을 처음 들어보셨나요? 이 작은 녀석은 아트멜(현 마이크로칩)에서 만든 초소형 8비트 마이크로컨트롤러인데요, 정말 작지만 강력한 기능을 가지고 있어요! 손톱만한 크기에 컴퓨터의 두뇌 역할을 할 수 있다니... 신기하지 않나요? 😲

ATtiny13의 주요 스펙

  1. 메모리: 1KB 플래시 메모리, 64바이트 SRAM, 64바이트 EEPROM
  2. 핀 개수: 8핀 (6개의 I/O 핀 사용 가능)
  3. 클럭 속도: 최대 9.6MHz (내부 오실레이터 사용 시)
  4. 전원: 2.7V ~ 5.5V
  5. 특수 기능: PWM 출력, 아날로그 비교기, 10비트 ADC

이 작은 칩이 이렇게 많은 기능을 가지고 있다니 놀랍죠? ㅋㅋㅋ 요즘 2025년에는 더 발전된 마이크로컨트롤러들이 많이 나왔지만, ATtiny13은 여전히 초소형, 저전력, 저비용 프로젝트에 최적화된 선택이에요. 특히 LED 손전등처럼 간단하면서도 실용적인 프로젝트에 딱이죠! 🙌

ATtiny13 8-bit MCU 1KB Flash | 64B SRAM VCC GND RESET PB5 PB0 PB1 PB2 PB4 ATtiny13 마이크로컨트롤러 작지만 강력한 8핀 마이크로컨트롤러

ATtiny13은 아두이노보다 훨씬 작고 단순하지만, 그만큼 전력 소모도 적고 가격도 저렴해요. 특히 배터리로 동작하는 휴대용 프로젝트에 딱 맞는 선택이라고 할 수 있죠! 요즘 재능넷 같은 재능공유 플랫폼에서도 이런 마이크로컨트롤러를 활용한 DIY 프로젝트 강의가 인기라더라구요. 😉

2. 프로젝트에 필요한 부품 및 준비물 🛒

자, 이제 우리의 초소형 LED 손전등을 만들기 위해 필요한 부품들을 알아볼게요! 다행히 많은 부품이 필요하지 않아요. 대부분 전자부품 상점이나 온라인에서 쉽게 구할 수 있는 것들이에요. 혹시 부품 구하기가 어렵다면 재능넷에서 전자공학 관련 재능을 가진 분들에게 조언을 구해보는 것도 좋은 방법이에요! 👍

📋 필요한 부품 목록

  1. ATtiny13 마이크로컨트롤러 - 우리 프로젝트의 두뇌!
  2. 고휘도 LED - 1~3개 (백색 LED 추천, 3.2V 전압강하)
  3. 저항 - LED 전류 제한용 (보통 220Ω~470Ω)
  4. 배터리 홀더 - CR2032 또는 AAA 배터리용
  5. 배터리 - CR2032 코인셀 또는 AAA 배터리
  6. 푸시 버튼 스위치 - 전원 온/오프용
  7. 브레드보드 - 회로 테스트용 (선택사항)
  8. 점퍼 와이어 - 연결용
  9. PCB - 최종 회로 제작용 (선택사항)
  10. 케이스 - 3D 프린팅 또는 간단히 만들 수 있는 재료

🔧 필요한 도구

  1. 납땜 인두 - 부품 연결용
  2. - 전자 부품용 납
  3. USB ISP 프로그래머 - ATtiny13 프로그래밍용 (USBasp 또는 Arduino를 프로그래머로 활용 가능)
  4. 컴퓨터 - 코드 작성 및 업로드용
  5. 멀티미터 - 회로 테스트용 (선택사항)
  6. 와이어 커터/스트리퍼 - 와이어 작업용

2025년 현재 이 부품들의 가격은 정말 저렴해졌어요! ATtiny13은 개당 1,000원 내외로 구할 수 있고, 나머지 부품들도 합쳐봐야 5,000원 정도면 충분해요. 전체 프로젝트 비용이 1만원도 안 된다니, 진짜 가성비 끝판왕 아니겠어요? ㅋㅋㅋ 😆

💰 대략적인 비용 계산

ATtiny13: 약 1,000원
고휘도 LED 3개: 약 500원
저항, 스위치 등 기타 부품: 약 2,000원
배터리 및 홀더: 약 2,000원
케이스 재료: 약 1,000원
총 예상 비용: 약 6,500원

이 정도면 상용 LED 손전등보다 훨씬 저렴하면서도, 직접 만든다는 성취감까지 얻을 수 있어요! 게다가 자신만의 기능을 추가할 수 있는 확장성까지 갖추고 있으니 일석이조죠! 👏

3. 회로 설계 및 연결 방법 🔌

이제 우리의 LED 손전등 회로를 설계해볼 차례예요! 걱정 마세요, 생각보다 훨씬 간단해요. 기본적인 회로는 ATtiny13, LED, 저항, 스위치, 배터리로 구성되어 있어요. 이 부품들을 어떻게 연결하는지 자세히 알아볼게요! 😊

ATtiny13 VCC (1) GND (4) RESET (1) PB3 (2) PB0 (5) PB1 (6) PB2 (7) PB4 (3) 배터리 3V ~ 5V 스위치 LED 저항 220Ω ATtiny13 LED 손전등 기본 회로도 PB0 핀을 통해 LED 제어, 푸시 버튼으로 전원 공급

🔄 회로 연결 단계

  1. 배터리 연결: 배터리의 (+)극을 스위치의 한쪽 단자에 연결하고, (-)극을 ATtiny13의 GND 핀(4번 핀)에 연결합니다.
  2. 스위치 연결: 스위치의 다른 쪽 단자를 ATtiny13의 VCC 핀(8번 핀)에 연결합니다.
  3. LED 연결: ATtiny13의 PB0 핀(5번 핀)을 저항의 한쪽에 연결하고, 저항의 다른 쪽을 LED의 양극(+)에 연결합니다. LED의 음극(-)은 GND에 연결합니다.
  4. RESET 핀: ATtiny13의 RESET 핀(1번 핀)은 VCC에 10kΩ 저항을 통해 연결하여 풀업시킵니다(선택사항).

주의사항: LED에는 반드시 전류 제한 저항을 사용해야 해요! 저항 없이 직접 연결하면 LED가 타버릴 수 있어요. 일반적으로 3V 전원에 백색 LED를 사용할 경우 220Ω 정도의 저항이 적당해요. 더 밝게 하고 싶다면 저항값을 낮추고, 배터리를 아끼고 싶다면 저항값을 높이면 돼요. 🔆

💡 회로 설계 꿀팁

1. 브레드보드에서 먼저 테스트한 후 납땜하는 것이 안전해요!
2. LED를 여러 개 사용하려면 직렬 또는 병렬로 연결할 수 있어요. 병렬 연결 시 각 LED마다 별도의 저항이 필요해요.
3. 배터리 수명을 늘리려면 PWM 기능을 활용해 밝기를 조절할 수 있어요.
4. 회로가 복잡해지면 ATtiny13의 핀 수가 부족할 수 있으니 계획을 잘 세워야 해요.

이 기본 회로에서 더 나아가면 여러 가지 모드를 가진 손전등으로 확장할 수도 있어요. 예를 들어, 버튼을 한 번 누르면 약한 빛, 두 번 누르면 강한 빛, 세 번 누르면 깜빡이는 모드처럼요! 이런 기능은 다음 섹션에서 프로그래밍을 통해 구현해볼 거예요. 😉

4. ATtiny13 프로그래밍 방법 💻

이제 우리의 ATtiny13에 코드를 업로드하는 방법을 알아볼게요! 아두이노와 달리 ATtiny13은 USB 포트가 없어서 직접 연결할 수 없어요. 그래서 별도의 프로그래머가 필요하답니다. 걱정 마세요, 생각보다 어렵지 않아요! ㅎㅎ

🔄 ATtiny13 프로그래밍 옵션

  1. USBasp 프로그래머 사용하기 - 가장 저렴하고 일반적인 방법
  2. Arduino를 ISP 프로그래머로 활용하기 - 이미 아두이노가 있다면 추천!
  3. AVRISP mkII 같은 전문 프로그래머 사용하기 - 비싸지만 안정적

여기서는 가장 많이 사용하는 두 가지 방법을 자세히 설명해드릴게요! 😊

방법 1: USBasp 프로그래머 사용하기

USBasp는 약 5,000원 정도에 구매할 수 있는 저렴한 AVR 프로그래머예요. 10핀 또는 6핀 커넥터가 있어요.

연결 방법:

  1. USBasp의 MOSI → ATtiny13의 PB0 (5번 핀)
  2. USBasp의 MISO → ATtiny13의 PB1 (6번 핀)
  3. USBasp의 SCK → ATtiny13의 PB2 (7번 핀)
  4. USBasp의 RESET → ATtiny13의 RESET (1번 핀)
  5. USBasp의 VCC → ATtiny13의 VCC (8번 핀)
  6. USBasp의 GND → ATtiny13의 GND (4번 핀)

방법 2: Arduino를 ISP 프로그래머로 활용하기

이미 아두이노가 있다면, 이를 프로그래머로 활용할 수 있어요!

준비 단계:

  1. Arduino IDE를 열고 File > Examples > ArduinoISP 스케치를 아두이노에 업로드합니다.
  2. 이제 아두이노가 프로그래머 역할을 할 수 있어요!

연결 방법:

  1. Arduino의 디지털 핀 11 → ATtiny13의 PB0 (5번 핀)
  2. Arduino의 디지털 핀 12 → ATtiny13의 PB1 (6번 핀)
  3. Arduino의 디지털 핀 13 → ATtiny13의 PB2 (7번 핀)
  4. Arduino의 디지털 핀 10 → ATtiny13의 RESET (1번 핀)
  5. Arduino의 5V → ATtiny13의 VCC (8번 핀)
  6. Arduino의 GND → ATtiny13의 GND (4번 핀)

프로그래머를 연결했다면 이제 개발 환경을 설정해야 해요. Arduino IDE를 사용하면 ATtiny13도 쉽게 프로그래밍할 수 있어요! 😎

🛠️ Arduino IDE 설정하기

  1. Arduino IDE를 설치합니다 (2025년 현재 최신 버전은 3.2.x입니다).
  2. File > Preferences에서 Additional Boards Manager URLs에 다음 URL을 추가합니다:
    https://raw.githubusercontent.com/damellis/attiny/master/package_damellis_attiny_index.json
  3. Tools > Board > Boards Manager에서 "attiny"를 검색하여 "ATtiny by David A. Mellis" 패키지를 설치합니다.
  4. Tools > Board > ATtiny Microcontrollers > ATtiny13을 선택합니다.
  5. Tools > Processor > ATtiny13을 선택합니다.
  6. Tools > Clock > 1.2 MHz (internal)을 선택합니다.
  7. Tools > Programmer에서 사용 중인 프로그래머를 선택합니다 (USBasp 또는 Arduino as ISP).

이제 모든 준비가 끝났어요! Sketch > Upload Using Programmer 메뉴를 사용하여 코드를 ATtiny13에 업로드할 수 있어요. 일반 Upload 버튼이 아니라 "Upload Using Programmer" 옵션을 사용해야 한다는 점 꼭 기억하세요! 🚀

⚠️ 문제 해결 팁

1. "Device signature not found" 오류가 발생하면 연결을 다시 확인해보세요.
2. 프로그래머와 ATtiny13의 GND가 제대로 연결되었는지 확인하세요.
3. ATtiny13의 퓨즈 설정이 잘못되었을 수 있어요. 이 경우 고전압 프로그래머가 필요할 수 있습니다.
4. 10μF 커패시터를 Arduino의 RESET 핀과 GND 사이에 연결하면 Arduino as ISP 사용 시 문제를 해결할 수 있어요.

프로그래밍이 처음이라 어렵게 느껴질 수 있지만, 한 번 성공하면 정말 뿌듯해요! 재능넷에서도 이런 마이크로컨트롤러 프로그래밍 관련 강의를 찾아볼 수 있으니 참고해보세요. 다음 섹션에서는 실제 LED 손전등 코드를 작성해볼게요! 💪

5. LED 손전등 코드 작성하기 📝

이제 드디어 우리 손전등의 두뇌가 될 코드를 작성해볼 차례예요! ATtiny13은 메모리가 매우 제한적이지만, LED 손전등 같은 간단한 프로젝트에는 충분해요. 여러 가지 기능을 가진 멋진 손전등 코드를 작성해볼게요! 🤓

🔦 기본 LED 손전등 코드

가장 간단한 형태의 코드부터 시작해볼게요. 이 코드는 LED를 켜는 기본적인 기능만 수행해요:

// ATtiny13 기본 LED 손전등 코드
// LED는 PB0(핀 5)에 연결됨

void setup() {
  // PB0을 출력 모드로 설정
  DDRB |= (1 << PB0);
}

void loop() {
  // LED 켜기
  PORTB |= (1 << PB0);
  
  // 여기서는 LED가 계속 켜진 상태로 유지됩니다
}

위 코드는 정말 기본적인 형태예요. LED가 그냥 계속 켜져 있기만 하죠. 하지만 이것만으로는 재미없잖아요? ㅋㅋㅋ 좀 더 기능을 추가해볼게요! 😁

🌟 다중 모드 LED 손전등 코드

이번에는 버튼을 눌러 여러 모드를 전환할 수 있는 더 발전된 코드를 작성해볼게요:

// ATtiny13 다중 모드 LED 손전등 코드
// LED는 PB0(핀 5)에 연결
// 버튼은 PB1(핀 6)에 연결

#include <avr>
#include <avr>
#include <avr>

#define LED_PIN PB0
#define BUTTON_PIN PB1

volatile uint8_t mode = 0;  // 현재 모드 (0: 꺼짐, 1: 약한 빛, 2: 강한 빛, 3: 깜빡임)
volatile uint8_t buttonPressed = 0;  // 버튼 상태 추적

// 인터럽트 서비스 루틴
ISR(PCINT0_vect) {
  // 버튼이 눌렸는지 확인 (LOW 상태)
  if (!(PINB & (1 << BUTTON_PIN))) {
    if (!buttonPressed) {  // 이전에 눌리지 않았을 때만 처리
      buttonPressed = 1;
      
      // 모드 변경
      mode = (mode + 1) % 4;
    }
  } else {
    buttonPressed = 0;  // 버튼에서 손을 뗌
  }
}

void setup() {
  // LED 핀을 출력으로 설정
  DDRB |= (1 << LED_PIN);
  
  // 버튼 핀을 입력으로 설정하고 풀업 저항 활성화
  DDRB &= ~(1 << BUTTON_PIN);
  PORTB |= (1 << BUTTON_PIN);
  
  // 핀 변경 인터럽트 설정
  GIMSK |= (1 << PCIE);  // 핀 변경 인터럽트 활성화
  PCMSK |= (1 << BUTTON_PIN);  // 버튼 핀에 대한 인터럽트 마스크 설정
  
  sei();  // 전역 인터럽트 활성화
}

void loop() {
  switch (mode) {
    case 0:  // 꺼짐 모드
      PORTB &= ~(1 << LED_PIN);
      break;
      
    case 1:  // 약한 빛 모드 (PWM 사용)
      for (int i = 0; i < 10; i++) {
        PORTB |= (1 << LED_PIN);
        delay(1);
        PORTB &= ~(1 << LED_PIN);
        delay(9);
      }
      break;
      
    case 2:  // 강한 빛 모드
      PORTB |= (1 << LED_PIN);
      delay(100);  // 약간의 딜레이로 루프 유지
      break;
      
    case 3:  // 깜빡임 모드
      PORTB |= (1 << LED_PIN);
      delay(100);
      PORTB &= ~(1 << LED_PIN);
      delay(100);
      break;
  }
}

// 간단한 딜레이 함수 (ATtiny13에서는 delay() 함수가 제한적)
void delay(uint8_t ms) {
  for (uint8_t i = 0; i < ms; i++) {
    _delay_ms(1);
  }
}</avr></avr></avr>

이 코드는 버튼을 누를 때마다 모드가 전환되는 기능을 구현했어요. 총 4가지 모드가 있어요:

  1. 꺼짐 모드 - LED가 완전히 꺼집니다.
  2. 약한 빛 모드 - PWM을 사용해 LED를 낮은 밝기로 켭니다 (배터리 절약 모드).
  3. 강한 빛 모드 - LED를 최대 밝기로 켭니다.
  4. 깜빡임 모드 - LED가 일정한 간격으로 깜빡입니다 (비상 상황용).

코드가 좀 복잡해 보일 수 있지만, 각 부분이 하는 일을 이해하면 그렇게 어렵지 않아요! 인터럽트를 사용해서 버튼 입력을 감지하고, 모드에 따라 다른 동작을 수행하는 구조예요. 😊

🔋 배터리 절약 기능 추가하기

손전등은 배터리로 동작하므로 전력 소비를 최소화하는 것이 중요해요. 다음 코드 조각을 추가하면 일정 시간 후 자동으로 꺼지는 기능을 구현할 수 있어요:

// 전역 변수 추가
volatile uint16_t inactiveCounter = 0;
#define AUTO_OFF_TIME 3000  // 약 5분 (실제 시간은 루프 실행 속도에 따라 다름)

// loop() 함수 내에 추가
if (mode != 0) {  // LED가 켜져 있을 때만 카운터 증가
  inactiveCounter++;
  if (inactiveCounter >= AUTO_OFF_TIME) {
    mode = 0;  // 자동으로 꺼짐
    inactiveCounter = 0;
  }
} else {
  inactiveCounter = 0;  // LED가 꺼져 있으면 카운터 리셋
}

// 버튼이 눌렸을 때 카운터 리셋 (ISR 함수 내에 추가)
inactiveCounter = 0;

이런 식으로 코드를 계속 발전시킬 수 있어요! ATtiny13의 제한된 메모리 내에서 최대한 기능을 구현하는 것이 관건이에요. 2025년에는 더 발전된 마이크로컨트롤러도 많이 나왔지만, 이렇게 제한된 환경에서 최적화된 코드를 작성하는 경험은 정말 값진 배움이 될 거예요! 👨‍💻

코드를 업로드하고 테스트해보세요! 문제가 있으면 디버깅하고 수정하는 과정을 통해 더 많이 배울 수 있을 거예요. 재능넷에서도 이런 마이크로컨트롤러 프로그래밍 관련 도움을 받을 수 있으니 참고하세요! 💡

6. 케이스 제작 및 조립 방법 🛠️

이제 회로와 코드가 완성되었으니, 우리의 LED 손전등을 멋진 케이스에 넣어볼 차례예요! 실용적이면서도 예쁜 케이스를 만들어 완성도를 높여봅시다! 😍

🏠 케이스 제작 옵션

  1. 3D 프린팅 - 가장 전문적인 결과물을 얻을 수 있어요
  2. 플라스틱 튜브 활용 - 간단하고 빠른 방법
  3. 종이/카드보드 케이스 - 가장 저렴하고 쉬운 방법
  4. 기존 손전등 케이스 재활용 - 실용적인 방법

각 방법에 대해 자세히 알아볼게요! 👇

방법 1: 3D 프린팅 케이스

2025년에는 3D 프린터가 많이 보급되어 접근성이 좋아졌어요. 만약 3D 프린터를 가지고 있거나 접근할 수 있다면, 이 방법이 가장 좋은 결과물을 제공해요!

3D 프린팅 케이스 제작 단계:

  1. Tinkercad, Fusion 360 등의 3D 모델링 소프트웨어로 케이스를 디자인합니다.
  2. 배터리, 회로 기판, 스위치, LED를 위한 공간을 정확히 계산해 모델링합니다.
  3. STL 파일로 내보내고 슬라이싱 소프트웨어로 G-code를 생성합니다.
  4. 3D 프린터로 출력합니다 (PLA 필라멘트 추천).
  5. 필요하다면 사포로 다듬고 페인트를 칠합니다.

요즘은 온라인에서 3D 프린팅 서비스를 제공하는 곳도 많아요. 재능넷에서도 3D 모델링이나 프린팅 서비스를 제공하는 분들을 찾을 수 있을 거예요!

3D 프린팅 케이스 플라스틱 튜브 케이스 종이/카드보드 케이스 재활용 케이스 LED 손전등 케이스 옵션

방법 2: 플라스틱 튜브 활용

투명한 플라스틱 튜브를 사용하면 빠르고 쉽게 케이스를 만들 수 있어요!

플라스틱 튜브 케이스 제작 단계:

  1. 적당한 크기의 플라스틱 튜브를 구합니다 (약 20mm 직경 추천).
  2. 튜브 한쪽 끝에 LED를 고정합니다 (핫글루 또는 에폭시 사용).
  3. 회로 기판과 배터리를 튜브 안에 넣습니다.
  4. 다른 쪽 끝에 스위치를 장착하고 마개로 닫습니다.
  5. 필요하다면 방수 처리를 합니다.

이 방법의 장점은 LED 빛이 튜브를 통해 측면으로도 퍼져 더 넓은 범위를 비출 수 있다는 점이에요!

방법 3: 종이/카드보드 케이스

가장 저렴하고 간단한 방법이에요. 재료를 구하기 쉽고 도구도 많이 필요하지 않아요!

종이/카드보드 케이스 제작 단계:

  1. 두꺼운 카드보드나 종이를 준비합니다.
  2. 회로와 배터리 크기에 맞게 전개도를 그립니다.
  3. 가위나 커터로 자르고 접습니다.
  4. 테이프나 접착제로 고정합니다.
  5. 방수와 내구성을 위해 투명 테이프로 외부를 감쌉니다.

임시 프로토타입이나 교육용으로 적합한 방법이에요. 하지만 내구성은 떨어질 수 있어요.

방법 4: 기존 손전등 케이스 재활용

이미 가지고 있는 손전등의 케이스를 재활용하는 방법이에요!

재활용 케이스 제작 단계:

  1. 작동하지 않는 기존 손전등을 분해합니다.
  2. 내부 부품을 제거하고 우리의 ATtiny13 회로로 교체합니다.
  3. 기존 스위치를 활용하거나 새 스위치로 교체합니다.
  4. LED를 기존 위치에 장착합니다.
  5. 다시 조립합니다.

가장 전문적인 외관을 얻을 수 있는 방법이에요. 방수 기능이나 견고함도 이미 갖추고 있을 가능성이 높아요!

💡 조립 꿀팁

1. 회로를 케이스에 넣기 전에 반드시 작동 테스트를 해보세요!
2. 배터리는 쉽게 교체할 수 있도록 설계하세요.
3. 스위치는 손가락으로 쉽게 조작할 수 있는 위치에 배치하세요.
4. LED 앞에 투명한 플라스틱이나 렌즈를 추가하면 빛을 더 효과적으로 모을 수 있어요.
5. 방수 기능이 필요하다면 실리콘이나 고무 패킹을 사용하세요.

케이스 제작은 여러분의 창의력을 마음껏 발휘할 수 있는 단계예요! 자신만의 독특한 디자인으로 세상에 단 하나뿐인 LED 손전등을 만들어보세요. 완성된 손전등은 실용적으로 사용할 수도 있고, 선물로 줘도 정말 좋을 거예요! 🎁

7. 문제 해결 및 개선 방안 🔍

DIY 프로젝트를 진행하다 보면 여러 가지 문제가 발생할 수 있어요. 당황하지 말고 차근차근 해결해보세요! 여기 자주 발생하는 문제들과 해결 방법을 정리해봤어요. ㅎㅎ

🚨 자주 발생하는 문제와 해결책

1. LED가 전혀 켜지지 않아요 😢

  1. 배터리 확인: 배터리가 제대로 장착되었는지, 전압이 충분한지 확인하세요.
  2. 연결 확인: 모든 와이어가 제대로 연결되었는지 확인하세요. 특히 GND 연결을 확인하세요.
  3. LED 극성: LED의 양극(+)과 음극(-)이 올바르게 연결되었는지 확인하세요.
  4. 코드 확인: 코드가 제대로 업로드되었는지 확인하세요. 테스트를 위해 간단한 Blink 코드를 업로드해보세요.
  5. 저항값 확인: 저항값이 너무 높으면 LED가 켜지지 않을 수 있어요. 더 낮은 저항으로 시도해보세요.

2. LED가 너무 어두워요 🔅

  1. 저항값 조정: 저항값이 너무 높을 수 있어요. 더 낮은 저항으로 교체해보세요.
  2. 전원 전압 확인: 배터리 전압이 낮을 수 있어요. 새 배터리로 교체하거나 전압을 측정해보세요.
  3. LED 종류: 고휘도 LED를 사용하고 있는지 확인하세요. 일반 LED는 밝기가 제한적일 수 있어요.
  4. 코드 수정: PWM 설정을 확인하고 듀티 사이클을 높여보세요.

3. 배터리가 너무 빨리 소모돼요 🔋

  1. 전류 소비 확인: LED에 흐르는 전류가 너무 많을 수 있어요. 저항값을 높여보세요.
  2. 슬립 모드 활용: 코드에 슬립 모드를 추가하여 전력 소비를 줄이세요.
  3. 더 큰 용량의 배터리: AAA나 AA 배터리로 업그레이드하는 것을 고려해보세요.
  4. LED 개수 줄이기: 여러 개의 LED를 사용 중이라면 개수를 줄여보세요.

4. 버튼이 제대로 작동하지 않아요 🔘

  1. 디바운싱 추가: 코드에 디바운싱 로직을 추가하여 버튼 입력을 안정화하세요.
  2. 풀업 저항 확인: 내부 풀업 저항이 활성화되었는지 확인하세요.
  3. 버튼 품질: 더 나은 품질의 버튼으로 교체해보세요. 저렴한 버튼은 접촉 불량이 있을 수 있어요.
  4. 연결 확인: 버튼의 모든 핀이 제대로 연결되었는지 확인하세요.

🚀 프로젝트 개선 아이디어

  1. 배터리 레벨 표시기 추가: ATtiny13의 ADC를 사용하여 배터리 전압을 측정하고 LED 깜빡임으로 배터리 잔량을 표시할 수 있어요.
  2. 충전식 배터리 사용: 리튬 이온 배터리와 충전 회로를 추가하여 USB로 충전 가능하게 만들 수 있어요.
  3. 더 효율적인 LED 드라이버: 정전류 LED 드라이버 IC를 사용하여 효율성을 높일 수 있어요.
  4. 방수 기능 강화: O-링과 실리콘 씰을 사용하여 완전 방수 케이스를 만들 수 있어요.
  5. 다양한 색상 LED 추가: RGB LED를 사용하여 다양한 색상의 빛을 낼 수 있어요.

문제가 발생했을 때는 차근차근 하나씩 원인을 찾아가는 것이 중요해요. 전자 회로는 작은 실수 하나로도 작동하지 않을 수 있어요. 하지만 그 과정에서 많은 것을 배울 수 있답니다! 😊

만약 혼자 해결하기 어려운 문제가 있다면, 재능넷 같은 플랫폼에서 전자공학이나 프로그래밍에 능숙한 분들에게 도움을 요청해보는 것도 좋은 방법이에요. 함께 문제를 해결하면서 더 많은 것을 배울 수 있을 거예요! 👨‍🔧

8. 확장 아이디어 및 응용 프로젝트 💡

기본적인 LED 손전등을 성공적으로 만들었다면, 이제 더 재미있는 확장 프로젝트에 도전해볼 시간이에요! ATtiny13의 작은 크기와 저전력 특성을 활용한 다양한 응용 프로젝트를 소개해드릴게요. 상상력을 발휘해보세요! 🌈

🔮 ATtiny13 기반 확장 프로젝트 아이디어

1. 모스 부호 신호등 📡

LED 손전등에 모스 부호 기능을 추가해보세요! 버튼을 짧게 누르면 점(.), 길게 누르면 선(-)이 되어 메시지를 전송할 수 있어요. 비상 상황에서 유용할 수 있어요!

필요한 추가 부품: 없음 (기존 손전등 활용)

2. 자동 밝기 조절 손전등 🌓

광센서(LDR)를 추가하여 주변 밝기에 따라 자동으로 LED 밝기를 조절하는 스마트 손전등을 만들어보세요!

필요한 추가 부품: 광센서(LDR), 10kΩ 저항

3. 모션 감지 나이트 라이트 🚶

PIR 모션 센서를 추가하여 움직임을 감지하면 자동으로 켜지는 나이트 라이트를 만들어보세요!

필요한 추가 부품: PIR 모션 센서

4. LED 무드 램프 🌈

RGB LED를 사용하여 다양한 색상으로 변하는 무드 램프를 만들어보세요!

필요한 추가 부품: RGB LED, 추가 저항 3개

5. 자전거 안전 라이트 🚲

자전거 뒤에 부착할 수 있는 깜빡이 안전 라이트를 만들어보세요! 방수 케이스와 함께 실용적인 프로젝트가 될 거예요.

필요한 추가 부품: 방수 케이스, 자전거 부착용 마운트

이런 확장 프로젝트들은 ATtiny13의 기본 기능을 활용하면서도 실용적인 결과물을 만들 수 있어요. 2025년에는 더 많은 초소형 센서와 부품들이 저렴하게 나와있어서 가능성이 무궁무진해요! 😄

🌐 프로젝트 공유하기

여러분이 만든 멋진 프로젝트를 다른 사람들과 공유해보세요! 다음과 같은 방법으로 공유할 수 있어요:

  1. 온라인 커뮤니티: Arduino 포럼, 해커데이, 인스트럭터블 등에 프로젝트를 공유하세요.
  2. 소셜 미디어: 인스타그램이나 유튜브에 제작 과정과 결과물을 공유하세요.
  3. 오픈소스 공유: GitHub에 코드와 설계 파일을 공유하여 다른 사람들이 참고할 수 있게 하세요.
  4. 워크숍 개최: 지역 메이커 스페이스나 학교에서 워크숍을 열어 다른 사람들에게 가르쳐보세요.
  5. 재능넷 활용: 재능넷 같은 재능공유 플랫폼에서 여러분의 지식을 공유하고 다른 사람들에게 도움을 줄 수 있어요!

ATtiny13 같은 작은 마이크로컨트롤러로 시작하는 것이 전자공학과 프로그래밍의 세계로 들어가는 좋은 첫걸음이 될 수 있어요. 작은 성공 경험이 쌓이면 더 복잡한 프로젝트에도 자신감을 가지고 도전할 수 있을 거예요! 🚀

결론: 나만의 초소형 LED 손전등 완성! 🎉

여기까지 ATtiny13을 이용한 초소형 LED 손전등 만들기 프로젝트를 함께 알아봤어요! 작은 마이크로컨트롤러 하나로 실용적인 전자기기를 직접 만들어보는 경험은 정말 값진 배움이 되었을 거예요. ㅎㅎ

📝 프로젝트 요약

  1. ATtiny13 마이크로컨트롤러의 기본 특성과 기능을 배웠어요.
  2. 간단한 LED 회로를 설계하고 연결하는 방법을 알아봤어요.
  3. ATtiny13을 프로그래밍하는 방법과 다양한 기능의 코드를 작성해봤어요.
  4. 실용적인 케이스를 만들어 완성도 높은 손전등을 제작했어요.
  5. 문제 해결 방법과 프로젝트 확장 아이디어까지 탐색해봤어요.

이 프로젝트를 통해 전자공학, 프로그래밍, 3D 디자인, 문제 해결 능력 등 다양한 분야의 지식을 종합적으로 활용해볼 수 있었어요. 이런 경험은 앞으로의 DIY 프로젝트나 전문적인 개발 작업에도 큰 도움이 될 거예요! 👍

혹시 프로젝트를 진행하면서 어려움이 있거나 더 배우고 싶은 내용이 있다면, 재능넷에서 관련 분야의 전문가들에게 도움을 요청해보세요. 다양한 재능을 가진 분들이 여러분의 프로젝트를 더 발전시키는 데 도움을 줄 수 있을 거예요! 😊

여러분의 창의적인 DIY 프로젝트를 응원합니다! 🙌

작은 칩으로 큰 빛을 만들어내는 여정, 즐거우셨나요? 다음 프로젝트도 기대할게요! ✨

📚 목차

  1. ATtiny13 소개 및 특징
  2. 프로젝트에 필요한 부품 및 준비물
  3. 회로 설계 및 연결 방법
  4. ATtiny13 프로그래밍 방법
  5. LED 손전등 코드 작성하기
  6. 케이스 제작 및 조립 방법
  7. 문제 해결 및 개선 방안
  8. 확장 아이디어 및 응용 프로젝트

1. ATtiny13 소개 및 특징 🧠

여러분, ATtiny13이라는 이름을 처음 들어보셨나요? 이 작은 녀석은 아트멜(현 마이크로칩)에서 만든 초소형 8비트 마이크로컨트롤러인데요, 정말 작지만 강력한 기능을 가지고 있어요! 손톱만한 크기에 컴퓨터의 두뇌 역할을 할 수 있다니... 신기하지 않나요? 😲

ATtiny13의 주요 스펙

  1. 메모리: 1KB 플래시 메모리, 64바이트 SRAM, 64바이트 EEPROM
  2. 핀 개수: 8핀 (6개의 I/O 핀 사용 가능)
  3. 클럭 속도: 최대 9.6MHz (내부 오실레이터 사용 시)
  4. 전원: 2.7V ~ 5.5V
  5. 특수 기능: PWM 출력, 아날로그 비교기, 10비트 ADC

이 작은 칩이 이렇게 많은 기능을 가지고 있다니 놀랍죠? ㅋㅋㅋ 요즘 2025년에는 더 발전된 마이크로컨트롤러들이 많이 나왔지만, ATtiny13은 여전히 초소형, 저전력, 저비용 프로젝트에 최적화된 선택이에요. 특히 LED 손전등처럼 간단하면서도 실용적인 프로젝트에 딱이죠! 🙌

ATtiny13 8-bit MCU 1KB Flash | 64B SRAM VCC GND RESET PB5 PB0 PB1 PB2 PB4 ATtiny13 마이크로컨트롤러 작지만 강력한 8핀 마이크로컨트롤러

ATtiny13은 아두이노보다 훨씬 작고 단순하지만, 그만큼 전력 소모도 적고 가격도 저렴해요. 특히 배터리로 동작하는 휴대용 프로젝트에 딱 맞는 선택이라고 할 수 있죠! 요즘 재능넷 같은 재능공유 플랫폼에서도 이런 마이크로컨트롤러를 활용한 DIY 프로젝트 강의가 인기라더라구요. 😉

2. 프로젝트에 필요한 부품 및 준비물 🛒

자, 이제 우리의 초소형 LED 손전등을 만들기 위해 필요한 부품들을 알아볼게요! 다행히 많은 부품이 필요하지 않아요. 대부분 전자부품 상점이나 온라인에서 쉽게 구할 수 있는 것들이에요. 혹시 부품 구하기가 어렵다면 재능넷에서 전자공학 관련 재능을 가진 분들에게 조언을 구해보는 것도 좋은 방법이에요! 👍

📋 필요한 부품 목록

  1. ATtiny13 마이크로컨트롤러 - 우리 프로젝트의 두뇌!
  2. 고휘도 LED - 1~3개 (백색 LED 추천, 3.2V 전압강하)
  3. 저항 - LED 전류 제한용 (보통 220Ω~470Ω)
  4. 배터리 홀더 - CR2032 또는 AAA 배터리용
  5. 배터리 - CR2032 코인셀 또는 AAA 배터리
  6. 푸시 버튼 스위치 - 전원 온/오프용
  7. 브레드보드 - 회로 테스트용 (선택사항)
  8. 점퍼 와이어 - 연결용
  9. PCB - 최종 회로 제작용 (선택사항)
  10. 케이스 - 3D 프린팅 또는 간단히 만들 수 있는 재료

🔧 필요한 도구

  1. 납땜 인두 - 부품 연결용
  2. - 전자 부품용 납
  3. USB ISP 프로그래머 - ATtiny13 프로그래밍용 (USBasp 또는 Arduino를 프로그래머로 활용 가능)
  4. 컴퓨터 - 코드 작성 및 업로드용
  5. 멀티미터 - 회로 테스트용 (선택사항)
  6. 와이어 커터/스트리퍼 - 와이어 작업용

2025년 현재 이 부품들의 가격은 정말 저렴해졌어요! ATtiny13은 개당 1,000원 내외로 구할 수 있고, 나머지 부품들도 합쳐봐야 5,000원 정도면 충분해요. 전체 프로젝트 비용이 1만원도 안 된다니, 진짜 가성비 끝판왕 아니겠어요? ㅋㅋㅋ 😆

💰 대략적인 비용 계산

ATtiny13: 약 1,000원
고휘도 LED 3개: 약 500원
저항, 스위치 등 기타 부품: 약 2,000원
배터리 및 홀더: 약 2,000원
케이스 재료: 약 1,000원
총 예상 비용: 약 6,500원

이 정도면 상용 LED 손전등보다 훨씬 저렴하면서도, 직접 만든다는 성취감까지 얻을 수 있어요! 게다가 자신만의 기능을 추가할 수 있는 확장성까지 갖추고 있으니 일석이조죠! 👏

3. 회로 설계 및 연결 방법 🔌

이제 우리의 LED 손전등 회로를 설계해볼 차례예요! 걱정 마세요, 생각보다 훨씬 간단해요. 기본적인 회로는 ATtiny13, LED, 저항, 스위치, 배터리로 구성되어 있어요. 이 부품들을 어떻게 연결하는지 자세히 알아볼게요! 😊

ATtiny13 VCC (1) GND (4) RESET (1) PB3 (2) PB0 (5) PB1 (6) PB2 (7) PB4 (3) 배터리 3V ~ 5V 스위치 LED 저항 220Ω ATtiny13 LED 손전등 기본 회로도 PB0 핀을 통해 LED 제어, 푸시 버튼으로 전원 공급

🔄 회로 연결 단계

  1. 배터리 연결: 배터리의 (+)극을 스위치의 한쪽 단자에 연결하고, (-)극을 ATtiny13의 GND 핀(4번 핀)에 연결합니다.
  2. 스위치 연결: 스위치의 다른 쪽 단자를 ATtiny13의 VCC 핀(8번 핀)에 연결합니다.
  3. LED 연결: ATtiny13의 PB0 핀(5번 핀)을 저항의 한쪽에 연결하고, 저항의 다른 쪽을 LED의 양극(+)에 연결합니다. LED의 음극(-)은 GND에 연결합니다.
  4. RESET 핀: ATtiny13의 RESET 핀(1번 핀)은 VCC에 10kΩ 저항을 통해 연결하여 풀업시킵니다(선택사항).

주의사항: LED에는 반드시 전류 제한 저항을 사용해야 해요! 저항 없이 직접 연결하면 LED가 타버릴 수 있어요. 일반적으로 3V 전원에 백색 LED를 사용할 경우 220Ω 정도의 저항이 적당해요. 더 밝게 하고 싶다면 저항값을 낮추고, 배터리를 아끼고 싶다면 저항값을 높이면 돼요. 🔆

💡 회로 설계 꿀팁

1. 브레드보드에서 먼저 테스트한 후 납땜하는 것이 안전해요!
2. LED를 여러 개 사용하려면 직렬 또는 병렬로 연결할 수 있어요. 병렬 연결 시 각 LED마다 별도의 저항이 필요해요.
3. 배터리 수명을 늘리려면 PWM 기능을 활용해 밝기를 조절할 수 있어요.
4. 회로가 복잡해지면 ATtiny13의 핀 수가 부족할 수 있으니 계획을 잘 세워야 해요.

이 기본 회로에서 더 나아가면 여러 가지 모드를 가진 손전등으로 확장할 수도 있어요. 예를 들어, 버튼을 한 번 누르면 약한 빛, 두 번 누르면 강한 빛, 세 번 누르면 깜빡이는 모드처럼요! 이런 기능은 다음 섹션에서 프로그래밍을 통해 구현해볼 거예요. 😉

4. ATtiny13 프로그래밍 방법 💻

이제 우리의 ATtiny13에 코드를 업로드하는 방법을 알아볼게요! 아두이노와 달리 ATtiny13은 USB 포트가 없어서 직접 연결할 수 없어요. 그래서 별도의 프로그래머가 필요하답니다. 걱정 마세요, 생각보다 어렵지 않아요! ㅎㅎ

🔄 ATtiny13 프로그래밍 옵션

  1. USBasp 프로그래머 사용하기 - 가장 저렴하고 일반적인 방법
  2. Arduino를 ISP 프로그래머로 활용하기 - 이미 아두이노가 있다면 추천!
  3. AVRISP mkII 같은 전문 프로그래머 사용하기 - 비싸지만 안정적

여기서는 가장 많이 사용하는 두 가지 방법을 자세히 설명해드릴게요! 😊

방법 1: USBasp 프로그래머 사용하기

USBasp는 약 5,000원 정도에 구매할 수 있는 저렴한 AVR 프로그래머예요. 10핀 또는 6핀 커넥터가 있어요.

연결 방법:

  1. USBasp의 MOSI → ATtiny13의 PB0 (5번 핀)
  2. USBasp의 MISO → ATtiny13의 PB1 (6번 핀)
  3. USBasp의 SCK → ATtiny13의 PB2 (7번 핀)
  4. USBasp의 RESET → ATtiny13의 RESET (1번 핀)
  5. USBasp의 VCC → ATtiny13의 VCC (8번 핀)
  6. USBasp의 GND → ATtiny13의 GND (4번 핀)

방법 2: Arduino를 ISP 프로그래머로 활용하기

이미 아두이노가 있다면, 이를 프로그래머로 활용할 수 있어요!

준비 단계:

  1. Arduino IDE를 열고 File > Examples > ArduinoISP 스케치를 아두이노에 업로드합니다.
  2. 이제 아두이노가 프로그래머 역할을 할 수 있어요!

연결 방법:

  1. Arduino의 디지털 핀 11 → ATtiny13의 PB0 (5번 핀)
  2. Arduino의 디지털 핀 12 → ATtiny13의 PB1 (6번 핀)
  3. Arduino의 디지털 핀 13 → ATtiny13의 PB2 (7번 핀)
  4. Arduino의 디지털 핀 10 → ATtiny13의 RESET (1번 핀)
  5. Arduino의 5V → ATtiny13의 VCC (8번 핀)
  6. Arduino의 GND → ATtiny13의 GND (4번 핀)

프로그래머를 연결했다면 이제 개발 환경을 설정해야 해요. Arduino IDE를 사용하면 ATtiny13도 쉽게 프로그래밍할 수 있어요! 😎

🛠️ Arduino IDE 설정하기

  1. Arduino IDE를 설치합니다 (2025년 현재 최신 버전은 3.2.x입니다).
  2. File > Preferences에서 Additional Boards Manager URLs에 다음 URL을 추가합니다:
    https://raw.githubusercontent.com/damellis/attiny/master/package_damellis_attiny_index.json
  3. Tools > Board > Boards Manager에서 "attiny"를 검색하여 "ATtiny by David A. Mellis" 패키지를 설치합니다.
  4. Tools > Board > ATtiny Microcontrollers > ATtiny13을 선택합니다.
  5. Tools > Processor > ATtiny13을 선택합니다.
  6. Tools > Clock > 1.2 MHz (internal)을 선택합니다.
  7. Tools > Programmer에서 사용 중인 프로그래머를 선택합니다 (USBasp 또는 Arduino as ISP).

이제 모든 준비가 끝났어요! Sketch > Upload Using Programmer 메뉴를 사용하여 코드를 ATtiny13에 업로드할 수 있어요. 일반 Upload 버튼이 아니라 "Upload Using Programmer" 옵션을 사용해야 한다는 점 꼭 기억하세요! 🚀

⚠️ 문제 해결 팁

1. "Device signature not found" 오류가 발생하면 연결을 다시 확인해보세요.
2. 프로그래머와 ATtiny13의 GND가 제대로 연결되었는지 확인하세요.
3. ATtiny13의 퓨즈 설정이 잘못되었을 수 있어요. 이 경우 고전압 프로그래머가 필요할 수 있습니다.
4. 10μF 커패시터를 Arduino의 RESET 핀과 GND 사이에 연결하면 Arduino as ISP 사용 시 문제를 해결할 수 있어요.

프로그래밍이 처음이라 어렵게 느껴질 수 있지만, 한 번 성공하면 정말 뿌듯해요! 재능넷에서도 이런 마이크로컨트롤러 프로그래밍 관련 강의를 찾아볼 수 있으니 참고해보세요. 다음 섹션에서는 실제 LED 손전등 코드를 작성해볼게요! 💪

5. LED 손전등 코드 작성하기 📝

이제 드디어 우리 손전등의 두뇌가 될 코드를 작성해볼 차례예요! ATtiny13은 메모리가 매우 제한적이지만, LED 손전등 같은 간단한 프로젝트에는 충분해요. 여러 가지 기능을 가진 멋진 손전등 코드를 작성해볼게요! 🤓

🔦 기본 LED 손전등 코드

가장 간단한 형태의 코드부터 시작해볼게요. 이 코드는 LED를 켜는 기본적인 기능만 수행해요:

// ATtiny13 기본 LED 손전등 코드
// LED는 PB0(핀 5)에 연결됨

void setup() {
  // PB0을 출력 모드로 설정
  DDRB |= (1 << PB0);
}

void loop() {
  // LED 켜기
  PORTB |= (1 << PB0);
  
  // 여기서는 LED가 계속 켜진 상태로 유지됩니다
}

위 코드는 정말 기본적인 형태예요. LED가 그냥 계속 켜져 있기만 하죠. 하지만 이것만으로는 재미없잖아요? ㅋㅋㅋ 좀 더 기능을 추가해볼게요! 😁

🌟 다중 모드 LED 손전등 코드

이번에는 버튼을 눌러 여러 모드를 전환할 수 있는 더 발전된 코드를 작성해볼게요:

// ATtiny13 다중 모드 LED 손전등 코드
// LED는 PB0(핀 5)에 연결
// 버튼은 PB1(핀 6)에 연결

#include <avr>
#include <avr>
#include <avr>

#define LED_PIN PB0
#define BUTTON_PIN PB1

volatile uint8_t mode = 0;  // 현재 모드 (0: 꺼짐, 1: 약한 빛, 2: 강한 빛, 3: 깜빡임)
volatile uint8_t buttonPressed = 0;  // 버튼 상태 추적

// 인터럽트 서비스 루틴
ISR(PCINT0_vect) {
  // 버튼이 눌렸는지 확인 (LOW 상태)
  if (!(PINB & (1 << BUTTON_PIN))) {
    if (!buttonPressed) {  // 이전에 눌리지 않았을 때만 처리
      buttonPressed = 1;
      
      // 모드 변경
      mode = (mode + 1) % 4;
    }
  } else {
    buttonPressed = 0;  // 버튼에서 손을 뗌
  }
}

void setup() {
  // LED 핀을 출력으로 설정
  DDRB |= (1 << LED_PIN);
  
  // 버튼 핀을 입력으로 설정하고 풀업 저항 활성화
  DDRB &= ~(1 << BUTTON_PIN);
  PORTB |= (1 << BUTTON_PIN);
  
  // 핀 변경 인터럽트 설정
  GIMSK |= (1 << PCIE);  // 핀 변경 인터럽트 활성화
  PCMSK |= (1 << BUTTON_PIN);  // 버튼 핀에 대한 인터럽트 마스크 설정
  
  sei();  // 전역 인터럽트 활성화
}

void loop() {
  switch (mode) {
    case 0:  // 꺼짐 모드
      PORTB &= ~(1 << LED_PIN);
      break;
      
    case 1:  // 약한 빛 모드 (PWM 사용)
      for (int i = 0; i < 10; i++) {
        PORTB |= (1 << LED_PIN);
        delay(1);
        PORTB &= ~(1 << LED_PIN);
        delay(9);
      }
      break;
      
    case 2:  // 강한 빛 모드
      PORTB |= (1 << LED_PIN);
      delay(100);  // 약간의 딜레이로 루프 유지
      break;
      
    case 3:  // 깜빡임 모드
      PORTB |= (1 << LED_PIN);
      delay(100);
      PORTB &= ~(1 << LED_PIN);
      delay(100);
      break;
  }
}

// 간단한 딜레이 함수 (ATtiny13에서는 delay() 함수가 제한적)
void delay(uint8_t ms) {
  for (uint8_t i = 0; i < ms; i++) {
    _delay_ms(1);
  }
}</avr></avr></avr>

이 코드는 버튼을 누를 때마다 모드가 전환되는 기능을 구현했어요. 총 4가지 모드가 있어요:

  1. 꺼짐 모드 - LED가 완전히 꺼집니다.
  2. 약한 빛 모드 - PWM을 사용해 LED를 낮은 밝기로 켭니다 (배터리 절약 모드).
  3. 강한 빛 모드 - LED를 최대 밝기로 켭니다.
  4. 깜빡임 모드 - LED가 일정한 간격으로 깜빡입니다 (비상 상황용).

코드가 좀 복잡해 보일 수 있지만, 각 부분이 하는 일을 이해하면 그렇게 어렵지 않아요! 인터럽트를 사용해서 버튼 입력을 감지하고, 모드에 따라 다른 동작을 수행하는 구조예요. 😊

🔋 배터리 절약 기능 추가하기

손전등은 배터리로 동작하므로 전력 소비를 최소화하는 것이 중요해요. 다음 코드 조각을 추가하면 일정 시간 후 자동으로 꺼지는 기능을 구현할 수 있어요:

// 전역 변수 추가
volatile uint16_t inactiveCounter = 0;
#define AUTO_OFF_TIME 3000  // 약 5분 (실제 시간은 루프 실행 속도에 따라 다름)

// loop() 함수 내에 추가
if (mode != 0) {  // LED가 켜져 있을 때만 카운터 증가
  inactiveCounter++;
  if (inactiveCounter >= AUTO_OFF_TIME) {
    mode = 0;  // 자동으로 꺼짐
    inactiveCounter = 0;
  }
} else {
  inactiveCounter = 0;  // LED가 꺼져 있으면 카운터 리셋
}

// 버튼이 눌렸을 때 카운터 리셋 (ISR 함수 내에 추가)
inactiveCounter = 0;

이런 식으로 코드를 계속 발전시킬 수 있어요! ATtiny13의 제한된 메모리 내에서 최대한 기능을 구현하는 것이 관건이에요. 2025년에는 더 발전된 마이크로컨트롤러도 많이 나왔지만, 이렇게 제한된 환경에서 최적화된 코드를 작성하는 경험은 정말 값진 배움이 될 거예요! 👨‍💻

코드를 업로드하고 테스트해보세요! 문제가 있으면 디버깅하고 수정하는 과정을 통해 더 많이 배울 수 있을 거예요. 재능넷에서도 이런 마이크로컨트롤러 프로그래밍 관련 도움을 받을 수 있으니 참고하세요! 💡