ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Pontos principais ou sobre o que trata este artigo

Continuamos a série de artigos sobre ShIoTiny - controlador baseado em chip visualmente programável ESP8266.

Este artigo descreve, usando o exemplo de um projeto de controle de ventilação em um banheiro ou outro ambiente com alta umidade, como é construído um programa para ShIoTiny.

Artigos anteriores da série.

ShIoTiny: pequena automação, Internet das coisas ou “seis meses antes das férias”
ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

referências

Firmware binário, circuito controlador e documentação
Instruções e descrição dos componentes
Configurando o corretor MQTT cloudmqtt.com
Painel MQTT para Android

Introdução

Não há compreensão sem experiência. Esta é uma verdade testada pelo tempo e pelas gerações. Portanto, não há nada melhor para aprender habilidades práticas do que tentar fazer algo sozinho. E exemplos que mostram o que você pode fazer e o que nem deveria tentar serão úteis aqui. Os erros de outras pessoas, é claro, não podem impedir a ocorrência dos seus próprios erros, mas podem ajudar a reduzir o número destes últimos.

Perguntas e cartas de leitores de artigos anteriores me levaram a fazer um pequeno projeto - um exemplo de controle de ventilação para mostrar como funcionam os nós ShIoTiny.

A ideia original da qual nasceu o controlador ShIoTiny - estação de bombeamento e irrigação - não é adequada para todos e não será do interesse de todos. Portanto, tomei como exemplo um sistema de controle de ventilação que é compreensível e útil para muitos.

Direi que a ideia do projeto não é minha, mas Eu peguei daqui e depois adaptado para ShIoTiny.

Primeiro entenda o que você quer

O processo de melhoria é interminável. E é esse imóvel que arruinou muitas boas ideias e projetos. O desenvolvedor, em vez de lançar algo que não era perfeito, mas ainda funcionava, continuou a melhorá-lo. E ele o melhorou até que os concorrentes o contornaram, lançando uma solução funcional, embora não ideal (e muitas vezes francamente ruim), mas funcional.

Portanto, é muito importante saber onde encerrar o projeto. Ou, em outras palavras, precisamos determinar o que queremos obter no final do projeto a partir do que temos no início. Em russo, para um documento que é compilado precisamente com o propósito de descrever o caminho para a criação de algo, existe uma maravilhosa palavra curta e sucinta “plano”, que tradutores com retardo mental e gerentes defeituosos recentemente, por algum motivo, começaram a chamar de “estrada mapa". Bem, Deus os abençoe.

Nosso plano será assim. Vamos supor que haja uma sala onde a umidade às vezes pode aumentar significativamente. Por exemplo, como um banheiro ou cozinha. A umidade é uma coisa desagradável e a forma de combatê-la é tão antiga quanto o mundo: ventile o ambiente. Existem algumas maneiras de ventilar. Mas talvez abandonemos métodos exóticos e antiquados como os negros com leques e nos apeguemos a um leque normal. Os ventiladores são mais baratos e fáceis de encontrar em nossa região.

Em suma, queremos controlar o ventilador: ligá-lo e, consequentemente, desligá-lo. Mais precisamente, queremos que ele ligue e desligue quando necessário.

Resta determinar: em que condições o ventilador deve ligar e em que condições deve desligar.

Tudo é óbvio aqui: se a umidade estiver acima de um determinado limite, o ventilador liga e retira o ar; A umidade voltou ao normal - o ventilador desliga.

Um leitor atento imediatamente chamará a atenção para a palavra “dado”. Dado por quem? Como especificado?

Você pode definir o limite de umidade de várias maneiras. Veremos dois deles: o primeiro - usando resistência variável e o segundo - na rede através do protocolo MQTT. Cada um desses métodos tem vantagens e desvantagens, que serão discutidas posteriormente.

Para quem não entende, vou explicar que “umidade limite” é um nível de umidade acima do qual o ventilador deve ser ligado.

A próxima pergunta é: o usuário deve ter o direito de ligar o ventilador diretamente? Ou seja, independente do nível de umidade, com o apertar de um botão? Forneceremos essa possibilidade. Afinal, um ventilador pode ser necessário não só quando há muita umidade, mas também para retirar do ambiente, por exemplo, um odor desagradável, popularmente chamado de “fedor”.

Assim, entendemos o que queremos e até um pouco como vai funcionar. Listamos resumidamente todas as funções do nosso sistema de controle de ventilação:

  • definir o nível limite de umidade (duas opções);
  • medição do nível de umidade;
  • acionamento automático do ventilador;
  • desligamento automático do ventilador;
  • ativação manual do ventilador (pressionando um botão).

