Índice:

NexArdu: Controle inteligente de iluminação: 5 etapas
NexArdu: Controle inteligente de iluminação: 5 etapas

Vídeo: NexArdu: Controle inteligente de iluminação: 5 etapas

Vídeo: NexArdu: Controle inteligente de iluminação: 5 etapas
Vídeo: Séance ordinaire - 5 juillet 2021 2024, Novembro
Anonim
NexArdu: controle inteligente de iluminação
NexArdu: controle inteligente de iluminação

Atualizar

Se tiver desenvolvido a mesma funcionalidade usando o Home Assistant. O Home Assistant oferece uma vasta gama de possibilidades. Você pode encontrar o desenvolvimento aqui.

Um esboço para controlar a iluminação doméstica de maneira inteligente por meio de dispositivos sem fio do tipo X10 de 433,92 MHz (também conhecido como 433 MHz), por exemplo, Nexa.

Fundo

No que se refere à iluminação decorativa, tem sido um tanto cansativo para mim que a cada duas ou três semanas eu tenha que reajustar os temporizadores que ligam as luzes por causa do deslocamento da hora solar em relação ao CET. Ao mesmo tempo, algumas noites vamos para a cama mais cedo do que outras. Por isso, às vezes as luzes se apagam "muito tarde" ou "muito cedo". O exposto acima me desafiou a pensar: eu quero que a iluminação decorativa acenda sempre no mesmo nível de luz ambiente e depois apague em um determinado momento dependendo de estarmos acordados ou não.

Objetivo

Este instrutível explora as possibilidades de dispositivos controlados sem fio como System Nexa operando na frequência 433,92 MHz. Aqui devemos apresentar:

  1. Controle de iluminação automatizado
  2. Controle da web

Controle da web. Servidor da Web interno vs externo

O servidor interno explora a possibilidade do escudo Arduino Ethernet de fornecer um servidor web. O servidor da web atenderá as chamadas do cliente da web para verificar e interagir com o Arduino. Esta é uma solução direta com funcionalidade limitada; as possibilidades de aprimorar o código do servidor web são limitadas pela memória do Arduino. O servidor externo requer a configuração de um servidor web PHP externo. Esta configuração é mais complicada e não é suportada por este tutorial, entretanto, o código / página PHP para verificar e orientar o Arduino é fornecido com funcionalidades básicas. As possibilidades de aprimoramento do servidor web são, neste caso, limitadas pelo servidor web externo.

Lista de materiais

Para tirar o máximo proveito das possibilidades que este esboço oferece, você precisa:

  1. Um Arduino Uno (testado em R3)
  2. Um escudo Arduino Ethernet
  3. Um conjunto Nexa ou similar operando a 433,92 MHz
  4. Um sensor PIR (Infravermelho passivo) operando a 433,92 MHz
  5. Um resistor de 10KOhms
  6. Um LDR
  7. Um RTC DS3231 (apenas versão de servidor externo)
  8. Um transmissor de 433,92 MHz: XY-FST
  9. Um receptor de 433,92 MHz: MX-JS-05V

O mínimo recomendado é:

  1. Um Arduino Uno (testado em R3)
  2. Um conjunto Nexa ou similar operando a 433,92 MHz
  3. Um resistor de 10KOhms
  4. Um LDR
  5. Um transmissor de 433,92 MHz: XY-FST

(A omissão da blindagem Ethernet requer modificações do esboço não fornecido neste instrutível)

A Nexa Logic. Uma breve descrição

O receptor Nexa aprende o ID do controle remoto e o ID do botão. Em outras palavras, cada controle remoto tem seu número de remetente e cada par de botões liga / desliga tem seu ID de botão. O receptor tem que aprender esses códigos. Alguns documentos Nexa afirmam que um receptor pode ser emparelhado com até seis controles remotos. Os parâmetros Nexa:

  • SenderID: ID do controle remoto
  • ButtonID: número do par de botões (liga / desliga). Começa com o número 0
  • Grupo: sim / não (também conhecido como botões "Todos desligar / ligar")
  • Comando: liga / desliga

