Desenvolvendo um projeto com internet das coisas: sensor de humidade para plantas com arduino

Protótipo de um medidor de humidade conectado no wifi utilizando o Nodemcu. O vaso foi adquirido na https://www.leedens.com/ e foi usado para este projeto. Foto: Alexandre Magno

Este será o primeiro de um conjunto de posts em que vou compartilhar experiências do desenvolvimento de projetos com a tão falada Internet das coisas (IOT), usando diferentes módulos e em diferentes aplicações, testando e explorando possibilidades e abordando as vantagens e desvantagens de cada um, com desafios práticos para trazer esta nova tecnologia no nosso dia a dia.

Qual será o projeto?

Vou começar por uma área que eu particularmente gosto e venho há muito tempo experimentando, que inclusive foi parte da minha tese de mestrado interrompida. Vou falar da internet das coisas aplicada a automatização de hortas.

Por que este projeto pode ser considerado de Internet das coisas?

Internet das Coisas (do inglês, Internet of Things, IoT) é uma rede de objetos físicos, veículos, prédios e outros que possuem tecnologia embarcada, sensores e conexão com a rede e é capaz de coletar e transmitir dados.
fonte: Wikipedia

Este é um projeto que venho amadurecendo há tempos, com várias tentativas falhas. Existem muitos projetos relacionados e com diferentes metodologias quando se trata deste assunto. É possível encontrar excelentes projetos no Intructables. Temos também alguns projetos consolidados no mercado:

Há também várias tentativas utilizando o crowdfunding para lançar no mercado produtos de IOT para automatização de plantio.

Há outros também que já foi lançado e é vendidos em lojas como a Amazon. Um deles é o Aero Garden.

Porém, assim como muitos projetos de IOT temos diferentes designs e interfaces e muitas vezes temos o desejo provocado pelo marketing e pela propaganda de adquirir estes novos Gadgets, mas que na prática no nosso dia a dia ele não é tão útil e realmente não agrada a longo prazo.

Por isto, para cada projeto de IOT que você desejar fazer, precisa, assim como um projeto de software, ter todo cuidado para pensar no design, usabilidade, segurança e acessibilidade para realmente ser útil para você e para quem for criar ou usar, e para isto resolvi começar em partes para garantir que o objetivo final seja alcançado de forma sustentável.

Por isto, para pensar em um projeto de automação de plantas, por ser algo que envolve muitas complexidades e variáveis, se tratando do mundo da biologia, é essencial que seja feito experimentos e testes em diferentes situações, e neste caso, para este post irei focar no sensor e lhe mostrar diferentes possibilidades de uso e o uso que eu fiz na prática para realizar os testes e tentar validar o projeto.

O projeto aqui em questão irá usar a conexão Wifi para conectar-se em um servidor e enviar dados da umidade do solo para ser enviado por e-mail (poderia fazer um Tweet também) de hora em hora. A partir daí é possível realizar diferentes aplicações. Neste caso, por enquanto para realizar testes e entender na prática como funciona as medidas, este é um ótimo começo para começar com IOT na prática com algo útil

Por que desenvolver projetos com IOT? O que eu preciso saber para começar?

Se você ainda não se aventurou neste mundo, tome cuidado, você pode viciar e querer reinventar vários dispositivos que você vê por aí e com a facilidade. Esta cada vez mais acessível adquirir componentes, com suporte em diferentes linguagens como Python, Lua e até Javascript. Ficou mais fácil desenvolver protótipos de novos dispositivos, mas com isto também novas complexidades e necessidades em cima de estruturas já criadas. Com tantas opções e tantos projetos muitas vezes querer recriar projetos do zero pode ser desastroso, por isto, sempre ter uma boa referência de outros projetos antes de começar é essencial.

Outra questão que depois de construir seus protótipos, se quiser prosseguir, soldar os componentes e criar um projeto real para utilizar ou produzir em larga escala há várias questões a serem consideradas, como o próprio preço para construção e viabilidade de uso no mundo real, onde nem sempre tudo funciona como esperamos. Por isto importante também testar com em diferentes situações. Acredito que vale as mesmas regras de desenvolvimento de software, mas quando o assunto é hardware, envolve várias novas dimensões e variáveis para serem consideradas, além do próprio software integrado, que usa diferentes módulos, diferentes com o que você está acostumado quando falamos de Web.

Como desenvolver projetos de IOT

Vou usar este projeto como exemplo para tentar ilustrar a arquitetura que precisamos pensar antes de criar qualquer projeto com Arduino e que envolve diferentes componentes.

Quais serão os componentes?

Arduino

NodeMCU ESP8266 com Wifi embutido que suporta MicroPython e Lua para desenvolver projetos IOT. foto: Alexandre Magno. Onde encontrar: https://www.usinainfo.com.br/nodemcu/nodemcu-v3-esp8266-esp-12e-iot-com-wifi-4420.html

