1P by GN⁺ | ★ favorite | 댓글과 토론
  • 항상 밝기 3단계로 켜지는 야간등을 1단계로 낮추기 위해, 전원이 들어오면 버튼을 세 번 대신 눌러주는 ATtiny85 기반 PCB를 제작함
  • 커패시터 강하 전원은 수 mA만 공급하므로 ESP8266이나 Raspberry Pi Zero 대신, 1MHz에서 1mA 미만을 소비하고 절전 시 μA 수준으로 내려가는 ATtiny85를 선택함
  • 8.3V를 3.3V로 낮추는 HT7333과 버튼을 접지로 단락하는 2N3904를 중심으로 회로를 구성하고, EasyEDA와 JLCPCB로 설계·제작함
  • Raspberry Pi 3의 GPIO와 avrdude로 칩을 프로그래밍했으며, Home Assistant가 야간등을 켜면 잠시 기다린 뒤 버튼을 세 번 눌러 최저 밝기로 자동 전환함
  • 설계 파일과 C 코드는 MIT 라이선스로 공개했지만, 내부 전압이 4~12V이고 버튼 입력이 접지로 단락되는 기기에만 적용할 수 있으며 변압기 없는 상용 전원 기기는 각별한 주의가 필요함

매일 반복하던 세 번의 버튼 조작

  • Home Assistant는 휴대전화가 수면 집중 모드에 들어가면 Zigbee 벽면 플러그를 통해 야간등을 켜도록 구성돼 있음
  • 저가형 야간등에는 자동 점등 여부를 정하는 스위치와 밝기 단계를 바꾸는 버튼이 있지만, 전원을 켤 때마다 밝기 3단계에서 시작함
    • 버튼을 한 번 누르면 4단계, 다시 누르면 5단계, 세 번째에 1단계가 됨
    • 원하는 최저 밝기를 얻으려면 매일 밤 버튼을 세 번 눌러야 했음
  • 내부를 열어봤지만 칩 이름이 보이지 않았고 조절용 가변저항도 없었음
  • 버튼을 약 10초간 누르면 EEPROM의 기본 밝기를 바꿀 수 있다는 온라인 방법도 해당 제품에서는 동작하지 않았음

제한된 전력에 맞춘 마이크로컨트롤러

  • 버튼 입력을 자동으로 만드는 마이크로컨트롤러가 가장 적합한 해결책이었음
  • 야간등은 변압기 대신 커패시터로 상용 전압을 낮추기 때문에 전원부에서 수 mA만 공급할 수 있음
    • Wemos D1 Mini의 ESP8266은 부팅하고 무선 기능을 켤 때 수백 mA가 필요함
    • Raspberry Pi Zero는 운영체제를 부팅해야 하는 완전한 Linux 컴퓨터임
    • 두 장치 모두 별도 전원이나 부팅 순간을 견딜 대형 저장 커패시터와 추가 회로가 필요했음
  • 최종 선택한 ATtiny85는 고전적인 Arduino와 같은 AVR 계열이며 Arduino IDE로 코드를 작성할 수 있음
    • 1MHz 동작 시 소비 전류가 1mA 미만임
    • 절전 상태에서는 석영시계와 비슷한 μA 수준으로 내려감
    • 야간등 LED는 ATtiny85보다 수천 배 많은 전력을 사용함

실제 버튼 누름을 재현하는 회로

  • 야간등 내부 전원 레일은 8.3V이고 ATtiny85에는 3.3V가 필요해 HT7333 전압 레귤레이터를 사용함
  • 2N3904 트랜지스터가 버튼 신호선을 접지로 단락해 실제로 버튼을 누르는 동작을 재현함
  • 주변 부품은 전류 제한과 오입력 방지, 전원 안정화를 담당함
    • ATtiny85와 트랜지스터 사이의 1kΩ 저항은 트랜지스터로 흐르는 구동 전류를 제한함
    • 10kΩ 저항은 전원이 켜지는 동안 트랜지스터를 꺼진 상태로 유지해 의도하지 않은 버튼 입력을 막음
    • 소형 커패시터 3개는 전압 레귤레이터와 칩에 공급되는 전원을 평활함
    • 3핀 헤더는 전원·접지·버튼 신호선에 연결됨
  • 정해진 횟수만큼 버튼을 대신 눌러주는 범용 장치로 활용하고 PCB 제작 과정도 배우기 위해 별도 기판으로 설계함

