산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Raspberry Pi 2 및 Windows 10 IoT를 사용한 홈 자동화

구성품 및 소모품

Arduino UNO
자동화하려는 각 방에 대해 별도의 Arduino UNO를 가져오세요.
× 1
라즈베리 파이 2 모델 B
× 1
점퍼 와이어(일반)
× 1
브레드보드(일반)
× 1
LDR(Light Dependent Resistor)
LDR은 조명 강도에 따라 다른 전압 판독값을 제공합니다.
× 1
PIR 모션 센서(일반)
수동적 IR은 사람의 존재를 감지합니다.
× 1
릴레이(일반)
어떤 종류의 릴레이 모듈도 사용할 수 있습니다. 릴레이 수는 제어하려는 장치의 수에 따라 다릅니다.[NoOfDevices =NoOfRelay]
× 1
지멘스 접촉기(3TF32 00-0AP0)
접촉기는 AC3:16A 415VAC의 최대 정격 워터 펌프를 제어하는 ​​데 사용됩니다.Before 접촉기를 구입하려면 워터 펌프의 등급과 해당하는 경우 종속 항목을 확인하십시오. "3TF32 00-AP0"은 최대 16A 및 415VAC 워터 펌프를 구동할 수 있습니다. 이 접촉기는 내장 코일을 사용하여 작동합니다. 코일 정격은 (3TF32 00-0AP0에만 해당) 250VAC입니다.
× 1
소형 회로 차단기(1P C16A)
MCB는 전기적 결함 및 과부하로부터 워터 펌프를 보호하기 위해 접촉기 앞에 부착됩니다. 여기서 MCB에는 특정 등급도 있습니다. 우리 접촉기는 16A이므로 16A MCB를 사용했습니다. 편의에 따라 수정하시면 됩니다.
× 1

앱 및 온라인 서비스

Arduino IDE
Arduino 펌웨어를 작성합니다. 기사에 설명이 있습니다.
Microsoft Visual Studio 2015
커뮤니티 에디션은 최대 5명의 사용자에게 무료로 제공됩니다. 그러나 Visual Studio 2015의 라이선스 사본을 구입했다면 그 이상을 사용할 수 있습니다.
Microsoft Windows 10 IoT Core
기본 OS로서 Arduino를 통해 장치를 제어하고 관리 콘솔을 제공합니다.

이 프로젝트 정보

오늘날의 시대에 기술은 인간의 삶을 향상시킬 수 있습니다. 기술은 십 년씩 발전하고 있습니다. 자동화는 이전에는 공상과학 소설이었지만 오늘날에는 그렇지 않습니다. 최신 기술을 집과 결합하여 멋진 집을 지을 수 있습니다. Raspberry Pi와 Windows 10을 사용하여 가정용 기기를 자동으로 작동할 수 있는 홈 자동화 시스템을 구축할 수 있습니다.

시작하기

프로젝트를 시작하기 전에 먼저 기본 사항을 이해합시다. 다음 이미지(전체 구성)를 고려하십시오.

회의실 구성

이제 방 시나리오를 고려할 때 Arduino UNO는 장치를 제어하고 센서 데이터를 읽습니다. 주기적으로 Raspberry Pi는 Arduino UNO에서 수집한 센서 데이터를 요청합니다. "Room Architecture" 그림은 Arduino UNO가 장치 및 센서와 연결되는 방식을 보여줍니다. 각 방에는 여러 제어 가능한 장치(예:조명, 팬, 벽면 소켓 등), 하나의 PassiveIR(방에 사람의 존재 감지), 하나의 온도 센서(실온 수집을 위한 LM35) 및 LDR( 방 창문 근처의 빛의 세기를 감지하기 위해).

장치 주소 매핑

가장 중요한 부분은 장치를 식별하는 방법입니다. 간단 해. 방 번호와 기기 번호를 조합하여 기기 주소를 만들어 드립니다.

예:

그래서 지금까지 전체 구성을 알고 있습니다. 요컨대, Raspberry Pi는 기본 컨트롤러 역할을 합니다. 각 방에는 Raspberry Pi의 슬레이브 역할을 하는 Arduino UNO가 하나씩 있습니다. Raspberry Pi와 Arduino UNO 간의 통신은 I2C를 사용하여 수행됩니다.

회로도

더 쉽게 만들기 위해 첫 번째 방에 대한 구현을 시작하겠습니다. 구성 요소를 올바른 방식으로 연결하려면 회로도를 참조하십시오.

I2C 버스 스트라이프: 두 개 이상의 Arduino를 연결하려면 아래와 같이 I2C 버스 스트라이프를 사용할 수 있습니다.

릴레이 보드와 장치를 연결하는 방법은 무엇입니까?

모두 하드웨어 쪽에서 수행됩니다. 이제 소프트웨어를 구축할 때입니다.

소프트웨어

우리 프로젝트는 Raspberry Pi 2와 Arduino UNO로 구성되어 있습니다. Visual Studio 2015에서 개발한 Raspberry Pi 2 소프트웨어입니다. 독자는 Visual Studio 2015에서 Raspberry Pi 2에 대한 프로젝트 생성을 알고 있다고 가정합니다. 또한 사용자가 Arduino 프레임워크, Visual C# 및 Windows Universal XAML에 대한 중급 지식을 가지고 있다고 가정합니다.

다음과 같은 형태의 소프트웨어를 이해합시다:

<울>
  • 프로토콜(Raspberry Pi 2와 Arduino의 대화 방식)
  • <울>
  • 클래스 구조(Raspberry Pi 2가 이러한 복잡한 장치와 공간을 유지하는 방법)
  • <울>
  • 사용자 인터페이스(와이어 프레임)
  • 프로토콜(Raspberry Pi 2와 Arduino가 I2C를 통해 통신하는 방법)

    더 진행하기 전에 먼저 Raspberry Pi와 Arduino가 대화하는 방식을 결정하겠습니다. 신뢰할 수 있는 프로토콜을 만들기 위해서는 먼저 통신에 대한 명확한 목표 또는 목표가 있어야 합니다. 이 프로젝트를 고려한 목표는 다음과 같습니다.

    <울>
  • 센서 읽기
  • <울>
  • 기기 상태 읽기
  • <울>
  • 기기 상태 설정
  • 먼저 프로토콜 정의를 시작하겠습니다. 프로토콜은 버스를 통해 통신하기 위한 규칙을 정의합니다. 프로토콜은 바이트 시퀀스에 불과합니다.

    바이트를 보내고 받기 위한 프로토콜을 정의했습니다. 송신 바이트는 3바이트, 수신 바이트 배열은 14바이트로 고정되어 있습니다.

    이 프로젝트에 대해 정의된 프로토콜을 이해하려면 다음 회로도를 참조하십시오('X'는 임의의 값 또는 '0'을 나타내며, 통신 중에는 무시됨).

    'I2C_Helper'라는 클래스에는 PRi2의 유니버설 앱 프로젝트에서 프로토콜 구현이 포함되어 있습니다. 이 클래스는 유니버설 Windows 프로젝트에서 사용할 수 있습니다. 열기:솔루션 탐색기> 라이브러리> 통신 폴더로 이동합니다. 아두이노 측에서는 I2C 라이브러리를 이해하기 쉽습니다.

    이제 센서, 장치의 상태와 값을 제공하고 장치 상태를 설정할 수 있는 접근성을 제공할 수 있는 적절한 통신 방식을 정의했습니다.

    클래스 구조(Raspberry Pi 2가 객체를 유지하는 방법)

    먼저 논의한 바와 같이 이 프로젝트는 집 전체를 고려했습니다. 집은 여러 개의 방으로 구성되어 있고 방은 여러 장치로 구성되어 있습니다. 따라서 이러한 구성의 OOP 구조는 다음과 같습니다.

    기본 클래스 "Home"은 방의 일반 목록(List)과 같은 여러 방 개체로 구성됩니다. Home 클래스는 나중에 사용할 수 있도록 Pi에 홈 개체를 로드하고 저장하는 정적 메서드를 제공합니다.

    Room은 장치의 일반 목록(List)인 장치와 모든 센서를 하나로 캡슐화하는 센서 구조로 구성됩니다.

    장치는 프로토콜 모드 - 2를 사용하여 켜고 끄는 기능과 세부 사항으로 구성됩니다. AmbientLight, PassiveIR 및 Temperature 클래스는 방의 환경 데이터에 대한 액세스를 제공합니다. 방 개체는 센서 데이터를 유지하고 프로토콜 모드 - 0을 사용하여 주기적으로 새로 고칩니다.

    사용자 인터페이스

    모든 응용 프로그램은 사용자 친화적이어야 합니다. 사용자 친화적인 응용 프로그램을 만들려면 와이어 프레임으로 시작하십시오. 자신의 응용 프로그램을 사용하고 주요 목표와 최종 사용자가 가장 쉽게 사용할 수 있도록 통합하는 방법을 알아낸다고 가정합니다.

    이 애플리케이션의 시나리오에서 우리의 주요 목표는 다음과 같습니다.

    <울>
  • 객실 관리
  • <울>
  • 기기 관리
  • <울>
  • GSM 커뮤니케이션, 인터넷 커뮤니케이션 등의 외부 서비스
  • 이를 위해 다음과 같이 문제를 나누었습니다.

    <울>
  • 홈 페이지:기본 기기 상태 정보, 날짜-시간 및 잠금 제공
  • <울>
  • 즐겨찾는 기기:즐겨찾는 기기에 직접 액세스
  • <울>
  • 회의실 페이지:구성된 회의실 및 해당 장치에 대한 액세스를 제공합니다.
  • <울>
  • 일반적인 물 장치:물 펌프 및 간헐천
  • <울>
  • 설정/구성:회의실 및 기기 관리 제공
  • 와이어 프레임:

    와이어 프레임을 기반으로 다음과 같은 UI를 개발했습니다. 전체 소스 코드를 다운로드할 수 있습니다. 기사 말미에 다운로드 링크가 제공됩니다.

    그래서 이미 UI를 개발했습니다. 필요에 맞게 수정할 수 있기를 바랍니다. 도움이 필요하면 언제든지 댓글을 남겨주세요.

    어떻게 구성하나요?

    나는 이 소프트웨어를 가능한 한 쉽게 만들려고 노력했다. 사소한 구성으로 이 Raspberry Pi 2를 사용하여 장치를 직접 작동할 수 있습니다. 단계별 구성은 다음과 같습니다.

    이 앱을 사용하여 물 펌프와 간헐천을 어떻게 제어합니까?

    장치를 추가하는 것과 같은 방법으로 수중 펌프와 간헐천을 연결할 수 있습니다. 그러나 수중 펌프나 간헐천을 릴레이 보드에 직접 연결하여 전원을 켤 수는 없습니다. 릴레이 보드를 폭발시킬 뿐만 아니라 위험합니다.

    수중펌프나 간헐천을 작동시키기 위해서는 수중펌프나 간헐천을 접촉기에 연결하고 접촉기의 코일을 릴레이 보드에 연결하십시오. 따라서 이제 장치를 작동하면 릴레이가 접촉기의 코일을 활성화하여 펌프 또는 간헐천이 시작/정지합니다. 접촉기를 구입하기 전에 코일 정격과 접촉기의 정격을 확인하십시오. 접촉기는 매우 다양합니다. 따라서 워터 펌프의 등급으로 확인하십시오. 워터 펌프의 정격보다 약간 높은 정격의 접촉기를 구입하는 것이 좋습니다.

    이 솔루션을 Raspberry Pi 2에 배포하려면 어떻게 해야 합니까?

    이 링크를 참조하여 배포 프로세스를 이해할 수 있습니다.

    이 앱을 시작 앱으로 어떻게 등록합니까?

    많은 애호가는 Raspberry Pi 2가 부팅된 직후에 응용 프로그램이 시작되기를 원합니다. 그렇게 하려면 내 기사를 읽어보세요. Windows 10 IoT Core:시작 앱 설정

    알려진 문제

    Arduino 부팅

    Arduino가 부팅되면 D13 핀이 깜박입니다. D13에 릴레이 핀을 연결하지 않는 것이 좋습니다. Arduino가 부팅되거나 재부팅될 때 D13이 한 번 깜박이고 릴레이(D13을 통해 제어됨)와 연결된 장치가 있으면 깜박이기 때문입니다.

    해결책: 두 가지 옵션이 있습니다. 첫 번째 옵션은 D13과 실제로 연결하지 않는 것입니다. 두 번째는 조금 복잡합니다. 부팅하는 동안 D13을 사용하지 않는 Aruino의 OptiBoot 펌웨어를 다시 작성하고 해당 부트로더를 Arduino에 구울 수 있습니다.

    시계 문제

    Raspberry Pi 2에는 온보드 실시간 클록 칩이 없습니다. 따라서 정전 또는 새로 부팅한 후 시간을 유지할 수 없습니다. 따라서 외부 RTC를 연결하고 날짜 시간을 유지하도록 프로그래밍해야 합니다.

    해결책 :NTP를 사용할 수 있지만 인터넷 연결이 필요하거나 Arduino조차도 부팅 시 날짜 시간에 대한 RTC 및 Raspberry Pi 요청을 처리할 수 있습니다. RPi 2에 외부 RTC를 직접 부착하는 것도 좋습니다.

    디버깅 문제

    C#에서 유니버설 앱을 개발하는 동안 많은 문제에 직면했습니다. 유니버설 앱은 WinRT의 상위 집합이므로 수행해야 하는 비동기 작업이 너무 많습니다. 비동기 작업에서 오류가 발생하면 해결해야 하는 골칫거리가 됩니다. 예외나 오류가 발생할 때마다 대부분 다음과 같은 화면에 직면했습니다.

    오류가 발생하기 쉬운 줄, 프로그래머에게 친숙한 메시지, 아무 것도 없습니다. 오류의 원인을 찾으려면 너무 많은 중단점을 배치해야 합니다. 디버깅을 하다보면 가끔 유니버셜 앱이 예고 없이 종료되고 갑자기 내 감시창이 무용지물이 되는 경우가 있습니다. 동작의 원인은 이 링크에 설명되어 있습니다.

    해결책 :오류가 발생하기 쉬운 줄 앞에 중단점을 놓습니다.

    간단히 말해서 (이 기사가 게시된 동안) 현재 유니버설 앱은 훌륭하지만 기존 Windows 애플리케이션과 같은 디버깅 기능이 부족합니다.

    미래

    기능, 새로운 아이디어 또는 기존의 한계를 극복하는 데 제한이 없습니다. 그러나 모든 기능을 한 번에 추가하는 것은 불가능합니다. 이번 릴리스에서 이 기사를 통해 Raspberry Pi 2와 Windows IoT의 진정한 힘을 이해할 수 있습니다. Windows Universal XAML은 Windows 10 IoT를 위한 훌륭한 GUI 프레임워크이며 Raspberry Pi 2에는 우수한 그래픽 프로세서가 탑재되어 있습니다. 이 두 가지를 결합하여 놀라운 모양의 GUI 솔루션을 만들 수 있습니다. 또한 Raspberry Pi 2에는 900MHz 쿼드 코어 CPU가 있어 다중 스레드(UWP에서 작업) 솔루션에 매우 적합합니다. 임베디드 및 소프트웨어 시스템(예:I2C 버스 통신, 기기 작동 방법, 맞춤형 프로토콜 설계, 실제 응용 프로그램 및 와이어 프레임을 위한 OOP 설계)의 기초를 배우고자 하는 사람들을 위한 기초에서 중급 프로젝트입니다.

    앞으로 I2C 버스 대신 RadioFrequency 또는 InfraRed를 사용하여 원격 장치를 통해 통신하는 기능을 추가할 수 있습니다. Azure를 사용하는 웹 관리 포털은 모바일 장치에 통합될 수 있습니다. 또한 이벤트 기반 작업, RTC 칩과의 시간 지정 작업과 같은 실제 자동화가 통합됩니다. 예를 들어 저녁 7시에 뒤뜰 조명을 켭니다. 오후 10시에 다시 끄십시오. 이벤트 기반의 좋은 예는 주변 조명 강도가 특정 강도 이하로 감소할 때 정원 조명을 켜는 것입니다. 따라서 Raspberry Pi 2용 이 새로운 Windows 10 IoT Core 플랫폼에는 제한이 없습니다.

    행운을 빕니다.

    도움이나 질문이 있으시면 언제든지 문의하십시오.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 아두이노 스케치
  • Arduino 스케치C/C++
    /* Arduino Sketch v0.4 이 스케치는 "Raspberry Pi 2 및 Window 10 IoT를 사용한 홈 오토메이션"용으로 작성되었습니다. https://www.hackster.io/AnuragVasanwala/home-automation 이 스케치는 테스트되었습니다. Atmega328p에서만. 이 스케치는 Windows 10 IoT Core를 실행하는 Raspberry Pi 2에서 운영하는 I2C 버스에서 Arduino 장치를 슬레이브 장치로 준비합니다. 목표:+ 주기적으로 센서 데이터 수집(기능:루프) + OnReceive, 3바이트 모드 명령을 수집하고 이를 기반으로 작업을 수행합니다. (기능:ReceiveData) + OnRequest, OnReceive에서 선택한 모드에 따라 14바이트 응답 배열을 보냅니다. (기능:SendData) 이 스케치는 어떠한 보증도 없이 있는 그대로 제공됩니다. 개인용은 물론 상업용으로도 사용하실 수 있습니다. 나는 이 스케치로 인한 데이터 손실이나 부상에 대해 책임을 지지 않습니다.*/#include  #define _DEBUG_/* Arduino의 I2C 슬레이브 주소 */#define SLAVE_ADDRESS 0x40/* PIN DECLARATION */int Pin_AmbientLight_LDR =A0;int Pin_PassiveIR =2;int Pin_Temperature =A1;/* 전역 변수 */volatile short Value_AmbientLight_LDR, Value_Temperature;volatile bool Value_PassiveIR;/* 프로토콜 변수 */byte Mode, Pin, Value;byte Response[14];void setup() { // 핀 초기화 pinMode(Pin_AmbientLight_LDR, INPUT); 핀모드(핀_패시브IR, 입력); 핀모드(핀_온도, 입력); 핀모드(0, 출력); 핀모드(1, 출력); 핀모드(3, 출력); 핀모드(4, 출력); 핀모드(5, 출력); 핀모드(6, 출력); 핀모드(7, 출력); 핀모드(8, 출력); 핀모드(9, 출력); 핀모드(10, 출력); 핀모드(11, 출력); 핀모드(12, 출력); 핀모드(13, 출력); 핀모드(A2, 출력); pinMode(A3, OUTPUT);#ifdef _DEBUG_ Serial.begin(9600);#endif // 'SLAVE_ADDRESS' 주소에서 I2C 슬레이브 초기화 Wire.begin(SLAVE_ADDRESS); Wire.onRequest(데이터 보내기); Wire.onReceive(ReceiveData);}void loop(){ // LDR 읽기 // Arduino는 10비트 아날로그 읽기를 지원합니다. // 따라서 8비트로 변환해야 합니다. Value_AmbientLight_LDR =analogRead(Pin_AmbientLight_LDR); Value_AmbientLight_LDR =지도(값_AmbientLight_LDR, 0, 1023, 0, 255); // PassiveIR 값 읽기 Value_PassiveIR =(digitalRead(Pin_PassiveIR) ==HIGH) ? 허위 사실; // 온도 센서를 읽고 전압을 섭씨로 변환 Value_Temperature =(short)((float)(analogRead(Pin_Temperature) * 0.48828125)); // 100ms 기다림 delay(100);}// I2C 수신 Datavoid ReceiveData(int byteCount){ // Protocol Mode Mode인 첫 번째 바이트 읽기 =Wire.read(); // Pin인 두 번째 바이트를 읽습니다. 모드 2에만 유효 핀 =Wire.read(); // Pin-Value인 세 번째 바이트를 읽습니다. 모드 2에만 유효 값 =Wire.read(); // 모드 2가 수신되면 지정된 핀에 신호를 보냅니다. if (Mode ==2) { digitalWrite(Pin, Value); }#ifdef _DEBUG_ Serial.print(모드); Serial.print(" "); Serial.print(핀); Serial.print(" "); Serial.println(Value);#endif}void SendData(){ switch (Mode) { case 0:// 모드:센서 응답 읽기[0] =(byte)Value_AmbientLight_LDR; // Value_PassiveIR은 부울이므로 바이트로 변환해야 합니다. Response[1] =(byte)((Value_PassiveIR ==true) ? 1 :0); // Response[2] 바이트는 온도에 대한 Sign 바이트입니다. // 0 - -ve 온도 // 1 - +ve 온도 Response[2] =(byte)((Value_Temperature <0) ? 0 :1); Serial.println(값_온도); // -ve 온도는 바이트 단위로 보낼 수 없습니다. +ve에 해당하는 Response[3] =(byte)((Value_Temperature <0) ? (Value_Temperature*(-1)) :Value_Temperature); 부서지다; case 1:// 모드:장치 상태 읽기 Response[0] =(digitalRead(0) ==HIGH) ? 1:0; 응답[1] =(digitalRead(1) ==HIGH) ? 1:0; 응답[2] =(digitalRead(3) ==높음) ? 1:0; 응답[3] =(digitalRead(4) ==높음) ? 1:0; 응답[4] =(digitalRead(5) ==HIGH) ? 1:0; 응답[5] =(digitalRead(6) ==높음) ? 1:0; 응답[6] =(digitalRead(7) ==HIGH) ? 1:0; 응답[7] =(digitalRead(8) ==HIGH) ? 1:0; 응답[8] =(digitalRead(9) ==HIGH) ? 1:0; 응답[9] =(digitalRead(10) ==HIGH) ? 1:0; 응답[10] =(digitalRead(11) ==높음) ? 1:0; 응답[11] =(digitalRead(12) ==HIGH) ? 1:0; 응답[12] =(digitalRead(A2) ==HIGH) ? 1:0; 응답[13] =(digitalRead(A3) ==HIGH) ? 1:0; 부서지다; case 2:// 모드:장치 상태 설정 Response[0] =(digitalRead(Pin) ==HIGH) ? 1:0; 부서지다; 기본값:중단; } // 와이어 백 응답 Wire.write(Response, 14);}
    Raspberry Pi 2(Windows 전용 앱) 소프트웨어
    https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-

    회로도

    버스에 고유한 I2C 슬레이브 주소를 가진 개별 Arduino를 연결하여 여러 방을 추가할 수 있습니다. 전체 회로도가 포함된 Fritzing 파일. 홈%20Automation%20Schematic%20-%20Anurag%20S%20Vasanwala.fzz

    제조공정

    1. Python 및 Raspberry Pi 온도 센서
    2. Sensorflare 및 RaspberryPi가 포함된 433MHz 스마트 홈 컨트롤러
    3. Raspberry Pi 및 Twilio를 사용한 음성 및 SMS 지원 광 센서
    4. Raspberry Pi를 사용하여 집 온도 모니터링
    5. RASPBERRY PI 홈 자동화
    6. Raspberry Pi 2의 Windows 10 IoT Core – Adafruit 센서 데이터
    7. Windows 10 IoT 코어 및 SHT15
    8. Windows 10 IoT Core for Raspberry Pi 3 Model B+
    9. KINECT 및 RASPBERRY PI를 사용한 SONBI 로봇 인간 탐지
    10. 공급망의 자동화 및 IoT:다음은?