Passos instrutíveis. Observação

As diferentes etapas descritas aqui são para oferecer dois sabores diferentes sobre como atingir o objetivo. Sinta-se à vontade para escolher o que for mais conveniente. Aqui está o índice:

Etapa # 1: O circuito

Etapa 2: Nexardu com servidor da Web interno (apresentando NTP)

Etapa # 3: Nexardu com servidor externo

Etapa # 4: informações valiosas

Etapa 1: O circuito …

O circuito…
O circuito…

Conecte os diversos componentes conforme mostrado na imagem.

Arduino pino nº 8 para o pino de dados no RX (receptor) moduleArduino pino nº 2 para o pino de dados no RX (receptor) moduleArduino pino nº 7 para o pino de dados no TX (remetente) moduleArduino pino A0 para LDR

Configuração RTC. Necessário apenas na configuração do Servidor Externo. Pino Arduino A4 para pino SDA no módulo RTC Pino Arduino A5 para pino SCL no módulo RTC

Etapa 2: Nexardu com servidor da Web interno (com NTP)

As bibliotecas

Este código faz uso de muitas bibliotecas. A maioria deles pode ser encontrada através do "Library Manager" do Arduino IDE. Você não deveria encontrar uma biblioteca listada, por favor, google.

Wire.hSPI.h - Requerido por Ethernet shieldNexaCtrl.h - Controlador de dispositivo Nexa Ethernet.h - Para habilitar e apresentar Ethernet shieldRCSwitch.h - Requerido para PIRTime.h - Requerido para RTCTimeAlarms.h - Gerenciamento de alarme de tempoEthernetUdp.h - Requerido para Cliente NTP

O esboço

O código abaixo explora a possibilidade de usar a placa Arduino UNO não apenas como meio para controlar dispositivos Nexa, mas também possui um servidor Web interno. Uma observação a adicionar é que o módulo RTC (Real Time Clock) é ajustado automaticamente via NTP (Network Time Protocol).

Antes de fazer upload do código para o Arduino, pode ser necessário configurar o seguinte:

  • SenderId: você precisa farejar o SenderId primeiro, veja abaixo
  • PIR_id: você precisa farejar o SenderId primeiro, veja abaixo
  • Endereço IP da LAN: defina um IP da sua LAN para o seu escudo Ethernet Arduino. Valor padrão: 192.168.1.99
  • Servidor NTP: não é estritamente necessário, mas pode ser bom pesquisar no Google por servidores NTP nas proximidades. Valor padrão: 79.136.86.176
  • O código é ajustado para o fuso horário CET. Ajuste este valor - se necessário, para o seu fuso horário para exibir a hora correta (NTP)

Farejando os códigos Nexa

Para isso, você precisa conectar pelo menos o componente RX ao Arduino, conforme mostrado no circuito.

Encontre abaixo o esboço Nexa_OK_3_RX.ino que, no momento em que este é escrito, é compatível com os dispositivos Nexa NEYCT-705 e PET-910.

As etapas a seguir são:

  1. Emparelhe o receptor Nexa com o controle remoto.
  2. Carregue Nexa_OK_3_RX.ino no Arduino e abra o "Monitor Serial".
  3. Pressione o botão do controle remoto que controla o receptor Nexa.
  4. Anote o "RemoteID" e o "ButtonID".
  5. Defina esses números em SenderID e ButtonID na declaração de variável do esboço anterior.

Para ler o Id do PIR, basta usar este mesmo sketch (Nexa_OK_3_RX.ino) e ler o valor no "Monitor Serial" quando o PIR detectar movimento.

Etapa 3: Nexardu com servidor externo

As Bibliotecas

Este código usa muitas bibliotecas. A maioria deles pode ser encontrada através do "Library Manager" do Arduino IDE. Se você não encontrar uma biblioteca listada, google.

