라즈베리파이 스마트홈 시스템 - sunbang123/Graduation_Project GitHub Wiki

venom

수정사항!

  • Node-RED 위주로 개발하자. 다발성 이벤트에 유리함.
  • Node-RED는 IoT 디바이스와 온라인 서비스를 연결하는 데 사용되는 흐름 기반 개발 도구입니다.

Node-RED는 주로 백엔드 로직과 IoT 관련 작업에 사용

근데 AWS가 필요할까?

  • 홈 시스템만 구축할거면 큰 서버가 필요없고, AWS의 필요성을 못느낄거같다.
  • HomeAssistant가 자동화에 더 필요하고 로직을 Node-RED로 짠다고 생각하자.
  • 불필요한 요소들을 제거하는게 프로그래밍에 중요함!!
  • 대부분 홈시스템은 로컬 저장으로 충분함.

홈어시스턴트를 쓰자.

  • 홈어시스턴트의 설정에서 PWA 옵션을 활성화해서 프로그레시브 웹 앱(PWA)을 만듦. 외부에서는 접근 불가능! -> 기본적으로 보안상 이유로 무단으로 외부접근 하면 큰일나. 스마트 '홈' 이니까! 대신에, QR코드로 디바이스에 프로그래시브 웹앱(PWA)을 설치. QR 코드는 PWA의 URL을 포함 사용자가 QR코드를 스캔하면 PWA를 홈 스크린에 추가할 수 있으므로 로컬 네트워크 내에서만 작동한다고 볼 수 있음.

  • 홈어시스턴트의 PWA옵션을 활성화하면, 오프라인 기능, 푸시 알림, 홈 스크린 아이콘 등의 기능을 제공

접속방법

  • Raspberry Pi OS를 사용하는 방법: OS 부팅 후 터미널에서 홈어시스턴트를 설치합니다. Docker를 이용
  • http://homeassistant.local:8123

참고영상

변경사항

  • Docker 말고 imger를 써서 라즈베리파이 4를 홈어시스턴트 전용으로 씀.

🏠 Raspberry Pi 스마트 홈 프로젝트

📚 목차

섹션 내용
1 🛠 개발환경 - 기술스택 및 간단한 소개
2 🔄 시스템구성도
3 💡 구현기술
4 🎯 구현결과
5 🌟 기대효과
6 👥 역할분담
7 📅 일정계획

🛠 개발환경 - 기술스택 및 간단한 소개

  1. 🥧 Raspberry Pi (리눅스 기반)

    • 역할: 스마트홈 시스템의 중심 제어 장치
    • 운영체제: Raspberry Pi OS (리눅스 기반)
  2. 🐍 Python

    • 역할: 센서 데이터 수집, 처리 및 액추에이터 제어
    • 주요 라이브러리:
      • RPi.GPIO: 소형 전구, 모션 센서 (PIR 센서) 제어
      • pySmartPlug: 팬+필터, 스마트 플러그 제어
      • Adafruit_DHT: USB-DHT 센서 데이터 수집
      • pmsensor: 미세먼지 센서 데이터 수집
      • Adafruit_CircuitPython_Soil_Moisture: 토양 수분 센서 데이터 수집
  3. ☁️ AWS (Amazon Web Services)

    • 역할: 서버와 데이터베이스
    • 사용 서비스: AWS EC2, AWS IoT, DynamoDB, S3
  4. 📱 클라이언트 애플리케이션 (모바일 또는 웹 앱)

    • 개발 도구: AWS Amplify
    • 역할: 웹 및 모바일 애플리케이션 개발 및 호스팅

🔄 시스템구성도

수정사항

  • DynamoDB보다 MariaDB가 SQL이라서 유용함. 심지어 돈도 안듦.
  • 근데, Node-RED에서 자체적으로 데이터를 저장하는 Context Store나 트랜잭션인 SQLite를 쓰면서 경량화하는게 더 좋아보임.

수정사항

브래드보드와 라즈베리파이
  • 발열을 잡으려면?
  • 브래드보드가 너무 작은데 어떡하지? PCB...
전등
공기청정기
  • RGB LED 센서로 미세먼지 농도가 나쁜지 좋은지 색깔로 표시.
  • 흡입팬 배출팬으로 쿨링 팬을 활용해서 아크릴 판 내부의 공기를 순환시켜줌!!
  • 필터가 필요한데 HEPA필터 -> 일회용 마스크를 잘라서 사용하자.
  • 릴레이 모듈은 팬의 전원을 제어하는 데 사용 -> 미세먼지가 일정 수준 이상으로 나빠질 때만 릴레이를 통해 팬을 켜고, 그 외의 경우에는 완전히 끄도록 설정
  • 베이킹 파우더나 밀가루를 사용해서 미세먼지 시뮬레이션!!
냉방기 에어컨
  • 온도가 높으면 작동하는 냉각 팬 선풍기로 공기를 시원하게!
난방기 보일러
  • 온도가 낮으면 워터 펌프로 뜨거운 물을 배출함
화재감지 센서
  • 불꽃 감지 센서로 화재를 감지하고, led 빨강을 켜서 화재경보
다용도 창문

💡 구현기술

