Automatización del hogar con Raspberry Pi 2 y Windows 10 IoT
Componentes y suministros
- Arduino UNO (×1 por habitación a automatizar)
- Raspberry Pi 2 Model B (×1)
- Cables jumper genéricos (×1)
- Protoboard genérica (×1)
- LDR (fotorresistencia) (×1)
- Sensor PIR movimiento (×1)
- Módulo relé genérico (×1 por dispositivo a controlar)
- Contactor Siemens 3TF32 00-0AP0 (×1, para bomba de agua hasta 16A 415VAC)
- Interruptor magnetotérmico 1P C16A (×1, protección bomba)
Aplicaciones y servicios en línea
- Arduino IDE (firmware Arduino)
- Microsoft Visual Studio 2015 Community (gratis hasta 5 usuarios)
- Microsoft Windows 10 IoT Core (SO principal en Raspberry Pi)
Sobre este proyecto
La tecnología mejora la vida humana. Combinando Raspberry Pi y Windows 10, construimos un sistema de automatización doméstica que opera dispositivos automáticamente.
Primeros pasos: Configuración general
La Raspberry Pi actúa como controlador principal. Cada habitación tiene su propio Arduino UNO como esclavo. Comunicación vía I2C.
Configuración por habitación
Cada Arduino UNO controla dispositivos (luces, ventiladores, enchufes) y lee sensores: PIR (presencia), LM35 (temperatura), LDR (luz). La Raspberry Pi solicita datos periódicamente.
Mapeo de direcciones de dispositivos
Dirección = número de habitación + número de dispositivo. Ejemplo: Habitación 1, Dispositivo 2 → Dirección 12.
Esquemáticos
- Bus I2C para conectar múltiples Arduino (usar "I2C Bus Stripe").
- Conexión de dispositivos a placa de relés.
- Archivos Fritzing incluidos.
Software
Desarrollado en Visual Studio 2015 (Universal Windows Platform). Requiere conocimientos intermedios de Arduino, C# y XAML.
Protocolo I2C (Raspberry Pi ↔ Arduino)
Objetivos: leer sensores, leer estado de dispositivos, establecer estado de dispositivo.
Trama de envío: 3 bytes fijos. Trama de recepción: 14 bytes.
- Modo 0: Leer sensores (luz, PIR, temperatura).
- Modo 1: Leer estado de 14 dispositivos (pines digitales + A2, A3).
- Modo 2: Establecer estado de un pin (envía pin y valor).
Clase I2C_Helper en proyecto Universal Windows implementa el protocolo.
Estructura de clases (Raspberry Pi)
- Home: lista genérica de
Room. Métodos estáticos cargar/guardar. - Room: lista de
Devicey estructuraSensor(luz, PIR, temperatura). - Device: detalles y funciones on/off usando protocolo Modo 2.
- AmbientLight, PassiveIR, Temperature: acceso a datos ambientales.
Interfaz de usuario
Objetivos: gestión de habitaciones, dispositivos, servicios externos (GSM, Internet).
Pantallas: Inicio (estado básico, hora, bloqueo), Favoritos, Habitaciones, Dispositivos de agua (bomba, calentador), Configuración.
Wireframes y capturas de la UI final incluidas.
Cómo configurar
Pasos guiados con capturas: añadir habitaciones, dispositivos, sensores, direcciones I2C, etc.
Control de bomba de agua y calentador
No conectar directamente a relé. Usar contactor: relé activa bobina del contactor → contactor conmuta carga alta. Verificar bobina (250VAC en modelo 3TF32) y contactos (16A 415VAC). Añadir magnetotérmico antes del contactor.
Despliegue en Raspberry Pi 2
Referencia a guía de despliegue UWP en Windows 10 IoT Core.
Registrar como app de inicio
Ver artículo: "Windows 10 IoT Core: Setting Startup App".
Problemas conocidos
- Arduino Bootup: Pin D13 parpadea al arrancar → no conectar relé en D13 o reprogramar Optiboot.
- Reloj (RTC): Raspberry Pi 2 no tiene RTC hardware → usar NTP (requiere Internet) o RTC externo (DS3231) en Pi o Arduino.
- Depuración UWP: Excepciones en código asíncrono difíciles de rastrear. Solución: breakpoints preventivos.
Futuro
Comunicación RF/IR, portal web con Azure, automatización por eventos (luz al anochecer) y temporizada (RTC). Raspberry Pi 2 quad-core 900MHz ideal para multi-hilo (UWP Tasks).
Código
Sketch Arduino (C/C++)
/* Arduino Sketch v0.4 - Home Automation con Raspberry Pi 2 y Windows 10 IoT
Esclavo I2C en dirección 0x40. Objetivos:
+ Leer sensores periódicamente (loop)
+ OnReceive: recibir 3 bytes modo+pin+valor y actuar
+ OnRequest: enviar 14 bytes respuesta según modo
Sin garantía. Uso personal/comercial permitido. */
#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++) 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: // Sensores
Response[0] = (byte)Value_AmbientLight_LDR;
Response[1] = (byte)Value_PassiveIR;
Response[2] = (byte)(Value_Temperature < 0 ? 0 : 1);
Response[3] = (byte)(Value_Temperature < 0 ? -Value_Temperature : Value_Temperature);
break;
case 1: // Estado dispositivos (14 pines)
for(int i=0, p=0; i<14; i++, p++) {
if(p==2) p++; if(p==13) p+=2; // saltar pines 2, 13, 14, 15
Response[i] = (digitalRead(p) == HIGH) ? 1 : 0;
}
break;
case 2: // Confirmar escritura
Response[0] = (digitalRead(Pin) == HIGH) ? 1 : 0;
break;
}
Wire.write(Response, 14);
}
Software Raspberry Pi 2 (Universal Windows App)
Código completo en: GitHub
Esquemáticos
Múltiples habitaciones: cada Arduino con dirección I2C única en el bus. Archivo Fritzing: Home Automation Schematic - Anurag S Vasanwala.fzz
Proceso de manufactura
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Construya un Controlador Domótico 433 MHz con Sensorflare y Raspberry Pi
- Sensor de ocupación para baño con Raspberry Pi: alertas por voz y SMS mediante Twilio
- Monitoriza la temperatura de tu casa con un panel Raspberry Pi
- Construye sistema domótico con Raspberry Pi para control remoto
- Envío de Datos IMU Adafruit 10DOF desde Raspberry Pi 2 a Azure Event Hubs con Windows 10 IoT Core
- Monitorización Precisa de Temperatura y Humedad con SHT15 en Windows 10 IoT Core
- Instalación de Windows 10 IoT Core en Raspberry Pi 3 Model B+: Guía Paso a Paso
- Integración de Microsoft Kinect con Raspberry Pi para Detección Humana en Tiempo Real en Robot Sonbi
- Automatización e IoT: Moldeando el Futuro de la Gestión de la Cadena de Suministro
- IoT y automatización del hogar: Moldeando la vida inteligente del mañana