Temos aqui os componentes necessários para o projeto, ele tem dois componentes: o sensor de humidade do solo e um pequeno circuito que é o NodeMCU, com Wifi integrado.

Todos os componentes eu adquiri pela UsinaInfo, com muitas opções de dispositivos e componentes e com um preço super acessível e com entrega em todo Brasil.

Sensor

O sensor envia uma corrente para medir a umidade do solo. Quando o valor está aumentando indica solo mais seco e quando está húmido o valor diminui

Este é um sensor de temperatura que pode ser adquirido na Usina Info e é de baixo custo e de uma boa precisão, assim como temos outros modelos e um medidor de umidade e temperatura, mas para este projeto eu utilizei apenas de umidade para testar a manutenção de uma planta indoor.

Vantagens

  • Você não precisará programar em Arduino, e tem a opção de desenvolver os projetos em Lua ou até mesmo uma variação do Python, o MicroPython
  • Alimentado por Micro USB

Desvantagens

  • Não opera na frequência de 5GHz

Ligação dos componentes

Foto esquemática da ligação entre um Arduino NODEMCU com um sensor de solo para projeto de automação de plantio

Parte 1: Desenvolvendo o software embarcado com MicroPython

Eu optei por desenvolver em Python, e tive um grande trabalho para realizar a configuração. Isto por que temos que alterar a memória principal, fazendo download de um firmware e configurando o sistema do zero. Após isto você tem um ambiente Python em que você pode realizar downloads de arquivo com scrips para executar no aparelho, além do acesso a bibliotecas onde é possível manipular o Wifi.

Os passos para realizar esta mudança não é requerido para quem irá desenvolver em Lua, que é como esta variação do Arduinos, o ESP8266, vem de fábrica.

Se quiser se aventurar pelo MicroPython e personalizar o seu dispositivo, é preciso seguir os seguintes passos:

  1. Instalar o Driver para que seu computador, no meu caso o Mac, os drivers para que o seu sistema operacional reconheça a conexão MicroUSB
    https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver
  2. download the firmware
    http://micropython.org/download#esp8266
  3. Instalar o Esptool
  4. Apagando o flash e resetando o dispositivo
     esptool.py --port /dev/cu.wchusbserial1420 erase_flash
  5. Fazendo upload de um novo firmware
     esptool.py --port /dev/cu.wchusbserial1420 --baud 460800 write_flash --flash_size=detect 0 ~/Downloads/esp8266-20180511-v1.9.4.bin
  6. Conectar no dispositivo
     picocom /dev/cu.wchusbserial1420 -b115200

Conectando ao wifi para fazer requisições

Lendo medida do sensor

from machine import ADC
 >>> adc = ADC(0)
 >>> adc.read()
 402

Código do MicroPython

Parte 2: Desenvolvendo o servidor que irá receber as requisições

Para a parte do servidor eu criei um projeto Open Source chamado Ahorta, que irá receber os dados do sensor enviado pelo dispositivo pela rede da Wifi da sua casa para realizar requisições para o seu servidor.

Ver projeto no Github

Basicamente, o projeto é uma stack NodeJS com a API do Sendgrid, hospedada no Heroku para realizar requisições passando informações da planta, como no nosso caso, lendo o sensor de umidade. Sendo assim, nosso servidor funciona desta forma:

  1. Um servidor que recebe uma requisição para uma API rest de sensor, passando o valor da humidade
  2. Ativa nesta requisição o envio de um e-mail, pois estamos com uma app do Heroku integrada ao Sendgrid para enviar os e-mails, mas que poderia ser qualquer outra integração.

Segurança

Para a segurança, criamos um token que precisa estar na requisição, no caso do código acima temos uma variável de ambiente onde contém a chave, que deve ser correspondente a chave que irá fazer a requisição. Este token fica armazenado no aparelho e quem irá receber a requisição, no caso nosso servidor, precisa validar a existência dele, caso contrário podemos receber várias requisições indesejadas e estaremos vulneráveis a ataques no servidor.

Resultado

Como resultado e configurado no script Node do servidor, temos o envio de um e-mail de hora em hora para minha caixa de entrada.

Observações importantes

  • Lembrando novamente, o suporte dele é para redes 2.4ghz, e no meu roteador tem as duas frequências, e não realizei testes para outras frequências.
  • Use os cabos melhores, pois não estava conseguindo conectar inicialmente por cabos Micro USB que não estavam funcionando corretamente.
  • A velocidade de conexão deve funcionar bem na faixa de 115200 (No meu tem escrito no chip as instruções, dizendo que na criação do flash usar a faixa de 9600)

Links

Conclusão

Espero que este projeto dê luzes para entender o mundo de projetos IOT e ajude a entender arquiteturas de diferentes dispositivos de forma integrada.

Com estes dispositivos e esta arquitetura podemos realizar diferentes aplicações para automação residencial.

Tem interesse em trabalhar neste projeto e em outros Open Source? Siga o projeto no Github

Você pode também se inscrever e ficar sabendo de tarefas para este e outros projetos!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *