Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Компоненты и материалы

Компонент Количество Примечание
Arduino UNO 1 на комнату На каждую автоматизируемую комнату свой Arduino UNO
Raspberry Pi 2 Model B 1 Центральный контроллер
Перемышки (набор) 1
Бредборд 1
Фоторезистор (LDR) 1 на комнату Измеряет освещенность у окна
PIR-датчик движения 1 на комнату Обнаружение присутствия человека
Релейный модуль по числу устройств Количество реле = количество управляемых приборов
Магнитный пускатель Siemens 3TF32 00-0AP0 1 Для управления водяным насосом до 16А 415В AC3. Катушка 250В AC
Автоматический выключатель 1P C16A (MCB) 1 Защита насоса от перегрузок. Рейтинг по контактору

Программное обеспечение и сервисы

О проекте

В современную эпоху технологии способны улучшить качество жизни. Автоматизация, некогда научная фантастика, стала реальностью. Сочетая Raspberry Pi и Windows 10, можно построить систему домашней автоматизации, способную автономно управлять бытовыми приборами.

Начало работы: общая архитектура

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Архитектура одной комнаты

В каждой комнате свой Arduino UNO — ведомое устройство. Он управляет приборами (свет, вентилятор, розетки) и опрашивает датчики: PIR (присутствие), LM35 (температура), LDR (освещенность у окна). Raspberry Pi периодически опрашивает Arduino по шине I2C.

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Адресация устройств

Устройство идентифицируется составным адресом: номер комнаты + номер устройства.

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Итак: Raspberry Pi — мастер I2C, каждый Arduino UNO — слейв с уникальным адресом. Обмен данными по I2C.

Схемы подключения

Начнем с первой комнаты. Для подключения нескольких Arduino используйте I2C-шину (общую линию SDA/SCL с подтягивающими резисторами).

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Подключение нагрузки через реле

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Программная часть

Проект состоит из двух частей: Raspberry Pi 2 (UWP-приложение на C# в Visual Studio 2015) и Arduino UNO (скетч на C++). Предполагается средний уровень знаний: Arduino, C#, XAML, работа с I2C.

Протокол обмена по I2C

Цели протокола: чтение датчиков, чтение состояний устройств, установка состояния устройств.

Запрос от RPi к Arduino — 3 байта (Режим, Пин, Значение). Ответ от Arduino — 14 байт (данные датчиков или состояния пинов).

Режимы:

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Класс I2C_Helper в UWP-проекте инкапсулирует протокол. На стороне Arduino используется стандартная библиотека Wire.h в режиме слейва.

Объектная модель (Class Structure)

Иерархия: Home → список Room → список Device + структура Sensors (AmbientLight, PassiveIR, Temperature).

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Пользовательский интерфейс

Основные цели: управление комнатами, управление устройствами, внешние сервисы (GSM, интернет). Решено разделение на страницы:

Wireframes (наброски экранов)

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Реализованный UI (скриншоты приложения)

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Пошаговая настройка

Программа спроектирована для простой конфигурации. Экраны мастера настройки:

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core
Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Управление водяным насосом и гейзером

Насос/гейзер нельзя подключать прямо к реле — сгорит реле и опасно. Используйте магнитный пускатель (контактор): катушку пускателя подключите к реле, а силовую цепь насоса — через контакты пускателя и автоматический выключатель (MCB). Подбирайте контактор с запасом по току и напряжению катушки.

Развертывание на Raspberry Pi 2

Инструкция по деплою UWP-приложения на RPi2 под Windows 10 IoT Core: см. официальную документацию Microsoft.

Регистрация приложения как автозапуска

Чтобы приложение стартовало при загрузке RPi2, см. статью: «Windows 10 IoT Core: Setting Startup App».

Известные проблемы и решения

1. Дребезг пина D13 при загрузке Arduino

При старте Arduino мигает встроенный светодиод на D13. Если на D13 висит реле — прибор дернется.

Решение: не использовать D13 для реле. Или перепрошить загрузчик OptiBoot без мигания D13.

2. Отсутствие RTC на Raspberry Pi 2

RPi2 не имеет часов реального времени. После потери питания время сбрасывается.

Решение: подключить внешний RTC (DS3231 и др.) к I2C шине RPi2 или к Arduino (тогда RPi запрашивает время при загрузке). NTP требует интернета.

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

3. Сложности отладки UWP-приложения

Асинхронные операции в UWP затрудняют поиск ошибок. Часто исключения не указывают на проблемную строку, приложение может молча вылететь.

Решение: расставляйте точки останова (breakpoints) заранее, до предполагаемой проблемной строки.

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Перспективы развития

Платформа Windows 10 IoT Core на Raspberry Pi 2 открывает огромные возможности: 4-ядерный CPU 900 МГц, мощный GPU для красивого XAML-интерфейса, многопоточность (Task). В будущем можно добавить:

Удачи и будьте осторожны с высоким напряжением!

Исходный код: GitHub репозиторий

Код: Скетч Arduino (I2C Slave)

/* Arduino Sketch v0.4 для Home Automation с Raspberry Pi 2 + Win 10 IoT
   Тестирован на ATmega328p. Arduino как I2C-slave (адрес 0x40).
   Задачи: периодический опрос датчиков, прием 3-байтовых команд, отправка 14-байтовых ответов. */
#include <Wire.h>
#define _DEBUG_
#define SLAVE_ADDRESS 0x40

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);
  pinMode(Pin_PassiveIR, INPUT);
  pinMode(Pin_Temperature, INPUT);
  for (int p = 0; p <= 13; p++) if (p != 2) pinMode(p, OUTPUT);
  pinMode(A2, OUTPUT); pinMode(A3, OUTPUT);
  #ifdef _DEBUG_ Serial.begin(9600); #endif
  Wire.begin(SLAVE_ADDRESS);
  Wire.onRequest(SendData);
  Wire.onReceive(ReceiveData);
}

void loop() {
  Value_AmbientLight_LDR = map(analogRead(Pin_AmbientLight_LDR), 0, 1023, 0, 255);
  Value_PassiveIR = (digitalRead(Pin_PassiveIR) == HIGH);
  Value_Temperature = (short)((float)(analogRead(Pin_Temperature) * 0.48828125));
  delay(100);
}

void ReceiveData(int byteCount) {
  Mode = Wire.read();
  Pin = Wire.read();
  Value = Wire.read();
  if (Mode == 2) digitalWrite(Pin, Value);
  #ifdef _DEBUG_
  Serial.print(Mode); Serial.print(" "); Serial.print(Pin); Serial.print(" "); Serial.println(Value);
  #endif
}

void SendData() {
  switch (Mode) {
    case 0: // Sensors
      Response[0] = (byte)Value_AmbientLight_LDR;
      Response[1] = Value_PassiveIR ? 1 : 0;
      Response[2] = (Value_Temperature < 0) ? 0 : 1; // sign
      Response[3] = (byte)(Value_Temperature < 0 ? -Value_Temperature : Value_Temperature);
      break;
    case 1: // Device states (14 pins)
      for (int i = 0, p = 0; i < 14; i++) {
        if (i == 2) continue; // skip pin 2 (PIR input)
        Response[i] = digitalRead(p++) == HIGH ? 1 : 0;
      }
      break;
    case 2: // Set pin state
      Response[0] = digitalRead(Pin) == HIGH ? 1 : 0;
      break;
  }
  Wire.write(Response, 14);
}

Программа для Raspberry Pi 2 (Windows Headed App)

Полный исходный код UWP-приложения: GitHub

Схемы (Fritzing)

Полная схема с возможностью подключения нескольких комнат (уникальные I2C-адреса).

Умный дом на Raspberry Pi 2 и Windows 10 IoT Core

Файл Fritzing: Home Automation Schematic - Anurag S Vasanwala.fzz

Производственный процесс

  1. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  2. Создание умного домашнего контроллера 433 МГц с Sensorflare и Raspberry Pi
  3. Датчик занятости ванной комнаты на Raspberry Pi с голосовыми и SMS-уведомлениями через Twilio
  4. Мониторинг домашней температуры с панелью управления на Raspberry Pi
  5. Создайте систему домашней автоматизации на Raspberry Pi для удаленного управления
  6. Передача данных Adafruit 10DOF IMU с Raspberry Pi 2 в Azure Event Hubs на Windows 10 IoT Core
  7. Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
  8. Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
  9. Интеграция Microsoft Kinect с Raspberry Pi для детекции людей в реальном времени на роботе Sonbi
  10. Автоматизация и IoT: формирование будущего управления цепочками поставок