Open top menu
sábado, 7 de março de 2015


No post de hoje vamos apresentar um novo projeto para automação de aquários.

Já fizemos um projeto de automação no post http://www.automacaolivre.com.br/2013/06/aquadroid-monitorando-um-aquario-com.html com LCD para apresentação dos dados e teclado para acesso as funcionalidades.
A melhoria do novo projeto é a troca do LCD e teclado numérico por uma interface gráfica que realiza o acesso, monitoramento e agendamento de forma remota. O equipamento é autônomo, após configurado, não é necessário conexão com rede, internet ou da interface gráfica para funcionar o agendamento de horários de acionamento das saídas, iluminação e alimentação
Equipamento
Painel de comando
Setup do equipamento
Configuração do horário do equipamento
Agendamento de Saídas
Agendamento de Alimentação
Alimentador integrado ao Aquadroid
Vídeo do Projeto

Funcionalidades do Projeto
-4 Saídas com Relés para acionamento de Bomba, Termostato, Luz Fluorecente, Solenóide do cilindro de CO2 ou outro dispositivo.
-Iluminação RGB para criação de efeito noturno ou utilização de leds de potência para iluminação do aquário(requer ajuste na programação do Arduino).
-Leitura de Temperatura.
-Leitura e calibração de PH.
-Sensor de nível baixo de água (Em desenvolvimento).
-Sensor de nível alto de água (Em desenvolvimento).
-Alimentador automático.
-Alarme de Temperatura, PH e Níveis de água fora da faixa estabelecida (Em desenvolvimento).
-Modo de operação Automático e Manual
-Programação de horários de acionamento de saídas (solenóide CO2).
-Programação de horários de acionamento de iluminação.
-Programação de horários de alimentação.
-Ajuste de horário via ferramenta de setup.
-Interface para acompanhamento dos parâmetros do aquário, alteração entre modos manual e automático, acionamento remoto de saídas e iluminação.

Leitura PH
Não foi efetivo 100% de sucesso na aferição de todas as leituras com a sonda pH. Foram realizados testes seguindo toda a especificação do fabricante e do projeto https://github.com/sparkfun/H2O_pH_Probe desenvolvido pela SparkFun. Como o conjunto Sonda + Interface tem um custo alto, acompanhe a evolução do projeto e divulgação de novos testes antes de efetuar a compra.

Conexões do Projeto
Conexões das saídas

Lista de componentes
1 - Arduino NANO V3.0.
1 - Placa Automation Shield, a venda em nossa loja virtual.
1 - Fonte industrial 12V x 3A (5A dependendo do consumo da faixa RGB utilizada).
1 - RTC DS1307.
1 - Shield Ethernet W5100, Atenção NÃO É compátivel com o projeto o shield enc28j60.
1 - Buzzer 5V.
1 - Fita de Leds RGB com base de acrílico para sustentação, o ideal é usar 2 ou 3 faixas RGB com o comprimento do aquário.
1 - pH Sensor Kit, no projeto foi utilizado https://www.sparkfun.com/products/10972. -> Em ajustes finos.
1 - Sensor De Temperatura Ds18b20 com cabo.
1 - Resistor 4K7.
3 - *Dissipadores  - Opcional, depende da carga utilizada na saída de Potência. Não é necessário com carga de faixas RGB com até 2mts.

A montagem da caixa é opcional, o circuito de automação pode ficar embutido no próprio móvel do aquário. Com a facilidade de remover o Arduino do shield, fica fácil e rápido as manutenções e evoluções do projeto.

Montagem da caixa - Opcional
1 - Caixa modelo HT 300 ou equivalente. A caixa deve possuir um volume mínimo interno de 250 (largura) x 200 (comprimento) x 100 (altura) para montagem do projeto.
1 - Cabos com conectores MODU para conexão entre os Shields.
1 - Fios para conexão entre os relés, chaves e demais componentes dentro da caixa.
3 - Cabo manga para o rabicho da iluminação RGB, Nivel de Agua e Alimentador
4 - Tomada fêmea AC para painel.
1 - Tomada macho 3 pinos AC para rabicho de alimentação.
4 - Conjunto conectores macho e femea DIM para Iluminação RGB, Temperatura, leitura de níveis de água e alimentador.
1 - Chave Liga desliga.
1 - Porta fusível com fusível 20A para painel.

Alimentador
1- Alimentador Automático de Aquários.
1- Drivers para conexão com motor, a venda em nossa loja virtual.
1 - Cabos para conexão

É necessário um driver para alimentação do alimentador do aquário, nunca ligue o motor diretamente na saída do Arduino. O motor é alimentado com 3V, e o circuito protege o Arduino contra picos de tensão e ruídos gerados pelo motor.

Driver do Alimentador Automático
PCB

