Sensores para casa inteligente

Fizemos um gabinete de controle para a casa aqui , desenvolvemos um controlador aqui .

A luz pode ser ligada / desligada do telefone, notificações sobre vazamento de água, a inclusão de rega chegam a telegramas e Deus ainda sabe o que.

Mas todo esse sistema está longe de ser uma casa inteligente, é apenas uma extensão dos seus braços e pernas, e a única ajuda é que você não precisa sair da cama para desligar as luzes.

Este artigo é sobre o que pode aproximar sua casa do inteligente, e você adivinhou certo - esse é o desenvolvimento de sensores. São olhos, ouvidos e um pouco mais para sua casa. Com base nas informações dos sensores, já é possível escrever scripts automáticos que revitalizarão a casa e o ajudarão silenciosamente e tornarão sua vida mais confortável.

O mercado agora possui uma grande variedade de dispositivos, de fabricantes eminentes e de origem desconhecida. E se você não se incomoda muito, pode usá-los, mas há um mas, ou até vários, mas. Primeiro, a maioria deles usa seus protocolos proprietários e trabalha apenas com seus hubs. E a qualquer momento a API desses hubs pode ser fechada e o controle será possível apenas através da aplicação do fabricante (lembre-se da história do google nest), para que toda a sua automação seja interrompida em um ponto.

Segundo, todos os fabricantes, sem exceção, estão tentando obter algum lucro com isso, e como esse não é um fenômeno massivo, é preciso sair, e cada sensor é fabricado em seu próprio estojo separado com sua própria bateria. E agora vamos contar, você tem 5 quartos em cada um, eu gostaria de ter um sensor de temperatura, movimento, luz e CO. Não é um tapete complicado. cálculos levam a 20 caixas no teto. Em primeiro lugar, não é bonito e, em segundo lugar, em um ano ou dois, será necessário trocar as baterias desses sensores em meio dia com uma escada e uma chave de fenda, provavelmente quebrando alguns parafusos e soltando a chave de fenda algumas vezes no laminado. Sim, e em terceiro lugar, quando um dos sensores quebrar dentro de alguns anos, você não poderá comprar o mesmo, e provavelmente os hubs antigos não suportarão os novos sensores (o lucro é importante) e você precisará alterar todos os sensores e reintegrá-los ao seu o sistema. Qual saída é olhar para algo do código-fonte aberto ou fazer você mesmo, pelo menos o código sempre estará com você. Portanto, à luz do descrito, o desenvolvimento de sua caixa com sensores não é uma tarefa tão exagerada.

Assim, ao desenvolver meu sensor, tentei evitar o 'mas' descrito acima:

  1. Agregamos todos os sensores em uma caixa
  2. Fazemos energia com fio (construindo a partir do zero)
  3. Fazemos interfaces de acordo com protocolos padrão

Agora vamos seguir como esse dispositivo deve funcionar.

Existem duas opções possíveis, e elas dependem de em que ambiente o dispositivo é usado, em um sistema com controle centralizado, em um sistema distribuído ou em geral como um dispositivo independente.

A primeira opção é mais simples porque são necessários apenas dados brutos dos sensores e, em seguida, o controlador central, que interroga o dispositivo, decide o que fazer com eles; um exemplo desse dispositivo é um sensor de fumaça do escritório. Por exemplo, os dados do sensor ficaram acima de um certo limite, enquanto o controlador central sabe que o modo armado está ativado e, portanto, é necessário disparar um alarme.

A segunda opção assume que o próprio dispositivo deve saber em que modo está agora, ser capaz de converter dados brutos de sensores, tomar uma decisão sobre informar o usuário. O desenvolvimento de um dispositivo desse tipo, é claro, requer mais esforço, tanto em termos de escrita de um programa quanto em termos de usabilidade.

Originalmente, planejei fabricar o dispositivo de acordo com a segunda opção e coloquei dois canais de comunicação - mqtt e modbus. Mqtt via WIFI para brincar e modbus via RS-485 para conectar ao sistema de controle doméstico.

