로그인회원가입

[카테고리:] 스마트홈

홈 오토메이션 관련 DIY

  • 켜진 거야 끈 거야? 헷갈리는 IR 토글 제어, 스마트 플러그로 상태 동기화하기

    켜진 거야 끈 거야? 헷갈리는 IR 토글 제어, 스마트 플러그로 상태 동기화하기

    좌쪽: ON, OFF 따로 버튼, 우측: 전원 켜져있으면 꺼지고 꺼져 있으면 켜지는 토글 toggle 버튼

    스마트홈 구축 시 가장 골치 아픈 문제 중 하나가 ‘상태 동기화(State Synchronization)’ 입니다. 토글(Toggle) 방식의 IR 제어는 현재 기기가 켜져 있는지 꺼져 있는지 서버가 알 수 없다는 치명적인 단점이 있습니다.

    이를 해결하기 위한 4가지 실무적인 전략을 정리해 드립니다.


    1. 전력 소비 감지 (Smart Plug 활용)

    가장 확실하고 대중적인 방법입니다. 전자제품의 전원 플러그와 벽면 콘센트 사이에 전력 측정 기능이 있는 스마트 플러그를 설치합니다.

    • 원리: 가전제품이 켜지면 전력 소비량(W)이 급증하고, 꺼지면 대기 전력 수준으로 떨어집니다.
    • 해결: 자동화 조건(Scene)을 설정합니다.
      • IF (전력 소비 > 10W) THEN (가전 상태 = ON)
      • IF (전력 소비 < 2W) THEN (가전 상태 = OFF)
    • 장점: 하드웨어를 개조할 필요가 없으며 정확도가 매우 높습니다.

    2. 조도/진동/소음 센서 활용 (외부 부착)

    전력 측정이 어려운 가전(예: 에어컨, 벽면 부착 기기)의 경우, 기기의 외부 변화를 감지하는 센서를 붙입니다.

    • 조도 센서: 제품 전원 LED 앞에 작은 조도 센서를 붙여 LED가 들어오면 ON으로 판단합니다.
    • 진동 센서: 세탁기나 구형 에어컨처럼 작동 시 진동이 발생하는 기기에 부착하여 작동 여부를 판단합니다.
    • 해결 예시: “에어컨의 전원 LED가 밝아지면 대시보드 상태를 ON으로 변경하라.”

    3. ‘상태 확인’ 로직 구축 (Dummy Switch)

    Home Assistant나 SmartThings 같은 플랫폼을 사용 중이라면 **가상 스위치(Dummy/Simulated Switch)**를 만들어 IR 신호와 연동합니다.

    • 로직: 사용자가 앱에서 ‘전원’ 버튼을 누르면 [IR 신호 송신]과 동시에 [가상 스위치 상태 변경]을 한 세트로 실행합니다.
    • 한계: 누군가 직접 리모컨으로 끄거나 제품 본체 버튼을 누르면 상태가 다시 꼬입니다. 이를 보완하기 위해 1번(스마트 플러그)과 조합하는 것이 필수적입니다.

    4. ‘조건부 실행’ 자동화 구성

    만약 전력 측정이 가능하다면, 토글 버튼의 단점을 자동화 로직으로 덮어버릴 수 있습니다.

    • 외출 시 끄기 자동화 예시:
      • 단순히 IR 신호를 보내는 것이 아니라, **”스마트 플러그의 전력이 5W 이상일 때만(이미 켜져 있을 때만) IR 전원 신호를 보내라”**라고 명령을 짭니다.
      • 이렇게 하면 이미 꺼져 있는 제품을 실수로 다시 켜버리는 불상사를 막을 수 있습니다.

    💡 추천 솔루션

    가장 추천하는 조합은 **[IR 송신기 + 전력 측정 스마트 플러그]**입니다.

    한국 가전처럼 토글 방식이 많은 환경에서는 하드웨어적인 피드백(전력량) 없이는 100% 신뢰할 수 있는 스마트홈을 만들기 어렵습니다. 스마트 플러그 하나만 추가해도 “에어컨 끄고 나왔나?” 하는 걱정을 완벽히 지울 수 있습니다.

  • [DIY] 적외선 IR 리모컨을 스마트폰으로! 웹서버 기반 통합 리모컨 만들기 – IR Cloner

    [DIY] 적외선 IR 리모컨을 스마트폰으로! 웹서버 기반 통합 리모컨 만들기 – IR Cloner

    1. 스마트홈 제어 시스템의 필요성

    현재까지 각 방에 온습도 센서를 배치하여 실시간 환경 데이터를 수집하는 모니터링 시스템을 운영해 왔습니다. 하지만 데이터의 시각화만으로는 능동적인 환경 조절에 한계가 있습니다. 수집된 데이터를 바탕으로 에어컨이나 선풍기 등의 가전제품을 물리적으로 조작할 수 있는 제어 수단이 결합되어야 비로소 완전한 스마트홈 시스템이 구축됩니다. 본 프로젝트에서는 이를 실현하기 위해 웹 기반 IR(적외선) 리모컨 제어기를 설계하고 구현하였습니다.

    2. 핵심 기술적 구현 원리

    ① IR 신호의 정밀 제어 (PWM 및 캐리어 주파수)

    적외선 리모컨 통신은 외부 광원과의 간섭을 차단하기 위해 특정 주파수(주로 38kHz)의 캐리어 신호에 데이터를 실어 보냅니다. 본 시스템에서는 machine.PWM 기능을 활용하여 38kHz의 주파수를 생성하였으며, 마이크로초($\mu s$) 단위의 정밀한 펄스 폭 변조를 통해 NEC 규격의 리딩 펄스와 데이터 비트를 구현하였습니다.

    ② 하드웨어 인터럽트(IRQ) 기반 신호 캡처

    적외선 신호의 수신 시 발생하는 급격한 전압 변화를 놓치지 않기 위해 하드웨어 인터럽트(IRQ)를 사용하였습니다. 메인 루프에서 신호를 스캔하는 방식 대신, 핀의 상태 변화가 감지되는 즉시 타임스탬프를 기록하는 방식을 채택하여 CPU의 점유율을 최적화하고 수신 데이터의 정밀도를 확보하였습니다.

    ③ 웹소켓(WebSocket) 멀티 디바이스 통신

    단방향 요청-응답 방식인 HTTP의 한계를 극복하기 위해 웹소켓 프로토콜을 적용하였습니다. 이를 통해 서버(ESP32)에서 수신된 IR 신호가 연결된 모든 클라이언트(스마트폰, PC 등)의 웹 화면에 실시간으로 동기화되도록 하였습니다. 또한 가변 길이의 데이터 프레임 헤더를 직접 설계하여, 데이터 양이 많은 펄스 파형 정보도 안정적으로 전송되도록 구현하였습니다.

    3. 시스템 구성 및 아키텍처

    장치의 부하를 줄이고 효율적인 제어를 위해 다음과 같은 하드웨어 및 소프트웨어 구조를 가집니다.

    좌측: 적외선 수신모듈 VS1838B , 우측: 적외선 송신모듈 5mm IR LED
    • MCU: ESP32-C3 (내장 Wi-Fi를 통한 웹 서버 및 웹소켓 서버 구동)
    • 핀 맵: IR 수신기(GP0), IR 송신기(GP1)
    • UI/UX: HTML5와 CSS Grid를 활용한 반응형 웹 인터페이스를 구축하여 모바일 및 PC 환경에서 최적의 조작감을 제공합니다.
    • 데이터 관리: 브라우저의 localStorage를 활용하여 별도의 외부 DB 없이도 학습된 리모컨 히스토리를 유지하고 관리합니다.

    4. 스마트홈 구현의 확장성

    이번 IR 복사기 구축은 단순한 리모컨 통합 이상의 의미를 가집니다.

    • 원격 제어: 외부 네트워크 접속을 통해 온습도 상태에 따른 가전제품 원격 조작이 가능합니다.
    • 구형 가전의 스마트화: Wi-Fi 기능이 없는 구형 가전제품들을 기존 인프라에 통합하여 제어할 수 있습니다.
    • 자동화 시나리오의 토대: 온습도 센서의 임계값에 따라 IR 송신 신호를 자동으로 발생시키는 완전 자동화(Closed-loop control) 시스템으로의 확장이 가능해졌습니다.

    5. 결론

    이번 프로젝트를 통해 온습도 모니터링 시스템과 가전제품 제어 시스템을 단일 네트워크 내에서 통합하였습니다. 이는 스마트홈의 본질인 ‘데이터 기반의 능동적 환경 제어’를 실현하는 핵심적인 물리적 기반이 됩니다. 구축된 IR 제어기는 향후 다양한 센서와 연동되어 지능형 스마트홈 시스템의 중추적인 역할을 수행하게 됩니다.


    방마다 있는 온습도 센서, ‘스마트 허브’로 업그레이드하기

    스마트홈을 구축할 때 가장 기본이 되는 아이템이 바로 방마다 설치하는 온습도 센서입니다. 하지만 단순히 수치만 확인하는 용도로 쓰기엔 조금 아쉽죠. 여기에 ‘적외선(IR) LED’ 하나만 추가해 보세요. 놀라운 변화가 시작됩니다!

    왜 적외선 LED인가요?

    우리가 흔히 쓰는 에어컨, TV, 서큘레이터 등은 대부분 적외선 리모컨 방식을 사용합니다. 온습도 센서 모듈에 IR LED를 달아두면, 이 센서가 단순한 측정기를 넘어 ‘만능 리모컨 허브’ 역할을 하게 됩니다.

    어떤 게 좋아지나요?

    1. 가전 통합 제어: 방마다 리모컨을 찾아다닐 필요 없이, 스마트폰이나 음성 명령 하나로 그 방의 모든 가전을 제어할 수 있습니다.
    2. 자동화 시나리오: “습도가 70%를 넘으면 제습기를 켜라”, “온도가 26도 이상이면 에어컨을 가동해라” 같은 스마트한 자동 제어가 완벽해집니다.
    3. 저비용 고효율: 비싼 스마트 가전을 새로 살 필요 없습니다. 기존 구형 가전들도 적외선 신호만 받을 수 있다면 즉시 스마트 가전이 됩니다.
    4. 집 밖 어디서나! 인터넷만 있다면 원격 제어 OK :
      “아, 리모컨은 방안에만 있어야 하는 거 아냐?”라고 생각하셨다면 오산입니다. 이 센서가 인터넷(Wi-Fi)에 연결되어 있다면, 여러분의 스마트폰이 전 세계 어디서든 작동하는 무선 리모컨이 됩니다. 퇴근길 미리 에어컨을 켜두어 ‘삶의 질’을 높이거나, 깜빡 잊고 외출한 가전제품을 밖에서 끄는 등 에너지와 시간을 획기적으로 아껴줍니다.

    방마다 설치된 작은 센서가 우리 집 가전을 하나로 묶어주는 스마트홈의 핵심 컨트롤러가 되는 셈이죠. 지금 바로 적외선 LED 하나로 더 편리한 일상을 설계해 보세요!


    Python boot.py

    Python main.py

  • [개발 환경 비교] 아두이노 IDE vs 마이크로파이썬: “어제까지 되던 코드가 왜 오늘 안 될까?”

    [개발 환경 비교] 아두이노 IDE vs 마이크로파이썬: “어제까지 되던 코드가 왜 오늘 안 될까?”

    1. 들어가며: 아두이노 IDE의 ‘업데이트 공포’

    아두이노로 프로젝트를 해본 사람이라면 누구나 겪는 공포가 있습니다. 오랜만에 예전 프로젝트를 수정하려고 아두이노 IDE를 켰는데, “보드 매니저 업데이트 권장” 팝업이 뜹니다. 무심코 업데이트를 누르는 순간, 수십 개의 컴파일 에러가 쏟아지죠.

    분명 어제까지 잘 돌아가던 코드인데, 보드 라이브러리 버전이 올라가면서 기존에 사용하던 외부 라이브러리와 충돌이 발생한 것입니다.

    2. 아두이노 IDE의 한계: 복잡한 의존성의 늪

    아두이노는 C++ 기반의 컴파일 방식을 사용합니다. 이는 성능 면에서는 유리하지만, 라이브러리 관리에 있어서는 치명적인 단점이 있습니다.

    • 버전 파편화: 보드 코어(Core) 버전과 라이브러리 버전이 서로 얽혀 있어, 하나만 업데이트되어도 전체 빌드 환경이 무너질 수 있습니다.
    • 수정의 어려움: 컴파일된 바이너리를 올리는 방식이라, 현장에서 코드를 살짝 수정하려면 반드시 해당 라이브러리가 깔린 PC가 있어야 합니다.
    • 라이브러리 종속성: 수많은 기여자가 만든 라이브러리들이 표준화되어 있지 않아, 보드 매니저가 업데이트될 때마다 구형 라이브러리들은 버려지기 일쑤입니다.

    3. 마이크로파이썬(MicroPython)의 해답: 독립성과 유연성

    반면, 마이크로파이썬은 인터프리터 방식을 채택하여 아두이노의 고질적인 문제를 우아하게 해결합니다.

    • 파일 기반 라이브러리: 라이브러리가 내 컴퓨터 어딘가에 숨겨진 게 아니라, MCU 내부 메모리에 .py 파일로 직접 들어갑니다. 보드 펌웨어가 업데이트되어도 내가 넣어둔 라이브러리 파일은 영향을 받지 않습니다.
    • 즉각적인 수정: 컴파일 과정이 없습니다. 메모장에서 글을 고치듯 코드를 수정하고 저장하면 끝입니다. PC의 보드 매니저 버전과는 아무 상관이 없죠.
    • 표준화된 문법: 파이썬 표준 라이브러리를 따르기 때문에, 하드웨어 하위 레벨이 바뀌어도 상위 유저 코드는 그대로 유지될 확률이 매우 높습니다.

    4. 비교 요약: 나에게 맞는 환경은?

    비교 항목아두이노 (Arduino)마이크로파이썬 (MicroPython)
    라이브러리 관리보드 매니저 업데이트 시 호환성 위험독립된 .py 파일로 직접 관리 (안정적)
    개발 속도컴파일 대기 시간 발생수정 즉시 반영 (REPL 활용)
    유지보수개발 환경(PC)이 바뀌면 골치 아픔보드 안에 코드가 있어 어디서든 수정 가능
    성능최적화에 유리 (고성능 작업)생산성에 유리 (빠른 프로토타이핑)

    5. 결론: “안정적인 프로젝트를 원한다면?”

    만약 복잡한 라이브러리 업데이트에 지쳤거나, 현장에서 장치를 바로바로 수정해야 하는 프로젝트라면 마이크로파이썬이 정답입니다. 보드 매니저 업데이트 한 번에 소중한 프로젝트가 먹통이 되는 경험은 이제 그만하셔도 됩니다.

    “결국 도구는 도구일 뿐이지만, 스트레스 없는 도구를 선택하는 것도 실력입니다.”

  • ESP32-C3 Mini와 DFPlayer로 만드는 ‘커스텀 MP3 플레이어’

    ESP32-C3 Mini와 DFPlayer로 만드는 ‘커스텀 MP3 플레이어’

    “스마트홈 부화기 프로젝트의 첫 번째 모듈, 오디오 시스템을 완성했습니다.”

    부품 리스트: ESP32-C3 SuperMini, DFPlayer Mini, SSD1306 OLED, 터치 센서 등.

  • 🐣 생명의 탄생을 코딩하다: ESP32 기반 ‘스마트 달걀 부화기’

    🐣 생명의 탄생을 코딩하다: ESP32 기반 ‘스마트 달걀 부화기’

    안녕하세요! 오늘은 제 블로그의 핵심 가치인 **’Smart Home’**을 가장 완벽하게 구현할 수 있는 새로운 프로젝트를 소개하려고 합니다. 바로 [전자동 스마트 달걀 부화기] 제작 기획입니다.

    단순히 알을 깨고 나오는 수준을 넘어, 21일(3주)이라는 시간 동안 오차 없는 정밀 제어와 실시간 모니터링이 결합된 하이테크 부화 시스템을 목표로 합니다.

    1. 왜 ‘부화기’ 프로젝트인가?

    부화기 내부의 환경 제어는 스마트홈 시스템의 논리와 매우 닮아 있습니다.

    • 정밀 제어: 온도와 습도는 부화율을 결정짓는 핵심 요소입니다.
    • 자동화: 인간의 개입 없이 스스로 돌아가는 루틴(전란, 환기)이 필요합니다.
    • 원격 관리: 언제 어디서든 스마트폰으로 상태를 확인하고 조절해야 합니다.

    결국 이 프로젝트는 스마트홈 시스템의 미니 버전이자, 그 기술력을 증명할 가장 완벽한 테스트베드가 될 것입니다.

    2. 핵심 기능 및 시스템 구성 (System Architecture)

    이번 프로젝트의 두뇌는 ESP32-C3ESP32-CAM이 담당합니다.

    기능상세 내용제어 모듈
    온/습도 자동 제어히터와 가습기를 PID 또는 On/Off 제어로 일정하게 유지ESP32-C3
    자동 전란 (Egg Turning)주기적으로 모터를 구동하여 배아 유착 방지ESP32-C3
    공기 정화 및 환기CO2 농도에 따른 팬(Fan) 구동 및 신선한 공기 유입ESP32-C3
    심리 안정 음악부화율 향상을 위한 잔잔한 클래식/자연 소리 재생ESP32-C3 (I2S/PWM)
    실시간 라이브 뷰스마트폰 앱을 통한 부화기 내부 24시간 감시ESP32-CAM
    타임랩스 기록3주간의 전 과정을 촬영하여 탄생의 순간을 영상화ESP32-CAM (SD Card)

    3. 기술적 도전 과제 (Challenge)

    1. 3주간의 안정성: 단 한 번의 시스템 다운도 생명에 치명적입니다. 와치독(Watchdog) 타이머와 안정적인 전원 설계가 필수입니다.
    2. 데이터 시각화: 실시간 온/습도 데이터를 대시보드로 구성하여 그래프로 모니터링합니다.
    3. ESP32-CAM 최적화: 장기간 촬영 시 발열 문제와 데이터 저장 용량 관리가 핵심입니다.

    4. 관전 포인트: “정말 태어날까?”

    이 프로젝트의 가장 큰 묘미는 기다림에 있습니다. 단순한 기계 조립이 아니라, 제가 짠 코드와 설계한 회로가 **’생명을 태어나게 할 수 있을까?’**라는 질문에 답하는 과정입니다.

    검란(Candling)을 통해 핏줄이 생기는 모습, 심장이 뛰는 모습, 그리고 마침내 껍질을 깨고 나오는 ‘파각’의 순간까지. 그 경이로운 21일간의 기록을 여러분과 실시간으로 공유하려 합니다.

    5. 앞으로의 일정

    • Phase 1: 회로 설계 및 부품 수급 (진행 중)
    • Phase 2: ESP32-C3 펌웨어 작성 및 센서 테스트
    • Phase 3: 부화기 하우징 제작 및 단열 설계
    • Phase 4: 유정란 입란 및 21일간의 대장정 시작!

    스마트홈 기술이 생명을 만났을 때 어떤 결과가 나올지 저도 무척 기대됩니다. 다음 포스팅에서는 구체적인 부품 리스트와 회로도를 가지고 돌아오겠습니다.

    많은 관심과 응원 부탁드립니다! 🐥

    1. 달걀 부화의 핵심 조건 (The Golden Rules)

    부화 성공률(부화율)을 높이려면 단순히 따뜻하게 하는 것을 넘어 정밀한 제어가 필요합니다.

    항목조건비고
    온도37.5°C ~ 38°C가장 중요함. 1도만 차이 나도 기형이나 폐사 발생 가능.
    습도초기(1~18일): 45~55% / 말기(19~21일): 65~75%부화 직전에는 껍질을 깨기 쉽도록 습도를 높여야 함.
    전란 (Egg Turning)1~18일 동안 하루 4~6회난황이 껍질에 붙는 것을 방지. 부화 3일 전에는 중단.
    환기신선한 산소 공급배아도 숨을 쉽니다. 이산화탄소 배출이 필수적임.

    온도 습도 관리에서 태교음악까지 구현 3주간

    최종 시스템 아키텍처 요약

    구분역할주용 기술
    ESP32-C3환경 제어 및 데이터 로깅MicroPython, AHT20, Relay
    ESP32-CAM실시간 시각 모니터링 & 10분 주기 촬영C++, HTTP Client
    Home ServerDB 관리 및 이미지 스토리지PHP, MySQL, Apache/Nginx
    Dashboard통합 제어 및 타임랩스 뷰어HTML5, JS, Bootstrap

    디자인중인 데시보드

  • 왜 내 OLED는 얼룩덜룩해질까? 수명을 2배 늘리는 팁 (feat. PIR sensor)

    왜 내 OLED는 얼룩덜룩해질까? 수명을 2배 늘리는 팁 (feat. PIR sensor)

    OLED 번인 방지: PIR 센서로 디스플레이 수명 늘리는 법

    OLED 디스플레이의 최대 단점인 밝기 저하와 번인 현상! 장시간 화면을 켜두었을 때 발생하는 얼룩덜룩한 잔상을 방지하기 위해, PIR 인체감지 센서를 활용하여 사람이 있을 때만 화면이 켜지게 만드는 스마트한 해결 방법을 소개합니다.


    ※📱 OLED의 원리와 치명적인 약점: 왜 번인이 생길까?

    1. OLED란 무엇인가? (Organic Light Emitting Diode)

    OLED는 ‘유기 발광 다이오드’의 약자로, 화면 뒤에서 빛을 쏴주는 백라이트가 필요한 LCD와 달리 소자 하나하나가 스스로 빛을 내는(자발광) 방식입니다.

    • 완벽한 블랙: 빛을 아예 꺼버릴 수 있어 무한대의 명암비를 자랑합니다.
    • 얇은 두께: 백라이트가 없어 디스플레이를 매우 얇게, 심지어 종이처럼 휠 수도 있습니다.

    2. 치명적인 단점: 번인(Burn-in)과 수명

    하지만 OLED는 **’유기물’**을 태워서 빛을 냅니다. 마치 촛불처럼 켜두면 서서히 타들어 가며 수명이 줄어듭니다.

    • 밝기 불균형: 특정 픽셀만 계속 켜져 있으면 그 부분의 소자가 다른 곳보다 빨리 노화되어 어두워집니다.
    • 잔상(Ghosting): 화면을 꺼도 예전 모습이 얼룩처럼 남는 현상입니다. 특히 고정된 UI(시계, 메뉴바)가 있는 DIY 프로젝트에서 자주 발생합니다.

    3. 실제 1~2개월만 계속 켜놔도 OLED가 아래처럼 얼룩덜룩 된 사례

    왼쪽: 정상, 중앙:상시 켜논 화면, 오른쪽: 번인현상으로 밝기 불균형

    ※🛠️ 공학적 해결책: PIR 센서와의 만남

    OLED의 수명을 늘리는 가장 확실한 방법은 **”필요할 때만 켜는 것”**입니다. 하지만 매번 버튼을 누르기는 귀찮죠. 이때 PIR(Passive Infrared) 센서가 훌륭한 대안이 됩니다.

    PIR 센서란?

    적외선을 통해 사람의 움직임을 감지하는 센서입니다. 현관문 자동등에 쓰이는 바로 그 센서입니다!

    작동 알고리즘 (PIR + OLED)

    1. 감지 모드: PIR 센서가 주변의 움직임을 감시합니다. (OLED는 Off 상태로 수명 보존)
    2. 활성화: 사람이 다가오면 센서가 신호를 보내고, MCU(아두이노, ESP32 등)가 즉시 OLED를 켭니다.
    3. 자동 종료: 설정한 시간 동안 움직임이 없으면 다시 OLED를 꺼서 소자를 보호합니다.

    “OLED의 선명함은 포기할 수 없지만, 번인이 걱정된다면 PIR 센서를 달아보세요. 하드웨어적인 보호 수단 하나가 여러분의 디스플레이 수명을 2배, 아니 10배까지도 늘려줄 것입니다. 이번 프로젝트를 통해 똑똑하고 오래가는 DIY 기기를 만들어보시길 바랍니다!”


    1. PIR 센서란? (Passive Infrared)

    • Passive(수동형): 센서가 스스로 빛이나 에너지를 쏘는 게 아니라, 외부에서 들어오는 적외선 에너지를 ‘받기만’ 하기 때문에 붙여진 이름입니다.
    • 작동 원리: 모든 생명체(사람, 동물)는 열을 방출하며, 이 열은 적외선 형태로 나타납니다. PIR 센서 안에는 두 개의 적외선 감지 소자가 있는데, 사람의 움직임으로 인해 두 소자에 들어오는 적외선 양에 차이가 생기면 “사람이 있다!”라고 판단하고 신호를 보냅니다.

    2. 왜 하얀색 축구공 모양인가요? (프레넬 렌즈)

    센서 위를 덮고 있는 올록볼록한 반구 모양은 단순한 덮개가 아니라 **’프레넬 렌즈(Fresnel Lens)’**입니다.

    • 주변의 적외선을 한곳으로 모아주고, 감지 범위를 넓혀주는 역할을 합니다.
    • 이 렌즈 덕분에 아주 작은 센서 하나로도 수 미터 앞의 움직임을 포착할 수 있습니다.

    3. 주요 조절 장치 (뒷면 가변 저항)

    보통 센서 뒷면에는 작은 나사(가변 저항)가 두 개 있습니다.

    • Sensitivity (감도): 감지 거리를 조절합니다 (약 3m ~ 7m).
    • Delay Time (지연 시간): 움직임이 감지된 후 얼마나 오랫동안 신호를 유지할지 결정합니다 (5초 ~ 5분).
      • OLED 프로젝트 팁: 지연 시간을 10~20초 정도로 설정하면 사람이 자리를 떠나고 잠시 후에 화면이 꺼지게 할 수 있어 자연스럽습니다.

    4. OLED 수명 연장에 왜 최고인가요?

    • 초저전력: 센서 자체가 전기를 거의 안 먹어서 24시간 켜두어도 부담이 없습니다.
    • 비접촉: 버튼을 누를 필요가 없어 기기 마모가 없고 위생적입니다.
    • 확실한 효과: “사람이 없을 땐 끄고, 있을 때만 켠다”는 로직을 통해 OLED 소자의 발광 시간을 물리적으로 줄이는 가장 효율적인 방법입니다.

    5. PIR 센서는 온도 변화에 민감합니다. (주의)

    • 에어컨 실외기 근처나 햇빛이 너무 강하게 드는 곳에 OLED 장치를 두면, 사람이 없어도 화면이 제멋대로 켜질 수 있습니다.

    🐍 최종 코드

    Python

    🐍 OLED 전면 점등 테스트 코드 (ESP32-C3)

    Python

  • 🔒”인터넷은 끊었지만, 시간은 정확하게” : ESP32 보안과 시간 동기화 두 마리 토끼 잡기

    🔒”인터넷은 끊었지만, 시간은 정확하게” : ESP32 보안과 시간 동기화 두 마리 토끼 잡기

    안녕하세요! 오늘은 제가 IoT 프로젝트를 진행하면서 가장 신경 쓰는 부분 중 하나인 **’보안’**과, 그로 인해 발생하는 ‘시간 오차’ 문제를 해결한 경험을 공유해보려 합니다.

    1. 왜 ESP32의 인터넷을 막았을까?

    ESP32는 정말 가성비 좋은 칩이지만, 외부 라이브러리를 쓰다 보면 “이 칩이 내가 모르는 곳으로 데이터를 보내면 어쩌지?” 하는 찝찝함이 생기기 마련입니다. 그래서 저는 ipTIME 공유기 설정을 통해 ESP32가 내부망(LAN)에서는 통신하되, 외부 인터넷(WAN)으로는 나가지 못하게 꽉 막아두고 사용합니다.

    2. 인터넷을 막으니 생기는 ‘시간’ 문제

    인터넷을 차단하면 가장 먼저 터지는 문제가 바로 NTP 시간 동기화입니다. 특히 제가 사용한 ESP32-C3 미니 모듈은 저가형이라 그런지 내장 클럭 오차가 상당하더라고요. 하루만 지나도 몇 분씩 차이가 나니, 정밀한 제어가 필요한 프로젝트에서는 치명적이었습니다.

    3. 안드로이드 TV 박스의 배신(?)과 반전

    집에서 홈 서버로 활용 중인 안드로이드 TV 박스를 타임 서버로 쓰려고 했더니, 이 녀석도 문제입니다. 안드로이드 OS 특성상 시스템 시간을 강제로 동기화하는 게 쉽지 않고, 재부팅 후에는 시간이 틀어져 있기 일쑤였죠.

    그래서 저는 **’오차 보정(Offset) 알고리즘’**을 직접 구현하기로 했습니다.

    4. 해결책: “나만의 타임 프록시(Time Proxy)” 시스템

    시스템의 원리는 생각보다 간단하지만 강력합니다.

    • Step 1. 서버의 정직한 고백: 안드로이드 홈 서버(PHP)가 외부 페이지에서 표준 시간을 가져옵니다. 그리고 자기 시간과 얼마나 차이가 나는지 **’오차값(Offset)’**을 계산해 둡니다. (예: “내 시간은 10시지만 실제론 10시 5분이야. 오차는 +5분!”)
    • Step 2. ESP32의 요청: 인터넷이 막힌 ESP32는 12시간마다 로컬 서버에 접속해 서버 시간과 오차값을 받아옵니다.
    • Step 3. 최종 합체: ESP32는 서버 시간에 오차값을 더해 진짜 표준 시간을 찾아냅니다.

    5. 결과: 보안과 정확도의 완성

    이렇게 세팅하니 ESP32는 단 1바이트의 데이터도 외부망으로 흘리지 않으면서, 시간은 항상 1초 단위까지 정확하게 유지하게 되었습니다. 저사양 TV 박스에서 돌아가는 옛날 버전의 PHP/MySQL 환경에서도 아주 쌩쌩하게 잘 돌아가네요!


    마치며

    남들이 보기엔 “그냥 인터넷 연결하면 편할 걸 왜 이렇게까지 해?”라고 할 수도 있지만, 메이커라면 이런 나만의 보안 환경을 구축하는 데서 오는 쾌감이 있죠.

    혹시 저처럼 보안을 위해 기기를 격리하고 싶거나, 저가형 칩의 시간 오차 때문에 고민인 분들에게 이 방식이 작은 팁이 되었으면 좋겠습니다.

  • 스마트폰으로 제어하는 전시용 턴테이블: 음악과 속도를 내 맘대로

    스마트폰으로 제어하는 전시용 턴테이블: 음악과 속도를 내 맘대로

    안녕하세요! DIY 사이트에 올릴 작업물들을 360도 보여주기 위해 직접 제작한 ‘전시용 턴테이블’ 제작기를 가져왔습니다.

    1. 제작 동기: “단순히 도는 것만으론 부족하니까”

    DIY 사이트를 운영하다 보니 정성껏 만든 물건을 다각도에서 보여줄 수 있는 회전판이 필요했습니다. 시중에 파는 제품도 많지만, DIY 사이트니 직접 만들어야죠.

    • 전시물의 가치 극대화: 내가 원하는 속도와 각도로 커스텀하여 물건의 매력을 가장 잘 보여주고 싶었습니다.
    • 밋밋함 해결: 하지만 단순히 뱅글뱅글 돌기만 하는 회전판은 조금 심심하고 밋밋해서서 시각적인 움직임에 청각적인 즐거움까지 더해보자는 생각으로 MP3 기능을 추가하게 되었습니다.

    2. 하드웨어 구성 요약

    회로의 심장은 단골 ESP32-C3 SuperMini를 사용했습니다.

    • 구동부: 28BYJ-48 스텝모터 + ULN2003 드라이버 (정밀 회전 담당)
    • 음향부: DFPlayer Mini + 소형 스피커 (음악 및 효과음 담당)
    • 전원: 대용량 5V 보조배터리 전원선 없이 콤팩트하게 구성

    3. 마이크로파이썬으로 구현한 시퀀스

    이번 프로젝트의 핵심 로직은 **’움직임과 소리의 동기화’**입니다. 마이크로파이썬을 통해 다음과 같은 흐름을 구현했습니다.

    1. 시작: 전원이 켜지면 DFPlayer가 01번 폴더의 음악중 하나를 재생합니다.
    2. 회전: 음악이 랜덤으로 반복되고 360도 회전하며 전시물을 보여줍니다. 곡이 바뀔때 마다 회전방향을 바꿉니다. 음악마다 회전속도를 지정해 줄 수 있습니다.
    3. 조정: WIFI 웹서버 연결로 회전 속도, 회전 방향, 음악 선택, 볼륨 조정이 됩니다.

    4. 관련글

  • 가장 작고 강력한 오디오 모듈, DFPlayer Mini를 ESP32-C3로 완벽 제어하기

    가장 작고 강력한 오디오 모듈, DFPlayer Mini를 ESP32-C3로 완벽 제어하기

    DFPlayer Mini: 저렴하고 강력한 MP3 모듈 사용법

    1. 가성비 끝판왕, 소리의 재미를 더하다

    DFPlayer Mini는 저렴한 가격에 MP3 디코더와 앰프 기능을 모두 갖춘 놀라운 모듈입니다. 단순히 음악을 트는 것을 넘어, 안내 음성이나 효과음을 프로젝트에 입힐 수 있어 활용도가 무궁무진합니다.

    2. ESP32-C3와 심플한 하드웨어 연결

    연결은 매우 직관적입니다. ESP32-C3의 여유 핀 GPIO 5(TX)핀을 모듈의 RX에, GPIO 21(RX)핀을 모듈의 TX에 연결하면 됩니다. 이때 노이즈를 방지하고 모듈을 보호하기 위해 RX 라인에 1kΩ 저항을 하나 달아주는 것이 꿀팁입니다. 전원은 5V를 연결하고, 스피커 출력 단자(SPK1, SPK2)에 소형 스피커를 바로 연결하기만 하면 물리적인 준비는 끝납니다.

    3. SD카드 설정과 파일 규칙

    이 모듈을 사용할 때 가장 주의할 점은 SD카드의 파일 정리 방식입니다. SD카드는 반드시 FAT32 형식으로 포맷해야 하며, 파일 관리 방식은 크게 두 가지가 있습니다. 루트 폴더에 ‘0001.mp3‘,’0002.mp3‘… 로 음악파일을 넣거나, 더 체계적인 관리를 위해 ’01’, ’02’ 같은 이름의 폴더를 만들고 그 안에 ‘001.mp3’, ‘002.mp3’ 형식으로 파일을 넣는 방식입니다. 이렇게 폴더 형식(01/001.mp3)으로 구성하면 나중에 마이크로파이썬 코드에서 특정 폴더의 특정 곡을 지정해 재생하기 훨씬 수월해집니다.

    4. 마이크로파이썬을 이용한 스마트 제어

    복잡한 라이브러리 설치 없이 UART 통신을 통해 8바이트의 간단한 명령어로 제어할 수 있습니다. 볼륨 조절, 특정 트랙 재생, 일시 정지 등의 기능을 uart.write() 함수 한 줄로 실행할 수 있어 코드가 매우 간결해집니다.

    5. mplayer.py : play(), stop(), set_volume()

  • 마이크로파이썬으로 구현하는 28BYJ-48 스텝 모터 정밀 구동법

    마이크로파이썬으로 구현하는 28BYJ-48 스텝 모터 정밀 구동법

    안녕하세요! 오늘은 작지만 강력한 ESP32-C3 Mini 보드를 사용해서 스텝모터를 돌려보겠습니다. 일반 아두이노보다 성능이 좋고 크기가 작아 실제 전시물 제작에 아주 유리한 보드죠.

    최근 제가 제작하고 있는 ‘음악 나오는 전시용 회전판(턴테이블)’ 프로젝트에서도 이 스텝모터가 핵심적인 역할을 담당하고 있는데요. 왜 일반 모터가 아닌 스텝모터를 사용했는지, 그 이유와 특징을 정리해 드립니다.

    1. 스텝모터란?

    일반적인 DC 모터는 전원을 연결하면 뱅글뱅글 계속 회전하지만, 스텝모터는 이름처럼 ‘스텝(Step, 단계)’을 밟듯이 딱 정해진 각도만큼만 움직이는 모터입니다.

    예를 들어, “90도만 움직여!” 혹은 “한 바퀴를 200번에 나눠서 움직여!”라는 명령을 아주 정확하게 수행할 수 있습니다.

    2. 스텝모터의 최대 장점

    • 정밀한 제어: 각도를 아주 미세하게 조절할 수 있어 로봇 팔, 3D 프린터, 그리고 제가 만든 회전판처럼 정확한 위치에 멈춰야 하는 장치에 필수입니다.
    • 강력한 홀딩 토크(Holding Torque): 특정 각도에서 멈춰 있을 때, 외부 힘에 의해 돌아가지 않도록 꽉 붙잡고 있는 힘이 강합니다.
    • 반복 정밀도: 같은 명령을 내리면 언제나 똑같은 위치로 돌아옵니다.

    3. 주요 활용 사례

    • 3D 프린터: 노즐을 0.1mm 단위로 움직일 때 사용됩니다.
    • CCTV 카메라: 원하는 방향으로 렌즈를 정확히 돌릴 때 쓰입니다.
    • 전시용 턴테이블: 일정한 속도로 회전하거나, 특정 제품 위치에서 잠시 멈추는 연출을 할 때 최적입니다.

    4. 사용법

    준비물

    • ESP32-C3 SuperMini (또는 Mini 보드)
    • 28BYJ-48 스텝모터
    • ULN2003 모터 드라이버
    • 점퍼 와이어

    28BYJ-48 스텝모터스텝모터를 제어할 때 ULN2003 드라이버를 사용하는데

    1. 전류 증폭 (강력한 근육 역할) ESP32-C3의 제어 신호는 너무 약해서 모터를 직접 돌릴 힘이 없습니다. 드라이버는 이 약한 신호를 받아 모터를 구동할 수 있는 큰 전류로 바꿔줍니다.
    2. 보드 보호 (방패 역할) 모터가 멈출 때 발생하는 고전압(역기전력)이 거꾸로 흘러 들어와 비싼 메인 보드가 타버리는 것을 방지합니다.
    3. 효율적인 전원 관리 보드는 3.3V 전압으로 신호만 보내고, 모터는 5V 이상의 전원을 따로 쓸 수 있게 해줌으로써 시스템의 안정성을 높여줍니다.

    ESP32-C3 SuperMini 보드의 GPIO 1~4번 핀을 사용합니다.

    ULN2003 드라이버ESP32-C3 GPIO
    IN1Pin 1
    IN2Pin 2
    IN3Pin 3
    IN4Pin 4
    VCC / GND5V / GND
    28BYJ-48 스텝모터ULN2003 드라이버 조합

    5. 사용 코드

    step.py set_run(speed) 함수