구성요소 기술/도구 설명
하드웨어 🥧 Raspberry Pi 중앙 제어 및 처리 유닛
소프트웨어 🐳 Docker 서비스 배포 및 관리
통신 프로토콜 📡 MQTT IoT 기기 간 통신 프로토콜
프로그래밍 언어 🐍 Python 센서 및 Home Assistant 설정, 자동화 구성, 데이터 처리
오픈소스 🔴 Node-Red 시각적 프로그래밍 및 자동화 시나리오 설정
🏠 Home Assistant YML 형식의 자동화 구성
☁️ AWS IoT AWS IoT Core의 규칙 엔진 사용
서버 ☁️ AWS 웹 서버 운영

🔌 센서 및 액추에이터

  • 센서:
    • 🌡️ 온/습도 센서: 실내환경 모니터링 및 조절
    • 🚶 모션 센서: 움직임 감지 기반 조명 및 보안 시스템 제어
    • 😷 미세먼지 센서: 공기질 모니터링 및 공기청정기 자동 제어
    • 🌱 토양 수분 센서: 화분 관리 자동화
  • 액추에이터:
    • 💡 조명: 소형 전구
    • 🌬️ 공기청정기: 팬+필터 모형 (스마트 플러그 연동)

🤖 자동화 및 데이터 관리

  • 📜 규칙 기반 자동화: 사용자 정의 자동화 시나리오 실행
  • 🔴 Node-Red, 🏠 Home Assistant, ☁️ AWS IoT: 대시보드, UI 구축 및 데이터 흐름 관리
  • 🌐 Web App: API 데이터 수신 및 AWS Amplify를 이용한 웹 앱 제작

🎯 구현결과

(향후 업데이트 예정)

🌟 기대효과

  • 🏢 공간 활용 최적화
  • 🖥️ 사용자 친화적 인터페이스 (Web App)
  • 🔄 자동화된 환경 제어

👥 역할 분담

📅 협업 방식

항목 내용
🗓️ 정기 회의 매주 월요일 또는 수요일
💬 소통 도구 Zoom 또는 Discord
단계 김선영 (팀장) 송시은 (팀원)
📝 기획 • 시스템 요구사항 정의• 기술 스택 선정 • 사용자 요구 조사 및 분석
💻 개발 • 라즈베리파이 설정• 스마트홈 기능 개발• 센서/액추에이터 통합• 시스템 테스트 및 버그 수정 • 라즈베리파이 실습• 스마트홈 기능 구현 보조• 테스트 시나리오 작성 및 결과 정리
🎨 디자인 • 시스템(web app) UI/UX 설계 • 시스템 UI/UX 설계
📊 보고서 • 보고서 작성 보조 • 최종 보고서 및 발표 자료 준비• 발표 진행

📅 스마트홈 프로젝트 일정표 (2024년 10월 - 12월)

주차 날짜 태스크
1-2 10/1 - 10/14 🔧 프로토타입 구현- Raspberry Pi 실습 구현- Node-RED 플로우 구현- Home Assistant 연동
3-4 10/15 - 10/20 📊 사용자 행동 패턴 학습 - 데이터 수집- 센서 데이터 수집- 사용자 입력 및 시간 데이터 기록
5-6 10/21 - 11/4 🥧 라즈베리 파이 센서 데이터 전송 구현- 센서 연결 및 데이터 수집 코드 작성- MQTT 데이터 전송 시스템 구축- AWS IoT Core 연동
7-8 11/4 - 11/17 ☁️ AWS 서비스 구성- AWS IoT Core 규칙 설정- DynamoDB 테이블 생성 및 데이터 저장 로직 구현- Lambda 함수 구현
9-10 11/17 - 12/1 📱 모바일/웹 앱 개발- AWS Amplify 프로젝트 설정- UI/UX 디자인 및 구현- AWS 서비스 연동- 사용자 인증 및 권한 관리 구현
11 12/1 - 12/7 🧪 테스트 및 디버깅- 단위 테스트 및 통합 테스트- 실제 환경 장기 실행 테스트
12 12/7 - 12/13 📈 최적화 및 개선- 성능 분석 및 병목 현상 해결- 교수님 피드백 반영- 추가 기능 구현
13 12/13 - 12/20 📖 문서화 및 프로젝트 마무리- 사용자 매뉴얼 작성- 기술 문서 및 API 문서 작성- 최종 프로젝트 발표 준비

🚧 잠재적 병목현상 및 해결방안

  1. 🌐 네트워크 대역폭 제한

    • 문제: 다수의 IoT 기기가 동시에 데이터를 전송할 때 네트워크 혼잡 발생
    • 해결방안: 로컬 네트워크 대역폭 업그레이드 또는 데이터 전송 우선순위 설정
  2. 🥧 라즈베리 파이 처리 능력 한계

    • 문제: 많은 센서 데이터 처리 시 CPU 과부하 발생
    • 해결방안: 클라우드로 일부 처리 작업 이동 또는 필요 시 더 강력한 하드웨어로 업그레이드
  3. ☁️ 클라우드 서비스 응답 지연

    • 문제: AWS 서비스 응답 지연으로 실시간 제어 어려움
    • 해결방안: 중요 기능의 로컬 처리 구현 또는 서버리스 아키텍처(예: AWS Lambda) 활용

📝 참고사항

  • 🧠 복잡한 머신러닝 없이도 기본적인 '스마트' 기능 구현 가능
  • 🔴 Node-RED의 시각적 프로그래밍 활용
  • 📚 각 단계마다 팀 회의를 통해 진행 상황 검토 및 다음 단계 계획 수립