Mqtt via WIFI não é difícil de fazer, graças às bibliotecas lua ESP8266 e o ​​algoritmo é bastante padrão:

  1. na primeira partida ou se você não conseguir se conectar ao WIFI, precisará criar um ponto de acesso a partir do ESP8266
  2. implantar um pequeno servidor da Web nele com parâmetros WIFI e parâmetros do servidor mqtt (pode ser feito gratuitamente na Amazon, por exemplo)
  3. salve todos os dados inseridos na memória do ESP8266
  4. após a reinicialização, tente conectar-se ao mqtt pelo WIFI residencial

No entanto, quando surgiu a questão de integrar o dispositivo ao sistema doméstico via modbus, comecei a perder os dados brutos dos sensores e, eventualmente, coloquei todos os dados brutos na tabela modbus também. Por exemplo, parece que um evento desnecessário de um sensor de movimento, no modo desarmado, pode até ser usado para todos os tipos de funções domésticas inteligentes.

A tabela modbus é a seguinte:
Descrição do tipo N
0. -r - estado do sensor de etiqueta (1 - modo inativo / 2 - inativo para proteção / 3 - modo de proteção)
1. -r - motivo do alarme de campo de bits (bit 1 - gás / 2 - temperatura / 3 - movimento)
2. -r - detecção de movimento nos estados ocioso e de proteção (0/1 - sem movimento / movimento)
3. -r - concentração de gás (valor bruto de adc)
4. -r - temperatura em graus C
5. -r - valor da luz pré-processada (quarto noturno <17 / quarto escuro <50 / crepúsculo <150 ensolarado <250)
6. -r - valor da luz (valor bruto do adc)
7. -r - número de eventos de alarme neste ciclo de vida
8. -r - número de sensortag reiniciados
9. -r - não usado
10 -wr- ativação de alarme (0 - alterne para ocioso / 1 - alterne para alarme)
11. sensibilidade ao movimento de escrita (0 - 100%, significa 0 - mais sensível)
12. -limite de concentração de gás

Além disso, como sempre, tudo se resume ao desenvolvimento da placa e do software. E, neste caso, o desenvolvimento do conselho foi mais difícil para mim, porque existe uma parte analógica (potência, ligação de sensores de movimento e CO) com a qual não sou muito amigável, e não há muito o que escrever sobre software, porque tudo é realmente simples lá. I.e. não apenas mas comum, li as leituras do ADC, as converti, as processei (usando o método da janela deslizante em todos os canais) e as coloquei em uma tabela. Não seria ruim fazer a compensação de temperatura do sinal do sensor PIR. no verão, quando a temperatura ambiente está acima de +30 graus, o sensor tem uma resposta muito mais fraca. Portanto, neste artigo, gostaria de descrever o desenvolvimento do próprio quadro e prestar um pouco de atenção à usabilidade.

Vamos começar com o quadro, eis o que você precisa fazer para fazer isso:

  1. escolha um microcontrolador e sensores (sensor pir, luz, temperatura, CO)
  2. escolha o driver rs-485 para comunicação modbus
  3. ESP8266 para comunicação mqtt (o que escolher)
  4. selecione LED RGB para visualizar o status do dispositivo
  5. desenvolver módulos de potência
  6. Desenvolver um diagrama de circuito, criar e fabricar placas

A escolha de um microcontrolador não é difícil, você só precisa chegar à caixa com os devboards e obter uma placa - será suficiente. Mas, falando sério, não posso me gabar de muitas famílias de microcontroladores, por isso estou familiarizado com STM32, ATSAM e AVR. Eu escolhi o último, e só porque eu tinha um par de Arduino Leonardo por aí e sentindo falta dos velhos tempos MK2. Não vou mencionar que o AVR puxa os pés na frequência do quartzo, e isso é útil para mim, e que possui uma ampla gama de periféricos e um ADC bastante rápido, é muito mais importante para mim que ele tenha um pacote TQFP e eu possa soldá-lo, sem um microscópio e dançando com pandeiros . Se a escolha de um microcontrolador é uma questão de dez minutos, a escolha dos sensores não é uma questão trivial. Inicialmente, devemos pensar em como conectá-los, como processar seus sinais e como eles afetarão um ao outro. Se alguns sensores puderem ser retirados do conjunto do Arduino e custarem um centavo, então com outros, mais raro, você poderá mexer mais e gastar mais. Além disso, a seleção de sensores também foi limitada pelos meus critérios adicionais:

  1. Os sensores podem ser conectados como você quiser, mas não via I2C. Foi assim que não funcionou para mim implementar o I2C de maneira confiável em microcontroladores, onde o suporte para esse barramento é metade do hardware e metade do software (como no AVR). Aconteceu que funciona, funciona por um mês e, em seguida, interrompe e nenhuma sequência de recuperação ajuda, por isso foi decidido usar o maior número possível de sensores analógicos conectados ao ADC e usar o SPI apenas para temperatura (a propósito, a amizade é forte e confiável).
  2. Eles eram confiáveis ​​o suficiente e não alteraram suas características durante a vida útil (defini-o como 10 anos)
  3. Eles estavam disponíveis em nosso mercado, para não mexer com os pedidos da Mauser, etc.

Como resultado de toda a pesquisa, obtemos este conjunto:

  1. Sensor PIR - D203S
  2. Sensor de luz - GL5516
  3. Sensor de temperatura - LM95071
  4. Sensor de CO - TGS5141

E se com as três primeiras posições, acho que ninguém terá perguntas, por que o TGS5141 é necessário imediatamente não está claro. Você provavelmente diz - “por que algo tão caro, porque existem sensores de CO do centavo do conjunto MQ-7 do arduino”? Na verdade, eu experimentei com eles e, como resultado, os recusei por várias razões. Em primeiro lugar, é um sensor catalítico e aquece, o que afeta muito a temperatura no gabinete do dispositivo e não permite a compensação de temperatura para o sinal do sensor PIR. Em segundo lugar, a sensibilidade do MQ-7 deixa muito a desejar, mesmo nas especificações de 10 a 1000ppmm, mas na realidade ainda é mais triste, além de não haver estabilidade de sensor para sensor. Terceiro, a vida do sensor em si não é clara, presumo que suas características mudem bastante ao longo dos anos, precisamente porque é catalítico. E agora sobre as vantagens do TGS5141 eletroquímico - ele não aquece, a sensibilidade é de 0 ~ 5000ppm (com uma característica linear), uma vida útil garantida de 10 anos, tamanho pequeno e muitas outras vantagens. Eu acho que a escolha é óbvia se você realmente quer fazer algo que vale a pena, e não um ofício frívolo.

Escolhemos um microcontrolador, sensores, agora é hora de cuidar de como dizer ao usuário o que pretendíamos. Como escrevi anteriormente, tenho dois canais de comunicação para isso, o rsbus 485 modbus e o mqtt via WIFI. O que torna possível usar meu sensororteg como um dispositivo individual e, portanto, importante é a indicação do estado, de alguma forma, no próprio dispositivo, por exemplo, LEDs.

Tendo decidido sobre o conceito, você pode prestar um pouco de atenção ao restante da base do elemento. Driver 485go Eu uso o ADM2587E, o chip inclui não apenas o driver em si, mas também o isolamento galvânico do transformador em RX, TX e DE, menos apenas o preço. Vamos usar o ESP-07 para comunicação mqtt via WIFI, aqui, acho, nenhum comentário é necessário, porque apenas os preguiçosos não fizeram algo no ESP8266. Eu tive que mexer mais com a exibição visual, por isso decidi usar os LEDs sk6812 RGBW. Como aconteceu com o AVR, gerenciá-los não é muito simples, seus horários são bastante difíceis, então tive que adicionar algumas partes do código do assembler, o que não foi planejado originalmente. Mas o resultado se justificou, resultando informativo e bonito, especialmente se você brilhar com esses LEDs no final do anel de plexiglás. Essa indicação foi sugerida por um funcionário que já havia comido um cachorro por causa disso (graças a Sasha).