A adaptação do alimentador de aquários é fácil e rápida, ele deve ser aberto pelos 4 parafusos da arte inferior.

O circuito do alimentador será inutilizado, corte os fios que conectam o motor a placa, e solde o novo cabo diretamente nos fios dos motores, 
Remonte a alimentador, passando o cabo pela porta de pilhas.

Testando todo o conjunto antes da montagem da caixa. É importante testar todo o conjunto antes da montagem da caixa, a dica é testar cada componente individualmente e depois realizar um teste completo. Abaixo podemos ver como foram realizados os testes.
Vídeo de testes das conexões e integração com o painel de setup.
Separando os componentes.
Máscaras para furação da caixa.
Espelhos da caixa cortados com a "Dremel".
Verificando a furação do espelho com as tomadas.
Furação finalizada e identidade visual aplicada.
Iniciando a montagem dos componentes.
Conectando o Automation Shield e demais shields.
Fonte de alimentação conectada. Após esse passo já é possível realizar o primeiro teste de conexão com o Hardware.
Conexões do RGB, Temperatura e Alimentador com o conector DIM.
Finalizando a montagem com a conexão das saídas de relés com as tomadas fêmeas.
Montagem do Hardware finalizada
Montando a iluminação com a faixa de leds RGB
Separando os componentes necessários. Como eu não tinha disponível "cabo manga", utilizei um dos cabos USB que tinha disponível. Utilizei uma barra de acrílico de 80cmx 4cm para fixação da faixa de leds.
 Preparando o cabo para montagem.
 Colando duas faixas de leds no barra de acrílico.
 É necessário jumpear uma faixa na outra, remova primeiramente o silicone das conexões e solde os jumpers conforme imagem abaixo.
 Preparando a conexão da extensão.
 Conexão finalizada.
 Montando o conector.
 Iluminação pronta e testada.

Integração entre Hardware e painel de comando.
A integração entre o equipamento e o aplicativo de monitoramento será feita através de uma API REST. Com ela será possível visualizar os estados de todas as funções do equipamento, acionar as saídas e alterar as rotinas de agendamento remotamente. A proposta de uso da API REST permite a criação de outros aplicativos nativos de acordo com o sistema operacional escolhido pelo usuário.

Para acessar a API, acesse pelo browser o IP configurado conforme o exemplo abaixo:
http://192.168.0.201/


Retorno de Dados
dataCB({
"Auto":"1"   -> Indica se está executando no modo automático (1) ou Manual (0)
,"Temp":"27.3125000000" -> Temperatura
,"PH":"7" -> PH
,"Day":22 -> Dia
,"Mounth":2 -> Mes
,"Year":15 -> Ano
,"Hour":20 -> Hora
,"Minute":27 -> Minuto
,"Second":17 -> Segundo
,"S1":1 -> Estado da Saida 1  Ligado (1) ou Desligado (0)
,"S2":0 -> Estado da Saida 2  Ligado (1) ou Desligado (0)
,"S3":0 -> Estado da Saida 3  Ligado (1) ou Desligado (0)
,"S4":0 -> Estado da Saida 4  Ligado (1) ou Desligado (0)
,"NivelBaixo":0 -> Estado da Nivel Baixo Alarme (1) ou OK (0)
,"NivelAlto":0 -> Estado da Nivel Baixo Alarme (1) ou OK (0)
,"AgeS3HrI":9 -> Horario inicio agendamento acionamento Saída 3
,"AgeS3HrF":16 -> Horario fim agendamento acionamento Saída 3
,"AgeS4HrI":0 -> Horario fim agendamento acionamento Saída 4
,"AgeS4HrF":0 -> Horario inicio agendamento acionamento Saída 4
,"AgeRGBWHITEHrI":17 -> Horario inicio agendamento faixa RGB na cor Branca
,"AgeRGBWHITEHrF":18 -> Horario fim agendamento faixa RGB na cor Branca
,"AgeRGBBLUEHrI":19 -> Horario inicio agendamento faixa RGB na cor Azul
,"AgeRGBBLUEHrF":22 -> Horario fim agendamento faixa RGB na cor Azul
,"AgeFeed1":10 -> Horario primeira Alimentacao
,"AgeFeed2":19 -> Horario segunda Alimentacao
,"Red":0 -> Luminosidade Fixa RGB RED (0- Desligado 255- Máximo)
,"Green":0 -> Luminosidade Fixa RGB Green (0- Desligado 255- Máximo)
,"Blue":255 -> Luminosidade Fixa RGB Blue (0- Desligado 255- Máximo)
})


