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

Домашняя автоматизация с использованием Raspberry Pi 2 и Windows 10 IoT

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

Arduino UNO
Для каждой комнаты, которую вы хотите автоматизировать, возьмите отдельный Arduino UNO.
× 1
Raspberry Pi 2, модель B
× 1
Перемычки (общие)
× 1
Макет (общий)
× 1
LDR (светозависимый резистор)
LDR обеспечивает разные показания напряжения для разной интенсивности света.
× 1
Датчик движения PIR (общий)
Пассивный ИК-датчик обнаруживает присутствие человека.
× 1
Реле (универсальное)
Вы можете использовать любой модуль реле. Нет реле будет зависеть от того, сколько устройств вы хотите контролировать. [NoOfDevices =NoOfRelay]
× 1
Контактор Siemens (3TF32 00-0AP0)
Контактор будет использоваться для управления водяным насосом максимальной мощности AC3:16A 415VAC. При покупке контактора, пожалуйста, проверьте характеристики вашего водяного насоса и зависимости от вашего устройства, если таковые имеются. "3TF32 00-AP0" может приводить в действие водяной насос до 16 А и 415 В переменного тока. Этот контактор управляет встроенной катушкой. Номинальные параметры катушки (только для 3TF32 00-0AP0) 250 В переменного тока.
× 1
Миниатюрный автоматический выключатель (1P C16A)
Автоматический выключатель подключается перед контактором для защиты водяного насоса от электрических неисправностей и перегрузки. Здесь у MCB тоже есть определенные рейтинги. Наш контактор на 16А, поэтому я использовал MCB на 16А. Вы можете изменить по своему усмотрению.
× 1

Приложения и онлайн-сервисы

IDE Arduino
Для написания прошивки Arduino. Объясните в статье.
Microsoft Visual Studio 2015
Community edition предоставляется бесплатно для пяти пользователей. Но вы можете использовать более высокий уровень, если приобрели лицензионную копию Visual Studio 2015.
Microsoft Windows 10 IoT Core
В качестве основной ОС, которая управляет устройствами через Arduino и предоставляет консоль управления.

Об этом проекте

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

Начало работы

Прежде чем приступить к проекту, давайте сначала разберемся с основами. Рассмотрим следующее изображение (общая конфигурация):

Конфигурация для комнаты

Теперь, учитывая сценарий комнаты, Arduino UNO будет управлять устройствами и считывать данные с датчиков. Периодически Raspberry Pi запрашивает данные датчиков, собираемые Arduino UNO. На рисунке «Архитектура помещения» показано, как Arduino UNO будет подключаться к устройствам и датчикам. В каждой комнате есть несколько управляемых устройств (например, освещение, вентилятор, настенная розетка и т. Д.), Один пассивный ИК-датчик (для обнаружения присутствия человека в комнате), один датчик температуры (LM35 для измерения температуры в помещении) и LDR ( для определения интенсивности света возле окна комнаты).

Сопоставление адресов устройств

Самая важная часть - как мы будем идентифицировать устройства? Это просто. Мы составим адрес устройства, объединив номер комнаты с номером устройства.

Например:

Итак, до сих пор мы знаем общую конфигурацию. Короче говоря, Raspberry Pi будет выступать в качестве основного контроллера. В каждой комнате есть свой собственный Arduino UNO, который действует как подчиненный Raspberry Pi. Связь между Raspberry Pi и Arduino UNO будет осуществляться с использованием I2C.

Схема

Чтобы упростить задачу, давайте приступим к реализации для первой комнаты. Обратитесь к схеме, чтобы правильно соединить компоненты.

Полоса шины I2C: Чтобы подключить более одного Arduino, вы можете использовать полосу шины I2C, как показано ниже.

Как подключить устройство к плате реле?

Все сделано на аппаратной стороне. Пришло время создавать программное обеспечение.

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