Tendo experimentado um pouco de brilho, ficou claro que um nível de brilho não é minha decisão - é difícil ver durante o dia e muito brilhante à noite. Portanto, tive que fazer uma alteração no brilho do brilho desses LEDs, dependendo da iluminação da sala. Bem, isso é tudo, você descobriu a indicação, pensou, mas não, a coisa mais difícil para mim foi inventar padrões e horários de brilho para eles.

Eu parei nesta opção:

  • azul lento - ocioso, comunicação apenas por wifi (falta do modbus)
  • azul rápido - alterna do modo inativo para o modo de alarme, comunicação apenas por wifi (falta do modbus)
  • verde lento - inativo (comunicação modbus OK)
  • verde rápido - alterna do modo inativo para o modo de alarme (comunicação modbus OK)
  • vermelho lento - modo de alarme
  • alarme vermelho de movimento rápido
  • amarelo rápido - alarme de gás



Nós descobrimos a indicação, a próxima seção é poder.

Como eu disse anteriormente, tenho 24V de baixa tensão em minha casa, então a potência dos módulos será exatamente isso. Olhando para o futuro, direi que depois de fazer o primeiro quadro, tive que refazer muita nutrição. Então fiquei convencido de que você precisa ler atentamente as especificações dos conversores redutores, especialmente os locais onde são descritas as nuances da fiação. Com base na pesquisa, optei pelo conversor step-down MCP16311 e ele se mostrou muito exigente, somente depois de fazer exatamente o que estava escrito nas especificações - funcionou. Mas este não era o maior problema, como se viu mais tarde, alterar o brilho dos LEDs deu uma pequena redução de energia, o que seria suficiente para estragar o sinal do sensor D203S, foi possível superar esse problema com capacitores adicionais no circuito operacional do sensor e no circuito conversor abaixador. Após depurar tudo usando o mqtt (via ESP8266), conectei o rs-485 e, novamente, uma falha estava esperando por mim. Na saída do opamp no canal do sensor D203S, vi novamente o lixo, e esse lixo correspondia claramente à troca no rs-485. Em geral, acabou superando isso com um conversor LDO adicional para toda a parte analógica, e então a felicidade veio.

E se você combinar tudo, terá a seguinte imagem:



E se tudo isso for tomado e soldado, será algo como isto:



Eles soldaram o quadro, imprimiram o estojo, juntaram tudo, penduraram no teto, os dados entraram no sistema. Então, vamos imaginar como você pode aplicar esses dados em um sistema doméstico inteligente, além de, é claro, que você pode enviar alarmes para telegramas. Ainda não fiz nada, exceto o primeiro ponto, mas lancei os seguintes scripts:

  • inclusão de luz nas escadas, se essa luz não estiver acesa, se o movimento aparecer em qualquer cômodo, mais estiver escuro agora, mais a noite
  • abertura automática da persiana do primeiro andar, se estiver fechada, se já for de manhã e for detectado movimento na sala pela primeira vez em um dia
  • abrir as abas de ventilação se a concentração de CO exceder algum nível e fechá-las se o nível de CO cair (na verdade, em uma sala com lareira)
  • abra as aberturas de ventilação se a temperatura exceder um determinado limite e feche-as
  • desligamento automático da persiana do primeiro andar, se as persianas estiverem abertas e se os sensores de movimento funcionarem na rua à noite e a casa estiver em guarda noturna.

Então complemente, tornaremos a casa mais inteligente ...

Source: https://habr.com/ru/post/pt479760/


All Articles