Pontos principais ou sobre o que é este artigo
Continuamos a série de artigos sobre
ShIoTiny - um controlador visualmente programável baseado no chip
ESP8266 .
Este artigo descreve um exemplo de um projeto de controle de ventilação em um banheiro ou outra sala úmida sobre como criar um programa para o
ShIoTiny .
Artigos anteriores da série.
ShIoTiny: pequena automação, a Internet das coisas ou "seis meses antes das férias"ShIoTiny: nós, links e eventos ou recursos de programas de desenhoReferências
Site do Projeto ShIoTinyFirmware binário, circuitos do controlador e documentaçãoInstruções e descrição dos nósConfigurando o broker do MQTT cloudmqtt.comPainel de controle do painel MQTT para Android1. Introdução
Não existe entendimento fora da experiência. Esta é a verdade testada pelo tempo e pelas gerações. Portanto, não há nada melhor para aprender habilidades práticas do que tentar fazer algo por conta própria. E exemplos que mostram o que pode ser feito e o que não vale a pena tentar, aqui serão úteis. Os erros de outras pessoas, é claro, não podem impedir a ocorrência de erros próprios, mas podem ajudar a reduzir o número desses últimos.
Perguntas e cartas dos leitores de artigos anteriores me levaram a fazer um pequeno projeto, um exemplo de controle de ventilação, a fim de mostrar como os nós ShIoTiny funcionam.
A idéia inicial, com base na qual o controlador
ShIoTiny apareceu - uma estação de
bombeamento e irrigação - está longe de ser adequada para todos e será interessante. Portanto, tomei para todos um sistema de controle de ventilação compreensível e útil como exemplo.
Diria que a ideia do projeto não é minha, mas
peguei daqui e adaptei-o ao
ShIoTiny .
Primeiro entenda o que você quer
O processo de cultivo é interminável. E foi essa propriedade que arruinou muitas boas idéias e projetos. O desenvolvedor, em vez de liberar, se não um ideal, mas uma coisa funcional, continuou a melhorá-lo. E ele a aperfeiçoou até que seus concorrentes a contornassem, liberando, se não uma solução ideal (e muitas vezes francamente miserável), mas funcional.
Portanto, é muito importante saber onde acabar com o projeto. Ou, em outras palavras, é necessário determinar o que queremos obter no final do projeto e o que temos no início. Em russo, para um documento elaborado apenas para descrever a maneira de criar algo, existe uma bela e curta palavra "plano", que tradutores com atraso mental e gerentes defeituosos começaram recentemente a chamar de "roteiro" por algum motivo. Bem, Deus os abençoe.
Nosso plano será assim. Suponha que exista uma sala em que a umidade às vezes possa aumentar drasticamente. Por exemplo, como um banheiro ou cozinha. A umidade é uma coisa desagradável e a maneira de lidar com ela é tão antiga quanto o mundo: ventilar a sala. Existem alguns métodos de transmissão. Mas nós, talvez, recusaremos maneiras exóticas e antiquadas, como negros com teias, e pararemos com o fã de sempre. Os fãs são mais baratos, e encontrá-los em nossa área é mais fácil.
Em resumo, queremos controlar o ventilador: ligue e desligue, respectivamente. Mais precisamente, queremos que ele seja ligado e desligado quando necessário.
Resta determinar: sob quais condições o ventilador deve ligar e sob quais condições - desligue.
Tudo é óbvio aqui: se a umidade estiver acima de um limite predeterminado, o ventilador liga e aspira ar; a umidade voltou ao normal - o ventilador desliga.
O leitor atento imediatamente chama a atenção para a palavra "dado". Quem é o dado? Como predefinido?
Existem várias maneiras de definir a umidade do limiar. Vamos considerar dois deles: o primeiro - com a ajuda da 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 mais adiante.
Para quem não entende, vou explicar que o “limiar de umidade” é um nível de umidade excedente que requer a inclusão de um ventilador.
A próxima pergunta é se deve dar ao usuário o direito de ligar o ventilador diretamente? Ou seja, independentemente do nível de umidade, com o toque de um botão? Forneceremos essa oportunidade. Afinal, um ventilador pode ser necessário não apenas com alta umidade, mas também para remover da sala, por exemplo, um odor desagradável, conhecido popularmente como “fedor”.
Então, entendemos o que queremos e até um pouco como isso funcionará. Listamos brevemente todas as funções do nosso sistema de controle de ventilação:
- definir um nível limite de umidade (duas opções);
- medição de umidade;
- inclusão automática do ventilador;
- desligamento automático do ventilador;
- inclusão manual do ventilador (com o toque de um botão).
Então, o plano é claro. É necessário implementar todas as funções acima em nosso programa. Com base nesse "plano", agiremos. Para começar, desenhe um diagrama de blocos do dispositivo.
Diagrama de blocos do dispositivo
De um modo geral, teremos dois desses esquemas. O primeiro é 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 via rede através do protocolo MQTT.
Mas como esses circuitos diferem em apenas um elemento - o resistor variável "ajustando o nível de umidade limite", desenharemos apenas um diagrama estrutural. Obviamente, o esquema estrutural de acordo com GOST parece diferente. Mas não nos concentramos em engenheiros de bisontes, mas na geração mais jovem. Portanto, a visibilidade é mais importante.