Наш проект состоит из Raspberry Pi 2 и Arduino UNO. Программное обеспечение Raspberry Pi 2, разработанное в Visual Studio 2015. Я предполагаю, что читатель осведомлен о создании проекта для Raspberry Pi 2 в Visual Studio 2015. Я также предполагаю, что пользователь имеет промежуточные знания о фреймворке Arduino, Visual C # и Windows Universal XAML.

Давайте разберемся софт в следующем построении:

  • Протокол (как взаимодействуют Raspberry Pi 2 и Arduino)
  • Структура классов (как Raspberry Pi 2 поддерживает такие сложные устройства и помещения)
  • Пользовательский интерфейс (каркасный)

Протокол (как Raspberry Pi 2 и Arduino общаются по I2C)

Прежде чем идти дальше, давайте сначала решим, как взаимодействуют Raspberry Pi и Arduino. Чтобы создать надежный протокол, мы должны прежде всего иметь четкие цели или задачи для коммуникации. При рассмотрении данного проекта цели:

  • Считывать датчики
  • Прочитать состояние устройства
  • Установить состояние устройства

Начнем сначала с определения протокола. Протокол определяет правила для связи по шине. Протокол - это не что иное, как последовательность байтов.

Я определил протокол для отправки и получения байтов. Отправляемые байты фиксируются из трех, тогда как принимаемый массив байтов состоит из четырнадцати байтов.

Обратитесь к следующей схеме, чтобы понять протокол, определенный для этого проекта («X» обозначает случайное значение или «0», оно будет проигнорировано при общении):

Класс с именем «I2C_Helper» содержит реализацию протокола в проекте универсального приложения PRi2. Этот класс доступен в универсальном проекте Windows. Чтобы открыть его:перейдите в Обозреватель решений> Библиотека> Папка связи. Со стороны Arduino легко понять библиотеку I2C.

Теперь мы определили правильную схему связи, которая может предоставлять статус и значения датчиков, устройств, а также обеспечивает доступность для установки состояния устройства.

Структура классов (как Raspberry Pi 2 поддерживает объекты)

Как уже говорилось вначале, этот проект рассматривался как целый дом. Дом состоит из нескольких комнат, а комната состоит из нескольких устройств. Таким образом, структура ООП такой конфигурации показана ниже:

Первичный класс «Дом» состоит из нескольких объектов комнаты в виде общего списка комнат (List ). Домашний класс предоставляет статический метод для загрузки и сохранения домашнего объекта на Pi, чтобы использовать его позже.

Помещение состоит из устройств в виде общего списка устройств (List ) и структуры датчиков для объединения всех датчиков в один.

Устройство состоит из их деталей и функций для их включения и выключения с использованием протокола Mode - 2. Классы AmbientLight, PassiveIR и Temperature обеспечивают доступ к данным об окружающей среде в помещении. Комнатный объект поддерживает данные датчиков и периодически обновляет их, используя протокол Mode - 0.

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

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

В сценарии этого приложения наши основные цели:

  • Управление помещением
  • Управление устройствами
  • Внешние службы, такие как связь GSM, связь через Интернет и т. д.

Для этого я разделил задачу на:

  • Домашняя страница:предоставляет основную информацию о состоянии устройства, дату, время и блокировку.
  • Избранные устройства:прямой доступ к избранным устройствам.
  • Страница комнаты:обеспечивает доступ к настроенным комнатам и их устройствам.
  • Общие водопроводные устройства:водяной насос и гейзер
  • Настройки / Конфигурация:обеспечивает управление комнатами и их устройствами.

Каркас:

На основе каркаса я разработал пользовательский интерфейс, который показан ниже. Вы можете скачать полный исходный код. Ссылка на скачивание приведена в конце статьи.

Итак, уже разработан UI. Надеюсь, вы сможете изменить его в соответствии со своими потребностями. Не стесняйтесь комментировать помощь.

Как настроить?

