전체 글238 [편하게 살자] 에어컨 자동 제어 편 - IR 송신기 구성과 실제 에어컨 제어 이전 포스터의 `mock-ir` 어댑터를 GPIO18 기반 실제 송신기로 교체하고, 웹 UI에서 보낸 Carrier 명령으로 에어컨이 실제 동작하는 것까지 검증한 과정이다.제어에 쓰는 것은 수신기가 아니라 IR 송신기다.왜 GPIO에 모듈 DAT를 바로 연결하지 않았나사용한 IR 송신 모듈은 `VCC`, `GND`, `DAT` 세 핀이 있고 판매 자료에는 5V·38kHz용으로 표시돼 있었다. Raspberry Pi GPIO는 3.3V 로직이며 핀 하나로 IR LED의 순간 전류를 직접 감당하게 해서는 안 된다. 처음에는 `DAT`를 GPIO에 바로 연결하거나 5V 레벨 변환 IC를 쓰는 방안을 검토했다.그러나 모듈 내부 연결을 완전히 확인하지 못한 상태에서 가장 단순하고 안전하게 제어하기 위해P2N222.. 2026. 9. 4. [편하게 살자] 에어컨 자동 제어 편 - UI 구성과 IR 코드 연결 저번 포스터에서 얻은 Carrier 패킷을 화면 버튼에 직접 박아 넣지 않고, 공간·기기·장면을 중심으로 한 반응형 스마트홈 UI와 의미 기반 API로 연결한 과정이다.이 단계의 하드웨어 출력은 Mock이며, 실제 IR 송신은 다음 단계에서 활성화한다.에어컨 리모컨 화면이 아니라 스마트홈의 시작점에어컨 하나만 생각하면 전원과 온도 버튼만 있는 화면으로 충분하다.하지만 앞으로 조명, TV, 센서, ESP32-H2 기반 Zigbee 노드까지 추가할 계획이었다. 그래서 첫 화면의 중심을 제품 종류가 아닌 공간으로 정했다.홈├─ 빠른 장면: 집에서 · 외출 · 취침├─ 공간: 전체 · 거실 · 침실 · 사용자가 만든 공간└─ 공간 안의 기기 카드 원룸에서는 거실과 침실이 같은 공간일 수 있고, 큰집에서는 부엌.. 2026. 9. 3. [편하게 살자] 에어컨 자동 제어 편 - 리모컨 IR 신호 하이재킹 여기서 말하는 하이재킹은 내가 소유한 Carrier CS-A061GS 에어컨 리모컨의 적외선 신호를 수신기로 기록하고, 의미 있는 명령 데이터로 재구성한 과정이다.이 단계에서는 송신하지 않고 수신·분석·저장까지만 완성한다.왜 버튼 코드 하나만 복사하면 안 될까TV 리모컨처럼 버튼마다 짧은 고정 코드가 전송될 것으로 예상했지만 에어컨 리모컨은 달랐다.전원, 운전 모드, 희망 온도, 풍량 같은 현재 설정을 하나의 상태 프레임에 담아 보내는 방식이었다.따라서 `온도 올림` 버튼의 코드 하나를 저장하는 대신 다음 조건을 함께 기록해야 했다.전원 상태자동·냉방·제습·송풍 모드희망 온도자동·약·중·강 풍량풍향, 경제 운전, 쾌속 냉방, LED 같은 순간 명령목표 구조도 단순한 버튼 목록이 아니라 다음과 같이 잡았다.. 2026. 9. 2. [편하게 살자] 에어컨 자동 제어 편 - 개발 환경 구성 요즘 일에 치어 취미생활을 하지 못했다. 그래서 블로그도 오랜만에 작성해본다.요즘 AI가 판치는 만큼 나도 AI를 활용해 이 프로젝트를 진행했다. 편하게 살자 프로젝트요즘 여름,, 너무 더웠다. 그래서 항상 집에 돌아오면 에어컨을 튼다.근데 에어컨이 성능이 좋지 않아 미리 틀고 싶었지만,, 여긴 전세 집이라 에어컨을 내가 바꾸기도 뭐하다.그래서 그냥 내가 제어하기로 했다. 일전에 스마트홈 프로젝트를 진행하다 말았는데, Tuya를 사용했었다. 사실 end node는 제품사서 Tuya 플랫폼 이용해서 진행하면 매우 쉽다.그때는 라즈베리파이를 라우터 처럼 만들려고 했고, 그걸 토대로 중앙처리를 라즈베리파이에서 동시에 진행하게 만들려고 진행했던 프로젝튼데, 너무 비효율적이다. 심지어 라즈베리파이를 굳이 공유기로.. 2026. 9. 1. [통신] ArduinoOTA의 동작 많이 헷갈리는 지점은 “내가 업로드 버튼을 눌렀으니 PC → ESP32 단방향일 것” 이라는 직관이다. 하지만 ArduinoOTA의 실제 프로토콜은 그렇게 단순하지 않다. ESP32의 ArduinoOTA 라이브러리는 OTA용 UDP 포트를 열어 두고, PC 쪽의 espota.py는 먼저 그 포트로 초대 메시지를 보낸다. 이후 espota.py는 자기 자신을 TCP 서버로 띄우고, ESP32가 그 서버에 연결해 들어오면 그때 바이너리를 전송한다. 이 구조 때문에 Windows 방화벽에서 특히 인바운드 규칙이 자주 문제 된다.역할부터 정확히 정리하기ArduinoOTA에서 장치 역할은 상황에 따라 두 단계로 나뉜다.구간PCESP32초기 제어 구간OTA 업로드를 시작시키는 쪽(UDP 초대 메시지 전송)OTA.. 2026. 3. 22. [ESP32] FOTA - 1 이번 글에서는 OTA의 기본 개념을 먼저 정리하고, 그 안에서 FOTA와 SOTA를 어떻게 이해하면 되는지 구분해본다. 그리고 실제로 ESP32에서 LED 깜빡임 예제에 OTA를 붙여,펌웨어를 원격으로 바꿔보는 가장 작은 형태의 FOTA 실습을 정리하려고 한다. 코드와 설명은 아래 github 참고https://github.com/PCY00/OTA_TEST?tab=readme-ov-file GitHub - PCY00/OTA_TESTContribute to PCY00/OTA_TEST development by creating an account on GitHub.github.comOTA는 무엇인가OTA는 Over-The-Air의 약자다.말 그대로 공중 무선망을 통해 업데이트를 전달하는 방식이다. 중요한 것.. 2026. 3. 21. [Moter] DC Moter Control - Up to the EnCoder 이번에 모터 제어를 공부하면서 가장 중요하게 생각한 것은, 무작정 PID 코드부터 복붙해서 돌리는 것이 아니라정말 처음부터 하나씩 이해하면서 올라가는 방식으로 진행하는 것이었다. 사용한 구성은 다음과 같다.Arduino UnoTB6612FNG 모터 드라이버JGB37-520 기어드 DC 모터엔코더 내장형 모터모터 핀 구성: M1 GND C2 C1 VCC M2이 글에서는 실제로 내가 어떤 순서로 실습했고, 그 과정에서 무엇을 이해하게 되었는지 정리한다.왜 처음부터 PID를 하지 않았는가처음 모터 제어를 공부할 때 가장 흔히 하는 실수가, 인터넷에서 PID 코드를 바로 가져와서 돌려보는 것이다.그런데 이렇게 하면 코드가 돌아가더라도 왜 그렇게 동작하는지 잘 모르게 된다.예를 들어 PID를 하려면 적어도 아래가.. 2026. 3. 10. [일상] 청년버팀목 전세자금대출 + HF 전세보증보험 진행 후기 정리 이 글은 2025년 청년버팀목 전세자금대출을 실제로 진행했던 경험을 기준으로 정리한 과정 기록입니다.같은 상황에서 준비하시는 분들이 전체 흐름을 이해하는 데 도움이 되었으면 합니다.은행은 NH안양호계금융센터에서 진행했습니다.대출 당시 조건취업 후 약 3개월 재직 상태에서 진행했고, 기존 대출이나 연체 이력은 없었습니다.학생에서 바로 직장인이 된 일반적인 케이스였습니다.주거래 은행은 농협이었습니다.전세대출 일정2025.03 취업2025.04 집 탐색 시작2025.05.24 임대차 계약 체결 (계약금 5%)2025.05.25 주택도시기금 대출 신청2025.05.27 사전자산심사 적격2025.05.28 임대차 계약 신고2025.06.17 자산심사 적격2025.06.25 .. 2026. 2. 25. UART 실습 - 3 (ATmega328P + FT232) 지금까지 UART로 데이터를 출력하려면 UART_Transmit() 함수를 이용해 문자를 하나씩 전송했다.문자열 함수를 만들어도 결국 내부에서는 문자 단위 송신을 반복 호출해야 한다.테스트 몇 번 정도는 괜찮지만, 실제로 프로그램을 작성하다 보면 문제가 생긴다.센서값 확인상태 메시지 출력디버깅 로그 출력이런 상황에서 매번 문자열을 직접 구성하고 송신 함수를 호출하는 것은 상당히 번거롭다.그래서 사용하는 방법이 printf를 UART 출력으로 연결하는 방식이다.PC 프로그램에서 콘솔창에 출력하듯이, 마이크로컨트롤러에서는 UART 터미널 창에 출력되도록 만드는 것이다.우리가 실제로 바꾸려는 것printf를 “UART 함수로 바꾸는 것”이 아니다.정확히 말하면 printf가 데이터를 내보내는 통로를 바꾸는 작.. 2026. 2. 19. UART 실습 - 2 (ATmega328P + FT232) * 데이터 시트는 포스팅을 위해 microchip에 직접 이메일을 작성해 허가 받았습니다. 이전에는 UART 송신 위주로만 작성했으나, 이번에는 수신을 인터럽트(USART RX Complete) 로 처리한다.메인 루프가 다른 일을 수행하더라도 수신 데이터를 놓치지 않는 구조를 만든다.코드#define F_CPU 16000000UL#include #include #include #include char receiveString[100];uint8_t curIdx = 0;uint8_t dataReadyFlag = 0;void UART_Init(uint16_t baud){ uint16_t ubrr = (int16_t)(F_CPU / 16 / baud - 1); UBRR0H = (uint8_t)(ubrr >> .. 2026. 2. 18. [Raspberry Pi] Bookworm O에서 eth0 고정 IP 설정 라즈베리파이를 LAN 직결 환경에서 유지보수 포트로 사용하려고 eth0에 고정 IP를 설정하려다가 겪은 문제를 정리한다.결론부터 말하면:Bookworm에서는 /etc/dhcpcd.conf를 수정하면 안 된다.상황Raspberry Pi OS Bookworm (Lite)SSH로 접속 성공Wi-Fi(wlan0)는 DHCP로 정상 동작eth0를 192.168.0.20으로 고정하려고 함/etc/dhcpcd.conf 수정했지만 적용 안 됨ip a 보면 eth0에 IPv4 없음ping 안 됨왜 안 됐는가?과거 (Buster / Bullseye)네트워크 관리: dhcpcd고정 IP 설정: /etc/dhcpcd.conf현재 (Bookworm)네트워크 관리: NetworkManager설정 계층: netplan → Netw.. 2026. 2. 16. [UART] UART를 쉽게 이해하기 UART를 이해하기 전에, Hz부터 이야기해보자Hz는 “1초에 몇 번 반복되느냐”를 뜻한다.1Hz라면 1초에 한 번, 10Hz라면 1초에 열 번이다. ATmega328P는 보통 16MHz 클럭을 사용한다.이 말은 MCU 안에 있는 시계가 1초에 16,000,000번 똑딱거린다는 뜻이다.이걸 시간으로 바꿔보면, 1초 ÷ 16,000,000 = 약 62.5ns 즉, MCU 내부 시계는 62.5나노초마다 한 번씩 똑딱거린다고 생각하면 된다.중요한 점은 MCU가 “62.5ns”를 아는 건 아니고, 우리는 나중에 계산으로 그렇게 해석할 뿐이다.UART 통신에는 이 시계가 너무 빠르다UART 통신은 예를 들어 9600 baud 같은 속도로 동작한다.이건 1초에 약 9600비트만 보내면 된다는 뜻이다. 그런데 MCU.. 2026. 2. 15. 이전 1 2 3 4 ··· 20 다음