라즈베리파이 스마트홈 시스템 - sunbang123/Graduation_Project GitHub Wiki
수정사항!
- 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 📅 일정계획
🛠 개발환경 - 기술스택 및 간단한 소개
-
🥧 Raspberry Pi (리눅스 기반)
- 역할: 스마트홈 시스템의 중심 제어 장치
- 운영체제: Raspberry Pi OS (리눅스 기반)
-
🐍 Python
- 역할: 센서 데이터 수집, 처리 및 액추에이터 제어
- 주요 라이브러리:
- RPi.GPIO: 소형 전구, 모션 센서 (PIR 센서) 제어
- pySmartPlug: 팬+필터, 스마트 플러그 제어
- Adafruit_DHT: USB-DHT 센서 데이터 수집
- pmsensor: 미세먼지 센서 데이터 수집
- Adafruit_CircuitPython_Soil_Moisture: 토양 수분 센서 데이터 수집
-
☁️ AWS (Amazon Web Services)
- 역할: 서버와 데이터베이스
- 사용 서비스: AWS EC2, AWS IoT, DynamoDB, S3
-
📱 클라이언트 애플리케이션 (모바일 또는 웹 앱)
- 개발 도구: AWS Amplify
- 역할: 웹 및 모바일 애플리케이션 개발 및 호스팅
🔄 시스템구성도
수정사항
- DynamoDB보다 MariaDB가 SQL이라서 유용함. 심지어 돈도 안듦.
- 근데, Node-RED에서 자체적으로 데이터를 저장하는 Context Store나 트랜잭션인 SQLite를 쓰면서 경량화하는게 더 좋아보임.
수정사항
브래드보드와 라즈베리파이
- 발열을 잡으려면?
- 브래드보드가 너무 작은데 어떡하지? PCB...
전등
- 구현계획: 현관등은 모션센서로 제어하고, 나머지 전등은 앱에서 제어함!!
공기청정기
- RGB LED 센서로 미세먼지 농도가 나쁜지 좋은지 색깔로 표시.
- 흡입팬 배출팬으로 쿨링 팬을 활용해서 아크릴 판 내부의 공기를 순환시켜줌!!
- 필터가 필요한데 HEPA필터 -> 일회용 마스크를 잘라서 사용하자.
- 릴레이 모듈은 팬의 전원을 제어하는 데 사용 -> 미세먼지가 일정 수준 이상으로 나빠질 때만 릴레이를 통해 팬을 켜고, 그 외의 경우에는 완전히 끄도록 설정
- 베이킹 파우더나 밀가루를 사용해서 미세먼지 시뮬레이션!!
냉방기 에어컨
- 온도가 높으면 작동하는 냉각 팬 선풍기로 공기를 시원하게!
난방기 보일러
- 온도가 낮으면 워터 펌프로 뜨거운 물을 배출함
화재감지 센서
- 불꽃 감지 센서로 화재를 감지하고, led 빨강을 켜서 화재경보
다용도 창문
- 기어 모터로 창문열고... 빗물이 감지되면 창문 안열리게! https://blog.naver.com/project307/221066718245
💡 구현기술
구성요소 | 기술/도구 | 설명 |
---|---|---|
하드웨어 | 🥧 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 문서 작성- 최종 프로젝트 발표 준비 |
🚧 잠재적 병목현상 및 해결방안
-
🌐 네트워크 대역폭 제한
- 문제: 다수의 IoT 기기가 동시에 데이터를 전송할 때 네트워크 혼잡 발생
- 해결방안: 로컬 네트워크 대역폭 업그레이드 또는 데이터 전송 우선순위 설정
-
🥧 라즈베리 파이 처리 능력 한계
- 문제: 많은 센서 데이터 처리 시 CPU 과부하 발생
- 해결방안: 클라우드로 일부 처리 작업 이동 또는 필요 시 더 강력한 하드웨어로 업그레이드
-
☁️ 클라우드 서비스 응답 지연
- 문제: AWS 서비스 응답 지연으로 실시간 제어 어려움
- 해결방안: 중요 기능의 로컬 처리 구현 또는 서버리스 아키텍처(예: AWS Lambda) 활용
📝 참고사항
- 🧠 복잡한 머신러닝 없이도 기본적인 '스마트' 기능 구현 가능
- 🔴 Node-RED의 시각적 프로그래밍 활용
- 📚 각 단계마다 팀 회의를 통해 진행 상황 검토 및 다음 단계 계획 수립