Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Automatización del hogar con Raspberry Pi 2 y Windows 10 IoT

Componentes y suministros

Arduino UNO
Para cada habitación que desee automatizar, tome Arduino UNO por separado.
× 1
Raspberry Pi 2 Modelo B
× 1
Cables de puente (genéricos)
× 1
Breadboard (genérico)
× 1
LDR (resistencia dependiente de la luz)
LDR proporciona diferentes lecturas de voltaje para diferentes intensidades de luz.
× 1
Sensor de movimiento PIR (genérico)
IR pasivo detecta la presencia humana.
× 1
Retransmisión (genérico)
Puede utilizar cualquier tipo de módulo de relé. El número de retransmisiones dependerá de la cantidad de dispositivos que desee controlar. [NoOfDevices =NoOfRelay]
× 1
Contactor Siemens (3TF32 00-0AP0)
El contactor se utilizará para controlar la bomba de agua de potencia máxima de AC3:16A 415VAC. Al comprar el contactor, verifique los valores nominales de su bomba de agua y las dependencias de su país, si las hay. "3TF32 00-AP0" es capaz de impulsar bombas de agua de hasta 16 A y 415 VCA. Este contactor opera usando una bobina incorporada. Los valores nominales de la bobina son (específicos de 3TF32 00-0AP0 únicamente) 250 VCA.
× 1
Disyuntor en miniatura (1P C16A)
El MCB se conecta antes del contactor para proteger la bomba de agua de fallas eléctricas y sobrecargas. Aquí MCB también tiene calificaciones específicas. Nuestro contactor es de 16A y por eso he usado 16A MCB. Puede modificar según su conveniencia.
× 1

Aplicaciones y servicios en línea

Arduino IDE
Para escribir firmware Arduino. Tener una explicación en el artículo.
Microsoft Visual Studio 2015
La edición comunitaria está comandada y es gratuita para hasta cinco usuarios. Pero puede usar una versión superior si ha comprado una copia con licencia de Visual Studio 2015.
Microsoft Windows 10 IoT Core
Como sistema operativo principal, que controla los dispositivos a través de Arduino y proporciona una consola de administración.

Acerca de este proyecto

En la era actual, la tecnología puede mejorar la vida humana. La tecnología está evolucionando década tras década. La automatización era ciencia ficción antes, pero no hoy. Al combinar la última tecnología con el hogar, podemos construir un hogar increíble. Con Raspberry Pi y Windows 10, podemos construir un sistema de automatización del hogar que sea capaz de operar dispositivos domésticos automáticamente.

Comenzando

Antes de comenzar el proyecto, primero comprendamos los conceptos básicos. Considere la siguiente imagen (configuración general):

Configuración de la habitación

Ahora, considerando el escenario de la habitación, un Arduino UNO controlará los dispositivos y leerá los datos de los sensores. Periódicamente, Raspberry Pi solicita los datos del sensor recopilados por Arduino UNO. La figura "Arquitectura de la habitación" muestra cómo se conectará Arduino UNO con los dispositivos y sensores. Cada habitación tiene varios dispositivos controlables (es decir, luz (s), ventilador, enchufes de pared, etc.), un PassiveIR (para detectar la presencia humana en la habitación), un sensor de temperatura (LM35 para recolectar la temperatura ambiente) y LDR ( para detectar la intensidad de la luz cerca de la ventana de la habitación).

Asignación de direcciones de dispositivos

La parte más importante es ¿cómo identificaremos los dispositivos? Es simple. Crearemos la dirección del dispositivo combinando el número de habitación con el número de dispositivo.

Por ejemplo:

Así que hasta ahora conocemos la configuración general. En resumen, una Raspberry Pi actuará como controlador principal. Cada habitación tiene su propio Arduino UNO que actúa como esclavo de Raspberry Pi. La comunicación entre Raspberry Pi y Arduino UNO se realizará mediante I2C.

Esquemas

Para hacerlo más fácil, comencemos a implementar para la primera sala. Consulte el esquema para conectar los componentes de forma adecuada.

Franja de bus I2C: Para conectar más de un Arduino, puede usar I2C Bus Stripe como se muestra a continuación.

¿Cómo cablear el dispositivo con la placa de relés?

Todo hecho en el lado del hardware. Ahora es el momento de crear software.

Software

Nuestro proyecto consta de una Raspberry Pi 2 y Arduino UNO. Software Raspberry Pi 2 desarrollado en Visual Studio 2015. Supongo que el lector está al tanto de la creación de proyectos para Raspberry Pi 2 en Visual Studio 2015. También supongo que el usuario tiene conocimientos intermedios de Arduino framework, Visual C # y Windows Universal XAML.

Entendamos el software en la siguiente formación:

  • Protocolo (cómo habla Raspberry Pi 2 y Arduino)
  • Estructura de clases (cómo Raspberry Pi 2 mantiene dispositivos y salas tan complicados)
  • Interfaz de usuario (estructura de alambre)

Protocolo (Cómo se comunican Raspberry Pi 2 y Arduino a través de I2C)

Antes de continuar, primero decidamos cómo hablan Raspberry Pi y Arduino. Para hacer un protocolo confiable, primero debemos tener claros los objetivos o metas de la comunicación. En consideración a este proyecto, los objetivos son:

  • Leer sensores
  • Leer el estado del dispositivo
  • Establecer el estado del dispositivo

Empecemos por definir el protocolo primero. El protocolo define reglas para comunicarse a través del bus. El protocolo no es más que una secuencia de bytes.

He definido un protocolo para enviar y recibir bytes. Los bytes de envío tienen un valor fijo de tres, mientras que la matriz de bytes de recepción es de catorce bytes.

Consulte los siguientes esquemas para comprender el protocolo definido para este proyecto ('X' denota un valor aleatorio o '0', se ignorará durante la comunicación):

La clase denominada 'I2C_Helper' contiene la implementación del protocolo en el proyecto de aplicación universal de PRi2. Esta clase está disponible en Universal Windows Project. Para abrirlo:Vaya al Explorador de soluciones> Biblioteca> Carpeta de comunicación. En el lado de Arduino, es fácil de entender la biblioteca I2C.

Ahora, hemos definido un esquema de comunicación adecuado que es capaz de dar estado y valores de sensores, dispositivos y también proporciona accesibilidad para configurar el estado del dispositivo.

Estructura de clases (cómo Raspberry Pi 2 mantiene objetos)

Como se discutió primero, este proyecto consideró todo el hogar. El hogar consta de varias habitaciones y la habitación consta de varios dispositivos. Por lo tanto, la estructura OOP de dicha configuración se muestra a continuación:

La clase principal "Hogar" consta de varios objetos de habitación como una lista genérica de habitaciones (Lista ). La clase de inicio proporciona un método estático para cargar y guardar objetos de inicio en el Pi para usarlos más tarde.

La habitación consta de dispositivos como una lista genérica de dispositivos (List ) y la estructura del sensor para encapsular todos los sensores en uno.

El dispositivo consta de detalles de ellos y funciones para encenderlos y apagarlos usando el protocolo Modo - 2. AmbientLight, PassiveIR y la clase de temperatura brindan acceso a los datos ambientales de la habitación. El objeto de la habitación mantiene los datos del sensor y los actualiza periódicamente mediante el modo de protocolo - 0.

Interfaz de usuario

Cualquier aplicación debe ser fácil de usar. Para hacer una aplicación fácil de usar, comience con el marco de alambre. Suponga que va a utilizar su propia aplicación y averiguar los objetivos principales y cómo integrarlos de tal manera que sean más fáciles para el usuario final.

En el escenario de esta aplicación, nuestros principales objetivos son:

  • Gestión de habitaciones
  • Gestión de dispositivos
  • Servicios externos como comunicación GSM, comunicación por Internet, etc.

Para hacerlo, he dividido el problema en:

  • Página de inicio:proporciona información básica sobre el estado del dispositivo, fecha y hora y bloqueo
  • Dispositivos favoritos:acceso directo a dispositivos favoritos
  • Página de la sala:proporciona acceso a las salas configuradas y sus dispositivos
  • Dispositivos de agua comunes:bomba de agua y géiser
  • Configuración / Configuración:proporciona administración de salas y sus dispositivos

Estructura de alambre:

Basado en el marco de alambre, he desarrollado la interfaz de usuario que se muestra a continuación. Puede descargar el código fuente completo. El enlace a la descarga se proporciona al final del artículo.

Entonces, ya he desarrollado UI. Espero que pueda modificarlo según sus necesidades. No dude en comentar para obtener ayuda.

¿Cómo configurar?

He intentado hacer que este software sea lo más fácil posible. Con una configuración menor, puede operar dispositivos directamente usando esta Raspberry Pi 2. La configuración paso a paso se muestra a continuación:

¿Cómo controlo la bomba de agua y el géiser con esta aplicación?

Puede conectar la bomba de agua y el géiser de la misma manera que agrega el dispositivo. Pero no puede conectar una bomba de agua o un géiser directamente a la placa de relés para encenderlos. Explotará la placa de relés y también será peligroso.

Para operar la bomba de agua o el géiser, conecte la bomba de agua o el géiser con el contactor y conecte la bobina del contactor con la placa de relés. Así que ahora, cuando opera el dispositivo, el relé activa la bobina del contactor y, por lo tanto, la bomba o el géiser se encienden / detienen. Antes de comprar el contactor, asegúrese de que la capacidad de su bobina y la del contactor. Los contactores están disponibles en muchas variedades. Así que verifíquelo con la calificación de su bomba de agua. Es aconsejable comprar un contactor con una clasificación ligeramente superior a la clasificación de su bomba de agua.

¿Cómo implemento esta solución en Raspberry Pi 2?

Puede consultar este enlace para comprender el proceso de implementación.

¿Cómo registro esta aplicación como aplicación de inicio?

Muchos aficionados quieren que su aplicación comience justo después de que arranque la Raspberry Pi 2. Para hacerlo, lea mi artículo:Windows 10 IoT Core:Configuración de la aplicación de inicio

Problemas conocidos

Arduino Bootup

Cuando Arduio arranca, parpadea el pin D13. Es bueno no conectar ningún pin de relé en D13 porque cuando Arduino arranca o se reinicia, D13 parpadeará una vez y si algún dispositivo conectado con Relay (controlado a través de D13) también parpadeará.

Solución: Hay dos opciones:la primera, simplemente no conecte realmente con D13. El segundo es un poco complicado. Puede reescribir el firmware OptiBoot de Aruino que no usa D13 durante el arranque y grabar ese gestor de arranque en Arduino.

Problema con el reloj

Raspberry Pi 2 no tiene un chip de reloj en tiempo real integrado. Por lo tanto, no es posible mantener el tiempo después de un corte de energía o un arranque nuevo. Por lo tanto, se debe conectar y programar un RTC externo para mantener la fecha y la hora.

Solución :Se puede usar NTP pero necesita conexión a Internet o incluso Arduino puede lidiar con las solicitudes de RTC y Raspberry Pi para la fecha y hora en el arranque. También es bueno conectar un RTC externo directamente con RPi 2.

Problema de depuración

Me enfrenté a muchos problemas mientras desarrollaba la aplicación universal en C #. La aplicación universal es un superconjunto de WinRT y, por lo tanto, es necesario realizar muchas operaciones asincrónicas. Si surge un error en el funcionamiento asincrónico, resolverlo se convierte en un dolor de cabeza. Siempre que ocurría alguna excepción o error, la mayoría de las veces me enfrentaba a la siguiente pantalla:

No apunta a la línea propensa a errores, no hay mensaje amigable para el programador, nada. Tengo que colocar tantos puntos de interrupción para averiguar la causa del error. En la depuración, a veces la aplicación universal simplemente se apaga sin previo aviso y, de repente, la ventana de mi reloj se vuelve inútil. La causa del comportamiento se describe en este enlace.

Solución :Coloque el punto de interrupción antes de la línea propensa a errores esperada.

En resumen, en este momento (mientras se publicó este artículo) la aplicación universal es excelente, pero carece de funciones de depuración como las aplicaciones convencionales de Windows.

Futuro

No hay limitación en cuanto a funciones, nuevas ideas o incluso para superar la limitación existente. Pero no es posible agregar todas y cada una de las funciones a la vez. En esta versión, este artículo le permite comprender el poder real de Raspberry Pi 2 y Windows IoT. Windows Universal XAML es un excelente marco de GUI para Windows 10 IoT y Raspberry Pi 2 tiene un buen procesador de gráficos a bordo. Al combinar estos dos, se puede crear una solución GUI de aspecto extraordinario. Además, Raspberry Pi 2 tiene una CPU de cuatro núcleos a 900MHz, lo que es bastante impresionante para las soluciones de subprocesos múltiples (en UWP, Task). Este es el proyecto básico a intermedio para aquellos que quieran aprender los fundamentos del sistema integrado y de software (es decir, comunicación de bus I2C, cómo operar dispositivos, diseño de protocolo personalizado, diseño de programación orientada a objetos para aplicaciones del mundo real y estructura de cables).

En el futuro, podemos agregar capacidad para comunicarnos a través de dispositivos remotos usando RadioFrecuencia o Infrarrojos en lugar del bus I2C. El portal de administración web que usa Azure se puede integrar para dispositivos móviles. Además, la automatización real se integrará como operación basada en eventos, operación temporizada con chip RTC. Por ejemplo, encienda las luces del patio trasero a las 7:00 p.m. y apáguelos a las 10:00 P.M .; Un buen ejemplo para eventos es encender las luces del jardín cuando la intensidad de la luz ambiental disminuyó por debajo de la intensidad específica y así sucesivamente. Por lo tanto, no hay limitación para esta nueva plataforma Windows 10 IoT Core para Raspberry Pi 2.

Buena suerte y estar a salvo.

No dude en pedir ayuda o hacer preguntas.

Código

  • Bosquejo de Arduino