Então, o plano é claro. É necessário implementar todas as funções acima em nosso programa. Agiremos com base neste “plano”. Primeiro, vamos desenhar um diagrama de blocos do dispositivo.

Diagrama de blocos do dispositivo

De modo geral, teremos dois desses esquemas. A primeira é para a opção em que o nível limite de umidade é definido por uma resistência variável. O segundo esquema é para a opção em que o nível limite de umidade é definido na rede por meio do protocolo MQTT.

Mas como esses circuitos diferirão em apenas um elemento - o resistor variável “definindo o nível limite de umidade”, desenharemos apenas um diagrama de blocos. Claro, o diagrama de blocos de acordo com GOST parece diferente. Mas não estamos nos concentrando nos engenheiros bisões, mas na geração mais jovem. Portanto, a visibilidade é mais importante.

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Então, o que vemos na foto? O ventilador está conectado ao relé Relay1 controlador ShIoTiny. Observe que o ventilador é um dispositivo de alta tensão. Portanto, se alguém fizer isso sozinho, tome cuidado. Ou seja, no mínimo, antes de enfiar os dedos ou instrumentos de medição no circuito, pelo menos desligue a alimentação do ventilador. E a segunda nota. Se o seu ventilador for mais potente que 250We conecte-o diretamente ao ShIoTiny não vale a pena - apenas através do starter.

Nós resolvemos o ventilador. Agora o botão “ligar manualmente” o ventilador. Está conectado à entrada Entrada1. Não há mais nada a explicar aqui.

Sensor de temperatura e umidade DHT-11 (ou DHT-22 ou seus análogos). Existe uma entrada especial no controlador para sua conexão. ShIoTiny. Como você pode ver na figura, conectar esse sensor também não é um problema.

E, finalmente, a resistência variável, que define o nível limite de umidade. Mais precisamente, um divisor composto por resistências variáveis ​​e constantes. Não há problemas com sua conexão, mas deixe-me explicar que o ADC integrado é ESP8266 projetado para um máximo de 1 Volt. Portanto, é necessário um divisor de tensão de cerca de 5 vezes.

E deixe-me lembrá-lo mais uma vez que esse divisor não é necessário se o nível limite de umidade for definido na rede usando o protocolo MQTT.

Vamos começar a criar um algoritmo para o dispositivo no editor ElDraw ShIoTiny. Como chegar a este editor pode ser lido em artigos anteriores ou nas instruções, cujo link está no início do artigo.

Opção um, mais simples

Vamos começar com algo simples: ligar o relé Relay1 quando o nível limite de umidade é excedido por um tempo especificado.

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Como você pode ver, nada complicado: apenas quatro nós, sem contar os nós de comentários. DHT11 - este é o próprio sensor de temperatura e umidade (pode ser substituído por DHT22).

Constante CONST — nível limite de umidade, em porcentagem.

Comparador - um nó que compara dois números e gera 1 se uma determinada condição for atendida e 0 se a condição não for atendida.

No nosso caso, esta condição será A>BOnde A é o nível de umidade medido pelo sensor, e B — o nível limite da mesma umidade.

Assim que o nível de umidade medido (A) excederá o nível limite de umidade (B), ali mesmo na saída do comparador A>B 1 aparecerá e o relé será ligado. Por outro lado, assim que o nível de humidade voltar ao normal (ou seja, UMA<=B), ali mesmo na saída do comparador A>B 0 aparecerá e o relé será desligado.

Tudo limpo? Para quem não se sente muito confortável, leia novamente ou veja a descrição do funcionamento das unidades nas instruções.

Observe que os dados do sensor DHT11 atualizado aproximadamente uma vez a cada 10 segundos. Portanto, o relé não poderá ligar e desligar mais do que uma vez a cada 10 segundos.

Tudo ficaria bem, mas gostaríamos de definir o nível limite de umidade usando um resistor variável. Nada poderia ser mais fácil!

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Vamos apenas substituir o nó constante por um nó ADC. Afinal, foi ao ADC que conectamos um divisor de tensão com resistor variável.

A tensão na entrada ADC varia de 0 a 1 Volt. Já a umidade na saída do sensor varia de 0 a 100%. Como podemos compará-los? É simples. Nó ADC em ShIoTiny não apenas mede a tensão de entrada, mas também sabe como escala e mudança.

Ou seja, a saída do nó ADC1 (ADC) terá o valor X, calculado pela fórmula

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Onde ShIoTiny: ventilação de uma sala úmida (exemplo de projeto) — tensão na entrada ADC (de 0 a 1V); k - faixa (faixa ADC) e b-offset (deslocamento ADC). Assim, se você definir k = 100 и b = 0, então ao mudar ShIoTiny: ventilação de uma sala úmida (exemplo de projeto) no intervalo de 0 a 1, valor X na saída do nó ADC irá variar na faixa de 0 a 100. Ou seja, numericamente igual à faixa de mudanças na umidade de 0 a 100%.