Я постарался максимально упростить эту программу. После небольшой настройки вы можете управлять устройствами напрямую, используя Raspberry Pi 2. Пошаговая настройка показана ниже:

Как управлять водяным насосом и гейзером с помощью этого приложения?

Вы можете прикрепить водяной насос и гейзер так же, как и устройство. Но вы не можете прикрепить водяной насос или гейзер непосредственно к плате реле, чтобы включить их. Это приведет к взрыву платы реле, а также к опасности.

Для работы водяной помпы или газовой колонки необходимо подключить водяной насос или газовую колонку к контактору и соединить катушку контактора с платой реле. Итак, теперь, когда вы управляете устройством, реле активирует катушку контактора и, таким образом, насос или гейзер запускается / останавливается. Перед покупкой контактора убедитесь, что у него номинальные характеристики катушки и контактора. Контакторы доступны во многих вариантах. Поэтому сверьте это с рейтингом вашего водяного насоса. Рекомендуется приобрести контактор с чуть более высоким номиналом, чем у вашего водяного насоса.

Как развернуть это решение на Raspberry Pi 2?

Вы можете перейти по этой ссылке, чтобы понять процесс развертывания.

Как зарегистрировать это приложение как приложение для запуска?

Многие любители хотят, чтобы их приложение запускалось сразу после загрузки Raspberry Pi 2. Для этого прочтите мою статью:Windows 10 IoT Core:настройка приложения для запуска

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

Загрузка Arduino

При загрузке Arduio мигает вывод D13. Хорошо не подключать какие-либо контакты реле к D13, потому что при загрузке или перезагрузке Arduino D13 будет мигать один раз, и если какое-либо устройство, подключенное к Relay (управляемое через D13), тоже будет мигать.

Решение: Есть два варианта:первый, просто не подключать реально к D13. Второй немного сложнее. Вы можете переписать прошивку OptiBoot от Aruino, которая не использует D13 при загрузке, и записать этот загрузчик на Arduino.

Проблема с часами

Raspberry Pi 2 не имеет встроенного чипа часов реального времени. Таким образом, невозможно поддерживать время после сбоя питания или новой загрузки. Таким образом, внешний RTC должен быть подключен и запрограммирован на поддержание даты и времени.

Решение :NTP можно использовать, но требуется подключение к Интернету, или даже Arduino может обрабатывать запросы RTC и Raspberry Pi для даты и времени при загрузке. Также хорошо подключить внешний RTC напрямую к RPi 2.

Проблема отладки

Я столкнулся с множеством проблем при разработке универсального приложения на C #. Универсальное приложение является надмножеством WinRT, и поэтому необходимо выполнить так много асинхронных операций. Если в асинхронной работе возникает ошибка, ее решение становится головной болью. Всякий раз, когда возникало какое-либо исключение или ошибка, большую часть времени я сталкивался со следующим экраном:

Ни указания на строку, подверженную ошибкам, ни сообщение, удобное для программистов, ничего. Мне нужно установить так много точек останова, чтобы выяснить причину ошибки. При отладке иногда универсальное приложение просто закрывается без какого-либо предварительного уведомления, и внезапно мое окно просмотра становится бесполезным. Причина такого поведения описана по этой ссылке.

Решение :Поместите точку останова перед ожидаемой строкой, подверженной ошибкам.

Короче говоря, на данный момент (пока была опубликована эта статья) универсальное приложение великолепно, но в нем отсутствуют функции отладки, которые есть в обычных приложениях для Windows.

Будущее

Нет никаких ограничений, когда речь идет о функциях, новых идеях или даже о преодолении существующих ограничений. Но невозможно добавить каждую функцию сразу. В этом выпуске эта статья позволяет вам понять реальную мощь Raspberry Pi 2 и Windows IoT. Windows Universal XAML - отличная среда графического интерфейса для Windows 10 IoT и Raspberry Pi 2 с хорошим графическим процессором на борту. Комбинируя эти два, можно создать необычно выглядящее решение с графическим интерфейсом пользователя. Кроме того, Raspberry Pi 2 имеет четырехъядерный процессор с частотой 900 МГц, что довольно неплохо для многопоточных (в UWP, Task) решениях. Это проект от базового до промежуточного для тех, кто хочет изучить основы встроенных и программных систем (например, связь по шине I2C, управление устройствами, разработка индивидуального протокола, проектирование ООП для реальных приложений и каркаса).

В будущем мы можем добавить возможность связи через удаленные устройства с использованием RadioFrequency или InfraRed вместо шины I2C. Портал веб-управления с использованием Azure может быть интегрирован для мобильных устройств. В дальнейшем будет интегрирована реальная автоматизация, например, работа на основе событий, синхронизированная работа с микросхемой RTC. Например, включить свет на заднем дворе в 19:00. и выключите их в 22:00; Хороший пример для событийного типа - включение огней в саду, когда интенсивность окружающего освещения упала ниже определенной интенсивности и так далее. Таким образом, для этой новой платформы Windows 10 IoT Core для Raspberry Pi 2 ограничений нет.

Удачи и будьте в безопасности.

Не стесняйтесь обращаться за помощью или вопросами.

Код

  • Эскиз Arduino