Wire.hRTClib.h - esta é a biblioteca de https://github.com/MrAlvin/RTClibSPI.h - Requerido por Ethernet shieldNexaCtrl.h - Nexa device controllerEthernet.h - Para habilitar e apresentar o Ethernet shieldRCSwitch.h - Requerido para PIRTime.h - Requerido para RTCTimeAlarms.h - Gerenciamento de alarme de tempoaREST.h - para serviços RESTful API explorados por serverair / wdt.h externo - Manuseio de cronômetro de watchdog

O esboço

O esboço abaixo apresenta outro sabor da mesma coisa, desta vez potencializando as possibilidades que um servidor web externo pode oferecer. Como já mencionado na introdução, O Servidor Externo requer a configuração de um servidor web PHP externo. Esta configuração é mais complicada e não é suportada por este tutorial, entretanto, o código / página PHP para verificar e orientar o Arduino é fornecido com funcionalidades básicas.

Antes de fazer upload do código para o Arduino, pode ser necessário configurar o seguinte:

  • SenderId: você precisa farejar o SenderId primeiro, consulte Farejando os códigos Nexa na etapa anterior
  • PIR_id: você precisa farejar o SenderId primeiro, consulte Farejando os códigos Nexa na etapa anterior
  • Endereço IP da LAN: defina um IP da sua LAN para o seu escudo Ethernet Arduino. Valor padrão: 192.168.1.99

Para o procedimento de detecção de código Nexa, consulte a Etapa # 1.

Arquivo complementar

Carregue o arquivo nexardu4.txt anexado para o seu servidor PHP externo e renomeie-o para nexardu4.php

Horário RTC definido

Para definir a hora / data no RTC, eu uso o esboço SetTime que vem junto com a biblioteca DS1307RTC.

Etapa 4: informações valiosas

Informação valiosa
Informação valiosa
Informação valiosa
Informação valiosa

Bom saber comportamento

  1. Quando o Arduino está sob "Light Automatic Control", ele pode passar por quatro estados diferentes em relação à iluminação ambiente e à hora do dia:

    1. Wakefully: Arduino espera a noite chegar.
    2. Ativo: A noite chegou e o Arduino ligou as luzes.
    3. Somnolent: As luzes estão LIGADAS, mas está chegando a hora de apagá-las. Ele começa em "time_to_turn_off - PIR_time", ou seja, se time_to_turn_off estiver definido como 22:30 e PIR_time definido como 20 minutos, então o Arduino entrará no estado sonolento às 22:10.
    4. Dormente: A noite passa, o Arduino desligou as luzes e o Arduino espera o amanhecer para acordar.
  2. O Arduino está sempre ouvindo os sinais enviados por controles remotos. Possui a possibilidade de mostrar o estado das luzes (ligadas / desligadas) na web quando o controle remoto é usado.
  3. Enquanto o Arduino está acordado, ele tenta DESLIGAR as luzes o tempo todo, portanto, os sinais LIGADOS enviados por um controle remoto para ligar as luzes podem ser capturados pelo Arduino. Se isso acontecer, o Arduino tentará desligar as luzes novamente.
  4. Enquanto o Arduino está ativo, ele tenta acender as luzes o tempo todo, portanto, os sinais OFF enviados por um controle remoto para desligar as luzes podem ser capturados pelo Arduino. Se isso acontecer, o Arduino tentará acender as luzes novamente.
  5. No estado de sonolência, as luzes podem ser ligadas / desligadas com um controle remoto. O Arduino não irá contra-atacar.
  6. No estado de sonolência, a contagem regressiva PIR começará a zerar de "time_to_turn_off - PIR_time" e assim o time_to_turn_off será estendido em 20 minutos toda vez que o PIR detectar movimento. A mensagem "Sinal PIR detectado!" a mensagem será exibida no navegador da web quando isso acontecer.
  7. Enquanto o Arduino está inativo, as luzes podem ser ligadas e desligadas por meio do controle remoto. O Arduino não irá contra-atacar.
  8. Uma reinicialização ou ciclo de energia do Arduino o colocará no modo ativo. Isso significa que se o Arduino foi reiniciado após time_turn_off, o Arduino acenderá as luzes. Para evitar isso, o Arduino precisa ser colocado no modo manual (marque "Light Automatic Control") e espere até de manhã para voltar ao "Light Automatic Control".
  9. Como mencionado anteriormente, o Arduino espera o amanhecer para ficar ativo novamente. Por causa disso, o sistema pode ser enganado ao direcionar uma luz forte o suficiente para o sensor de luz que deve ultrapassar o limite de "luminosidade mínima". Se isso acontecer, o Arduino deve mudar para o estado ativo.
  10. O valor de Tolerância é de grande importância para evitar que o sistema ligue e desligue em torno do valor limite Luminosidade mínima. As luzes LED, devido à sua oscilação e alta capacidade de resposta, podem ser uma fonte de comportamento oscilante. Aumente o valor de tolerância se você tiver esse problema. Eu uso o valor 7.