Ou, simplesmente, girando o controle deslizante de resistência variável, você pode definir o nível limite de umidade de 0 a 100. O único inconveniente é que não há dispositivos de exibição. Mas, na prática, se você fizer 6 divisões de um motor de resistência variável (0%, 20%, 40%, 60%, 80%, 100%) - isso será suficiente para definir o nível limite de umidade.

Como definimos probabilidades? k - faixa (faixa ADC) e b-offset (deslocamento ADC)? Sim, mais fácil do que nabos cozidos no vapor! Aponte o ponteiro do mouse para um nó ADC1 e imediatamente você verá uma janela de configurações. Você pode colocar tudo o que precisa nele. Para o nosso caso, será uma janela como a da figura.

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Portanto, temos a solução de trabalho mais simples. Vamos começar a melhorá-lo.
A propósito, a solução mais simples tem uma vantagem: não requer Internet. É completamente autônomo.

Opção dois, conecte o botão

Tudo funciona e todos ficam felizes. Mas azar, não podemos forçar a ventilação. Já combinamos que na entrada Entrada1 teremos um botão conectado que ligará e desligará o ventilador à força, independente do sensor de umidade.
É hora de processar este botão em nosso diagrama de programa.

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

O bloco de processamento de cliques de botão é destacado com uma linha laranja. É um contador de pressionamentos de botão, que é zerado quando o valor em sua saída ultrapassa um (linha verde, saída do nó CT).

Tudo aqui funciona tão simples como antes: o balcão CT conta os pressionamentos de um botão conectado à entrada Entrada1. Ou seja, o valor na saída deste contador aumenta em 1 a cada pressionamento do botão.

Assim que este valor se tornar igual a dois (ou seja, maior que 1), imediatamente na saída do comparador A>B 1 aparecerá. E este 1 irá zerar o contador CT para zero. Isso significa o comparador, o inferior do diagrama!

Assim, nosso botão possui dois estados - 0 e 1. Se precisássemos de mais estados (3 ou 4 ou até mais) - precisaríamos apenas alterar a constante CONST de um valor para outro.

Assim, temos duas condições para ligar o ventilador: ultrapassar um determinado nível de umidade e apertar o botão uma vez. Se alguma das condições for atendida, o ventilador será ligado. E funcionará até que o botão seja pressionado novamente И o nível de umidade não retornará ao normal.

É claro que você pode complicar ainda mais o algoritmo, mas não faremos isso - deixaremos espaço para criatividade para quem desejar.

Opção três, conectar-se à Internet

Tudo o que descrevemos é bastante viável. E os exibicionistas? Afinal, qualquer hacker cracker cheio de espinhas vai rir de alguém que gira uma maçaneta e pressiona um botão em vez de controlá-lo a partir de um smartphone! Torcer a alça “não está na moda”. Mas rastejar com o dedo no smartphone, esfregar o dedo até sangrar - esse é o auge dos desejos de um hacker-cracker hipster (nunca consegui distinguir todos eles - então, se eu estava errado, me perdoe).

Mas sejamos tolerantes com esses indivíduos. Existem vantagens reais em gerenciar pela Internet. Em primeiro lugar, é a visibilidade. Existem muitos aplicativos para todas as plataformas que permitem criar um painel de controle totalmente utilizável para nosso controlador Carlson com alguns ajustes. Em segundo lugar, é uma oportunidade de monitorar remotamente o estado de umidade do ambiente. E em terceiro lugar, você pode ver não apenas o que o ventilador está fazendo - girando ou não, mas também qual nível de umidade limite está definido. E então o ventilador ligou automática ou manualmente. Em geral, tudo o que você quiser.

Claro, é uma grande honra para algum fã receber tanta atenção. Mas este é apenas um exemplo.

Então, para nos conectarmos à Internet usaremos tecnologia MQTT e o protocolo de mesmo nome.
Para aproveitar esta tecnologia, precisamos Corretor MQTT. Este é um servidor especial que serve Clientes MQTT, V.g. ShIoTIny e seu smartphone.

A essência da tecnologia MQTT consiste no fato de qualquer um dos clientes publicar dados arbitrários no broker MQTT (servidor) sob um nome específico (chamado tópico em terminologia MQTT). Outros clientes podem assinar dados arbitrários usando seus nomes (tópico) e receber dados recém-publicados. Ou seja, toda troca de dados segue o princípio cliente-corretor-cliente.

