Automação Residencial Inteligente com Raspberry Pi 2 e Windows 10 IoT
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO | 1 por cômodo | Para cada cômodo a automatizar, use um Arduino UNO separado. |
| Raspberry Pi 2 Model B | 1 | |
| Jumpers (genéricos) | 1 | |
| Protoboard (genérica) | 1 | |
| LDR (Resistor Dependente de Luz) | 1 | Fornece leituras de tensão diferentes para intensidades de luz diferentes. |
| Sensor PIR de Movimento | 1 | IR passivo detecta presença humana. |
| Relé (genérico) | Conforme necessário | Número de relés = número de dispositivos a controlar. |
| Contator Siemens (3TF32 00-0AP0) | 1 | Para controlar bomba d'água até 16A 415VAC. Bobina 250VAC. |
| Disjuntor Miniatura (1P C16A) | 1 | Protege bomba d'água de falhas elétricas e sobrecarga. |
Aplicativos e Serviços Online
- Arduino IDE - Para escrever firmware do Arduino
- Microsoft Visual Studio 2015 (Community Edition - grátis para até 5 usuários)
- Microsoft Windows 10 IoT Core - SO principal, controla dispositivos via Arduino e fornece console de gerenciamento
Sobre o Projeto
Na era atual, a tecnologia pode melhorar a vida humana. A automação era ficção científica, mas não mais. Combinando tecnologia mais recente com a casa, podemos construir um sistema incrível. Com Raspberry Pi e Windows 10, podemos criar um sistema de automação residencial capaz de operar dispositivos domésticos automaticamente.
Primeiros Passos
Antes de começar, vamos entender o básico. Considere a imagem a seguir (Configuração Geral):

Configuração por Cômodo
Um Arduino UNO controla dispositivos e lê sensores. Periodicamente, o Raspberry Pi solicita dados dos sensores coletados pelo Arduino. A figura "Arquitetura do Cômodo" mostra como o Arduino conecta dispositivos e sensores. Cada cômodo tem múltiplos dispositivos controláveis (luzes, ventilador, tomadas), um PIR (detecta presença), um sensor de temperatura (LM35) e um LDR (detecta intensidade de luz na janela).

Mapeamento de Endereços dos Dispositivos
A parte mais importante: como identificar dispositivos? Simples: combinamos número do cômodo com número do dispositivo.

Resumindo: Raspberry Pi atua como controlador principal. Cada cômodo tem seu Arduino UNO como escravo do Raspberry Pi. Comunicação via I2C.
Esquemáticos
Para facilitar, vamos implementar para o primeiro cômodo. Consulte o esquemático para conectar componentes corretamente.
Barramento I2C: Para conectar mais de um Arduino, use barramento I2C como mostrado abaixo.



Como Ligar Dispositivo na Placa Relé

Software
Projeto consiste em Raspberry Pi 2 e Arduino UNO. Software do Pi desenvolvido no Visual Studio 2015. Assumo que o leitor saiba criar projetos para Raspberry Pi 2 no VS 2015, e tenha conhecimento intermediário de Arduino, C# e Windows Universal XAML.
Vamos entender o software em:
- Protocolo (Como Raspberry Pi 2 e Arduino conversam)
- Estrutura de Classes (Como o Pi mantém objetos complexos)
- Interface do Usuário (Wireframe)
Protocolo (Comunicação Raspberry Pi 2 e Arduino via I2C)
Objetivos da comunicação:
- Ler sensores
- Ler estado dos dispositivos
- Definir estado dos dispositivos
Protocolo define regras de comunicação no barramento. Bytes de envio: 3 bytes fixos. Bytes de recebimento: array de 14 bytes.





Classe 'I2C_Helper' implementa o protocolo no projeto Universal App do Pi. No lado Arduino, a biblioteca I2C é fácil de entender.
Estrutura de Classes (Como o Raspberry Pi 2 Mantém Objetos)
Casa → múltiplos Cômodos → múltiplos Dispositivos + Sensores.


Classe principal "Home" contém lista genérica de cômodos (List<Room>). Fornece métodos estáticos para carregar/salvar objeto home no Pi.
Cômodo contém lista de dispositivos (List<Device>) e estrutura de sensores. Dispositivo tem detalhes e funções liga/desliga via protocolo Modo 2. Classes AmbientLight, PassiveIR e Temperature acessam dados ambientais. Objeto Room mantém dados dos sensores e atualiza periodicamente via protocolo Modo 0.
Interface do Usuário
Objetivos principais: Gerenciamento de Cômodos, Gerenciamento de Dispositivos, Serviços Externos (GSM, Internet).
Dividido em:
- Página Inicial: Status básico, data/hora, trava
- Dispositivos Favoritos: Acesso direto
- Página de Cômodos: Acesso a cômodos configurados e seus dispositivos
- Dispositivos de Água Comuns: Bomba d'água e aquecedor
- Configurações: Gerenciamento de cômodos e dispositivos
Wireframe





Baseado no wireframe, desenvolvi a UI mostrada a seguir. Código fonte completo disponível para download.