Métodos principais
getDateDs1307: Atualiza as varíaveis globais de data e hora com o horário atual fornecido pelo RTC.
GetTemp: Atualiza a varíavel de temperatura fornecido pelo Ds18b20.
GetPH:  Atualiza a varíavel de pH fornecido pela sonda de pH.
WebServer: Recebe as requisições HTTP da interface gráfica para acionamento das saídas, agendamento e retorna o JSON com os dados atualizados do sistema.
ModoAuto: Executa as ações de acionamento de saídas de acordo com os horários pré-programados.
Alarme: Dispara o alarme sonoro de acordo com as faixas pré-configuradas de ph, temperatura e nível de água. (Em desenvolvimento)

Sempre desconecte qualquer Shield que esteja conectado com a porta serial do Arduino antes de realizar o Upload. As porta serial é compartilhada entre o USB para a gravação do Arduino Nano e comunicação serial do Arduino com outros shields. No projeto usamos a conexão serial para interface de integração com a sonda pH, se a mesma estiver conectada ocorrerá um conflito e erro durante o processo de Upload.


WatchDog e EEPROM
No projeto foi utilizado o WatchDog. Sua função é reiniciar o Arduino se o programa que estiver em execução travar. No setup habilitamos com o método wdt_enable(WDTO_8S) um timeout de 8s, e a cada loop reiniciamos seu contador interno com o método wdt_reset(). Se o contador não for reiniciado em 8 segundos, ele automaticamente reiniciará o Arduino. Mas como ficam as últimas ações enviadas pelo usuário? Todas as ações e configurações realizadas pelo usuário são gravadas na EEPROM (Memória não vólatil, que não perde os dados por falta de energia ou reinicialização), dessa forma, se o arduino travar, reinicar ou ocorrer uma interrupção de energia, ele reestabelecerá os estados de todas as saídas e agedamentos de acordo com a última solicitação do usuário.


Setup


Loop


WebServer


Modo Automático


Código Fonte
Clique aqui para acesso ao código fonte no GitHub.

Primeiros testes
O primeiro teste é consumir a API REST que retorna os dados atualizados do sistema. Conecte o cabo de rede no shield de Ethernet e abra em um navegador o IP da placa.
Se as configurações e conexões estiverem corretas, serão apresentados os dados do sistema em um formato Json.
O próximo passo é testar o acionamento da saida S1, executando a API com o comando "http:\\192.168.0.201\?S1L", o relé S1 é acionado.

Interface gráfica e testes finais de acesso ao sistema
A Interface gráfica de acesso ao sistema é uma interface Html5. O principal objetivo dessa abordagem é a facilidade inicial de portabilidade e execução em multiplos dispositivos, como Windows, Linux, e celulares com Android, desde que rode em um navegador com suporte para HTML5. O equipamento deve ter uma resolução mínima de 640x480.

Devido a restrições de acesso do iOS ao sistema de arquivos do dispositivo, o projeto abaixo não é compátivel com iPhone/iPad, sendo necessária a criação de uma aplicativo nativo que integre com as APIs do projeto. Uma alternativa é hospedar os arquivos html em um servidor com WebServer Apache, IIS, entre outros e realizar o acesso pelo iPhone/iPad.

Configurações
Abra o arquivo aquadroid.js e configure a variável IP com o IP que foi configurado no arduino ou IP e Porta configurada no roteador. Eu configurei meu roteador para acesso externo ao IP do equipamento, dessa forma, eu acesso o painel do meu trabalho, na rua, durante viagens, etc. Para aumento de segurança de acesso, pode ser criada uma VPN em sua rede doméstica, de forma que o acesso ao IP do equipamento seja apenas permitido em conexões realizadas dentro de sua rede local. Verifique se seu roteador tem essa opção.

Executando o painel no Desktop
Abra no browser o arquivo painel.html, você deverá visualizar o painel com os dados atualizados do equipamento.

Página de Setup

Executando o painel em dispositivos Android
Copie a pasta do projeto descompactada na área de arquivos do Android, nesse momento será necessário anotar o caminho completo até o arquivo Painel.html, se tiver dificuldade, use o aplicativo "ES File Explorer" para copiar o caminho completo. Abra o arquivo com o caminho completo em um navegador. Eu utilizo navegador UCBrowser, a vantagem dele é abrir o painel no modo fullscreen.

Evoluindo com o projeto.
O projeto na versão atual permite automação de aquários marinhos, mas de forma limitada. Projetos com monitoramento e controle simultâneos de PH, ORP, Densidade, Temperatura, Nível, TPA automático e outras funcionalidades exigem mais recursos de hardware e software, devendo usar como base um Arduino com mais recursos, como um Arduino Mega e uma expansão PCF8575.

A placa Automation Shield é compatível com o Arduino Mega, mas ela não possui conectores para conexão direta, sendo necessária a remoção do Arduino Nano e a conexão com o Arduino Mega com Jumpers.

Conexões Arduino Mega - Automation Shield
(D3-P1, D5-P2, D6-P3, A0-S1, A1-S2, A2-S3, A3-S4 VIN - 9V e GND-GND).

