A automação residencial é a nova tendência entre os domicílios urbanos. O sistema de automação residencial permite controlar eletrodomésticos através de um controle remoto. O controle remoto pode ser um controle remoto IR, um controle remoto RF ou até mesmo um telefone celular. Um sistema de automação residencial baseado na Internet pode ser a configuração mais acessível porque tal sistema pode ser controlado de qualquer lugar e a qualquer hora. Tipo, a pessoa está voltando para casa e antes de sair do escritório e entrar no carro pode ligar o ar condicionado da sua sala para que quando chegar em casa a sala já esteja resfriada. Tal vantagem só pode ser aproveitada em uma automação residencial controlada pela internet.
Este é um projeto IOT para automação residencial baseado em Particle Photon. Os eletrodomésticos são conectados ao Particle Photon através de um circuito de relé. Alguns sensores, como o sensor de temperatura e umidade DHT-11 e o sensor LDR para detecção de intensidade de luz, também têm interface com o Particle Photon. O Photon está conectado ao serviço de nuvem via conexão Wi-Fi e os comandos para controlar os aparelhos são passados por meio de uma página web que é transferida via Serviço de Nuvem do Particle.
Particle Photon é uma placa IOT compatível com Arduino. Para escrever o código do programa para qualquer Photon, o desenvolvedor precisa criar uma conta no site do Particle e registrar a placa Photon com sua conta de usuário. O código do programa pode então ser escrito no Web IDE no site da Particle e transferido para uma placa IOT registrada pela Internet. Se o Aglomerado selecionado, Photon aqui, estiver ligado e conectado ao serviço de nuvem do Particle, o código é gravado no cartão selecionado pelo ar através da conexão com a internet e o cartão passa a operar de acordo com o código transferido.
Para controlar a placa pela internet, foi desenvolvida uma página web que utiliza Ajax e Jquery para enviar dados à placa utilizando o método HTTP POST. A página da web identifica a placa por um ID de dispositivo e se conecta ao Particle's Cloud Service por meio de um token de acesso.
Componentes necessários –
Lado do receptor:
1. Partícula Fóton.
2. Sensor DHT11.
3. Sensor LDR.
4. Uma conexão Wi-Fi doméstica.
5. Relé 12V
6. Transistor BC547
7. Resistor de 1K ohm
8. LED de 5mm
9. Plugue de dois pinos
10. Suporte de três pinos
Lado do transmissor:
1. Página da Web (EngineersGarageIoT.html)
Diagrama de bloco –
Fig. 1: Diagrama de blocos do sistema de automação residencial IoT baseado em partículas fótons
Conexões de Circuito –
![Protótipo de sistema de automação residencial IoT baseado em partículas fótons Protótipo de sistema de automação residencial IoT baseado em partículas fótons](https://www.engineersgarage.com/sites/default/files/Prototype-Particle-Photon-Based-IoT-Home-Automation-System.%20Jpg)
Fig. 2: Protótipo de sistema de automação residencial IoT baseado em partículas fótons
O circuito de relé que opera a função de comutação dos aparelhos é conectado ao Particle Photon. Existem também dois sensores – sensor de temperatura e umidade DHT-11 e sensor LDR conectados à placa para monitorar temperatura, umidade e intensidade de luz. O circuito é montado da seguinte maneira –
Fonte de alimentação – No circuito, os módulos de partículas fótons e sensores precisam de uma CC regulada de 5 V, enquanto os relés precisam de uma CC regulada de 12 V para sua operação. A rede elétrica CA é usada como fonte primária de energia. A alimentação da rede elétrica é reduzida por um transformador e retificada por um retificador de ponte completa. A saída retificada é regulada para 5V e 12V usando CIs 7805 e 7812. O pino 1 de ambos os CIs reguladores de tensão está conectado ao ânodo da bateria e o pino 2 de ambos os CIs está conectado ao terra. As respectivas saídas de tensão são extraídas do pino 3 dos respectivos CIs reguladores de tensão. Um LED junto com um resistor pull-up de 10K Ω também é conectado entre o terra comum e o pino de saída para obter uma dica visual da continuidade da alimentação.
Relés – Os relés 12V 2A são usados para ligar ou desligar os aparelhos AC do projeto. Os relés são conectados aos pinos D0, D1, D2 e D3 do Particle Photon através de circuitos de transistor BC547 conectados em uma configuração de emissor comum. O fio de fase da alimentação CA é fornecido no terminal COM dos relés. Quando uma lógica HIGH é recebida nos pinos do microcontrolador interligados, o ponto COM muda do ponto NC para o ponto NO, onde um relé curto-circuita a fase com o fio neutro ligando a alimentação do aparelho. Os LEDs são conectados paralelamente ao circuito do relé com resistores pull-up em série. Esses LEDs fornecem uma indicação visual do status ON/OFF dos aparelhos.
Sensor de temperatura e umidade DHT-11 – O sensor DHT-11 lê a temperatura e umidade ambiente e retransmite os dados para o microcontrolador como dados digitais. O pino de dados do sensor de temperatura e umidade DHT11 é conectado ao pino A0 do Particle Photon e o VCC e o aterramento são conectados ao VCC comum e ao aterramento.
Sensor LDR – O LDR é usado para detectar a intensidade da luz. O sensor está conectado ao pino A1 do Particle Photon. O sensor está conectado em um circuito divisor de potencial. O LDR fornece uma tensão analógica que é convertida em leitura digital pelo ADC embutido.
Como funciona o circuito –
Fig. 3: Imagem mostrando o sistema de automação residencial IoT baseado em Particle Photon em ação
Assim que o código do programa é transferido para o Particle Photon, ele começa a operar de acordo com ele. O Particle Photon deve estar conectado a qualquer hotspot de internet via Wi-Fi. O código compatível com Arduino no Photon inicialmente desliga todos os aparelhos, passando uma lógica LOW nos pinos que conectam os relés e começa a buscar dados dos sensores.
O Sensor de Temperatura e Umidade DHT11 é um sensor digital com sensor de umidade capacitivo embutido e termistor. Ele transmite uma leitura de temperatura e umidade em tempo real a cada 2 segundos. O sensor opera com alimentação de 3,5 a 5,5 V e pode ler temperatura entre 0° C e 50° C e umidade relativa entre 20% e 95%. O Sensor DHT 11 envia dados em formato digital para um pino controlador no protocolo one-wire que deve ser implementado no lado do firmware. Primeiro, o pino de dados é configurado para entrada e um sinal de início é enviado a ele. O sinal de início compreende um BAIXO por 18 milissegundos seguido por um ALTO por 20 a 40 microssegundos seguido por um BAIXO novamente por 80 microssegundos e um ALTO por 80 microssegundos.
Depois de enviar o sinal de início, o pino é configurado para saída digital e os dados de 40 bits compostos pela leitura de temperatura e umidade são bloqueados. Dos dados de 5 bytes, os dois primeiros bytes são uma parte inteira e uma parte decimal da leitura da umidade relativa, respectivamente, o terceiro e o quarto bytes são uma parte inteira e uma parte decimal da leitura da temperatura e o último é o byte da soma de verificação. O protocolo one-wire é implementado no firmware usando uma biblioteca de código aberto disponível para Photon.
O sensor IR emite uma tensão analógica no pino do controlador com interface. A tensão analógica é lida e digitalizada usando o canal ADC embutido. A função analogRead é usada para ler a tensão analógica no pino do controlador.
Os dados lidos do sensor são passados para o Particle Cloud via conexão Wi-Fi e a placa aguarda o comando para ligar os aparelhos no ar. O usuário exibiu dados do sensor na página da web e possui botões para ligar ou desligar dispositivos na mesma página da web. À medida que o usuário toca em um botão para ligar ou desligar um dispositivo, o comando é transferido pela Internet por meio do serviço Particle's Cloud na forma de strings seriais. As strings são recebidas via método HTTP POST pelo Particle Photon. Ao detectar o comando, a placa muda a lógica digital no respectivo pino para HIGH para ligar o dispositivo ou LOW para desligar o dispositivo.
Confira o código do fóton para saber como o código compatível com Arduino detecta comandos no ar e lê dados de sensores e publica-os no URL de registro de dados vinculado.
Guia de programação –
Código de fótons
Primeiro de tudo, a biblioteca do sensor DHT é importada. A biblioteca é adicionada automaticamente pelo Web IDE da partícula. Uma constante é definida para denotar o pino ao qual o sensor DHT 11 está conectado e uma constante é definida para denotar uma variante do sensor DHT. São declaradas variáveis para conter o valor de temperatura, umidade e intensidade de luz. Variáveis que denotam eletrodomésticos são declaradas e atribuídas aos pinos do microcontrolador. Um objeto do tipo DHT é declarado.
Uma matriz de caracteres é declarada para conter os dados do sensor a serem enviados para a página da web.
A função setup é chamada na qual o pino conectado aos relés é declarado como pino de saída usando a função pinMode . O sensor DHT é inicializado chamando o método Begin no objeto DHT. Uma variável getpos e uma função setpos são expostas da nuvem e recuperadas por meio do método POST chamando os métodos Particle.variable e Particle.function. A função setup é executada apenas uma vez no início do código.
A função loop é chamada e itera infinitamente. Na função loop , os dados do sensor DHT são obtidos usando os métodos getTempCelcius e getHumidity no objeto DHT. Os dados do sensor LDR são obtidos chamando o método analogRead e convertidos em intensidade de luz usando fórmulas padrão. Os dados de diferentes sensores são armazenados em variáveis, agrupados em strings adequadas e enviados para a URL de registro de dados usando o métodopublish no objeto Particle.
Fig. 4: Captura de tela da função Loop no código de fótons para sistema de automação residencial baseado em IoT
Este é um arquivo HTML que precisa ser executado para enviar dados ao serviço Particle's Cloud. O serviço em nuvem se conecta automaticamente ao Photon e o Code on Photon opera de acordo com os dados recebidos da nuvem.
Código HTML
Para controlar os eletrodomésticos pela Internet, é necessário criar uma página web. A página da web terá o seguinte HTML e Javascript incorporados em linha.
O doctype é declarado para definir a página para a versão HTML 5 e o elemento head é adicionado. Dentro do elemento head, o conjunto de caracteres é definido como utf-8 e a página da web é configurada para abranger toda a janela. O Bootstrap para CSS e Javascript é incluído no CDN usando o elemento link.
O elemento body é declarado e um elemento de divisão adicional é declarado para conter o conteúdo da página web. A página da web é estruturada por meio de outros elementos de divisão e alguns elementos de parágrafo de cabeçalho e botões são adicionados.
Este é um arquivo HTML que precisa ser executado para enviar dados ao serviço Particle's Cloud. O serviço em nuvem se conecta automaticamente ao Photon e o Code on Photon opera de acordo com os dados recebidos da nuvem.
O código completo para automação residencial baseada na Internet pode ser encontrado na guia código-fonte.
Nota: O arquivo HTML pode ser baixado do anexo mencionado abaixo.
###
//Program to
// This #include statement was automatically added by the Particle IDE.
#include
// DHT parameters
#define DHTPIN A0
#define DHTTYPE DHT11
// Variables
int temperature;
int humidity;
int light;
int motion;
int ultraviolet;
int light_sensor_pin = A1;
int uv = A3;
int pos = 0;
// Pins
int Device0 = D0;
int Device1 = D1;
int Device2 = D2;
int Device3 = D3;
// DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// publishjson.ino -- Spark Publishing Example
unsigned long lastTime = 0UL;
char publishString(64);
void setup {
Serial1.begin(9600);
pinMode(Device0,OUTPUT);
pinMode(Device1,OUTPUT);
pinMode(Device2,OUTPUT);
pinMode(Device3,OUTPUT);
digitalWrite(Device0,LOW);
digitalWrite(Device1,LOW);
digitalWrite(Device2,LOW);
digitalWrite(Device3,LOW);
dht.begin ;
Particle.function("setpos", setPosition);
Particle.variable("getpos", &pos, INT);
}
void loop {
// Temperature measurement
temperature = dht.getTempCelcius ;
// Humidity measurement
humidity = dht.getHumidity ;
// Light level measurement
float light_measurement = analogRead(light_sensor_pin);
light = (int)(light_measurement/4096*100);
int uvValue=analogRead(uv);
ultraviolet = (uvValue*100)/4023;
unsigned long now = millis ;
Particle.function("led",ledControl);
//Every 5 seconds publish uptime
if (now-lastTime>5000UL) {
lastTime = now;
sprintf(publishString,"{"Temperature": %u, "Humidity": %u, "Light": %u}",temperature,humidity,light);
Particle.publish("Uptime",publishString);
}
}
int setPosition(String posValue) {
pos = posValue.toInt ;
Serial1.printf("%u", pos);
return 0;
}
int ledControl(String command) {
int state =0;
int pinNumber = (command.charAt(1)-'0') - 1;
if(pinNumber < 0 pinNumber > 7) return -1;
if(command.substring(3,7) == "HIGH") state = 1;
else if(command.substring(3,6) == "LOW") state = 0;
else return -2;
digitalWrite(pinNumber,state);
return 1;
}