Arduino Sketch C / C ++
 / * Arduino Sketch v0.4 Este boceto está escrito para "Automatización del hogar usando Raspberry Pi 2 y Windows 10 IoT" Consulte este enlace:https://www.hackster.io/AnuragVasanwala/home-automation Este boceto está probado solo en Atmega328p. Este boceto prepara un dispositivo Arduino como dispositivo esclavo en el bus I2C operado por Raspberry Pi 2 con Windows 10 IoT Core. Objetivos:+ Recopilar periódicamente los datos del sensor (Función:bucle) + OnRecevive, recopilar la instrucción del modo de 3 bytes y realizar la operación basada en ella. (Función:ReceiveData) + OnRequest, envía una matriz de respuesta de 14 bytes según el modo seleccionado por OnReceive. (Función:SendData) Este boceto se proporciona tal cual sin GARANTÍA. Puede utilizarlo tanto para uso personal como comercial. No soy responsable por ninguna pérdida de datos o lesiones causadas por este boceto. * / # Include  #define _DEBUG _ / * Arduino's I2C Slave Address * / # define SLAVE_ADDRESS 0x40 / * PIN DECLARATION * / int Pin_AmbientLight_LDR =A0; int Pin_PassiveIR =2; int Pin_Temperature =A1; / * Variable global * / volatile short Value_AmbientLight_LDR, Value_Temperature; volatile bool Value_PassiveIR; / * Variable de protocolo * / byte Mode, Pin, Value; byte Response [14]; void setup () {// Inicializar pines pinMode (Pin_AmbientLight_LDR, INPUT); pinMode (Pin_PassiveIR, ENTRADA); pinMode (Pin_Temperature, ENTRADA); pinMode (0, SALIDA); pinMode (1, SALIDA); pinMode (3, SALIDA); pinMode (4, SALIDA); pinMode (5, SALIDA); pinMode (6, SALIDA); pinMode (7, SALIDA); pinMode (8, SALIDA); pinMode (9, SALIDA); pinMode (10, SALIDA); pinMode (11, SALIDA); pinMode (12, SALIDA); pinMode (13, SALIDA); pinMode (A2, SALIDA); pinMode (A3, OUTPUT); # ifdef _DEBUG_ Serial.begin (9600); # endif // Inicializar el esclavo I2C en la dirección 'SLAVE_ADDRESS' Wire.begin (SLAVE_ADDRESS); Wire.onRequest (SendData); Wire.onReceive (ReceiveData);} void loop () {// Leer LDR // Arduino admite lectura analógica de 10 bits. // Por lo tanto, necesitamos convertirlo en 8 bits. Value_AmbientLight_LDR =analogRead (Pin_AmbientLight_LDR); Value_AmbientLight_LDR =mapa (Value_AmbientLight_LDR, 0, 1023, 0, 255); // Leer el valor de PassiveIR Value_PassiveIR =(digitalRead (Pin_PassiveIR) ==HIGH)? verdadero Falso; // Leer el sensor de temperatura y convertir el voltaje en grados Celsius Value_Temperature =(short) ((float) (analogRead (Pin_Temperature) * 0.48828125)); // Espere un retraso de 100 ms (100);} // Devolución de llamada para I2C Received Datavoid ReceiveData (int byteCount) {// Lea el primer byte que es el modo de protocolo Mode =Wire.read (); // Leer el segundo byte que es Pin. Solo válido para el modo 2 Pin =Wire.read (); // Leer el tercer byte que es Pin-Value. Solo válido para Modo 2 Valor =Wire.read (); // Pin especificado de señal si se recibe el Modo 2 if (Mode ==2) {digitalWrite (Pin, Value); } #ifdef _DEBUG_ Serial.print (Modo); Serial.print (""); Serial.print (Pin); Serial.print (""); Serial.println (Value); # endif} void SendData () {switch (Mode) {case 0:// Mode:Read Sensor Response [0] =(byte) Value_AmbientLight_LDR; // Value_PassiveIR es booleano, por lo que debemos convertirlo en byte Response [1] =(byte) ((Value_PassiveIR ==true)? 1:0); // El byte de respuesta [2] es el byte de signo para la temperatura // 0 - -ve Temperature // 1 - + ve Temperature Response [2] =(byte) ((Value_Temperature <0)? 0:1); Serial.println (Value_Temperature); // -ve La temperatura no se puede enviar en bytes. Conviértalo en + ve equivalente Respuesta [3] =(byte) ((Value_Temperature <0)? (Value_Temperature * (- 1)):Value_Temperature); descanso; caso 1:// Modo:Estado de dispositivos de lectura Respuesta [0] =(digitalRead (0) ==HIGH)? 1:0; Respuesta [1] =(digitalRead (1) ==HIGH)? 1:0; Respuesta [2] =(digitalRead (3) ==HIGH)? 1:0; Respuesta [3] =(digitalRead (4) ==HIGH)? 1:0; Respuesta [4] =(digitalRead (5) ==HIGH)? 1:0; Respuesta [5] =(digitalRead (6) ==HIGH)? 1:0; Respuesta [6] =(digitalRead (7) ==HIGH)? 1:0; Respuesta [7] =(digitalRead (8) ==HIGH)? 1:0; Respuesta [8] =(digitalRead (9) ==HIGH)? 1:0; Respuesta [9] =(digitalRead (10) ==HIGH)? 1:0; Respuesta [10] =(digitalRead (11) ==HIGH)? 1:0; Respuesta [11] =(digitalRead (12) ==HIGH)? 1:0; Respuesta [12] =(digitalRead (A2) ==HIGH)? 1:0; Respuesta [13] =(digitalRead (A3) ==HIGH)? 1:0; descanso; caso 2:// Modo:Establecer la respuesta del estado del dispositivo [0] =(digitalRead (Pin) ==HIGH)? 1:0; descanso; predeterminado:descanso; } // Respuesta por cable Wire.write (Respuesta, 14);} 
Software Raspberry Pi 2 (aplicación Windows Headed)
https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-

Esquemas

Puede agregar varias habitaciones conectando Arduino individual con una dirección esclava I2C única en el bus. Archivo de Fritzing que contiene el esquema completo. Inicio% 20Automatización% 20Schematic% 20-% 20Anurag% 20S% 20Vasanwala.fzz

Proceso de manufactura

  1. Sensor de temperatura Python y Raspberry Pi
  2. 433MHz Smart Home Controller con Sensorflare y RaspberryPi
  3. Sensor de luz habilitado para voz y SMS con Raspberry Pi y Twilio
  4. Controle la temperatura de su hogar usando su Raspberry Pi
  5. RASPBERRY PI HOME AUTOMATION
  6. Windows 10 IoT Core en Raspberry Pi 2 - Datos del sensor Adafruit
  7. Windows 10 IoT Core y SHT15
  8. Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
  9. DETECCIÓN HUMANA DE ROBOT SONBI USANDO KINECT Y FRAMBUESA PI
  10. IoT y domótica:¿Qué nos depara el futuro?
  11. Automatización e IoT en la cadena de suministro:¿qué sigue?