EasyEDA에서 회로와 기판 설계

  • EasyEDA에서 부품과 연결 관계를 먼저 회로도로 작성함
    • GND, 3V3처럼 이름이 같은 연결점은 라우터가 서로 연결함
    • 실제 사용할 부품을 지정하면 PCB 배치와 부품 명세 작성에 활용할 수 있음
  • PCB 편집 단계에서는 부품 위치와 배선 경로, 기판 모양, 인쇄 요소를 직접 정할 수 있음
    • 기판에는 오픈소스 하드웨어 로고와 사용자 이름을 인쇄함
  • 회로가 단순해 단면 기판으로 만들었으며, 복잡한 배선이나 선 길이·형상 보정은 필요하지 않았음

JLCPCB 제작과 부품 조립

  • JLCPCB에서 실제 부품과 조립 여부를 선택해 기판을 주문함
  • 최소 주문 수량은 5장이었지만 필요한 기판은 1장뿐이어서 부품 대부분을 직접 납땜함
    • 매우 작은 저항과 커패시터는 추가 비용이 적어 JLCPCB의 조립 서비스를 이용함
  • 주문 후 4일 만에 기판을 받음

ATtiny85 프로그래밍과 사전 검증

  • 빈 ATtiny85에는 부트로더가 없어 Arduino처럼 USB에 직접 연결할 수 없으며 별도의 프로그래머가 필요함
  • Raspberry Pi 3의 GPIO와 avrdude를 이용해 프로그래밍함
    • Pi 헤더와 칩을 점퍼선 6개로 연결한 뒤 명령 하나를 실행함
  • 야간등에 곧바로 연결하지 않고 출력 핀에 LED를 달아 동작을 먼저 검증함
    • 최종 동작은 세 번 깜빡인 뒤 계속 멈추는 순서임
    • 테스트 영상에서는 필요한 횟수를 뒤늦게 수정해 네 번 깜빡임

설치 과정과 상용 전원 안전

  • 완성된 기판을 야간등 내부에 납땜했으며, 부품과 공간이 매우 작아 작업이 어려웠음
  • 기존 기판의 대형 커패시터는 극성이 반대로 설치돼 있었고 멀티미터 검사로 이를 확인함
  • 야간등에 변압기가 없어 추가 PCB를 설치하면 회로 전체가 상용 전원에 연결됨
    • ATtiny85는 기기에 넣기 전에 플래시해야 함
    • 설치 후에는 USB 케이블이나 Raspberry Pi를 다시 연결하면 안 됨

취침 자동화와 최종 동작

  • 시계가 취침 상태를 휴대전화에 전달하면 휴대전화가 Home Assistant에 알리고, Home Assistant가 Zigbee 플러그를 통해 야간등을 켬
  • 전원이 들어온 PCB는 야간등이 오동작하지 않도록 잠시 기다린 뒤 버튼을 세 번 눌러 밝기 1단계로 전환함
  • 확산판 뒤로 내부 배선의 그림자가 보이지만 방 벽에는 나타나지 않아 실제 사용에는 문제가 없었음

오픈소스 자료와 적용 조건

  • tymscar/button-presser에 다음 자료를 MIT 라이선스로 공개함
    • 동일한 기판을 제작할 수 있는 Gerber 파일
    • 부품 명세와 회로도
    • ATtiny85에서 실행되는 짧은 C 코드
  • 적용 전 README에 안내된 멀티미터 검사 두 가지를 수행해야 함
  • 이 회로는 내부에 4~12V 전원 레일이 있고, 버튼을 누를 때 신호가 접지로 단락되는 기기에서만 동작함
  • 여러 저가형 기기가 이 조건에 해당하지만 모든 제품에 적용되지는 않으며, 상용 전원으로 작동하는 기기는 작업 전에 안전 지침을 확인해야 함

댓글과 토론