Então, o que vemos na foto? O ventilador está conectado ao
relé1 do controlador
ShIoTiny . Chamo sua atenção para o fato de que o ventilador é uma engenhoca que vive sob alta tensão. Portanto, se alguém fizer isso sozinho - tenha cuidado. Ou seja, pelo menos, antes de colocar os dedos ou instrumentos de medição no circuito - desconecte pelo menos o ventilador. E o segundo ponto. Se o seu ventilador for mais potente do que
250 W , você não
deve conectá-lo diretamente ao
ShIoTiny - apenas através do iniciador.
Nós descobrimos o ventilador. Agora, o botão “manual on” do ventilador. Está conectado à entrada
Input1 . Não há mais nada a explicar.
Sensor de temperatura e umidade
DHT-11 (ou
DHT-22 ou seus análogos). Para conectá-lo, é fornecida uma entrada especial no controlador
ShIoTiny . Como você pode ver na figura, conectar esse sensor também não apresenta problemas.
E, finalmente, uma resistência variável que define o nível de umidade limite. Mais precisamente, um divisor composto por resistências variáveis e constantes. Não há problemas com sua conexão, mas explicarei que o ADC embutido no
ESP8266 foi projetado para um máximo de 1 volt. Portanto, é necessário um divisor de tensão cerca de 5 vezes.
E, mais uma vez, lembro que esse divisor não é necessário se o nível de umidade limite for definido através da rede usando o protocolo MQTT.
Começaremos a elaborar o algoritmo do dispositivo no editor ElDraw ShIoTiny. Como chegar lá, neste editor, você pode ler os artigos anteriores ou as instruções, cujo link está no início do artigo.
Opção um, a mais simples
Vamos começar com um simples: ligue o
relé1 quando o nível limite de umidade for excedido por um determinado tempo.

Como você pode ver, nada complicado: apenas quatro nós, sem contar os nós dos comentários.
DHT11 é realmente um sensor de temperatura e umidade (pode ser alterado para
DHT22 ).
A
constante CONST é o nível de umidade limite, em porcentagem.
Comparador - um nó que compara dois números e define a saída 1 se a condição especificada for atendida e 0 se a condição não for atendida.
No nosso caso, essa condição será
A> B , onde
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 ), 1 aparecerá imediatamente na saída do comparador
A> B e o relé será ligado. Por outro lado, assim que o nível de umidade voltar ao normal (ou seja,
A <= B ), imediatamente na saída do comparador
A> B, 0 aparecerá e o relé será desligado.
Está tudo claro? Para quem realmente não lê, leia novamente ou veja a descrição dos nós nas instruções.
Observo que os dados do sensor
DHT11 são atualizados aproximadamente uma vez a cada 10 segundos. Portanto, o relé não poderá ligar e desligar mais de uma vez a cada 10 segundos.
Tudo ficaria bem, mas gostaríamos de definir o nível de umidade limite usando um resistor variável. Nada é mais fácil!

