1. 오늘 한 것
① Linux 멀티스레드 아키텍처 구현
- pthread를 활용하여 메인 스레드(메뉴 UI)와 모니터 스레드(HW 감시) 완벽 분리.
- 전역 변수(공유 메모리)를 통한 실시간 상태 동기화.
C
// 예시 구조 (Linux C)
pthread_create(&monitor_thread, NULL, monitor_system, NULL);
show_main_menu(); // UI는 멈춤 없이 작동
② 자동 제어 및 채터링 방지 로직 (Arduino & C)
- 30도 이상 고온 감지 시 제어 명령 송신 (L, M).
- 상태 관리 플래그 및 '최소 10초 모터 가동 타이머' 적용으로 오작동 방지.
③ 자료구조 기반 로깅 및 데이터 보존 (File I/O)
- 경고 발생 시 malloc으로 연결 리스트(Linked List) 노드 생성.
- 프로그램 종료 시 warning_data.txt에 로그 자동 백업.
- 재시작 시 텍스트 파일 Load 하여 리스트 복구 기능 구현.
2. 직면했던 문제
- 센서 미세 오차로 인한 모터 무한 깜빡임(채터링) 현상
- 원인: 온도가 임계점(30.0도)과 29.9도 사이를 미세하게 오갈 때마다, 루프가 돌며 불필요한 On/Off 제어 명령을 중복 송신함.
- 해결: C언어 코드에 **'상태 관리 플래그'**를 도입해 현재 상태(켜짐/꺼짐)가 변할 때만 제어 명령을 1회 전송하도록 수정. 추가로 한 번 가동되면 **'최소 10초 이상 가동'**되도록 소프트웨어 타이머를 적용하여 하드웨어 안정성 확보.
- 하드웨어 스위치 플로팅(Floating) 현상
- 원인: 스위치를 누르지 않았음에도 핀에 걸리는 전압이 붕 떠서(Floating) 계속 0이 출력되거나 값이 흔들림.
- 해결: 회로에 복잡하게 저항을 추가하는 대신, 아두이노 코드에서 pinMode(pin, INPUT_PULLUP);을 선언하여 보드 내장 풀업 저항을 활성화. 이를 통해 기본 상태를 안정적으로 유지함.
3. 오늘 배운 핵심 개념
- OS 레벨 스레드 스케줄링(Multi-threading) 및 블로킹(Blocking) 현상 방지.
- 동적 메모리 할당(Linked List) 및 데이터 영속성(File I/O).
4. 현재 진행도
- 비동기 실시간 환경 모니터링 구축 완료.
- 하드웨어 제어 및 데이터 로깅 시스템 통합 완료.
5. 다음 목표
- 발표용 아키텍처 다이어그램 제작.
- 전체 시스템 시연 영상 촬영 및 발표 자료 완성.
'포트폴리오 > [IoT 기반 피지컬 AI 교육일지]' 카테고리의 다른 글
| [ C++ 네트워크 통신 기초 ] TCP/UDP 차이 및 바이트 오더(Endian) 변환 등 정리 (21일차 기록) (1) | 2026.03.11 |
|---|---|
| [ C언어 IoT 프로젝트 개발 ] #3 프로젝트 발표 및 시연 (20일차 기록) (0) | 2026.03.10 |
| [ C언어 IoT 프로젝트 개발 ] #1 센서 데이터 수집 및 UART 통신 (18일차 기록) (0) | 2026.03.10 |
| [ 17일차 기록 ] IoT 기초와 센서 실습 정리 (with. 아두이노) (0) | 2026.03.10 |
| [ 16일차 기록 ] 조립 PC 재고 관리 프로그램 개발기 #7 (최종 산출물 작성: 보고서 및 포트폴리오) (0) | 2026.03.03 |