Certa vez, quando eu estava relaxando com os amigos em um campo de estudantes no MEPhI, um deles me disse que ele havia decidido recentemente tentar plantar morangos em um terreno. Comprei panelas, desenterrei um pouco de terra em algum lugar e trouxe mangueiras para rega. E tudo ficaria bem, o proprietário está dormindo - os morangos estão crescendo, mas eles só precisam ir ao país de forma estável uma vez por semana ou mais frequentemente, para que as plantas não sequem sem água.Lembrando de um par de Arduino deitado em uma cômoda, bem como um desejo de longa data de realizar algo mais do que apenas LEDs piscantes, decidi imediatamente assumir essa tarefa e fazer esse tempo, se possível, até o fim.
Como interface de gerenciamento do sistema, foi decidido fornecer controle manual “a partir do botão”, além de implementar o controle remoto via Internet. O Arduino Mega foi escolhido como o controlador principal, já que um escudo com uma tela LCD e botões é facilmente conectado a ele, e também possui memória e GPIO suficientes para esta tarefa.O esquema geral do sistema:
Para interagir com a rede global, a placa-mãe ESP8266, ganhando popularidade ativamente, foi escolhida. A escolha de um protocolo de transferência de dados sem fio se deve, além do baixo custo do módulo Wi-Fi, à presença de um roteador Wi-Fi constantemente na dacha do cliente, o que evita a conexão com fio dentro de casa.Apesar do ESP8266 ter aparecido no horizonte da comunidade DIY recentemente, um recurso de desenvolvedores deste chip já está se desenvolvendo ativamente no RuNet, onde você sempre pode procurar a resposta para sua pergunta, encontrar um exemplo de conexão de uma placa ESP específica ou pedir ajuda com um problema.Estimativa do projeto
Para monitorar a umidade atual do solo, foi solicitado um sensor padrão com o Ebay.Para exibir e inserir informações, decidiu-se usar o escudo do teclado LCD, que é um módulo eletrônico com uma tela LCD e 6 botões conectados a uma entrada analógica.Como dispositivo de controle do abastecimento de água, foi escolhida uma torneira mecanizada de 12 volts com 2 fios, cuja abertura e fechamento é realizada alterando os sinais da tensão fornecida. Portanto, além da derivação, foi solicitado um módulo de relé de 4 canais (dois relés alteram a polaridade fornecida, um é responsável pelo fornecimento de tensão e mais um é deixado na reserva).Como o ESP8266 no Ebay, a versão mais simples foi encomendada - ESP-01. O principal é lembrar que o ESP8266 é alimentado exclusivamente a partir de 3,3 V, que deve ser tratado com antecedência.Lista de equipamentos necessários:- Guindaste motorizado
- Arduino mega
- Módulo WiFi (ESP8266)
- Relé de 4 canais
- Sensores de umidade do solo
- Visor LCD com botões
Custo total (excluindo o custo de tudo o que é necessário para solda, montagem e fonte de alimentação): $ 61,01. A principal contribuição para o custo final do meu sistema foi feita por um guindaste motorizado (US $ 23,32) e um funcionário do Arduino Mega 2560 (US $ 26,80).Funcionalidade do sistema
Depois de um pouco de reflexão, decidi que o sistema de rega automática deveria funcionar nos três modos a seguir:- Manual ("do botão"). Nesse modo, o usuário decide o horário de início da irrigação com base nas informações fornecidas a ele pelo sensor de umidade do solo ou com base na experiência pessoal;
- Modo agendado. O usuário define apenas os parâmetros de irrigação de acordo com o cronograma (frequência, duração), após o qual o próprio sistema irriga de acordo com as configurações selecionadas;
- Modo sensor. A rega é realizada automaticamente quando um limite de umidade predeterminado é atingido. O usuário só precisa definir o valor limite de umidade e a duração da rega;
- Remoto (do smartphone ou computador). Inclui a capacidade de controlar remotamente o sistema usando a lógica de qualquer um dos três modos listados acima.
É difícil imaginar a implementação de tal funcionalidade sem o menu mais simples, cuja navegação será realizada usando os botões de blindagem do teclado LCD. Você pode ler sobre a implementação do menu no Arduino, por exemplo, aqui .Blynk
Pensando na implementação do controle remoto da irrigação, deparei-me com um projeto interessante de Blynk, cuja arrecadação de fundos foi lançada no Kickstarter em 16 de janeiro de 2015 .Por um mês, o projeto levantou US $ 49.235 em vez de US $ 10.000, o que, aparentemente, reflete o enorme interesse em tais projetos pela comunidade global de geeks.O principal objetivo do Blynk é criar uma plataforma acessível para controle sem fio de dispositivos eletrônicos caseiros a partir de um smartphone. Conforme planejado pelos autores, o acesso à Internet não é um pré-requisito - o Blynk Server pode ser baixado e implantado em sua rede doméstica, tendo recebido total autonomia em sua casa.A lista completa de plataformas suportadas (entre as quais, é claro, Arduino, Raspberry PI e Intel Edison), para as quais o Blynk deve ser portado, está aqui .Esquematicamente, o princípio de operação do Blynk é apresentado na figura a seguir:
Na lista de recursos de interface do programa para um smartphone para controlar um dispositivo remoto e exibir as informações recebidas dele, uma grande variedade de elementos ("widgets") é anunciada. Destacamos os principais:- Botões
- Sliders
- Joysticks monoaxiais e biaxiais;
- Gerenciamento usando giroscópio e acelerômetros telefônicos;
- Vários tipos de botões de controle;
- Gráficos
- Indicadores de seta;
- Notificações pop-up.
Uma lista completa de itens pode ser encontrada na página do projeto Blynk no Kickstarter.Deve-se notar que o projeto está em um estágio ativo de desenvolvimento; portanto, nem todas as funções declaradas pelos desenvolvedores foram implementadas até o momento. No entanto, segundo eles, isso é apenas uma questão de tempo. A funcionalidade disponível para o nosso projeto será suficiente.Implementação técnica
Diagrama esquemático do dispositivo:
Como pode ser visto no diagrama apresentado, a troca de informações entre o Arduino e o ESP8266 será realizada através do UART. Para não ter problemas ao piscar o controlador, conectamos o módulo Wi-Fi aos contatos D2, D3, organizando um UART (Serial3) de hardware nessas pernas e ajustando a velocidade para 11520 baud.Um leitor atento deve ter uma pergunta lógica - como o Arduino alimentado pela lógica de 5 volts e o ESP8266 de 3,3 volts se comunicará? Tendo estudado essa questão na Internet, cheguei à conclusão de que a maioria não atribui absolutamente importância a esse problema (como se viu mais tarde - não em vão), conectando diretamente as pernas correspondentes dessas duas pranchas. Apenas alguns artigos sugeriram o uso do divisor de tensão mais simples ou de conversores especialmente projetados. Naturalmente, eu não tinha um conversor, então, inicialmente, foi feita uma tentativa de implementar a comunicação usando um divisor, mas não resultou em nenhum resultado. Entrei no conjunto de pessoas acima mencionado, fechando meus olhos para o problema descrito (o benefício funcionou sem a coordenação dos níveis lógicos) .Algumas palavras sobre o poder do ESP8266
Como já mencionado em muitos tutoriais, para a operação normal do ESP, você precisa de uma fonte de alimentação estável na faixa de 3,0 a 3,6 volts. Para fazer isso, você pode usar vários conversores lineares, por exemplo, o popular hoje AMS1117 3.3. A folha de dados do AMS1117 indica que a tensão de entrada pode atingir 15 V. No entanto, para operação estável no modo de corrente de saída de cerca de 1 A, recomenda-se diminuir a tensão de entrada (na prática, 5-6 V é suficiente). Pela minha própria experiência, direi que quando o conversor é conectado a uma fonte de 12 V, o AMS começa a aquecer ativamente, o que rapidamente leva a uma diminuição na tensão de saída e, como resultado, a uma reinicialização do ESP8266.Configurar ESP8266
A interação do Arduino e do ESP8266 ao usar o Blynk pode ser implementada de duas maneiras diferentes:- «» ESP8266 AT-, Arduino (.. «ESP8266 as shield»);
- ESP Arduino IDE Blynk, , , Arduino , / (.. «ESP8266 as standalone»).
Ambas as opções têm seus prós e contras, mas a primeira opção é mais conveniente porque não há necessidade de trabalhar com dois programas e monitorar constantemente a compatibilidade dos dois dispositivos.Para controlar o uso do Blynk, você deve poder fazer o upload do firmware desejado para o ESP8266. No nosso caso, a versão do firmware AT v0.22 SDK v1.0.0 será usada .Para atualizar as placas ESP8266, você precisa de um conversor USB-TTL (por exemplo, um ), no entanto, também pode usar o Arduino fechando as pernas RST e GND e conectando o módulo Wi-Fi RX à perna Arduino RX, semelhante a TX e TX. Em seguida, coloque o ESP8266 no modo intermitente (para fazer isso, feche a saída GPIO0 ao terra) e, usando o utilitário XTCom Util, preencha o firmware, conforme descrito aqui. Resta apenas aumentar a velocidade do UART para 115200 baud com o comando AT AT + UART_DEF = 115200,8,1,0,0, após o qual a configuração do módulo Wi-Fi será concluída.Esboço para Arduino
A biblioteca principal para trabalhar com o Blynk no IDE do Arduino é a biblioteca BlynkSimpleEsp8266.h. Considere suas principais funções.1) Blynk.begin (auth, "ssid", "pass")Como você deve ter adivinhado, a função recebe os parâmetros para conectar-se a um ponto Wi-Fi - seu SSID e senha, bem como o token de autenticação do nosso dispositivo para conectar-se ao servidor Blynk.Importante! O processo de conexão com o servidor Blynk é iniciado somente depois que qualquer uma das seguintes funções é chamada no programa pela primeira vez: Blynk.run () ou Blynk.connect ().Para desconectar / conectar-se ao servidor Blynk, as funções Blynk.disconnect () e Blynk.connect () são usadas, retornando o resultado em um tipo booleano. Para estabelecer uma conexão (tempo limite em segundos), Blynk.connect (s) é usado (por padrão, o tempo limite é definido como 30 s).2) Blynk.run ()A principal função para sincronizar o dispositivo com o servidor Blynk e receber comandos do smartphone. Comumente usado em um loop. Além disso, esta função permite controlar as entradas e saídas da placa ESP (no modo “Independente”) sem usar funções como digitalRead, digitalWrite, analogWrite, analogRead, analogWrite em qualquer lugar do código. Basta adicionar os elementos necessários à tela de controle do aplicativo no smartphone e correlacioná-los com o GPIO ESP8266 necessário.3) Trabalhando com contatos virtuais ("pinos virtuais")Um dos recursos do Blynk é o uso de contatos virtuais. Este termo refere-se a um canal lógico para transmitir várias informações entre um aplicativo móvel e um dispositivo, sejam variáveis booleanas, valores numéricos (número inteiro ou longo) ou dados de texto como uma sequência. Os contatos virtuais não têm uma conexão direta com os terminais do dispositivo e são usados principalmente para interação com as bibliotecas de módulos periféricos (LCDs, servos, etc.) ou uma interface de aplicativo móvel.No código de esboço, o processamento da chamada para o contato virtual com o número n ocorre usando os blocos BLYNK_READ (Vn) {...} e BLYNK_WRITE (Vn) {...}. Dentro dos colchetes, é indicado o código de processamento para acessar o contato virtual. Por exemplo, se o widget de aplicativo solicitar que o valor da umidade do solo para a exibição virtual n ° 2 seja exibido como gráfico, precisamos escrever algo assim no esboço:BLYNK_READ(V2)
{
Blynk.virtualWrite(2, humidity);
}
Da mesma forma, você pode considerar o parâmetro enviado, por exemplo, pelo contato virtual nº 9 do usuário do aplicativo Blynk:BLYNK_WRITE(V9)
{
int x = param.asInt();
}
Isso usa a conversão da variável de entrada em um valor inteiro usando param.asInt (). Conversões param.asStr () e param.asDouble () também são permitidas.Importante! Os procedimentos BLYNK_READ / BLYNK_WRITE devem ser executados o mais rápido possível, para que o dispositivo possa processar todas as solicitações do aplicativo. Portanto, é altamente desencorajado o uso das funções sllep / delay dentro dessas rotinas.Informações mais detalhadas sobre a funcionalidade Blynk podem ser encontradas na página github do desenvolvedor na pasta de exemplos ou na página de documentos .Agora, armados com o conhecimento, vamos retornar ao autowatering e escrever um esboço. Forneceremos as seguintes possibilidades para o aplicativo móvel interagir com o sistema:- A escolha do modo de operação do sistema: manual, por sensor, por programação;
- Exibição da umidade do solo recebida do sistema e saída de dados históricos;
- Troca de informações através do elemento de aplicação do terminal.
Tentei comentar cada pedaço de código responsável por uma função específica do sistema, para que não nos debruçemos sobre o código do programa em detalhes. Observo apenas que, para facilitar o uso, todas as configurações feitas pelo usuário são gravadas na memória não volátil do Arduino (EEPROM).O Sketch pode ser baixado no GitHub.Configurando o aplicativo móvel Blynk
O último passo é deixado - configurando o aplicativo móvel. No meu caso, os seguintes elementos serão usados:- 4 indicadores LED (pinos virtuais 1, 29, 30, 31);
- 2 botões (pinos virtuais 2, 3);
- Terminal para troca de informações (Virtual Pin 4);
- Indicador numérico “Value Display” (pino virtual 8);
- Gráfico com a capacidade de exibir dados históricos “History Graph” (Virtual Pin 8);
- Widget para ativar o trabalho com correio ("Email");
- Um widget para ativar as notificações pop-up ("Push").
Depois de instalar o aplicativo móvel Blynk , você precisa registrar e selecionar o dispositivo que deseja gerenciar (no nosso caso, é o ESP8266). Além disso, para não perder, enviamos para nós um token de autenticação exclusivo, usado no esboço para autenticação nos servidores Blynk. Abaixo estão as capturas de tela que ilustram a configuração do aplicativo.Na janela aberta do projeto criado, no canto superior direito, existem 3 botões: configurações globais do projeto, adicionando elementos (widgets) ao formulário e iniciando:Formulário vazio para novo projeto Resta adicionar controles ao formulário de aplicação e configurá-los. Alguns dos widgets disponíveis no momento da redação são apresentados abaixo:Lista de widgets a serem adicionados ao formulário de inscrição Para controlar a operação do sistema, adicione 2 botões ao formulário: um será responsável por escolher o modo de operação, o segundo - por iniciar a irrigação no modo manual. O status atual do sistema será estabelecido usando quatro indicadores LED. Um indicador acende durante a irrigação, os outros três são necessários para exibir o modo atual.Resta escolher as cores dos elementos, adicionar legendas e vinculá-las aos contatos virtuais desejados.Configurando botões e indicadores LED Para exibir a dinâmica da umidade do solo, adicione ao formulário um gráfico com a capacidade de exibir dados históricos ("Gráfico Histórico"). Exibiremos o valor atual da umidade no display digital ("Display de valor").Adicionar gráfico de histórico e elementos de exibição de valor Para facilitar a configuração remota dos parâmetros do sistema, além de obter informações mais completas sobre o estado atual, adicionamos um terminal ao aplicativo. E para receber notificações por email e telefone, você também deve colocar os elementos "Push" e "Email" no formulário.Adicionar terminal, push e email Resta colocar no formulário todos os widgets descritos acima e teremos algo assim:
Resultado
Abaixo estão algumas fotos do sistema no estado atual e um vídeo do trabalho de autowatering e Blynk.Farei uma reserva imediatamente de que não conectei uma torneira mecanizada no apartamento e forneço água ao vaso de flores, e não há necessidade urgente - no momento do teste do sistema, o processo de rega (quando a torneira é aberta) é emulado com êxito por minha esposa e um regador comum.Foto nº 1:
Foto nº 2:
Vídeo:Em vez de uma conclusão
Resumindo a criação de um sistema de rega automático usando o Blynk, podemos dizer o seguinte:1. Por si só, o serviço Blynk é uma ferramenta muito conveniente e fácil de aprender que, graças à abundância de placas e dispositivos suportados, pode ser facilmente integrada a praticamente qualquer dispositivo. Juntamente com o baixo preço do módulo Wi-Fi ESP8266, essas vantagens permitem adicionar controle remoto a um projeto específico com o mínimo de esforço.As desvantagens de usar essa solução, é claro, são menos flexibilidade na personalização do sistema e dependência dos desenvolvedores de aplicativos, o que, no entanto, não reduz seus méritos quando usado em pequenos projetos de bricolage.2. As duas principais desvantagens da implementação acima do sistema de irrigação automática são o custo e a baixa qualidade do sensor de umidade do solo utilizado.A primeira desvantagem é causada, como mencionado acima, pelo alto custo da torneira eletromagnética e do painel oficial do Arduino Mega. No entanto, pode ser reduzido significativamente usando, por exemplo, análogos do Arduino ou implementando toda a parte eletrônica em outro MK adequado. Infelizmente, o guindaste não foi encontrado muito mais barato, e esse não era meu objetivo.Quanto ao sensor de umidade, para aumentar sua vida útil e reduzir os produtos de eletrólise entre seus contatos, primeiro é necessário aplicar tensão apenas imediatamente antes de medir a umidade (que é implementada no meu sistema) e, segundo, é melhor substituir seja em hastes de grafite ou use contatos de aço inoxidável.Em um futuro próximo, está planejado montar a parte eletrônica e colocá-la em algum prédio decente e, espero, finalmente instalar tudo no país.Obrigado pela atenção!