É bom saber sobre o código

  1. Como você pode notar, o código é muito grande e faz uso de uma quantidade considerável de bibliotecas. Isso compromete a quantidade de memória livre necessária para o heap. Eu observei um comportamento instável no passado, tendo o sistema interrompido, especialmente após chamadas pela web. Portanto, o maior desafio que tive foi limitar seu tamanho e o uso de diversas variáveis para tornar o sistema estável.
  2. O código que explora o servidor interno - usado por mim em casa, está rodando desde fevereiro de 2016 sem problemas.
  3. Eu coloquei esforços consideráveis para enriquecer o código com explicações. Aproveite isso para brincar com diversos parâmetros, como número de envios de código Nexa por burst, tempo de sincronização NTP, etc.
  4. O código não possui horário de verão. Isso precisa ser ajustado por meio do navegador da web quando aplicável.

Alguns pontos a considerar

  1. Adicione as antenas aos módulos de radiofrequência (RF) TX e RX. Você vai economizar tempo reclamando de dois pontos principais: resiliência e alcance do sinal de RF. Eu uso um fio de 50 ohms com 17,28 cm (6,80 pol.) De comprimento.
  2. Este intrutável pode funcionar com outros sistemas de automação residencial como o Proove, por exemplo. Uma das muitas condições a cumprir é fazê-los operar na frequência 433,92 MHz.
  3. Uma grande dor de cabeça com o Arduino é lidar com bibliotecas que podem ser atualizadas com o tempo e, de repente, não voltar a ser compatíveis com o seu esboço "antigo"; o mesmo problema pode surgir ao atualizar seu IDE Arduino. Esteja ciente de que este pode ser o nosso caso aqui - sim, o meu problema também.
  4. Vários clientes da web simultâneos com diferentes modos de luz criam um estado "piscando".

Captura de tela

No carrossel de imagens acima, você encontra uma captura de tela da página da web exibida quando você chama o Arduino por meio do seu navegador. Dada a configuração de IP padrão do código, o URL seria

Um aspecto que pode ser melhorado é o posicionamento do botão "enviar", uma vez que ele tem efeito em todas as caixas de entrada e não apenas no "Controle Automático de Luz" como se poderia imaginar. Em outras palavras, se você deseja alterar qualquer um dos valores possíveis, você sempre precisa clicar no botão "enviar".

Documentação detalhada / avançada

Anexei os arquivos a seguir para que possam ajudá-lo a entender toda a solução, especialmente para solução de problemas e melhorias.

Arduino_NexaControl_IS.pdf fornece documentação sobre a solução do servidor interno.

Arduino_NexaControl_ES.pdf fornece documentação sobre a solução de Servidor Externo.

Referências externas

Nexa System (sueco)

Etapa 5: Concluído

Finalizado!
Finalizado!

Lá você tem tudo concluído e em ação!

O gabinete Arduino Uno pode ser encontrado no Thingiverse como "Arduino Uno Rev3 com case Ethernet Shield XL".

Recomendado: