Automatize Tomadas Residenciais com Windows 10 IoT Core, Raspberry Pi e Arduino
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Raspberry Pi 2 Model B | 1 |
| Xbee | 2 |
| Arduino UNO | 1 |
| Cabo FTDI | 2 |
| Shield Relé 4 Canais para Arduino | 1 |
| SparkFun XBee Shield | 1 |
Aplicativos e Serviços Online
- XCTU
- Visual Studio 2015+
- Arduino IDE
- Microsoft Azure
- Microsoft Windows 10 IoT Core
Sobre o Projeto
Introdução
Neste projeto, veremos como controlar as tomadas de energia da sua casa nativamente e na nuvem usando Raspberry Pi rodando Windows 10 IoT, XBee e Arduino. Todos os exemplos de código estão disponíveis no GitHub.
Por que automatizar tomadas de energia?
Em vez de controlar os dispositivos da nuvem, se você puder automatizar as tomadas de energia, pode conectar qualquer dispositivo à tomada e controlá-los. Neste projeto, usei exemplos para controlar um ventilador e uma lâmpada.
Vamos começar com as Abelhas (XBees)
Usei XBee para transferir sinais de rádio. Um XBee chamado Coordenador é conectado ao Raspberry Pi e o outro chamado Roteador conectado à tomada de energia. O Coordenador envia os sinais baseados na nossa entrada para o Roteador controlar as tomadas de energia.
Configurar XBees no Modo AT
Baixe e instale o XCTU.
Para atualizar o firmware Zigbee (XBee), usei o adaptador FTDI da Adafruit.
Assista a este tutorial sobre como configurar os XBees no modo AT.
Você precisa ter certeza de que esses dois XBees conversam entre si antes de prosseguir para o próximo passo.
Configurar o Receptor
Precisamos do Zigbee Roteador, Arduino UNO R3, XBee Shield para Arduino e Shield Relé para Arduino.
Sketch do Arduino
Se os dados do Coordenador Zigbee forem ON1, ligamos o relé1. Se os dados forem ON2, ligamos o relé2. Da mesma forma, desligamos o relé para OFF1 e OFF2.
Você deve compilar isso na Arduino IDE e gravar no Arduino Uno:
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
}
void loop() {
//Verifica se há dados seriais disponíveis
if(Serial.available() > 0){
state = Serial.readString();
Serial.println(state);
}
//Se texto é ON1. Liga o relé1
if(state == "ON1\r\n")
digitalWrite(RELAY1,1);
//Se texto é ON2. Liga o relé2
else if(state == "ON2\r\n")
digitalWrite(RELAY2,1);
//Se texto é OFF1. Desliga o relé1
else if(state == "OFF1\r\n")
digitalWrite(RELAY1,0);
//Se texto é OFF2. Desliga o relé2
else if(state == "OFF2\r\n")
digitalWrite(RELAY2,0);
//Não faz nada
else{
digitalWrite(RELAY1,0);
digitalWrite(RELAY2,0);
}
}
Configurar a tomada de energia (Precaução: estamos lidando com alta tensão)
Relés são tecnologias antigas no campo da eletrônica. Funcionam como um interruptor. A entrada do relé pode ser tensão AC (110 a 240 V). Usando um microcontrolador como Arduino, podemos ligar/desligar o relé.
Vamos conectar alta tensão ao relé, por favor respeite a corrente AC e tome extrema precaução ao conectar os fios ao relé. Isso é muito perigoso, prossiga por sua conta e risco.
Em vez de configurar o relé diretamente na tomada de energia, usei um cabo de extensão. O conceito é o mesmo.
No cabo de extensão, deixe um fio como está e corte o outro. Conecte uma extremidade do fio ao Comum (C) e a outra ao NA (Normalmente Aberto).
Conecte o Shield Relé ao Arduino, empilhe o XBee Shield em cima do shield relé. Conecte o Zigbee configurado como Roteador no XBee Shield.
Usei o XBee Shield para conectar o XBee ao Arduino. Certifique-se de que as configurações no shield estejam definidas para XBee. Este shield junto com o Arduino também pode ser usado para gravar as configurações de firmware quando colocamos o switch em USB. Ele usa o chip FTDI embutido do Arduino para gravar os dados no XBee.
Conecte os cabos e alimente o Arduino usando uma fonte de bateria externa. O receptor está pronto.
Configurando o Servidor
Para configurar o servidor, precisamos do Raspberry Pi 2 rodando Windows 10 IoT e Zigbee configurado como coordenador.
Conecte o Zigbee ao adaptador FTDI, e o cabo USB FTDI RS 232 de 6 pinos à porta USB do Raspberry Pi. Configuraremos um servidor web no Raspberry Pi usando UWP. O servidor aguardará a entrada do usuário e, com base na seleção, gravará os dados seriais na porta USB onde o cabo FTDI RS 232 está conectado, o Zigbee transmitirá esta mensagem como ondas de rádio. Já configuramos o DH e DL do roteador no Zigbee coordenador, então a mensagem é enviada para o Zigbee Roteador correto.
Para saber mais sobre drivers FTDI para Raspberry Pi, veja https://github.com/jark/ftdisample
Siga este vídeo para configurar o servidor no Raspberry Pi.
Todos os exemplos de código estão disponíveis no GitHub.
Habilitar Azure
Para controlar nossa casa de qualquer lugar do mundo, habilitamos serviços em nuvem para nossa aplicação.
Você precisa criar um site e hospedá-lo no Azure. Criar um Azure SQL DB para autenticar/autorizar usuários do seu site. Criar um Serviço de Armazenamento em Nuvem Azure para receber nossos comandos. Processar esses comandos do Raspberry Pi Blinky App e controlar sua casa.
Consulte este artigo para criar tabelas de armazenamento:
https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/
Para criar tabelas SQL, consulte este artigo:
https://azure.microsoft.com/en-us/documentation/articles/sql-database-get-started/
Assista ao tutorial em vídeo sobre como usar o Azure para nosso projeto.
Demonstração
Tentei mostrar como você pode controlar as tomadas de energia de duas formas:
- Acessando a URL do servidor web do Raspberry Pi na rede local
- Através de aplicação web ASP.NET 5 hospedada no Azure
Conclusão
- Este tipo de automação resolve muitos problemas do mundo real. Ao adicionar sensores adicionais como luz e detector de movimento, podemos ligar/desligar a luz ou pelo menos fornecer dados ao usuário para economizar energia.
- Idosos podem usar controle remoto para controlar suas tomadas. Neste caso, precisaríamos de um dispositivo RFID adicional.
- Podemos criar agendamentos para ligar/desligar luzes para economizar energia.
- Se houver intrusos, todas as luzes podem ser acesas.
- Em férias, sem preocupações... podemos simplesmente desligar nossa casa com um clique.
- Não precisa manter a temperatura do quarto o tempo todo, faça quando achar apropriado. Economiza energia.
Código
Relé (C/C++)
Para Controlar Relé
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
}
void loop() {
//Verifica se há dados seriais disponíveis
if(Serial.available() > 0){
state = Serial.readString();
Serial.println(state);
}
//Se texto é ON1. Liga o relé1
if(state == "ON1\r\n")
digitalWrite(RELAY1,1);
//Se texto é ON2. Liga o relé2
else if(state == "ON2\r\n")
digitalWrite(RELAY2,1);
//Se texto é OFF1. Desliga o relé1
else if(state == "OFF1\r\n")
digitalWrite(RELAY1,0);
//Se texto é OFF2. Desliga o relé2
else if(state == "OFF2\r\n")
digitalWrite(RELAY2,0);
//Não faz nada
else{
digitalWrite(RELAY1,0);
digitalWrite(RELAY2,0);
}
}
Exemplos
Código de exemplo: https://github.com/syediddi/hacksterio
Esquemáticos
Conexão do cabo de energia ao relé
Processo de manufatura
- Construa uma Rede de Sensores Sem Fio Acessível para Sua Casa
- Construa uma Porta com Reconhecimento Facial Seguro usando Windows IoT e Raspberry Pi
- 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
- Construa um Robô Controlado por Fala com Windows 10 IoT Core no Raspberry Pi 2
- Estendendo GoPiGo v2 no Windows 10 IoT Core para Raspberry Pi 3
- Aproveitar a IoT: Acelerar a Transformação Digital Hoje
- Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
- Sistema de Controle de Piscina com Azure IoT: Sensores Inteligentes e Monitoramento Remoto
- Crie Dashboards Power BI a partir de Dados PLCnext na Nuvem