Conexões Arduino Mega - RTC
SDA 20 - SDA RTC
SCL 21 - SCL RTC

Conexões Arduino Mega - Ethernet Shield
Utilizar um shield de ethernet para Arduino Uno/Mega, ele já possui os terminais para conexão.

Vídeo do projeto com Arduino Mega em funcionamento na bancada

O código fonte é open source e está publicado no meu GitHub.  O projeto está em constante evolução, aceitando sugestões e críticas. Brevemente será publica a versão com os Alarmes e Relatórios.

Tagged

17 comentários :

  1. Muito bom seu projeto, parabéns!! Você venderia o sistema completo?? Ou então a placa com o Arduino programado?? Grato.

    ResponderExcluir
    Respostas
    1. Boa noite, entre em contato pelo site de compras. Tenho a placa com os shields e sensor de temperatura a venda.

      Excluir
  2. Quanto está saindo um projeto deste completo?
    Parabéns pelo trabalho.

    ResponderExcluir
    Respostas
    1. Danilo, eu disponibilizo apenas algumas unidades do kit de shields na loja virtual.

      Excluir
  3. Como faço para adquirir a placa já que na loja não aparece o item ??

    ResponderExcluir
  4. Boa tarde Sergio!

    Parabéns pela iniciativa e pelo belo projeto, estava mesmo a procura de algo desse tipo e seu projeto vai suprir muito bem a minha demanda. Os materiais citados por você podem ser encontrados facilmente pelo que vi. Gostaria muito de adquirir as placa de você, porem não achei na loja virtual.
    Abs

    ResponderExcluir
    Respostas
    1. Obrigado Esteban!

      Tenho disponível o Shield 2.0, com ele é possível montar o projeto, mas com o código fonte atual, apenas 4 relés são utilizados. A vantagem dele é já possuir o RTC integrado e pinos para conexão com LCD i2C.
      Abs





      Excluir
  5. É possível utilizar o esp8266 no lugar do ethernet? Muito complicado alterar o código?

    ResponderExcluir
    Respostas
    1. Toda parte lógica do projeto, envio e retorno de comandos não teria impacto, voce teria que adequar a troca do shield de ethernet pelo ESP.

      Excluir
  6. Obrigado Sérgio, vou fazer a experiência tão logo sobre um tempo. Depois compartilho o resultado.

    ResponderExcluir
  7. Estou tendo um problema com o watchdog, após algumas requisições do app html5 o arduino trava e quando aciona o watchdog entra em um loop infinito e o restart pelo pushbutton não resolve, preciso tirar a a alimentação para reiniciar. Não estou usando o módulo ethernet, mas o shield ligado pelo icsp mais um jumper do pino 10. Se desabilito o watchdog quando o arduino trava eu aciono manualmente o reset e ele volta. Já viu algo parecido? Não fiz nenhuma alteração no sketch além do ip. Eu estava trabalhando na conversão da conexão com o esp8266 mas quando surgiu este problema voltei para o ethernet.

    ResponderExcluir
    Respostas
    1. Precisa inicialmente analisar porque o Arduino trava após algumas requisições, eu tive problemas semelhantes com interferências de reatores de lampadas e nesse caso o Arduino trava, ele não entra em loop.

      Excluir
  8. Boa noite Sérgio, isolei parte do problema, no caso do watchdog era com o bootloader. Consegui instalar uma versão do optiboot que dá conta de resetar via software. Parece que quando o acesso é pelo java, no caso varias requisições em pouco tempo ele trava, mas agora o WTD atua. Quando faço as requisições manualmente, no caso lentamente ele trabalha normal. Ainda desconfio de um problema de hardware.

    ResponderExcluir
  9. Bastou setar o pino 4 alto que resolveu.

    ResponderExcluir
    Respostas
    1. Ok, podemos colocar uma pasta com seu código e créditos com a versão ESP no github.

      Excluir
  10. Hi, Nice to meet you.
    My name is Simon, at WIZnet in Korea.

    We have been searching some application references in which WIZnet solution is applied, and found your project “Aquadroid 2.0 Automação de aquários com Arduino, WebServer, Alimentador Automático e PH “ using Ethernet Shield.
    In the Ethernet Shield WIZnet’s W5100 chip is embedded.
    Your development looks very cool & smart.

    Recently we opened WIZnet Museum (http://wiznetmuseum.com) site. This is a academic-purposed collection of open projects, tutorials, articles and etc from our global customers.

    If you are O.K. we would like to introduce your projects in here.
    Hopefully, you will allow this.
    Finally, keep contacting us for the friendship.
    Thank you very much

    ResponderExcluir
    Respostas
    1. Yes of course. You can publish all projects.
      Thank you very much

      Excluir