Como Configurar
Tentei tornar o software o mais fácil possível. Com configuração mínima, você opera dispositivos diretamente. Passo a passo:








Como Controlar Bomba d'Água e Aquecedor
Conecte bomba/aquecedor da mesma forma que outros dispositivos. Mas NÃO conecte diretamente na placa relé - vai queimar e é perigoso.
Use um contator: conecte a bomba/aquecedor ao contator e a bobina do contator à placa relé. Ao acionar o dispositivo, o relé ativa a bobina do contator e a bomba/aquecedor liga/desliga. Verifique a classificação da bobina e do contator. Compre contator com classificação ligeiramente superior à da bomba.
Como Implantar no Raspberry Pi 2
Consulte este link para entender o processo de implantação.
Como Registrar como App de Inicialização
Muitos hobbyistas querem o app iniciando logo após boot do Pi. Leia meu artigo: "Windows 10 IoT Core: Setting Startup App".
Problemas Conhecidos
Inicialização do Arduino
Ao bootar, o Arduino pisca pino D13. Não conecte relé no D13, senão o dispositivo piscará no boot.
Solução: 1) Não use D13 para relé. 2) Reescreva firmware OptiBoot sem usar D13 no boot e grave no Arduino.
Problema de Relógio
Raspberry Pi 2 não tem RTC on-board. Não mantém hora após queda de energia ou boot novo. RTC externo necessário.
Solução: NTP (precisa internet) ou Arduino lida com RTC e Pi solicita data/hora no boot. Anexe RTC externo diretamente ao Pi.

Problema de Depuração
Desenvolvendo Universal App em C#, enfrentei muitos problemas. Operações assíncronas são difíceis de depurar. Erros mostram tela genérica sem apontar linha problemática.

Solução: Coloque breakpoint antes da linha suspeita. Universal App ainda carece de recursos de depuração de apps Windows convencionais.
Futuro
Sem limitações para novas features. Comunicação remota via RF/IR em vez de I2C. Portal web com Azure para mobile. Automação real: eventos baseados em tempo (RTC) - ex: ligar luz quintal às 19h, desligar 22h; evento baseado: ligar luz jardim quando luminosidade cai abaixo de limite. Windows 10 IoT Core no Raspberry Pi 2 tem grande potencial.
Boa sorte e segurança!
Código
Sketch Arduino
/* Arduino Sketch v0.4 - Home Automation com Raspberry Pi 2 e Windows 10 IoT
Testado apenas em Atmega328p.
Prepara Arduino como dispositivo escravo no barramento I2C operado por Raspberry Pi 2.
Objetivos:
+ Coletar dados de sensores periodicamente (loop)
+ OnReceive: coletar instrução de 3 bytes e operar baseado no modo (ReceiveData)
+ OnRequest: enviar array de 14 bytes baseado no modo selecionado (SendData)
*/
#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 i=0;i<=13;i++) pinMode(i, 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 = analogRead(Pin_AmbientLight_LDR);
Value_AmbientLight_LDR = map(Value_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: // Ler Sensores
Response[0] = (byte)Value_AmbientLight_LDR;
Response[1] = (byte)(Value_PassiveIR ? 1 : 0);
Response[2] = (byte)(Value_Temperature < 0 ? 0 : 1);
Response[3] = (byte)(Value_Temperature < 0 ? -Value_Temperature : Value_Temperature);
break;
case 1: // Ler Estado Dispositivos
for(int i=0, pin=0; i<14; i++, pin++) {
if(pin==2) pin++; // Pula pino 2 (usado para PIR)
if(pin==13) pin=A2; // Após 12 vai para A2
if(pin==14) pin=A3;
Response[i] = (digitalRead(pin) == HIGH) ? 1 : 0;
}
break;
case 2: // Definir Estado Dispositivo
Response[0] = (digitalRead(Pin) == HIGH) ? 1 : 0;
break;
}
Wire.write(Response, 14);
}
Software Raspberry Pi 2 (Windows Headed App)
https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-
Esquemáticos
Adicione múltiplos cômodos conectando Arduinos individuais com endereços I2C escravos únicos no barramento.

Home%20Automation%20Schematic%20-%20Anurag%20S%20Vasanwala.fzz
Processo de manufatura
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Construa um Controlador Doméstico Inteligente 433 MHz com Sensorflare e Raspberry Pi
- Sensor de Ocupação de Banheiro com Raspberry Pi: Alertas por Voz e SMS via Twilio
- Monitore a Temperatura da Sua Casa com Dashboard no Raspberry Pi
- Construa Sistema de Automação Residencial com Raspberry Pi para Controle Remoto
- Enviando Dados do IMU Adafruit 10DOF do Raspberry Pi 2 ao Azure Event Hubs com Windows 10 IoT Core
- Monitoramento Preciso de Temperatura e Umidade com SHT15 no Windows 10 IoT Core
- Instalando Windows 10 IoT Core no Raspberry Pi 3 Model B+: Guia Passo a Passo
- Integrando Microsoft Kinect com Raspberry Pi para Detecção Humana em Tempo Real no Robô Sonbi
- Automação e IoT: Moldando o Futuro da Gestão da Cadeia de Suprimentos