Я Eu não vou concentre-se nos detalhes. Existem muitos artigos e tutoriais na Internet sobre como funciona. MQTT e quais programas existem para criar painéis de controle. Vou apenas mostrar como podemos receber e publicar dados usando ShIoTiny.

Como corretor eu usei www.cloudmqtt.com, mas o princípio é o mesmo em todos os lugares.

Então, vamos assumir que você se registrou para Corretor MQTT. Em geral, o corretor fornecerá (ou exigirá que você forneça) um nome de usuário e uma senha (para autorização), bem como uma porta para conexão. Conectar ShIoTiny к Corretor MQTT possível de duas maneiras - conexão regular e via TLS (SSL).

Todos esses parâmetros em ShIoTiny digitado na aba Networking, capítulo Conexão MQTT ao servidor.

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Se seu Corretor MQTT não requer autorização - não digite seu login e senha (deixe estes campos em branco).

Parâmetro Prefixo do tópico MQTT requer uma explicação separada.

O prefixo dos parâmetros MQTT é uma string anexada ao nome do tópico (tópico) ao publicar e assinar um corretor MQTT. para instalar Prefixo MQTT para o seu controlador, você só precisa inseri-lo no campo de entrada "Prefixo do tópico MQTT'('Prefixo do tópico MQTT"). O prefixo sempre começa com uma barra ("/")! Se você não inserir uma barra no campo de entrada, ela será adicionada automaticamente. Você não pode usar símbolos no prefixo "#" и "+". Não há outras restrições.

Por exemplo, se você publicar o parâmetro "estado" (ou assine-o) e seu prefixo está definido como "/shiotiny/", então este parâmetro será publicado na corretora com o nome "/shiotiny/status" Se você tiver um prefixo vazio, todos os parâmetros do corretor começarão com uma barra ("/"): "estado"será publicado como"/ status".

Então, acreditamos que você se registrou para Corretor MQTT e recebeu login, senha e porta. Então você inseriu esses parâmetros na guia Networking, capítulo Conexão MQTT ao servidor controlador ShIoTiny.

Assumimos que o prefixo está definido como "/sala/".

Vamos começar publicando o status de todos os parâmetros principais: relé Realay1, estados de comutação manual, estados de comutação automática e, finalmente, limites e níveis de umidade atuais. Bem, um bônus é a temperatura ambiente. Como fazer isso, veja a figura.

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Como você pode ver, a diferença da versão anterior são apenas os nós "Publicação MQTT" Levando em consideração o prefixo, são publicados os seguintes parâmetros:
ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Como você pode ver, temos todo o estado do sistema na palma das nossas mãos!

Mas queremos não só ver, mas também controlar. O que devo fazer? Muito simples. Nos recusaremos a definir um nível limite de umidade usando ADC e um resistor variável e definiremos esse nível de umidade limite de acordo com MQTT diretamente do seu smartphone!

ShIoTiny: ventilação de uma sala úmida (exemplo de projeto)

Removemos o nó ADC do circuito e incluímos três novos nós nele: Loja FLASH, Restauração FLASH и Descrição do MQTT.

Função de nó Descrição do MQTT óbvio: recebe um parâmetro /sala/trigHset (nível limite de umidade) s Corretor MQTT. Mas o que isso faz com os dados a seguir? Apenas os entrega ao nó Loja FLASH, que por sua vez armazena esses dados em memória não volátil sob o nome trigH. Depois disso, o nó Restauração FLASH lê dados da memória não volátil sob o nome trigH e já sabemos o que acontece a seguir.

Por que tais dificuldades? Por que os dados recebidos não podem ser enviados imediatamente para a entrada do comparador?

Como dizia o camarada S. Holmes - é elementar! Ninguém garante que depois de ligar o seu dispositivo, ele entrará Corretor MQTT. E a umidade precisa ser medida. E o ventilador deve estar ligado. Mas sem informações sobre o nível limite de umidade, isso é impossível! Portanto, quando ligado, nosso dispositivo recupera o nível de umidade limite armazenado anteriormente da memória não volátil e o utiliza para tomar decisões. E quando a conexão é estabelecida com Corretor MQTT e alguém postará um novo valor /sala/trigHset, então esse novo valor será usado.

Então você pode inventar o que quiser. Por exemplo, além da umidade, introduza também a contabilização da temperatura. Ou adicione um controle de iluminação “inteligente” (ainda temos dois relés e duas entradas não utilizadas). Tudo em suas mãos!

Conclusão

Então, vimos vários exemplos de implementação de um controlador essencialmente simples baseado em ShIoTiny. Talvez isso seja útil para alguém.

Como sempre, sugestões, desejos, dúvidas, erros de digitação, etc. - por email: [email protegido]

Fonte: habr.com

Adicionar um comentário