Introduction: Galia System

About: It's me Heitor :)

O projeto consiste em uma horta inteligente que pode ser monitorada remotamente via internet. O sistema é composto por sensores que fazem a leitura da temperatura, umidade do solo, luminosidade e disponibiliza esses dados em uma aplicação web para o usuário poder saber em tempo real as condições da horta, também conta com um reservatório e um sensor de nível d’água que de maneira automática (seguindo os parâmetros de sua horta) ou manual (via aplicação) ativa a bomba para aguar sua plantação.

O projeto Galia System participou da competição Inventando o futuro com a DragonBoard 410c. Onde recebemos uma placa DragonBoard 410c e um Kit Linker Mezzanine Card Starter For 96Board.

Membros da equipe:

Carlos Henrique Pena - chcp@cin.ufpe.br (Perfil Instructables)

Gabriel de França Medeiros - gfm@cin.ufpe.br
Heitor Rapela Medeiros - hrm@cin.ufpe.br

English Version: Hello guys. If you want to know how to build a smart garden using DragonBoard 410c and Kit Linker Mezzanine Card, with sensors like Moisture Sensor, LDR for Luminosity, Water Level Sensor, Relay Module for Pump actuation, this is your place. All steps are in portuguese from Brazil, but you can follow our GitHub code and step by step to build your own smart garden solution. :)

Step 1: Arquiteturas E Diagramas

Como podemos ver nas imagens disponibilizadas, o projeto visa conectar a DragonBoard410c com os sensores através da Linker Mezzanine Card e com isto, atuar na horta. O sistema coleta os dados do ambiente e envia para o sistema cloud que foi feito utilizando Heroku. Tanto o usuário pode intervir para o acionamento da bomba para aguar a horta, quanto o próprio sistema, através de parâmetros predefinidos.

Step 2: Hardware E Software Necessário

Hardware Necessário

  • 1 placa DragonBoard 410C
  • 1 Linker Mezzanine Card Starter Kit
  • 1 Cartão de memória (4GB)
  • 1 Sensor de temperatura (kit Mezzanine)
  • 1 Sensor de luminosidade
  • 1 Sensor de umidade do solo
  • 1 Sensor de chuva *(era o sensor que a equipe tinha para o nível d’água)
  • 1 Relay (kit Mezzanine)
  • 1 Bomba de aquário
  • Quantidade grande de tubo de plástico maleável
  • Materiais extras (alicate, chave de fenda, ferro de solda, fita isolante, parafusos, PLA, etc)
  • Jumpers (Sempre tenha uma quantidade boa de jumpers ou fios, de tipos variados Macho-Macho, Macho-Fêmea ou Fêmea-Fêmea)

Software Necessário

  • Fusion 360 – Modelagens 3d
  • Versão do Linux Debian – Linaro 17.04
  • 96BoardsGPIO – Biblioteca para DragonBoard*
  • C/C++ – Leitura de sensores – Dados: Sensores – Para: Nuvem
  • Heroku – Sistema de Nuvem (Cloud)
  • Ruby – Desenvolvimento da Aplicação com filtros de dados – Dados: Nuvem – Para: Aplicação
  • HTML – Desenvolvimento da Aplicação – Aplicação
  • GitHub – Repositório Git – Versionamento do código

* Deve-se instalar outras libs que tem dependência como: Libsoc

Step 3: Step by Step

  1. O primeiro passo e mais importante é instalar o Linaro (recomendo pegar a versão 17.04 foi a utilizada no nosso projeto).
  2. O primeiro passo é atualizar todas as dependências e instalar as lib's necessárias para o desenvolvimento do projeto, como por exemplo: Libsoc e 96BoardsGPIO
  3. Por padrão o Linaro vem com SPI desabilitado, porém você deve habilitar (Link habilitar SPI) para podermos utilizar o conversor ADC e poder usufruir das portas analógicas (no nosso caso, utilizamos as portas disponibilizadas pela Linker Mezzanine Card). Caso queira testar se foi habilitado corretamente: Teste SPI no Linaro Debian
  4. Nesta etapa, nós já tinhamos o backend feito em Python mais Flask, porém ainda não tinhamos conseguido via python usando py-spidev se comunicar com as portas. Logo, preferimos mudar para C/C++ e utilizar variações dos exemplos amplamente disponibilizados pela internet. (English: In this step we change our decision of Python + Flask to C/C++ with terminal call using Curl).
  5. Caso queira entender mais sobre as modificações que fizemos para utilizar os sensores, aconselho olhar o GitHub Galia System: pasta GaliaServer/C/galiaSystem.cpp (English: check our version of analog read using SPI. Go to our GitHub and acess GaliaServer/C/galiaSystem.cpp)
    Cada uma das portas analógicas, precisam deste endereço para se comunicar via SPI, logo utilizamos o define para fazer esse map do endereço para as portas.
    • // Analog Read Defines
    • #define ADC1_A0 0x80 // Luminosidade - A0
    • #define ADC1_A1 0x90 // Sensor Nivel de Agua - A1
    • #define ADC2_A2 0xA0 // Sensor de Temperatura e Umidade - A2
    • #define ADC2_A3 0xB0 // Sensor de Umidade do solo -
      Depois é só utilizar a função: int getAnalogValue(int txValue), que foi criada seguindo o exemplo de Slider usando SPI.

      Depois para se comunicar com o Heroku utilizamos, uma string que faz uma chamada de sistema para através do Curl fazer o post da mensagem:
      std::string terminal = "curl --data \"username=Rasperna&password=GaliaRules& ";std::string url = "https://galiasystem.herokuapp.com/infoUpdate";

      ps: não disponibilizar a senha da aplicação como fizemos. Caso tenha alguma dúvida no post, tente entender a construção da string de dados. Caso tenha uma dúvida, pode nos mandar um e-mail.
  6. Para a última etapa você pode rodar nossa aplicação no Heroku e fazer algumas modificações, basta utilizar o seguinte código: https://github.com/GabrielFM/GaliaUserPage

Step 4: Galia System - Completo

  1. Utilizamos de cola quente, para juntar o reservatório de água, que na verdade é metade de um vaso, com o vaso retangular que é onde a horta vai ficar.
  2. Cortamos a mangueira para que possa sair do reservatório de água e alimentar a horta, a mangueira passa por dentro do vaso retangular da horta, para isto fazemos dois furos horizontais para a mangueira atravessar. E também fazemos dois furos na parte superior/lateral do reservatório para a mangueira voltar e deixar o excesso de água. O sistema também tem uma base para retirar o excesso de água e a horta não morrer encharcada.
    ps: Lembrar de fazer furos na mangueira em pontos cruzados e depois enrolar eles com filtro de café (com isto não volta areia para o reservatório de água) e a água consegue aguar bem as plantas.
  3. Soldamos os GND's do sensores, já que a placa não possui tanta porta. Lembre-se que ao utilizar algum sensor, veja se a corrente da fonte é suficiente para alimentar todos os sensores que planeja utilizar.
  4. Todos os sensores utilizados tem a tensão de 5V's. Logo, também soldamos todos os sensores VCC's e ligamos com a placa Mezzanine.
  5. Fizemos a ligação das portas analógicas referentes sensores. Lembrando de colocar os mesmos valores do código.
  6. Soldamos as ligações que não estavam tão apertadas e colocamos cola-quente em algumas para poder fixar, além de isolante nos lugares necessários.
  7. Colocamos o código presente em (GaliaServer/C/galiaSystem.cpp): Galia System Project para rodar na placa DragonBoard com a Mezzanine.
    ps: Lembre-se de mudar os seguintes valores para poder fazer o post corretamente na sua aplicação:
    std::string terminal = "curl --data \"username=Rasperna&password=GaliaRules& ";
    std::string url = "https://galiasystem.herokuapp.com/infoUpdate";
  8. Em outra máquina, atualizamos o Heroku, usando o código presente em, que é nossa aplicação: https://github.com/GabrielFM/GaliaUserPage

Step 5: References