Apenas substitua o nó constante pelo nó ADC. Afinal, foi no ADC que conectamos o divisor de tensão com um resistor variável.
A tensão na entrada ADC varia de 0 a 1 volt. Mas a umidade na saída do sensor - varia de 0 a 100%. Como os comparamos? Tudo é simples. O nó ADC no
ShIoTiny não apenas mede a tensão de entrada, mas também sabe como
dimensioná-la e alterá-la .
Ou seja, na saída do nó ADC1 (ADC), haverá um valor
X calculado pela fórmula
onde
- tensão na entrada ADC (de 0 a 1V);
k - faixa (faixa ADC) e
b- deslocamento (deslocamento ADC). Portanto, se você definir
k = 100 eb = 0 , ao alterar
na faixa de 0 a 1, o valor de
X na saída da unidade ADC variará na faixa de 0 a 100. Ou seja, numericamente igual à faixa de umidade muda de 0 a 100%.
Ou, simplesmente, girando o mecanismo de resistência variável, você pode definir o nível de umidade limite de 0 a 100. O único inconveniente é que não há dispositivos de exibição. Mas, na prática, se o mecanismo de resistência variável faz 6 divisões 0%, 20%, 40%, 60%, 80%, 100%), então isso é suficiente para definir o nível de umidade limite.
Como definimos os coeficientes
k - intervalo (intervalo ADC) e
b- offset (deslocamento ADC)? Sim, é mais fácil do que nabos no vapor! Clique com o ponteiro do mouse no nó
ADC1 e imediatamente você verá a janela de configurações. Nele você pode definir tudo o que precisa. Para o nosso caso, será uma janela, como na figura.

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 - ela não precisa da Internet. É completamente autônomo.
Opção dois, conecte o botão
Tudo funciona e todo mundo está feliz. Mas, azar, não podemos ligar a ventilação com força. Já concordamos que um botão será conectado à entrada
Input1 , que liga e desliga o ventilador à força, sem prestar atenção ao sensor de umidade.
É hora de processar este botão em nosso programa de circuitos.

A unidade de processamento do clique do botão é destacada em uma linha laranja. É um contador de clique em botão que é redefinido para zero quando o valor em sua saída excede um (linha verde, saída do nó
CT ).
Tudo funciona aqui da maneira mais simples possível: o contador do
CT conta os cliques do botão conectado à
Entrada1 . Ou seja, o valor na saída desse contador aumenta em 1 a cada clique do botão.
Assim que esse valor se torna igual a dois (ou seja, mais de 1), imediatamente na saída do comparador
A> B aparece 1. E este 1 redefinirá o contador
CT para zero. Isso significa que o comparador, o mais baixo, de acordo com o esquema!
Assim, nosso botão possui dois estados - 0 e 1. Se precisássemos de mais estados (3 ou 4 ou até mais) - seria suficiente alterar a constante
CONST de um valor para outro.
Portanto, temos duas condições para ligar o ventilador: exceder o nível de umidade definido e pressionar 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
E o nível de umidade volte ao normal.
É claro que você pode complicar ainda mais o algoritmo, mas não faremos isso - deixaremos espaço para a criatividade para quem desejar.
Opção três, conectar-se à Internet
Tudo o que descrevemos é bastante funcional. Mas e o show? Afinal, qualquer hacker-hacker hipster ri de alguém que torce uma caneta e pressiona um botão, e não o controla a partir de um smartphone! Torcer o cabo "não está na moda". Mas para engatinhar o dedo no smartphone, apagando esse dedo no sangue - aqui está, o pico dos desejos do hacker-hipster-hacker (eu nunca poderia distinguir todos eles - então, se eu cometer um erro, me desculpe).
Mas seremos condescendentes com esses indivíduos. A governança da Internet tem vantagens reais. Primeiro de tudo, é visual. Existem muitos aplicativos para todas as plataformas que permitem que alguns puxões criem um painel de controle completamente utilizável para o nosso controlador Carlson. Em segundo lugar, é uma oportunidade de monitorar remotamente o estado de umidade na sala. E em terceiro lugar, você pode ver não apenas o que o ventilador faz - girando ou não, mas também o nível de umidade limite definido. E então - o ventilador ligou automática ou manualmente. Em geral, o que você quiser.
Claro, para alguns fãs, há muita honra - muita atenção. Mas este é apenas um exemplo.
Portanto, para conectar-se à Internet, usaremos a tecnologia
MQTT e o protocolo com o mesmo nome.
Para usar essa tecnologia, precisamos de um
broker MQTT . Este é um servidor tão especial que atende
clientes MQTT , por exemplo,
ShIoTIny e seu smartphone.
A essência da tecnologia
MQTT é que qualquer cliente publica dados arbitrários com um nome específico (chamado
tópico na terminologia
MQTT ) em um broker MQTT (servidor). Outros clientes podem assinar dados arbitrários pelo nome (
tópico ) e receber dados publicados recentemente. Ou seja, toda a troca de dados é baseada no princípio de cliente-corretor-cliente.
Não
vou me concentrar nos detalhes. Existem
vários artigos e tutoriais na Internet sobre como o
MQTT funciona e que tipo de programas existem para criar painéis de controle. Vou apenas mostrar como receber e publicar dados usando
ShIoTiny .
Como corretor, usei
www.cloudmqtt.com , mas o princípio é o mesmo em todo lugar.
Portanto, assumiremos que você se registrou no
broker do
MQTT . Em geral, o broker fornecerá (ou exigirá inventar) um nome de usuário e senha (para autorização), bem como uma porta para conexão.
Há duas maneiras de conectar o
ShIoTiny ao
broker MQTT - conexão regular e
TLS (
SSL ).
Todos esses parâmetros no
ShIoTiny são inseridos na guia
Rede , na
seção Conexão do
MQTT ao servidor .

Se o seu
broker MQTT não exigir autorização, não insira seu login e senha (deixe esses campos em branco).
O parâmetro do
prefixo do tópico MQTT requer uma explicação separada.
O prefixo dos parâmetros do MQTT é uma linha incluída no título do tópico ao publicar e assinar o broker do MQTT. Para configurar o
prefixo MQTT para seu controlador, basta inseri-lo no campo de entrada "
prefixo de tópico do MQTT " ("
prefixo de tópico do MQTT "). O prefixo sempre começa com uma barra (
"/" )! Se você não inserir uma barra no campo de entrada, ela será adicionada automaticamente. Os caracteres
"#" e
"+" não podem ser usados no prefixo. Não há outras restrições.
Por exemplo, se você publicar o parâmetro "
status " (ou se inscrever), e seu prefixo estiver definido como "
/ shiotiny / ", no intermediário, esse parâmetro será publicado sob o nome "
/ shiotiny / status ". Se você tiver um prefixo vazio definido, todos os parâmetros no broker começarão com uma barra (
"/" ): "
status " será publicado como "
/ status ".
Portanto, acreditamos que você se registrou no
broker MQTT e recebeu seu login, senha e porta. Em seguida, defina esses parâmetros na guia
Rede , na
seção Conexão do
MQTT ao servidor do controlador
ShIoTiny .
Acreditamos que o prefixo esteja definido como "
/ room / ".
Para começar, publicaremos o status de todos os parâmetros principais: relé
Realay1 , manual no estado, automático no estado e, finalmente, níveis de umidade limite e atual. Bem e um bônus - a temperatura na sala. Como fazer isso, veja a figura.

Como você pode ver, a diferença da versão anterior é apenas os nós de
publicação do
MQTT . Dado o prefixo, os seguintes parâmetros são publicados:

Como você pode ver, todo o estado do sistema está à vista!
Mas queremos não apenas ver, mas também controlar. Como ser Muito simples Recusaremos definir o nível de umidade limite usando o
ADC e um resistor variável e definiremos esse mesmo nível de umidade limite pelo
MQTT diretamente do smartphone!
Removemos o nó ADC do circuito e incluímos três novos nós:
armazenamento FLASH ,
restauração FLASH e
descrição do MQTT .
A função do nó de
descrição do
MQTT é óbvia: ele recebe o
parâmetro / room / trigHset (nível de umidade limite) do
broker do
MQTT . Mas o que ele faz com os dados a seguir? Simplesmente os fornece ao nó da
loja FLASH , que, por sua vez, armazena esses dados na memória não volátil sob o nome
trigH . Depois disso, o nó de
restauração do
FLASH lê dados sob o nome
trigH da memória não volátil e já sabemos o que acontece a seguir.
Por que essas dificuldades? Por que não consigo enviar imediatamente os dados recebidos para a entrada do comparador?
Como o camarada S. Holmes costumava dizer,
isso é elementar ! Ninguém garante que, após ligar o dispositivo, ele ingressará no
broker do
MQTT . E a umidade deve 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 extrai um nível de umidade limite previamente armazenado da memória não volátil e o utiliza para a tomada de decisões. E quando a conexão com o
broker do
MQTT for estabelecida e alguém publicar um novo valor
/ sala / trigHset , esse novo valor será usado.
Então você pode inventar o que quiser. Por exemplo, além da umidade, insira também um registro de temperatura. Ou adicione um controle de iluminação "inteligente" (ainda deixamos de usar dois relés e duas entradas). Tudo está em suas mãos!
Conclusão
Então, examinamos vários exemplos da implementação do controlador mais simples em essência, baseado no ShIoTiny. Talvez seja útil para alguém.
Como sempre, sugestões, desejos, perguntas, erros de digitação, etc., por e-mail:
shiotiny@yandex.ru