Скетч Arduino C / C ++
 / * Arduino Sketch v0.4 Этот скетч написан для «Домашней автоматизации с использованием Raspberry Pi 2 и Window 10 IoT». Ссылка:https://www.hackster.io/AnuragVasanwala/home-automation Этот скетч протестирован только на Atmega328p. Этот эскиз подготавливает устройство Arduino в качестве ведомого устройства на шине I2C, управляемой Raspberry Pi 2 под управлением Windows 10 IoT Core. Задачи:+ Периодически собирать данные датчика (Функция:цикл) + OnRecevive, собирать 3-байтовые инструкции режима и выполнять на их основе операцию. (Функция:ReceiveData) + OnRequest, отправить 14-байтовый массив ответов в зависимости от режима, выбранного OnReceive. (Функция:SendData) Этот эскиз предоставляется без каких-либо ГАРАНТИЙ. Вы можете использовать его как в личных, так и в коммерческих целях. Я не несу ответственности за потерю данных или травмы, вызванные этим скетчем. * / # Include  #define _DEBUG _ / * I2C-адрес подчиненного устройства Arduino * / # 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, ВХОД); pinMode (Pin_Temperature, ВХОД); pinMode (0, ВЫХОД); pinMode (1, ВЫХОД); pinMode (3, ВЫХОД); pinMode (4, ВЫХОД); pinMode (5, ВЫХОД); pinMode (6, ВЫХОД); pinMode (7, ВЫХОД); pinMode (8, ВЫХОД); pinMode (9, ВЫХОД); pinMode (10, ВЫХОД); pinMode (11, ВЫХОД); pinMode (12, ВЫХОД); pinMode (13, ВЫХОД); pinMode (A2, ВЫХОД); pinMode (A3, OUTPUT); # ifdef _DEBUG_ Serial.begin (9600); # endif // Инициализировать ведомое устройство I2C по адресу 'SLAVE_ADDRESS' Wire.begin (SLAVE_ADDRESS); Wire.onRequest (SendData); Wire.onReceive (ReceiveData);} void loop () {// Чтение LDR // Arduino поддерживает 10-битное аналоговое чтение. // Таким образом, нам нужно преобразовать его в 8-битный. Value_AmbientLight_LDR =analogRead (Pin_AmbientLight_LDR); Value_AmbientLight_LDR =карта (Value_AmbientLight_LDR, 0, 1023, 0, 255); // Считываем значение PassiveIR Value_PassiveIR =(digitalRead (Pin_PassiveIR) ==HIGH)? истина:ложь; // Считываем датчик температуры и преобразуем напряжение в градусы Цельсия Value_Temperature =(short) ((float) (analogRead (Pin_Temperature) * 0.48828125)); // Ожидание задержки 100 мс (100);} // Обратный вызов для полученных данных I2C ReceiveData (int byteCount) {// Считываем первый байт, который является режимом протокола Mode =Wire.read (); // Считываем второй байт, который является Pin. Действительно только для режима 2 Pin =Wire.read (); // Считываем третий байт, который является значением вывода. Действительно только для режима 2 Значение =Wire.read (); // Сигнал указанному контакту, если получен режим 2 if (Mode ==2) {digitalWrite (Pin, Value); } #ifdef _DEBUG_ Serial.print (Режим); Serial.print (""); Serial.print (пин-код); Serial.print (""); Serial.println (Значение); # endif} void SendData () {switch (Mode) {case 0:// Mode:Read Sensor Response [0] =(byte) Value_AmbientLight_LDR; // Value_PassiveIR является логическим, поэтому нам нужно преобразовать его в байт Response [1] =(byte) ((Value_PassiveIR ==true)? 1:0); // Байт ответа [2] является байтом знака для температуры // 0 - -ve Температура // 1 - + ve Температура Отклик [2] =(byte) ((Value_Temperature <0)? 0:1); Serial.println (Значение_Температура); // -ve Температура не может быть отправлена ​​в байтах. Преобразуйте его в эквивалентный + ve Response [3] =(byte) ((Value_Temperature <0)? (Value_Temperature * (- 1)):Value_Temperature); ломать; case 1:// Режим:чтение состояния устройства. Ответ [0] =(digitalRead (0) ==HIGH)? 1:0; Ответ [1] =(digitalRead (1) ==HIGH)? 1:0; Ответ [2] =(digitalRead (3) ==HIGH)? 1:0; Ответ [3] =(digitalRead (4) ==HIGH)? 1:0; Ответ [4] =(digitalRead (5) ==HIGH)? 1:0; Ответ [5] =(digitalRead (6) ==HIGH)? 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) ==HIGH)? 1:0; Ответ [11] =(digitalRead (12) ==HIGH)? 1:0; Ответ [12] =(digitalRead (A2) ==HIGH)? 1:0; Ответ [13] =(digitalRead (A3) ==HIGH)? 1:0; ломать; case 2:// Режим:Установить ответ состояния устройства [0] =(digitalRead (Pin) ==HIGH)? 1:0; ломать; по умолчанию:перерыв; } // Возвращаем ответ Wire.write (Response, 14);} 
Программное обеспечение Raspberry Pi 2 (приложение для Windows)
https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-

Схема

Вы можете добавить несколько комнат, подключив к шине отдельный Arduino с уникальным адресом ведомого устройства I2C. Файл Fritzing, содержащий полную схему. На главную% 20Automation% 20Schematic% 20-% 20Anurag% 20S% 20Vasanwala.fzz

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

  1. Датчик температуры Python и Raspberry Pi
  2. Контроллер умного дома 433 МГц с Sensorflare и RaspberryPi
  3. Датчик освещенности с поддержкой голоса и SMS с использованием Raspberry Pi и Twilio
  4. Следите за температурой в доме с помощью Raspberry Pi
  5. МАЛИНОВАЯ АВТОМАТИЗАЦИЯ ДОМА
  6. Windows 10 IoT Core на Raspberry Pi 2 - данные датчика Adafruit
  7. Windows 10 IoT Core и SHT15
  8. Windows 10 IoT Core для Raspberry Pi 3, модель B +
  9. ОБНАРУЖЕНИЕ ЧЕЛОВЕКА РОБОТА SONBI С ИСПОЛЬЗОВАНИЕМ KINECT И МАЛИНЫ PI
  10. Автоматизация и Интернет вещей в цепочке поставок:что дальше?