Você está na página 1de 125

Tutoriais MJRoBot

Volume 1

ArduFarmBot
Automatizando uma horta de tomates com
a ajuda da Internet das Coisas - IoT

ArduFarmBot
Automatizando uma horta de tomates com a ajuda
da Internet das Coisas -IoT

Marcelo Jos Rovai

Maurcio Teixeira Pinto

2
ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

ndice

Prefcio - Tutoriais MJRoBot 4


Prefcio - ArduFarmBot 5
O livro 6
Introduo 8
Parte 1 - ArduFarmBot: a estao local 11
1.1 - Lista de materiais (BoM) para partes 1 e 2 12
1.2 - Instalao, programao e teste dos sensores 13
1.3 - Display LCD para monitoramento local 20
1.4 - Atuadores e botes para controle local 23
1.6 - Compatibilizando as operaes automtica e manual 32
1.7 - Its show time! 37
1.8 - Colocando tudo na caixinha 42
1.9 - Testes funcionais em laboratrio 44
1.10 - Test Drive: Regando um tomateiro com o ArduFarmBot 46
1.11 - O ArduFarmBot em ao: a plantao do Maurcio 47
Parte 2 - ArduFarmBot: a estao remota 49
2.1 - Colocando as coisas na internet 50
2.2 - Completando o Hardware 51
2.4 - Data Storage Cloud: O ThingSpeak.com 56
2.5 - Comandando os atuadores a partir da web 60
2.6 - Implementao de uma pgina Web dedicada 66
2.7 - A Matriz Sensor-Atuador 68
2.8 - Otimizando o cdigo 72
2.9 - O projeto na prtica: a plantao do Marcelo 76
Parte 3 - O ArduFarmBot 2 78
3.1 - Lista de materiais (BoM) para a parte 3 80
3.2 - O NodeMCU 81
3.3 - Utilizando o Arduino IDE com o NodeMCU 83
3.4 - Instalando o Display OLED 87
3.5 - Capturando a temperatura e a umidade do ar 90
3.6 - Capturando a umidade do solo 91
3.7 - Capturando a temperatura do solo 94
3.8 - Completando o HW 97
3.9 - Concluindo o SW para estao de controle local 103
3.10 - Automatizando o ArduFarmBot 2 106
3.11 - Criando a App BLYNK 110
3.12 - Introduzindo as funcionalidades do Blynk 113
3.14 - Teste real com o ArduFarmBot 2 121
Concluso 124

Tutoriais MJRoBot Volume 1 3


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Prefcio - Tutoriais MJRoBot

A nossa gerao cresceu dentro de uma perspectiva de mundo de cincia fico,


embalada pelos desenhos animados e de outras tantas series televisivas, que semearam
no nosso inconsciente essa realidade que viveramos no futuro.

O que vemos hoje em dia no nada diferente do que sonhvamos ter quando crianas -
as coisas se comunicam entre si e interagem com seu dono. E isso j tem um nome:
IoT Internet of Things, a Internet das Coisas!

Objetivamente ela permitir (j permite) a interligao de objetos do mundo real com o


mundo virtual por meio de sensores. Trocando informaes sobre status, localizao,
funcionamento, problemas, decises, etc., onde algoritmos sero responsveis por
processar essas informaes, responder ao objeto e gerar uma grande quantidade de
dados que sero armazenados em potentes servidores na nuvem. E se voc quiser, o
mundo todo poder interagir com o teu mundo.

So muitas as facilidades que encontramos hoje com os sistemas colaborativos de


compartilhamento do conhecimento pela internet. O grande trabalho sistematizar esse
conhecimento para que se torne prtico ao indivduo comum, ou seja, voc mesmo. E
assim torna-lo til ao seu dia a dia. Dar conforto, melhorar a sua vida cotidiana.

claro que voc no pode predizer o futuro mas pode ajudar a constru-lo.

Para aqueles que se interessam por participar ou ajudar a construir essa realidade que
estamos lanando estes tutoriais.

Mas cuidado com os hackers ... eles podero invadir a sua geladeira.

Tutoriais MJRoBot Volume 1 4


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Prefcio - ArduFarmBot

...
Afagar a terra
Conhecer os desejos da terra
Cio da terra, propcia estao
E fecundar o cho

O Cio da Terra Milton Nascimento

Plantar e colher so atividades presentes para a espcie humana desde sempre. O


homem extrativista dominou a arte da agricultura e deixou de ser nmade. Criou razes.

Muitos milnios depois essa coisa de plantar e colher passou a ser um hobby para o
comum dos mortais.

Para muitos pode ser uma tarefa impossvel! Quanta gua, quanto calor devo dar?
Quanto tempo para colher? Est crescendo como deveria?

Se voc no quer ter essas dvidas melhor ir ao supermercado. Mas seguramente no


ter a mesma emoo de ver sua prpria criao tomando vida e poder contar aos teus
amigos que a saladinha de entrada do almoo veio de sua prpria horta.

Internet das Coisas vem para te ajudar se voc quiser ajuda, claro.

Foi pensando nisso que ns, mortais comuns interessados por eletrnica e por uma boa
macarronada ao sugo, resolvemos desenvolver este projeto de automatizar uma horta de
tomates.

Esperamos que o ArduFarmBot possa trazer muitos frutos para vocs. Literalmente!

Tutoriais MJRoBot Volume 1 5


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O livro

Neste livro, desenvolveremos duas verses de um controlador eletrnico, o


ArduFarmBot, que a partir da captura de dados provenientes de uma horta de tomates,
tais como temperatura do ar e solo, umidade relativa do ar, luminosidade e umidade do
solo, decidir autonomamente a quantidade certa (e quando) a plantao dever receber
calor e gua.

Alm disso, o ArduFarmBot permitir a interveno manual, tanto em forma local


quanto remota via Internet, a fim de controlar o acionamento de uma bomba de gua e
de uma lmpada eltrica, esta ltima para ser usada na gerao de calor para as plantas.

O livro est dividido em 3 partes. Na primeira parte, a partir do Arduino Nano


desenvolveremos uma verso tanto manual operada por botes, quanto automtica
do ArduFarmBot. Na segunda parte, expandiremos o projeto aprofundando-nos na
automao do projeto e introduzindo a operao remota atravs da internet. Para a
conexo Wifi, trabalharemos com o ESP8266-01 enviando dados para o servio
especializado em IoT, ThingSpeak.com.

Na terceira e ltima parte desenvolveremos uma segunda verso do ArduFramBot,


introduzindo o NodeMCU ESP8266-12E, um poderoso e verstil dispositivo para
projetos em IoT. O NodeMCU substituir de forma integrada tanto o Arduino Nano
quanto o ESP8266-01 respectivamente no controle local do ArduFarmBot e
comunicao com a internet. Nesta etapa, tambm exploraremos uma nova plataforma
de servios do universo IoT, o Blynk.

O livro usa o ArduFarmBot como base para o aprendizado de como se trabalhar (HW e
SW) com displays (LCD e OLED), LEDs e botes. Como acionar rels e ler sensores tais
como: DHT22 (temperatura e umidade relativa do ar), DS18B20 (temperatura do solo),
YL69 (umidade do solo) e LDR (luminosidade).

Todas as principais etapas do livro esto detalhadamente documentadas atravs de


fotos, diagramas eltricos (Fritzing), cdigos (GitHub) e vdeos (YouTube).

Tutoriais MJRoBot Volume 1 6


7
ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Introduo

Neste tutorial desenvolveremos um controlador


eletrnico (o ArduFarmBot) que a partir da captura
de dados provenientes de uma plantao de tomates
(vulgo tomateiro), tais como temperatura, umidade
relativa do ar, luminosidade e umidade do solo,
decidir autonomamente a quantidade certa (e
quando) o plantio dever receber calor e gua.

Alm disso, o ArduFarmBot permitir a interveno


manual de um operador, tanto de forma local quanto
remotamente via Internet, a fim de controlar o
acionamento de uma bomba de gua e de uma
lmpada eltrica, esta ltima para ser usada na
gerao de calor para as plantas.

Em suma, o ArduFarmBot receber como entrada:

Sensores (dados analgicos):


o Temperatura
o Umidade do ar
o Luminosidade
o Umidade do solo

E fornecer como sadas:

Atuadores:
o Rel para controle de bomba
o Rel para controlo da lmpada
Sinalizao (dados digitais):
o Visual e sonoro para indicao de status / erro
o Visual de Estado da bomba
o Visual para o estado da lmpada
Display dos dados:
o Todos os dados analgicos e digitais devem estar disponveis para
avaliao instantnea
Armazenamento de dados:
o Dados histricos deve ser de armazenamento remotamente na internet e
opcionalmente tambm localmente (EEPROM do Arduino)

Tutoriais MJRoBot Volume 1 8


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O diagrama de blocos abaixo mostra os principais componentes do projeto:

O vdeo abaixo descreve os principais elementos utilizados no primeiro prottipo de


laboratrio usado para testes:

https://youtu.be/SwgKzfAvWlI

Neste segundo vdeo, mostramos como os comandos funcionaro em modo local e


remotamente via Web Page:

https://youtu.be/fcRA6g8ZGS8

Tutoriais MJRoBot Volume 1 9


10
ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Parte 1 - ArduFarmBot: a estao local

Nesta primeira parte, exploraremos a estao local, desenvolvendo o HW e o SW para


trabalhar com os sensores, atuadores, aprendendo como exibir dados, etc.

Abaixo o diagrama em blocos simplificado da verso 1 da estao local:

Tutoriais MJRoBot Volume 1 11


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.1 - Lista de materiais (BoM) para partes 1 e 2


Os principais componentes para o ArduFarmBot so (valores em USD):

Arduino Nano ($7.50)

Temperature and Humidity Sensor DHT22 ou DHT11 ($3.66)

Luminosity Sensor AD-018 Photo resistor module. ou equivalente ($0.71)

2X Soil Moisture Sensor ($1.99) (Opcional, pode ser do tipo caseiro -DIY)

LCD I2C 20X4 ($13.99)

LEDs (1X) ($0.20)

Esp8266 Serial Wifi Wireless Transceiver Module Esp-01 ($5.96)

Active Buzzer Ky-12 ou equivalente ($0.60)

2 X 5v Relay Module ($11.60)

Jump wires (S1.00)

Resistor 10K ohm ($0.03)

Resistor 2.2K ohm ($0.03)

Resistor 1.0K ohm ($0.03)

Resistor 220 ohm ($0.03)

Arduino Nano Shield (Funduino) ($7.28)

Membrane keyboard (4 Keys) ($6.65)

Caixa Plstica

Tutoriais MJRoBot Volume 1 12


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.2 - Instalao, programao e teste dos sensores

A. DHT22: Sensor de temperatura e umidade

O primeiro sensor a ser testado e instalado o DHT 22, um sensor digital de umidade
relativa do ar e temperatura. Ele usa internamente um sensor capacitivo de umidade e
um termistor para medir o ar circundante, gerando um sinal digital em sua sada de
dados.

De acordo com a sua folha de dados (Datasheet):

https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf,

o sensor deve ser alimentado entre 3.3V e 5V (algumas especificaes falam em at 6V


mx.). Ele trabalha a partir de -40 a + 80 graus centgrados (algumas especificaes
falam em + 125 C) com uma preciso de +/- 0,5 C de temperatura e +/-2% de
umidade relativa. importante ter em mente que o seu (sencing period) em mdia
de dois segundos (tempo mnimo entre leituras).

Para mais detalhes, visite a pgina: https://learn.adafruit.com/dht

Tutoriais MJRoBot Volume 1 13


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O DHT22 tem 4 pinos (de frente para o sensor, o pino 1 o mais esquerda):

1. VCC (3 a 5V)
2. Sada de dados
3. No conectado
4. GND (Terra)

Uma vez que normalmente voc usar o sensor em distncias inferiores a 20m, um
resistor de 10K deve ser conectado entre os pinos de dados e o VCC. O pino de sada
deve ser conectado ao pino D5 do Arduino como mostrado no diagrama anterior.

Uma vez que o sensor instalado fisicamente no Arduino, baixe a biblioteca DHT a
partir do repositrio de programas da Adaffruit

https://github.com/adafruit/DHT-sensor-library

e a instale junto as outras bibliotecas de seu IDE (ambiente de desenvolvimento de


programas do Arduino).

Uma vez que voc recarregue o IDE, a biblioteca para o sensor de DHT dever aparecer
como instalada.

Tutoriais MJRoBot Volume 1 14


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Execute o cdigo abaixo para verificar que tudo esteja funcionando OK:

Tutoriais MJRoBot Volume 1 15


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

B. Sensor de luminosidade

Com o DHT funcionando, hora de instalar e testar o sensor de luminosidade. Para isso,
podemos usar um simples LDR (Resistor varivel com luz). Basicamente, o que se deve
fazer criar um divisor de tenso, onde um dos resistores o LDR e o outro um fixo,
sendo o ponto mdio do divisor conectado a uma entrada analgica do Arduino. Desta
forma, uma vez variando-se a luminosidade sobre o sensor, sua resistncia variar
proporcionalmente e por conseguinte, a tenso no ponto mdio do divisor tambm
variar.

Em nosso projeto, por facilidade de instalao, usaremos um mdulo LDR barato


(KY18) o qual j possui o divisor de tenso integrado. O mdulo tem 3 pinos ( S para
dados; + para VCC e - para GND). O pino S ser ligado ao pino analgico Ao do
Arduino. O + e - pinos devem ser ligadas, respectivamente, a 5 V e GND. Se o
consumo de energia uma preocupao, o + pode ser conectado a uma das sadas
digitais do Arduino, que dever ser colocada em HIGH alguns milsimos de segundo
antes de se ler a tenso no pino A0, retornando para LOW depois disso.

A funo getLumen (LDR_PIN) ler algumas vezes a sada do sensor (poderia ser de 3,
10 ou mais, voc decide o que melhor para o seu caso) calculando a mdia dessas
leituras (isso para diminuir o risco que uma nica leitura seja na verdade um rudo).
Alm disso, uma vez que a sada do conversor analgico digital (ADC) interno do
Arduino ser um nmero de 0 a 1023, deveremos mapear esses valores, a fim de obter
os seguintes resultados como porcentagens:

Dark Full sada ADC: 1023 0%


Full Light sada ADC: 0 100%

Abaixo a funo em C++:

Tutoriais MJRoBot Volume 1 16


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

C. Sensor de umidade de solo (Higrmetro)

Um sensor para testar a umidade do solo (ou higrmetro) muito simples. Ele possui o
mesmo princpio de funcionamento que o sensor de luminosidade. Um divisor de tenso
ser usado como ponto de entrada de uma das portas analgicas do Arduino, mas em
vez de um resistor que varie com luz, usaremos um que varie com a umidade do solo. O
circuito bsico muito simples e pode ser visto abaixo.

Infelizmente, a realidade um pouco mais complexa do que isso (mas no muito). Um


simples sensor como o descrito funcionaria bem, mas no por muito tempo. O problema
que ter uma corrente constante fluindo atravs dos eletrodos em uma nica direo
gera corroso sobre eles, devido ao efeito de eletrlise. Uma maneira de resolver isso
conectando-se os eletrodos no diretamente ao VCC e terra, mas portas digitais do
Arduino (por exemplo VCC a D7 e GND a D6 como mostrado acima). Ao fazer isso, em
primeiro lugar o sensor seria energizado apenas quando a leitura realmente ocorresse
e a direo da corrente sobre as sondas poderia ser alternada, eliminando o efeito da
eletrlise.

Para o desenvolvimento do SW, foi utilizado um potencimetro de 10K


ohm entre + 5V e GND, simulando a sada do sensor de umidade.
Discutiremos sensor em mais profundidade no item 1.5 mas a frente.

Tutoriais MJRoBot Volume 1 17


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A seguir um cdigo de teste simples, baseado no post How to: Soil Moisture
Measurement? (http://forum.arduino.cc/index.php?topic=37975.0)

Tutoriais MJRoBot Volume 1 18


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

D. Completando os testes com os sensores

Agora que todas as rotinas para os sensores esto prontas e testadas individualmente,
criaremos uma funo especfica onde todos os sensores sero lidos ao mesmo tempo:

Procure fazer alguns testes com os sensores, como cobrir o LDR com um pano ou a mo,
colocar o dedo diretamente no DHT, etc., como variam o range os dados, utilizando-se
do Monitor Serial.

O cdigo completo: Sensors_Setup_and_Test.ino

Pode ser baixado do repositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot/tree/master/Sensors_Setup_
and_Test

Tutoriais MJRoBot Volume 1 19


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.3 - Display LCD para monitoramento local

claro que nem sempre ser possvel usar o monitor serial para observar a leitura de
nossos sensores. Assim, para monitorizao local, ser adicionado ao projeto um
mdulo LCD de 4 linhas e 20 caracteres cuja comunicao se d via protocolo I2C. Este
mdulo permite a configurao de contraste atravs de um potencimetro instalado em
sua parte traseira.

Para comunicao serial do tipo I2C com o Arduino, o LCD possui 4 pinos:

GND, VCC, SDA e SCL

O pino SDA ser ligado em nosso caso a entrada A4 do Arduino e o pino SCL ao A5,
como mostrado no diagrama acima.

Uma vez que os 4 fios so conectados, a prxima coisa a fazer baixar e instalar a
biblioteca I2C para o seu display LCD, a qual pode ser usada tanto para um display do
tipo 20 x 4 quanto para o 16 x 2 (2 linhas de 16 caracteres):

https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Tutoriais MJRoBot Volume 1 20


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Execute em seu Arduino o programa exemplo Hello World que vem includo com a
biblioteca, mudando o setup padro (16 2) para o nosso 20 x 4. O endereo default
0x27 funcionou bem em meu caso:

Tutoriais MJRoBot Volume 1 21


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Se voc no tem certeza sobre o seu endereo I2C de seu LCD, uma
simples varredura em seu HW ir mostrar se existem dispositivos I2C
conectados, se esto funcionando corretamente e em qual seu endereo.
O cdigo para fazer o scanner pode ser encontrado aqui:

http://playground.arduino.cc/Main/I2cScanner

Em nosso projeto, ao executar o programa obtivemos no Monitor Serial:

Scanning...

I2C device found at address 0x27!

done

Incorporemos as funes, definies especficas, etc. referentes ao LCD nossa ltima


verso do cdigo, para que possamos obter as leituras de sensores no LCD:

O cdigo completo poder ser descarregado do depositrio de arquivos do projeto:

https://github.com/Mjrovai/ArduFarmBot/tree/master/Sensors_Setup_
and_Test_LCD/Sensors_Setup_and_Test_LCD.ino

Tutoriais MJRoBot Volume 1 22


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.4 - Atuadores e botes para controle local


A. Atuadores

At agora, pudemos obter os dados gerados pelos sensores e exibi-los no monitor serial
e no LCD. hora de fazer alguma coisa com esses dados. Vamos pensar sobre os
atuadores!

Como discutido na introduo, nosso objetivo final aqui cuidar de uma plantao de
tomate. Com os dados fornecidos por sensores, saberemos a temperatura e umidade do
ar, a luminosidade e o mais importante quo seco se encontra o solo onde est a
plantao. Com esses dados em mos, o nosso programa dever decidir se seria
necessrio irrigar a plantao, ligando uma bomba eltrica para bombear gua ou uma
lmpada eltrica para fornecer o calor necessrio para a cultura. Para isso, usaremos
pequenos Mdulos de %V para rels para a ativao da bomba e lmpada. O diagrama
do Mdulo de Rel pode ser visto abaixo.

Mdulos de rels podem apresentar vrias nomenclaturas para seus pinos de entrada,
tais como: G, V, S ou S, -, + ou In, Vcc, GND , etc.

Olhando para o diagrama, dependendo do seu mdulo de rel, necessrio conectar:

Arduino 5V V ou + ou Vcc
Arduino GND G ou - ou GND
Arduino OUT S ou In (em nosso caso o Arduino OUT deve ser D10
para a bomba e D8 para lmpada)

Tutoriais MJRoBot Volume 1 23


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Normalmente voc encontrar como sada, 3 pinos: NA (ou NO), Ref, e NF (ou
NC), que so: Normal Open ou Aberto, Referncia e Normal Closed ou Fechado .
Ns usaremos o par: NA e Ref (centro). No diagrama acima, NA o terminal para
conectar-se ao positivo da fonte de alimentao (12 ou 9VDC para Bomba e 127 ou
220VAC para a lmpada, conforme seu caso). O Ref ser conectado bomba ou da
lmpada, como mostrado na figura acima.

Para saber mais sobre rels, visite:

https://arduino-info.wikispaces.com/ArduinoPower

Juntamente com os rels, opcionalmente 2 LEDs podem ser utilizados para mostrar se
os rels esto ligados ou desligados:

LED vermelho: Bomba


LED verde: Lmpada

Para o teste timo se ter os LEDs instalados em seu BreadBord, mas


para o projeto final voc poder elimin-los, reduzindo a carga na
sada do pino do Arduino (mesmo porque os mdulos de rels em geral
j possuem um pequeno LED vermelho incorporado). Trabalhando
juntos, eles puxaro uma quantidade razovel de corrente do Arduino
(voc poder perceber uma reduo no brilho no LCD). Outra
alternativa se utilizar sadas digitais diferentes para os LEDs e rels, o
que claro reduz a disponibilidade dos pinos para outros usos.

B. Botes

Com base nas leituras dos sensores, um operador poderia decidir controlar
manualmente a bomba e/ou lmpada. Para isso, dois botes do tipo push-button sero
incorporados ao projeto. Eles vo trabalhar em um modo de alternncia (Toggle): Se
um atuador est ON, pressionando- se o boto, ele passa a OFF e vice-versa. A lgica
do boto ser normalmente fechada, o que significa que a entrada do Arduino estar
constantemente em HIGH (ser usado um resistor de pull-up interno do Arduino).
Pressionando-se o boto, um estado LOW ser aplicada ao pino do Arduino.

Da mesma maneira que fizemos com os sensores, toda vez que executemos o loop(),
uma funo readLocalCmd() ser executada. Esta funo ler o estado dos botes,
atualizando o status de variveis correspondentes aos atuadores (pumpSatus e
lampStatus).

Tutoriais MJRoBot Volume 1 24


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Note que a funo debounce(PIN) chamada ao invs de um digitalRead(PIN). Isso


para evitar falsas leituras do boto.

Se voc quiser saber mais sobre debouncing, consulte:

https://www.arduino.cc/en/Tutorial/Debounce

No caso em que um boto pressionado, uma outra funo ser chamada: aplyCmd(), e
como o prprio nome diz, ela aplicar o comando correspondente, ligando ou
desligando os atuadores:

Tutoriais MJRoBot Volume 1 25


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

C. Consideraes sobre o Timing do programa

Quando pensamos sobre as tarefas a serem executadas, podemos agrupa-las em:

1. Ler sensores
2. Ler botes (comando local)
3. Atuar sobre Bomba / Lmpada
4. Exibir todos os dados

Percebemos que o timing de quando deveramos realizar tais tarefas no so


necessariamente os mesmos. Por exemplo, para ler os dados de temperatura e de
umidade do DHT 22, temos de esperar pelo menos 2 segundos entre medidas, mas
diferenas em minutos no faro grandes diferenas. Para o sensor de umidade do solo,
quanto menos medies fizermos, melhor (evita corroso das pontas de prova devido a
eletrolise) e finalmente, a luz do dia no variar instantaneamente. Mas quando
pensamos sobre os atuadores, logo que se pressione um boto, gostaramos (e
possivelmente precisaramos) de uma reao rpida.

Assim, a ltima instruo antes do final do setup() ser a inicializao de um


temporizador principal usando a funo millis() em vez de espalhar um monte de
delays()s pelo cdigo:

startTiming = millis(); // Iniciar o relgio do programa

Durante o loop(), a primeira instruo ser a de incrementar a varivel startTiming com


uma temporizao real.

elapsedTime = millis() startTiming;

Depois disso, leremos o estado dos botes usando a funo readLocalCmd( ).

readLocalCmd(); // Ler estado dos botes locais

Esta leitura ir acontecer toda a vez que o programa execute o loop ().

Tutoriais MJRoBot Volume 1 26


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Em relao aos sensores, fazemos a leitura a cada 5 segundos, por exemplo, e no em


cada loop:

IF (ELAPSEDTIME > (5000))


{
readSensors();
printData();
startTiming = millis();
}

O cdigo completo para testar a nossa Estao local pode ser baixado do repositrio de
arquivos:

https://github.com/Mjrovai/ArduFarmBot/tree/master/Ardufarmbot1_L
ocal_Station

Tutoriais MJRoBot Volume 1 27


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.5 - Aprofundando com o sensor de umidade do solo

Esta analise no crtica para o desenvolvimento do ArduFarmBot,


mas achamos que seria interessante aprofundar-nos um pouco mais no
estudo deste simples, mas crtico componente para o projeto.

Como brevemente explicado anteriormente, o sensor de umidade de solo, ou


higrmetro, pode ser explicado como um simples divisor de tenso resistivo.

Sabendo disso, podemos construir um sensor muito simples usando-se duas sondas
metlicas construdas com materiais simples tais com como parafusos ou pregos
comuns ligados a fios. Conforme descrito anteriormente no item 1.2, denominaremos a
resistncia medida entre estas duas pontas metlicas de R1, que a resistncia do
solo (no o melhor termo cientfico, mas est bem para o que necessitamos).

As fotos abaixo mostram um primeiro sensor construdo com parafusos galvanizados e


dois fios (somente R1) e um segundo sensor onde adicionamos um terceiro fio e um
resistor integrado, o R2 (divisor completo).

Tutoriais MJRoBot Volume 1 28


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Utilizando-se de 3 amostras de solo em diferentes estados de umidade, podemos medir


o valor esse valor R1 utilizando-se de um multmetro comum e corrente, como mostrado
na foto abaixo

Seco: R1 20K ohm (aprox.)


mido: R1 4K ohm a 6K ohm (aprox.)
Molhado: R1 1K ohm (aprox.)

R2 a resistncia fsica usada para completar o divisor de tenso (comearemos


utilizando um potencimetro 10K ohm para o setup). Calculando o Vin na porta A1 do
Arduino, proporcionalmente VCC, chegaramos a equao:

Vin = R2 / (R1 + R2) * VCC ou Vin / VCC = 10K / (R1 + 10K) * 100 [%]

Pelos valores reais medidos com o multmetro, podemos antecipar que os resultados
devem ser:

Seco: 10K / 30K *100 <30%


mido: 10K / 15K * 100 ~ 67%
Molhado: 10K / 11K * 100 > 90%

Conectando-se o sensor ao ArduFarmBot:

Tutoriais MJRoBot Volume 1 29


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Fazendo-se as conexes com o Arduino e executando o cdigo desenvolvido at agora,


teremos como resultado:

Seco: 13%
mido: 62%
Molhado: 85%

Devido a que mudamos a posio dos sensores na terra, o valor medido de R1 variar
um pouco, alm de que o VCC tambm no exatamente 5V, se observa que os valores
obtidos na prtica so ligeiramente diferentes do terico. Mas como o que realmente
importa o intervalo de variao e no o valor absoluto, o resultado pode ser
considerado como satisfatrio.

O sensor ser utilizado em 3 estados distintos:

Molhado: Mais de 60% (no ligaremos a bomba de maneira nenhuma)


mido: Entre 40% a 60% (Onde queremos trabalhar) e
Seco: Abaixo de 30% (precisaremos ligar a bomba)

Como voc pode observar, ajustando R2 em 10K ohm funcionou bem, o que nos nos leva
a substituir o potencimetro por um resistor fixo de 10K ohm a ser instalado ao nosso
sensor de umidade de solo caseiro.

Outra coisa que se pode perceber durante os testes, que ao se fazerem as medies vo
se acumulando pequenos erro s leituras. Isto porque o sensor tambm se comportar
como um capacitor. Ao se energizar o sensor para uma nica captura de dados
precisamos esperar um tempo razovel, mesmo depois de cortar o fornecimento de
energia para que o mesmo possa se descarregar . Revertendo-se a corrente ajudar,
mas no ser o suficiente.

Tutoriais MJRoBot Volume 1 30


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Os grficos anteriores mostram 2 conjuntos de medies:


1. Linha azul: Um ciclo de 10 medies a cada 1 segundo entre amostras e com 1
minuto entre os ciclos
2. Linha Laranja: Um ciclo de 10 medies a cada 1 segundo entre amostras e com 5
minutos entre ciclos
Observa-se que com intervalos de 1 segundo (azul), a cada nova amostragem, o valor
medido aumentar significativamente. Esperando-se 1 minuto aps desligar-se a
energia diminuir o efeito de tenso de armazenamento, mas no o eliminar por
completo, sendo que um valor residual ser adicionado prxima medio.

O aumento do intervalo de ciclos para 5 minutos (laranja), praticamente eliminar o


erro.

Com base nos resultados acima, conclumos que no deveremos tomar amostras com
uma frequncia menor que 10 min, por exemplo.

O vdeo abaixo, mostra os testes efetuados com o sensor:

https://youtu.be/bLhwOoBBWZ8

Tutoriais MJRoBot Volume 1 31


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.6 - Compatibilizando as operaes automtica e


manual

Como pudemos ver na ltima etapa, precisaremos esperar tempos maiores entre as
medies do sensor de umidade, por exemplo: 10minutos. Isto est Ok para as nossas
necessidades automticas, mas para a operao manual no vamos querer esperar
dezenas de minutos olhando para o ArduFarmBot para saber se um valor medido pelo
sensor mudou. Para solucionar o problema, introduziremos um terceiro boto de
controle em nosso projeto, o qual ser usado para exibir os dados reais e instantneos
dos sensores a qualquer momento, independente das programaes de leituras
automticas.

Para o Push-Button, usaremos o pino digital D17 (o mesmo que est compartilhado
com a entrada analgica A3). Introduziremos tambm um LED de aviso (o amarelo na
foto) conectada ao pino 13. Este LED acender toda a vez em que os sensores esto
sendo atualizados.

Tutoriais MJRoBot Volume 1 32


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Abaixo a nova funo readLocalCmd() :

Tutoriais MJRoBot Volume 1 33


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Outro ponto a considerar, a introduo de um segundo sensor de umidade de solo


(higrmetro). Em nosso projeto final utilizaremos 2 sensores em pontos diferentes da
plantao. Ns usaremos a mdia das leituras para decidir quando se deve ligar a
bomba, por exemplo.

O VCC e GND dos sensores sero o mesmo (D7 e D6 respectivamente) e usaremos a


entrada A2 do Arduino para o segundo sensor. Se a rea da plantao pequena no
justificando 2 sensores, somente o valor lido em A1 ser considerado pelo SW. (Isto deve
ser informado na varivel correspondente na rea de setup do SW).

O nmero de amostras de cada ciclo tambm ser definido por uma varivel especfica:
numSamplesSMS. Em princpio apenas uma leitura suficiente, levando-se em
considerao que as leituras que fazemos em um curto espao de tempo introduziro
erros devido ao efeito de capacitncia. Se voc comear a ver erros na leitura, talvez
sejam necessrias tomar amostras extras.

int soilMoist;
int soilMoistAlert = 0;
int DRY_SOIL = 30;
int WET_SOIL = 60;
int numSM = 1; defines number of moisture sensors that are connected
int numSamplesSMS = 1; defines number of samples of each reading cycle

Tutoriais MJRoBot Volume 1 34


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A seguir a nova funo para o Soil Moisture Sensor:

Tutoriais MJRoBot Volume 1 35


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O diagrama abaixo mostra as conexes completas para a estao local de controle

Tutoriais MJRoBot Volume 1 36


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.7 - Its show time!


Neste ponto, j temos todo o HW
no lugar e quase todos os
elementos de SW desenvolvidos. O
que falta agora a inteligncia,
que permitir ao nosso sistema
realmente executar a tarefa de
irrigar a plantao
automaticamente! Para isto,
precisaremos adicionar alguns
neurnios ao nosso crebro!

Como discutido anteriormente,


definiremos o intervalo inicial
onde os sensores iro trabalhar.
Esses valores devero ser alterados
mais tarde a partir de resultados
de testes reais na plantao:

Umidade do solo:

Molhado (Wet): Mais de 60% (no ligaremos a bomba de maneira nenhuma)


Hmido: Entre 40 e 60% (Onde queremos trabalhar) e
Seco: Abaixo de 30% (precisaremos ligar a bomba para aumentar a umidade)

Temperatura:

Frio: Abaixo de 15C (Ligar Luz / Calor *)


Confortvel: entre 20 C e 25 C
Calor: Mais que 25 C (no vire-a luz / calor)

Luminosidade:

Escuro (noite): Abaixo de 40% (no ligar bomba)


Luz (dia): Mais de 40%

Voc poder opcionalmente, testar as novas luzes LED para vegetais


hidropnicos. Estas lmpadas de LED podem ser utilizadas tanto para
ajudar o crescimento mais rpido devido a luzes de frequncias
especiais como tambm para fornecer calor em caso de baixa
temperatura.

Tutoriais MJRoBot Volume 1 37


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Voc dever ter em mente que cada tipo de semente possui uma faixa ideal de
temperatura na qual crescer mais rapidamente. Por exemplo para os tomates, o tempo
mnimo para as sementes germinarem ser de 6 dias em temperaturas entre 20oC e
25C, aumentando-se o nmero de dias para temperaturas superiores ou inferiores a
esta faixa:

Temperatura: [oC] 10 15 20 25 30 35

Tempo de germinao [dias] 43 14 8 6 6 9

Voc poder verificar mais informaes sobre esta relao (temp / dias
de germinao) no link: http://tomclothier.hort.net/page11.html

Tendo em mos estas 4 leituras (temperatura, umidade, umidade do solo e luz),


poderemos criar uma matriz que definir como queremos que os nossos tomates
cresam. Tomemos nossas variveis e definamos alguns novos valores:

Para ser utilizado pelo sensor DHT:

int tempDHT;
int HOT_TEMP = 25;
int COLD_TEMP = 15;

Para ser usado por sensor LDR:

lumen int;
int DARK_LIGHT = 40;

Para ser usado pelo higrmetro:

int soilMoist;
int DRY_SOIL = 40;
int WET_SOIL = 60;

Com base nas definies acima, pensemos sobre algumas premissas-chave:

1. Se est DRY e NOT DARK (dia) PUMP = ON


2. Se est DARK (noite) PUMP = OFF
3. Se est COLD e no WET LAMP = ON
4. Se est COLD e WET LAMP = OFF (para proteger a semente)

Tutoriais MJRoBot Volume 1 38


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Nesta primeira parte do projeto, vamos mant-lo simples, no


explorando todas as combinaes possveis bem como o papel da
umidade do ar na equao. Exploraremos uma combinao mais
complexa de sensores na parte 2 deste projeto, quando utilizaremos o
ArduFarmBot em uma plantao real.

O Cdigo:

Criaremos uma nova funo, que baseado na leitura dos sensores, lidar
automaticamente com os atuadores (ligar / desligar a bomba e lmpada):
AutoControlPlantation(). Esta funo, mostrada abaixo, ser chamada em cada ciclo de
leituras dos sensores:

A funo ter 2 tarefas principais:

Controle de bomba
Controle da lmpada

O segmento de controle da bomba utilizar uma nova varivel: soilMoistAlert:

Tutoriais MJRoBot Volume 1 39


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Esta varivel ser utilizada para evitar um falso verdadeiro. Ento por exemplo, se
tivermos um verdadeiro no resultado do teste: soilMoist <DRY_SOIL e que no seja
durante a noite (lumen> DARK_LIGHT), no ligaremos imediatamente na bomba, mas
ao invs disso, esperaremos o prximo ciclo verificando se o solo est muito seco . Se
o resultado for um sim (obtendo um verdadeiro como resposta duas vezes), somente
a a funo turnPumpOn() ser chamada:

A bomba dever permanecer ligada por um determinado perodo de tempo, definido


pela varivel: timePumpOn em segundos.

Note que tambm mudaremos a funo que exibe dados no LCD criando um 3o. estado:

0: Bomba OFF (pumpStatus = 0; e soilMoistAlert = 0;)


X: Bomba em alerta (pumpStatus = 0; e soilMoistAlert = 1;)
1: Bomba ON (pumpStatus = 1; e soilMoistAlert = 0;)

O mesmo princpio ser aplicado ao controle da lmpada, onde uma baixa


temperatura ser o trigger para acionar a lmpada desde que o solo no esteja muito
molhado.

Tutoriais MJRoBot Volume 1 40


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A seguir a funo completa: autoControlPlantation():

Neste ponto, o ArduFarmBot esta totalmente funcional em termos de HW e SW e j


poderia ser instalado em uma plantao para testes. O cdigo completo para a estao
local poder ser encontrado no depositrio de arquivos abaixo:

https://github.com/Mjrovai/ArduFarmBot/tree/master/ArduFarmBot1_
Local_Control_Station_Final

Tutoriais MJRoBot Volume 1 41


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.8 - Colocando tudo na caixinha

Uma vez que j contamos com nosso prottipo funcional, vamos monta-lo de uma forma
mais definitiva, utilizando-se para isto um Shield para o Arduino Nano e uma caixa
plstica, o que ajudar nos testes de campo. A grande vantagem de se usar um shield
para o Nano, que os componentes ficaro melhor montados reduzindo-se os maus
contatos e rudos.

Se voc estiver usando o DHT isolado (sem ser em um


mdulo), voc adicione um resistor de 10K entre VCC e
Signal. Se voc estiver usando um mdulo sensor, a
resistncia j se encontra includo. Para este novo teste
usarei o mdulo DHT11 que tenho disponvel.

O resultado para o nosso propsito o mesmo, apenas no


se esquea de alterar a linha no cdigo para definir o sensor
apropriado que voc ir usar: #define DHTTYPE DHT11, ou
#define DHTTYPE DHT22.

Tutoriais MJRoBot Volume 1 42


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1. Faa 4 furos na caixa de plstico para a instalao do LCD (eu o deixei para
dentro da caixa).
2. Faa furos laterais na caixa para que que voc possa acessar os sensores; ter
acesso ao Nano (seja para a fonte de alimentao externa ou atualizaes de
SW) e ligar os atuadores (Bomba / Lmpada) aos rels.
3. Para os botes de controle, usamos um teclado do tipo membrana de 4 teclas 1
4 Key Matrix Membrane Switch.
4. Voc poder decidir a melhor maneira de fixar os componentes caixa. Aqui
foram usados fixadores removvel da 3M para facilitar a instalao (veja as fotos).

Tutoriais MJRoBot Volume 1 43


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.9 - Testes funcionais em laboratrio


Uma vez que tudo est fixada em seu devido lugar e o SW carregado, vamos fazer alguns
testes funcionais que simulem diferentes condies de sensores, a fim de se verificar que
tudo esteja bem ligado:

Com luz e temperatura normais,


introduzir o higrmetro em um copo
com amostra de solo hmido. Observe a
foto 1 (Temp 22C;. Soil Hum de
85% e luz de 80%). Nada deve
acontecer. Pump e Lamp devem ser
OFF (0).

Mantendo-se a mesma luz e


temperatura, passemos a sonda para o
copo com amostra de solo seco. Na foto
2, voc pode observar que a bomba foi
ligada (Primeiro aparecer o X e
depois o 1 durante algum tempo, tal
como definido no programa).

Agora, como mostrado na foto 3, o LDR


foi coberto com um pano preto e a
luminosidade decresceu para 19%.
Neste caso, apesar do fato de que o solo
esteja seco, a bomba no ligar, porque
o ArduFarmBot entender que
noite.

Tutoriais MJRoBot Volume 1 44


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Na foto 4, colocaremos gelo no fundo da


nossa caixa, junto ao sensor DHT. A
temperatura desceu a 12C e a lmpada
foi ligada.

E por ltimo, na foto 5 manteremos o


gelo, mas mudaremos a sonda
novamente para a amostra de solo
hmido. Neste caso apesar do fato de
estar frio, de acordo com a matriz, a
lmpada permanece desligada.

Tutoriais MJRoBot Volume 1 45


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.10 - Test Drive: Regando um tomateiro com o


ArduFarmBot

Para os primeiros testes reais, liguei uma bomba eltrica que tinha disponvel (no
projeto final a bomba ser uma pequena bomba DC de 9V). Este primeiro teste s para
ver como o projeto vai funcionar, ento no se preocupam com as gotas que voc vai ver
no vdeo).

https://youtu.be/kIQePtzSjP0

Tutoriais MJRoBot Volume 1 46


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

1.11 - O ArduFarmBot em ao: a plantao do


Maurcio
Baseado em tudo o que ns aprendemos at aqui, o passo seguinte ser colocar o
ArduFarmBot para controlar uma plantao de tomate verdadeira. A partir da
experincia real, poderemos calibrar os sensores e definir melhor os parmetros do
projeto.

As fotos do uma ideia da sequncia da preparao da terra e a introduo das


sementes. Essa parte do projeto est a cargo de nosso Chef Maurcio! Todos os
detalhes dos testes reais sero explorados na prxima parte do projeto.

O filme abaixo mostra o ArduFarmBot em ao:

https://youtu.be/HBhg5NtLcs0

Agora s torcer para que tudo de certo e possamos comer uma deliciosa salada no final
do projeto!!!! Salut!

Tutoriais MJRoBot Volume 1 47


48
ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Parte 2 - ArduFarmBot: a estao remota

Na primeira parte do projeto, criamos uma estao local de controle e captura de


informaes, tais como temperatura, umidade relativa do ar, luminosidade e umidade
do solo. Com base nesses dados, o ArduFarmBot decidia automaticamente a quantidade
certa (e quando) o tomateiro deveria receber calor e gua. A estao local de controle
desenvolvida na Parte 1, tambm permitia a interveno manual de um operador a fim
de controlar tanto a bomba de gua quanto a lmpada eltrica. Nesta segunda parte,
implementaremos uma abordagem IoT onde a interveno manual tambm poder
ser feita remotamente via Internet.

Tutoriais MJRoBot Volume 1 49


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.1 - Colocando as coisas na internet


O diagrama de blocos mostra o que faremos nessa segunda etapa do projeto, que ser o
controle de nosso ArduFarmBot atravs da internet:

Os dados capturados sero enviados a um servio de armazenamento


na nuvem (no nosso caso ThingSpeak.com). Alm disso, um website
dedicado, o Remote Control Page mostrado no diagrama, ir
monitorar e exibir esses dados em tempo quase real. Esta pgina
tambm permitir a ativao remota da bomba e da lmpada.

Tutoriais MJRoBot Volume 1 50


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.2 - Completando o Hardware


Para conectar-se o ArduFarmBot Internet, utilizaremos o ESP8266-01, um mdulo
simples, barato e fcil de programar largamente utilizado em projetos envolvendo a
Internet das coisas (IoT). A partir da estao local desenvolvida na Parte 1, o nico HW
adicional necessrio o prprio ESP8266-01.

O diagrama de blocos abaixo, mostra todas as conexes entre os pinos do Arduino,


ESP8266-01 e os principais componentes:

Cuidado com o nvel de tenso do pino RX do ESP8266, pois ele


funciona com 3.3V. Assim, o Pin Rx no deve ser conectado diretamente
ao pino Tx do Nano (D3) e sim atravs de um nivelador de tenso.
Se voc quiser saber mais sobre o ESP8266-01, visite:
https://mjrobot.org/2016/01/17/o-esp8266-serial-wifi-module/

Tutoriais MJRoBot Volume 1 51


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Em nosso caso, construiremos um divisor de tenso para ser usado como um conversor de
nvel de tenso.

Note que estamos usando o ESP8266 conectado aos pinos 2 (Tx) e 3 (Rx) do Nano,
utilizando-se da biblioteca SoftSerial. Se voc quiser livrar os pinos digitais, poder
alternadamente usar os pinos 0 e 1 do Nano (Serial por HW). Apenas lembre-se que
voc deve deslig-los ao enviar o cdigo para Nano.

Tutoriais MJRoBot Volume 1 52


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O esquema elctrico abaixo, mostra com mais detalhes como se conectar o ESP8266.

Se voc deseja utilizer um Buzzer, conecte o pino D17 (o mesmo que


pino A3). bom ter um alarme sonoro quando ocorra um erro de
comunicao, ao menos durante a fase de teste, podendo ser deixado de
fora no projeto final (o cdigo est preparado para isso). Cabe a voc
decidir instal-lo ou no.

Para testar o ESP8266-01, utilize o cdigo armazenado no depositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot/tree/master/ESP8266%20Test%20Setup

Tutoriais MJRoBot Volume 1 53


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.3 - Conectando o ESP8266 internet


Uma vez que o mdulo ESP8266 est instalado, o prximo passo aplicar um Reset
no pino CH-PD.

Aps o reset, vamos conect-lo rede local (alterar o no cdigo: USERNAME e


PASSWORD, por suas credenciais) e iniciar o mdulo como modo Station (CWMODE
= 1):

Tutoriais MJRoBot Volume 1 54


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Para enviar dados ao ESP8266, utilizamos a funo sendData():

As funes acima sero chamadas durante a fase de setup de nosso Cdigo. Se tudo foi
feito corretamente, voc deve ver pelo monitor serial, mensagens semelhantes como as
de abaixo:

Tutoriais MJRoBot Volume 1 55


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.4 - Data Storage Cloud: O ThingSpeak.com


Todos os dados capturados pelo ArduFarmBot sero enviados para a nuvem, utilizando-
se um servio gratuito, o ThingSpeak.com (https://thingspeak.com/).

No Loop(), depois de capturar os dados com readSensors (), chamaremos uma funo
especfica para carregar os dados capturados: updateDataThingSpeak ():

Tutoriais MJRoBot Volume 1 56


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A fim de enviar esses dados, a primeira coisa a fazer iniciar-se a comunicao com
o ThingSpeak.com. Faremos isso, usando-se da funo: startThingSpeakCmd() :

Uma vez que o canal esteja aberto com o ThingSpeak e o string cmd esteja montado com
os dados, hora de fazer o upload de tudo isso no canal correspondente do ThingSpeak
usando-se da funo: sendThingSpeakCmd()

Tutoriais MJRoBot Volume 1 57


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

As funes acima foram baseadas em um tutorial muito bem


desenvolvido por Michalis Vasilakis. Para mais detalhes, consulte:

https://www.instructables.com/id/Arduino-IOT-Temperature-and-
Humidity-With-ESP8266-/

Tutoriais MJRoBot Volume 1 58


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A foto abaixo mostra o canal ArduFarmBot no site do ThingSpeak.com:

Tutoriais MJRoBot Volume 1 59


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.5 - Comandando os atuadores a partir da web


Neste ponto, j estamos subindo (Upload) e armazenando todos os dados coletados na
nuvem. Isto muito til para a monitorao remota, mas o que aconteceria se com base
nesses dados decidimos acionar a bomba ou a Lmpada, independente do programa
automtico local? Para fazer isso, alm do Upload, tambm faremos um Download
de dados a partir da nuvem, informando ao controlador como agir baseado nesses dados
(comandos). Criaremos para isso, campos especficos em nosso canal ThingSpeak para
comandar os atuadores:

Field 7:
o Data = 1 PUMP should be Turn ON
o Data = 0 PUMP should be Turn OFF
Field 8:
o Data = 1 LAMP should be Turn ON
o Data = 0 LAMP should be Turn OFF

OK, mas como configurar esses campos diretamente no ThingSpeak? Podemos faz-lo,
escrevendo um plugin diretamente para ThingSpeak, ou podemos usar um site
externo para faz-lo (esta ltima ser a nossa escolha, como veremos mais adiante). De
qualquer forma, em ambos os casos, voc dever usar um comando como o de abaixo:

api.thingspeak.com/update?key=YOUR_WRITE_KEY&field7=1

Com o comando acima, por exemplo (e usando a sua chave de escrita de canal), voc vai
escrever 1 no Field 7, o que significa que a bomba deve ser ligada. Voc pode
facilmente test-lo, escrevendo a linha de comando acima no seu navegador, o campo
correspondente no seu canal ser alterado. Como um retorno, o navegador ir mostrar
uma pgina em branco com um nico nmero no canto superior esquerdo,
correspondente entrada de dados sequencial no seu canal.

At agora, 50% do trabalho est feito! Agora voc dever ler este comando (contedo
do campo), na estao local do ArduFarmBot.

O comando para fazer isso mostrado abaixo. Ele vai obter o ltimo dado que foi escrito
no campo especfico (que em nosso caso ser um comando).

api.thingspeak.com/channels/CHANNEL_ID/fields/7/last

Tutoriais MJRoBot Volume 1 60


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Da mesma forma como fizemos antes, voc poder testar a linha de comando, usando
seu navegador. Neste caso, o navegador ir mostrar-lhe o dado armazenado esse campo
especfico. Veja abaixo:

Voltando terra, escreveremos uma funo que ler este ltimo campo:

Tutoriais MJRoBot Volume 1 61


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A funo anterior retornar o dado contido no Field 7 (1 ou 0). Uma funo


semelhante deve ser escrita para o Field 8. Uma vez que j possumos o contedo de
ambos os campos, devemos utiliz-los em uma funo que comandar os atuadores de
maneira semelhante ao que fizemos com a funo de comando manual:

Tutoriais MJRoBot Volume 1 62


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Assim, a partir de agora voc poder usar a linha de comando em seu navegador para
ligar/desligar a bomba e a lmpada remotamente. Abaixo, se pode ver como o comando
recebido aparecer no monitor serial:

Outra considerao importante a coordenao entre o comando local e o remoto.


Teremos de alterar a funo readLocalCmd() para que tambm atualizemos os Fields7 e
8 do ThingSpeak, com o estado da bomba e da lmpada respectivamente:

field7Data = pumpStatus;

field8Data = lampStatus;

Agora field7Data e field8Data estaro em sincronia com os comandos da pgina web e


tambm com as aes de comando locais quando voc pressionar um boto.

Atualizemos agora a funo aplyCmd(), que a responsvel por ligar e desligar os


atuadores:

Tutoriais MJRoBot Volume 1 63


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Quando iniciar seus testes, perceber que qualquer comando executado manualmente
seja local ou via web, ser suplantado pelas aes automticas definidas pela
funo autoControlPlantation(). Neste ponto, voc dever considerar quem ser o
chefe (ou patroa), o qual ter a ltima palavra! Em nosso caso definiremos o
seguinte:

Em cada ciclo de loop, que quase sempre, verificamos se um boto local


pressionado
Aproximadamente a cada minuto, faremos um pooling no ThingSpeak e
verificamos se existe uma nova ordem chegando desde a web.
Aproximadamente a cada 10 minutos, leremos os sensores, atualizando os dados
no ThingSpeak e mais importante, executaremos os comandos automticas, que
sero tomadas independente das que foram selecionados manualmente.

Voc poder alterar essa lgica da maneira que melhor se adapte a seu
projeto. Essa a vantagem no uso de um processador programvel,
como o Arduino para controlar as coisas!

Tutoriais MJRoBot Volume 1 64


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Assim, 2 novos temporizadores sero utilizados, um para agrupar os comandos remotos


e outro para ler os sensores (o mesmo j utilizado anteriormente):

A funo loop() dever ser reescrita da seguinte forma:

Tutoriais MJRoBot Volume 1 65


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.6 - Implementao de uma pgina Web dedicada


Neste ponto do projeto, nosso ArduFarmBot est operacional e j pode ser controlado a
partir da web. Voc pode monitorar os dados no site do ThingSpeak e tambm enviar
comandos utilizando-se de um navegador, mas claro que esta soluo web no pode
ser considerado elegante! A melhor maneira de se implementar uma soluo real
para IoT, desenvolver uma pgina web completa, a qual alm de exibir todos os dados,
tambm possuir botes para ativao dos atuadores.

Tutoriais MJRoBot Volume 1 66


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Para hospedar nossa pgina web, escolhi o Byethost (https://byet.host/), um


site gratuito, muito fcil e simples para hospedar e gerenciar suas pginas.

No entraremos em detalhes como desenvolver esse tipo de pgina,


uma vez que este no o propsito central do livro, mas incluiremos
aqui os cdigos fonte em HTML, CSS e JavaScript que desenvolvemos
exclusivamente para a pgina.

importante reforar que essa pgina no trabalha diretamente com a Estao de


Controle local do ArduFarmBot. O que ela realmente faz, interagir com o canal do
ThingSpeak como descrito abaixo:

1. Ler dados de sensores dos Fields 1, 2, 3 e 4


2. Ler estado dos atuadores (Echo) dos Fields 5 e 6
3. Armazenar dados (comandos) nos Fields 7 e 8
4. Ler dados meteorolgicos locais (Yahoo)

O item 4 acima no realmente crucial para o projeto, mas sempre


importante ter dados adicionais disponveis no caso de voc querer tomar alguma ao
remota independente do que est acontecendo localmente com a plantao.

Outra ideia, armazenar esses dados meteorolgicos em um canal do


ThingSpeak, transferindo-os para o Arduino, de maneira a mostr-los
dados no display LCD (deixamos aqui, como uma sugesto de projeto
para voc).

Os arquivos para a criao da webpage podem ser descarregados desde o repositrio


de arquivos:

https://github.com/Mjrovai/ArduFarmBot/tree/master/WebPage

Tutoriais MJRoBot Volume 1 67


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.7 - A Matriz Sensor-Atuador

Na primeira parte do projeto, definimos algumas consideraes preliminares sobre


como os atuadores deveriam agir em funo da leitura dos sensores. Na oportunidade,
nos utilizamos unicamente de opes simples, mas o que aconteceria se deparssemos
com uma situao mais complexa, envolvendo vrias condies diferentes? Isso o que
desenvolveremos aqui, uma nova abordagem a qual chamaremos de Matriz Sensor
Atuador.

Esta Matriz, nada mais que uma planilha onde foram definidas para cada sensor,
diferentes condies e como deveriam ser as respectivas sadas dos atuadores em funo
das mesmas.

Tutoriais MJRoBot Volume 1 68


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O resultado pode ser observado na planilha Excel abaixo.

Na planilha Excel, existem duas Tabs. Uma com filtro como mostrado acima e outra que
alm da seleo, te permite obter o cdigo binrio, o qual dever ser carregado na
varivel definida para a Matriz:

Tutoriais MJRoBot Volume 1 69


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Uma vez definida, a matriz dever ser carregada em nosso cdigo. Um array de 18
linhas e 10 colunas foi criado para este propsito:

Para trabalhar com a Matrix, criou-se a funo defSensorStatus(). Esta funo testar
para cada linha se as condies das 8 primeiras colunas so verdadeiras. Se sim, as
condies definidas nas 2 ltimas colunas so executadas.

por exemplo:

if (1 and 0 and 0 and 0 and 1 and 0 and 0 and 1) { pumpStatus = 1; lampStatus = 0}

else if (1 and 0 and 0 and 0 and 1 and 0 and 1 and 0) { pumpStatus = 1; lampStatus = 0}

e assim por diante

Tutoriais MJRoBot Volume 1 70


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Como parte da funo anterior outra array ser criada com o estado de cada leitura do
sensor:

boolean snsSts[8]={0, 0, 0, 0, 0, 0, 0, 0}; // SL, SM, SH, LL, LH, TL, TM, TH

Esta array ser tambm utilizado para o registo do LOG.

A planilha Excel poder ser descarregada desde o repositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot/blob/master/Matrix_Sensor_
Actuator.xlsx

Tutoriais MJRoBot Volume 1 71


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.8 - Otimizando o cdigo


Durante o processo de desenvolvimento do ArduFarmBot percebemos que algumas
mudanas na especificao original deveriam ser feitas:

A. Display LCD:

O display LCD deve estar apagado por default e a qualquer momento que uma leitura
de sensores seja necessria, poderemos acende-lo. Esta condio foi implementada no
cdigo e o boto de leitura de sensores dever ser utilizado no modo toggle para
ligar/desligar o LCD a qualquer momento. O ato de acender ou apagar o LCD,
automaticamente atualizar as leituras de sensores para a exibio, mas estas novas
leituras no sero utilizadas pelo ArduFarmBot em suas funes regulares.

B. Configurao inicial:

Quando o ArduFarmBot ligado (ou depois de um Reset), o LCD exibir a


configurao inicial do controlador Initial Setup. As informaes ficaro disponveis
no LCD por 60s ou at que o boto Sensores seja pressionado novamente (o LCD se
apagar). A informao inicial disponvel na tela inicial do LCD ser:

COLD Temperature (ex. 12C)


DRY Soil Humidity (ex. 30%)
WET Soil Humidity (ex. 60%)
DARK light (ex. 40%)
P_ON Pump time to be ON (ex. 10s)
SCAN Time for next read sensors cycle (ex. 600s)
SW_Vertion (ex. 4.1)

Tutoriais MJRoBot Volume 1 72


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

C. Registro do Log:

Para fins de auditoria, criamos um registro com as leituras e atuaes do nosso


ArduFarmBot. Em cada ciclo de leitura, a funo: storeDataLogEEPROM() executada:

Como comentado na ltima etapa, o que ser armazenada na EEPROM do Arduino o


contedo, bit a bit do array snsSts[] adicionado do status da bomba e lmpada. Voc
poder ver o log no monitor serial:

Tutoriais MJRoBot Volume 1 73


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Como j visto na parte 1, para facilidade de entendimento e desenvolvimento, o cdigo


para o ArduFarmBot foi dividido em vrios arquivos, criados por sua especialidade.
Note que 2 novos arquivos foram adicionados nesta segunda parte:

communication.ino (funes especiais para o ThingSpeak e o ESP8266)


stationCredentials.h (ID e chaves para os canal do ThingSpeak)

Por ltimo, uma vez que o cdigo acabou ficando com um tamanho razovel, decidimos
armazenar as constantes na memria flash (programa), em vez de na SRAM. Para isso,
usaremos a palavra-chave PROGMEM que um modificador de varivel. Por exemplo,
em vez de utilizar:

#define DHTPIN 5,

usaremos:

const PROGMEM byte DHTPIN = 5;

Tutoriais MJRoBot Volume 1 74


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O PROGMEN informa ao compilador para colocar esta informao na memria flash,


em vez de na SRAM, onde iria normalmente. Voc tambm dever incluir a biblioteca
avr/pgmspace.h no arquivo principal do seu cdigo.

Outro bom procedimento para reduzir-se o uso da SRAM comentar


(ou excluir) todas as linhas de comando de impresso como o
Serial.print().

No link abaixo voc pode encontrar o cdigo completo para o ArduFarmBot:

https://github.com/Mjrovai/ArduFarmBot/tree/master/ArduFarmBot_C
ontrol_Station_V4_1_BLOG

No se esquea de alterar os dados no file credentials.h com


seu ThingSpeak Channel Id e sua chave de escrita. Tambm
no communication.ino, entre com seu nome de usurio e senha para
conectar o ESP 8266 Internet.

Tutoriais MJRoBot Volume 1 75


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

2.9 - O projeto na prtica: a plantao do Marcelo


Preparando o reservatrio de gua:

Conectando a bomba dgua:

Germinao (aproximadamente 45 dias):

Seleo melhores mudas e transplante :

Tutoriais MJRoBot Volume 1 76


77
ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Parte 3 - O ArduFarmBot 2
Nas duas primeiras partes deste tutorial, desenvolvemos um sistema totalmente
automatizado baseado no Arduino e servios de Internet tal como o ThingSpeak. Nesta
nova verso, o ArduFarmBot 2, as principais especificaes originais sero mantidas,
porm agora o projeto estar baseado na plataforma NodeMCU ESP8266 e no aplicativo
para dispositivos mveis BLYNK.

A. Especificaes:

Com base nos dados coletados em uma plantao tais como, temperatura e umidade,
tanto do ar quanto do solo, o ArduFarmBot 2 decidir a quantidade certa (e quando) o
plantio deve receber calor e gua. O sistema dever tambm permitir a interveno
manual de um operador para controlar uma bomba de gua e uma lmpada eltrica para
gerar calor para a plantao. Esta interveno manual dever ser possvel de ser
executada tanto no local como remotamente via Internet.

Em suma, o sistema deve receber como:

ENTRADA:

Sensores:
o Temperatura do ar
o Umidade Relativa ao Ar
o Temperatura do solo
o Umidade do solo
Botes:
o Bomba ON / OFF
o Lmpada ON / OFF

SADA:

Atuadores:
o Rel para controle da bomba
o Rel para controle de lmpada
Mensagens automticas devem ser enviadas na ocorrncia de eventos, tais
como:
o Bomba LIGADA
o Lmpada LIGADA
o Sistema off-line
Exibio de dados
o Todos os dados analgicos e digitais devem estar disponveis para
avaliao imediata
Armazenamento de dados
o Dados histricos devem ser armazenados remotamente

Tutoriais MJRoBot Volume 1 78


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

B. O Diagrama em Blocos:

O diagrama em blocos abaixo mostra os principais componentes do projeto.

Tutoriais MJRoBot Volume 1 79


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.1 - Lista de materiais (BoM) para a parte 3


Os principais componentes para o ArduFarmBot 2 so (valores em USD):

NodeMCU WiFi Internet ESP8266 ($8.79)

Temperature and Humidity Sensor DHT22 ($3.66)

Soil Moisture Sensor ($6.98) (Optional, can be DIY)

Waterproof Digital Temperature Temp Sensor Thermal Probe DS18B20($3.28)

0.96 I2C IIC SPI Serial 128X64 Yellow&Blue OLED LCD ($8.99)

Buttons (3X) ($0.90)

LEDs (2X) ($0.20)

DC 12V 2CH 2 Channel Isolated Optocoupler High/Low Level Trigger Relay

Module ($8.66)

Jump wires (S1.00)

Breadboard ($3.33)

4.7K Ohms resistor ($0.03)

10K Ohms resistor ($0.03)

220 Ohms resistor ($0.03)

5V/ 2A External Power Supply ($7.55)

Mini DC Water Pump ($8.95)

Tutoriais MJRoBot Volume 1 80


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.2 - O NodeMCU

O NodeMCU ESP-12E a verso integrada do popular ESP8266, um Serial to Wi-Fi


System On a Chip (SoC), o qual apareceu pela primeira vez no mercado em 2013. O
ESP8266 foi desenvolvido pela empresa chinesa com sede em Shangai, Espressif
Systems, uma fabricante de circuitos integrados focada no desenvolvimento de chips de
RF, particularmente Wi-Fi.

Existem vrios mdulos no mercado que se utilizam do chip ESP8266, Eles so


apelidados ESP-NN, onde NN um nmero 01, 02, .. 12, etc. e as vezes seguido de
uma letra. Estes mdulos tipicamente possuem: o ESP8266 SoC, memria flash, um
cristal e na maioria dos casos, uma antena. No link abaixo, voc poder encontrar a lista
completa de dispositivos baseados no ESP8266 encontradas no mercado:

http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family,

Os 2 mdulos mais importantes so sem dvida, a ESP-01 e o ESP-12E. No


ArduFarmBot 2, usaremos o: ESP-12E Development Board (NodeMCU DevKit 1.0).

Tutoriais MJRoBot Volume 1 81


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Para aumentar ainda mais a capacidade de utilizao do mdulo ESP-12E, foram


adicionados regulao de potncia e conectividade USB. O ESP-12E inclui:

Adaptador USB para UART: Silicon Labs CP2102,


NCP1117 3,3VDC Voltage Regulator,
Conector micro-USB,
Pinos adicionais com GND, Vin, 3,3VDC para facilitar o acesso durante o
desenvolvimento.

Em suma, o NodeMCU ESP-12E um dispositivo pronto para ser usado, bastando que
voc instale os drivers USB ao seu computador e comece a escrever programas que se
conectam sua rede Wi-Fi!

Especificaes Tcnicas:

Support STA/AP/STA+AP 3 working modes;


Built-in TCP/IP protocol stack, support multiple-channel TCP Client
connection (max 5);
0 D8, SD1 SD3: used for GPIO, PWM (D1-D8), IIC, etc.; the driven ability
can be arrived at 15mA;
AD0: one-way 10 bits ADC;
Power input: 4.5V~9V (10VMAX), support USB powered and USB debug;
Working current: 70mA (200mA MAX, continue), standby 200uA;
Transmission data rate: 110-460800bps;
Support UART/GPIO data communication interface;
Support update firmware remotely (OTA);
Support Smart Link;
Working temperature: -40oC 125oC
Driven mode: double large-power H bridge driven
Weight: 7g.

Tutoriais MJRoBot Volume 1 82


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.3 - Utilizando o Arduino IDE com o NodeMCU

Caso voc j tenha o NodeMCU instalado com o IDE, ignore esta etapa

Se voc deseja programar e usar o NodeMCU como se fosse um Arduino, a boa notcia
que possvel escrever-se firmwares personalizados e carreg-los no chip (flash-it)
utilizando-se do IDE padro do Arduino. importante lembrar que qualquer novo
firmware personalizado ir substituir qualquer coisa previamente armazenada na
memria flash do chip, incluindo o firmware original carregado em fbrica (aquele que
aceita os comandos AT). Embora possamos usar o SDK do fabricante para o
desenvolvimento de firmwares personalizados, muito mais fcil usar o bom e velho
Arduino IDE.

Comecemos:

No Arduino IDE:

Abra a janela de PREFERENCES

Digite a URL abaixo no campo Additional Boards Manager URLs

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Selecione OK.

Tutoriais MJRoBot Volume 1 83


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Selecione MENU opo Tools Board Boards Manager ... e v rolando at


encontrar a opo: esp8266 by ESP8266 Community , a qual dever ser o ltimo
item da lista e

Clique INSTALL

Instalando USB Drivers:

O USB to Serial UART module includo no dispositivo, o Silicon Labs CP2102,


para o qual deveremos instalar o driver Virtual COM Port (VCP). No caso MAC, o
arquivo criado para comunicar com o CP2102 : /dev/cu.SLAB_USBtoUART.

Voc poder encontrar o driver apropriado ao seu computador no


seguinte link:

https://www.silabs.com/products/development-tools/software/usb-to-
uart-bridge-vcp-drivers

Depois de reiniciar o Arduino IDE, poderemos selecionar a placa no menu:

Tools Board NodeMCU 1.0 (ESP-12E Module).

Tutoriais MJRoBot Volume 1 84


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Em seguida, especificar a correta frequncia de operao da CPU:

Tools CPU Frequency: 80MHz

Definir a velocidade de comunicao:

Tools Upload Speed: 115200).

E finalmente, selecionar o port apropriado ao seu computador:

Tools Port /dev/cu.SLAB_USBtoUART

Tutoriais MJRoBot Volume 1 85


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Neste ponto estamos prontos para escrever nosso prprio firmware e envi-lo ao
dispositivo, mas vamos primeiramente testar com um dos exemplos includos na
biblioteca:

File Examples ESP8266WiFi WiFiScan

Aps o upload, podemos abrir a janela do Serial Monitor e observar os resultados:

Verifique que 115,200 baud seja a velocidade selecionada no menu do


canto inferior direito do monitor serial

Tutoriais MJRoBot Volume 1 86


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.4 - Instalando o Display OLED

Um grande companheiro para o nosso ESP-12E o pequeno display do tipo OLED: SSD
1306. Ele ser muito til ao projeto, mostrando localmente os dados capturados,
mensagens, etc. O dispositivo um display de 128 X 64 pixels que se comunica via I2C e
cujas principais caractersticas so:

128 pixels na horizontal por 64 pixels na vertical. Assim se voc usar por
exemplo, caracteres de 88 pixels, obteremos um display de 16X8 (8
linhas de 16 caracteres cada).

Alimentao de 3.3V a 5V. Podendo ser alimentado diretamente pelo NodeMCU


ou por 5V via uma fonte de alimentao externa, que ser como faremos no
projeto.

Comunicao serial com o NodeMCU via I2C:

o SCL D1 (equivalente ao pino A5 do Arduino)


o SDA D2 (equivalente ao pino A4 do Arduino)

Uma vez conectado o display, voc dever baixar e instalar sua biblioteca ao Arduino
IDE. Ns usaremos a verso ACROBOT:

https://github.com/acrobotic/Ai_Ardulib_SSD1306

Tutoriais MJRoBot Volume 1 87


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Uma vez reiniciado o IDE, a biblioteca dever estar instalada.

Carreguemos o programa a seguir para testar o display OLED:

Observe que quando voc no definir um tamanho em pixels para


os caracteres de texto, o padro por default ser 8X8. Para se definir
um tamanho diferente, por exemplo,5X7, voc poder
utilizar: oled.setFont(font5x7)

Tutoriais MJRoBot Volume 1 88


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O cdigo para o Hello World poder ser descarregado desde o repositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot-2/tree/master/OledTest

https://github.com/Mjrovai/ArduFarmBot-2/tree/master/OledTest

Tutoriais MJRoBot Volume 1 89


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.5 - Capturando a temperatura e a umidade do ar


Como descrito anteriormente no item 1.5, um dos sensores mais utilizados na captura de
dados meteorolgicos o DHT22 (ou seu irmo, o DHT11), um sensor digital de
umidade relativa do ar e
temperatura.

Uma vez que normalmente voc


usar o sensor em distncias
inferiores a 20m, um resistor de
10K deve ser conectado entre os
pinos de dados e o VCC. O pino de
sada deve ser conectado ao pino
D3 do ESP-12E (veja o diagrama
acima).

Verifique que a biblioteca para o


DHT22 esteja corretamente
instalada como explicado no item
1.5

Descarregue e execute o cdigo abaixo para verificar se tudo est funcionando OK:

https://github.com/Mjrovai/ArduFarmBot-
2/tree/master/DHT22_Test_with_Oled

Tutoriais MJRoBot Volume 1 90


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.6 - Capturando a umidade do solo

Na Parte 1 do projeto, exploramos como


trabalhar com um higrmetro para medir-se a
umidade do solo. Na ocasio, exploramos
como desenvolver um sensor do tipo caseiro,
porm aqui exploraremos outra alternativa,
trabalhando com um do tipo eletrnico muito
comum no mercado: o sensor YL-69 +
LM393 (mdulo comparador).

O mdulo LM393 tem 2 sadas, uma digital


(D0) que pode ser configurada utilizando-se
do potencimetro integrado e uma analgica
(A0). Este mdulo pode ser tanto alimentado
com 3.3V (o que muito conveniente quando
se trabalha com um NodeMCU), quanto com
5V externo.

O que faremos, instalar os 4 pinos do LM393 como descrito abaixo:

LM393 A0 NodeMCU A0
LM393 VCC NodeMCU D3 ou VCC 5V externo
LM393 GND NodeMCU GND
LM393 D0 No conectado

Tutoriais MJRoBot Volume 1 91


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

importante destacar que o correto conectar-se o VCC do Sensor a


um Pino Digital do NodeMCU, definido como sada, de maneira a que o
LM393 seja alimentado somente quando precisemos de uma leitura.
Isto importante no apenas para economizar energia, mas tambm
para evitar a corroso das sondas. Utilizando-se um sensor caseiro
como foi o caso na parte 1 do projeto, o sensor funcionaria sem
problemas, mas tendo-se que alimentar o mdulo comparador, o
NodeMCU pode apresentar problemas. Alternativamente se pode
conectar o LM393 diretamente ao VCC (5V externo) como mostrado no
diagrama eltrico. O cdigo funciona nas duas configuraes sem
necessidade de modificaes.

Tutoriais MJRoBot Volume 1 92


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Abaixo, rotina para ler o sensor conectado porta analgica:

Alguns comentrios sobre a rotina acima:

O dado do sensor capturado 3 vezes, tirando-se uma mdia das mesmas.


Usamos MAP para configurar o intervalo em percentagem. Para definir os valores
extremos, procedemos como abaixo:
o Fazer um curto-circuito nas pontas de prova do higrmetro,
isso equivalente a 100% de umidade, o que gerar um valor de cerca de 0
na sada do ADC
o Colocar o higrmetro "no ar, se observa que o valor exibido no Serial
Monitor, que em meu caso foi em torno de 600.

Abaixo um cdigo parcial para os testes at esta etapa do projeto:

https://github.com/Mjrovai/ArduFarmBot-
2/tree/master/ArduFarmBot2_PartialTest

Tutoriais MJRoBot Volume 1 93


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.7 - Capturando a temperatura do solo

Nas experincias com o ArduFarmBot, descobrimos que existe uma


relao importante entre a umidade e a temperatura do solo. Desta
maneira, para o caso que voc deseje aprofundar-se no assunto,
instalaremos opcionalmente ao ArduFarmBot, um sensor para medir a
temperatura do solo. Mas importante ressaltar que para a automao
do projeto, usaremos somente a temperatura do ar, proporcionada pelo
DHT22.

Usaremos no projeto, uma verso impermeabilizada do sensor DS18B20. Isso


importante, pois o sensor ser utilizado em solo mido. O isolamento adequado para
se efetuar medies em at 100C.

O DS18B20 um sensor digital, o que o torna ideal para o


uso em longas distncias! Estes sensores digitais de
temperatura tipo 1-Wire so bastante precisos ( 0,5 C em
grande parte da gama) e podem fornecer at 12 bits de preciso
a partir de seu conversor digital-analgico integrado. Eles
funcionam muito bem com o NodeMCU, utilizando-se de um
nico pino digital, podendo-se at mesmo conectar-se vrios
sensores ao mesmo pino, pois cada dispositivo possui um ID
nico de 64 bits gravado de fbrica, para poder diferenci-los.

Tutoriais MJRoBot Volume 1 94


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O sensor funciona de 3,0 a 5,0V e possui 3 fios:

Preto: GND
Vermelho: VCC
Amarelo: Dados (1-Wire)

Aqui, voc pode encontrar os dados completos:

https://cdn-shop.adafruit.com/datasheets/DS18B20.pdf

Para usar o DS18B20 com o IDE do Arduino, importe as bibliotecas abaixo e as instale
em seu computador:

OneWire

https://github.com/adafruit/ESP8266-
Arduino/tree/esp8266/libraries/OneWire

Dallas Temperature

https://github.com/milesburton/Arduino-Temperature-Control-Library

Para testar o sensor, voc pode usar o cdigo Simple.ino includo nos Exemplos da
Biblioteca, como mostrado na foto acima. Carregue o cdigo no seu NodeMCU e
monitore a temperatura usando o Monitor Serial.

Tutoriais MJRoBot Volume 1 95


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

A foto acima mostra o resultado esperado. Segure o sensor em sua mo, voc deve ver a
temperatura mudar para cerca de 32oC a 34C.

A biblioteca OneWire DEVE ser uma verso especial, modificada para


ser usada com o ESP8266, caso contrrio voc receber um erro
durante a compilao.

Voc encontrar opcionalmente uma verso da biblioteca OneWire no depositrio do


ArduFarmBot2:

https://github.com/Mjrovai/ArduFarmBot-2/tree/master/OneWire

Tutoriais MJRoBot Volume 1 96


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.8 - Completando o HW

Seguindo o diagrama acima, complete o HW, instalando os botes e LEDs.

Lembre-se que ao usar os pinos que fornecem 3.3V do NodeMCU para


alimentar outros dispositivos pode tornar o sistema instvel devido ao
consumo de corrente. Tudo bem quando temos somente um ou dois
dispositivos externos, mas no caso de nosso projeto, vrios componentes
esto sendo, utilizados simultaneamente. Para segurana, certifique
que todos os sensores (DHT22, DS18B20 e LM393 / YL69) e o Display
OLED estejam alimentados corretamente, atravs do 5V externo,
deixando o NodeMCU apenas para fornecer os sinais de controle.

A. LEDs

Observe que os LEDs conectados ao NodeMCU so somente para serem usados como
teste. Eles simularo, a bomba (LED vermelho) e a lmpada (LED verde). Na
configurao final, rels sero conectados a essas sadas como descrito na prxima
etapa.

Tutoriais MJRoBot Volume 1 97


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

B. Botes

Com base nas leituras de sensores, um operador pode tambm decidir controlar
manualmente a bomba e/ou a lmpada. Para isto, trs botes sero incorporados ao
projeto:

VERMELHO: Controle da bomba


VERDE: Controle da Lmpada
AMARELO: Boto para leitura dos sensores

Os botes funcionam em modo alterno, ou Toggle. Se um atuador estiver LIGADO,


pressionar o boto ir deslig-lo e vice-versa. A lgica do boto ser normalmente
fechada, o que significa que a entrada do NodeMCU estar constantemente em
HIGH. Pressionando-se o boto, um nvel LOW ser aplicado ao pino especfico.

Para verificar se existe um comando local, ou seja se um boto foi pressionado, a


funo readLocalCmd() dever ser executada. Esta funo l cada boto, atualizando o
status das variveis correspondentes aos estados dos atuadores
(pumpStatus and lampStatus).

Observe que em vez de executar diretamente um comando digitalRead


(pin), a funo debounce(pin) chamada. Isso para evitar leituras
falsas do boto.

Tutoriais MJRoBot Volume 1 98


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

No caso em que um boto pressionado, outra funo ser chamada: aplyCmd (). E
como o nome diz, esta aplicar o comando correspondente, ativando ou desativando os
atuadores:

Tutoriais MJRoBot Volume 1 99


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

C. Consideraes acerca do cdigo:

Quando pensamos sobre as importantes tarefas desenvolvidos at o momento, notamos


que poderemos agrup-las em:

1. Ler Sensores
2. Ler Botes (comando local)
3. Atuar na bomba / lmpada
4. Exibir dados

Tutoriais MJRoBot Volume 1 100


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Perceberemos que os momentos em que deveremos realizar estas tarefas no so


necessariamente os mesmos. Por exemplo, para ler os dados de temperatura e umidade
do DHT 22, teremos que esperar pelo menos 2 segundos entre uma medio e outra,
apesar que se esperarmos alguns minutos, isto no far diferena no projeto final. Para
o sensor de umidade do solo, quanto menos medies fizermos, melhor, pois diminuir
a corroso das sondas geradas pela eletrlise. Por outro lado, quando pensamos nos
atuadores, ao pressionar um boto gostaramos (e possivelmente precisaremos) de uma
reao rpida.

Portanto, devemos usar aqui um timer para controlar corretamente o timing correto
para a execuo dessas tarefas. Poderamos fazer isso usando o millis() , como fizemos
na Parte 2 do projeto, mas aproveitemos a oportunidade para conhecer outra tima
ferramenta, o SimpleTimer.h

Siga as instrues do link a seguir para instalar a Biblioteca


SimpleTimer no IDE:

http://playground.arduino.cc/Code/SimpleTimer

A biblioteca deve ser includa no corpo principal do seu cdigo, seguido de uma
definio para o Timer do projeto:

SimpleTimer timer;

Em seguida, defina os temporizadores (timers):

Tutoriais MJRoBot Volume 1 101


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O Diagrama abaixo resume os pinos do NodeMCU e sua conexo aos dispositivos.

Tutoriais MJRoBot Volume 1 102


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.9 - Concluindo o SW para estao de controle local

Boto para Leitura dos sensores (O amarelo)

Como observamos na ltima etapa, precisaremos aguardar ciclos longos entre as


medies do sensor de umidade do solo. Isto est bem para as nossas necessidades
automticas, mas para uma operao manual no vamos querer esperar 10, 15 ou mais
segundos (ou mesmo minutos no caso real) para atualizar a leitura de um sensor.
Tambm no mundo real, no faz sentido manter o display OLED ACESO (ou ON), o
tempo todo. Assim, o normal ser APAGADO (ou OFF).

Introduziremos esse 3o boto ao nosso projeto, o qual permitir exibir os dados de


leitura dos sensores a qualquer momento que quisermos, independentemente do tempo
das leituras automticas. Alm disso, usaremos este mesmo boto para exibir dados no
display OLED quando os sensores forem atualizados.

Tutoriais MJRoBot Volume 1 103


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Abaixo da funo readLocaCmd() alterada para interao com o novo boto:

Tutoriais MJRoBot Volume 1 104


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Neste ponto, todo o HW est completo (utilizando-se LEDs como atuadores) e temos
tambm, todas as partes de SW desenvolvidas.

Juntando-se as partes do SW desenvolvidas at aqui, chegaremos ao programa final.


Voc poder tentar desenvolv-lo a sua maneira, ou fazer o download do cdigo a ser
utilizado na verso Controle local, diretamente do repositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot-
2/tree/master/ArduFarmBot2_Local_Manual_Ctrl_V1

O vdeo mostra o ArduFarmBot 2, operando em modo Local e Manual:

https://youtu.be/xJ9sSJw54PM

Tutoriais MJRoBot Volume 1 105


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.10 - Automatizando o ArduFarmBot 2

Neste ponto, todos os componentes do HW esto no lugar e como se viu na etapa


anterior, o ArduFarmBot 2 pode ser controlado localmente por um operador atravs dos
botes. O que falta agora definir-se a lgica que permitir ao nosso sistema realizar a
tarefa de irrigar ou aquecer uma plantao automaticamente! Para isto, precisamos
incluir algum crebro ao nosso projeto.

Para comear, definamos o intervalo inicial onde funcionaro os sensores. Esses valores
devem ser alterados mais tarde usando-se valores prticos a serem obtidos em uma
plantao real:

Umidade do solo:

o MIDO: Mais de 88% (no regar)


o IDEAL: Entre 66% e 88% (Onde queremos trabalhar) e
o SECO: Abaixo de 66% (necessrio ligar a bomba)

Temperatura do ar:

o FRIO: Abaixo de 12C (Ligar a lmpada para gerar calor)


o IDEAL: Entre 12C e 22C
o QUENTE: Acima de 22C (no ligar a lmpada)

Uma vez de posse desses dados: temperatura do ar, umidade do ar, umidade do solo e
temperatura do solo, como visto na parte 2, poderemos construir uma matriz complexa
definindo como queremos que o nosso sistema de jardinagem automtico funcione.

Tutoriais MJRoBot Volume 1 106


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Definamos os parmetros serem usados em nosso cdigo:

TIME_PUMP_ON e TIME_LAMP_ON so definidos como o tempo em segundos que a


bomba e a lmpada devem permanecer LIGADAS durante a operao automtica.

Com base nos parmetros acima, pensemos em algumas suposies muito simples a
serem implementadas no cdigo:

Se o solo estiver seco: (DRY) Ligar a bomba (PUMP = ON)


Se o ar estiver frio (COLD) Ligar a lmpada (LAMP = ON)

Nesta parte do projeto manteremos a coisa simples, no explorando


todas as possveis combinaes bem como o papel dos demais sensores
como a umidade do ar ou temperatura do solo na equao. Aproveite e
revise o que desenvolvemos no item 2.7, onde nos aprofundamos na
matriz Sensor-Atuador e tente aplic-lo no ArduFarmBot 2.
Deixaremos aqui a proposta como lio de casa!

O cdigo:

Criemos uma nova funo, que com base na leitura dos sensores lidar
automaticamente com os atuadores, ligando ou desligando a bomba e a
lmpada: autoControlPlantation().

Tutoriais MJRoBot Volume 1 107


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Esta funo conforme mostrado abaixo, ser chamada em todas os ciclos de leitura de
sensores:

A funo executar duas tarefas bsicas:

Controle da bomba
Controle da lmpada

Abaixo as duas funes de controle chamadas a partir da


funo autoControlPlantation():

Tutoriais MJRoBot Volume 1 108


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Por fim, usaremos o boto de leitura de sensores (amarelo) para no s interromper o


programa durante um certo tempo durante a inicializao, mas tambm para exibir os
parmetros iniciais mais importantes, como mostrado na foto introdutria desta etapa.

Neste ponto, o ArduFarmBot est totalmente funcional em termos de HW e SW.

O cdigo para a verso Local e Automtico do ArduFarmBot2 pode ser descarregada


do depositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot-
2/tree/master/ArduFarmBot2_Local_Automatic_Ctrl_V2

O vdeo abaixo mostra o ArduFarmBot 2, operando em modo Local e Automtico:

https://youtu.be/sE_Lwgdjwbw

Tutoriais MJRoBot Volume 1 109


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.11 - Criando a App BLYNK

realmente muito fcil de se construir projetos IoT utilizando-se do BLYNK. A primeira


coisa que voc precisar, ter a aplicao BLINK instalada em seu telefone bem como
sua biblioteca correspondente instalada no IDE do Arduino.

Para obt-los, siga os passos abaixo:

1. Baixe a App BLYNK para o iPhone da Apple ou o Android da Google


2. Instale a Biblioteca do BLYNK para Arduino:

https://github.com/blynkkk/blynk-library/releases/tag/v0.3.10

Note que voc ir baixar um arquivo zip com 5 arquivos. Instale


manualmente todos os arquivos em sua Biblioteca do Arduino).

Uma vez que o Arduino IDE recarregado, voc dever estar OK para comear a usar o
BLINK em seus projetos de IoT.

Para maiores informaes sobre o BLYNK, visite:


http://www.blynk.cc/

Tutoriais MJRoBot Volume 1 110


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Agora, abra o aplicativo Blynk que voc instalou em seu smartphone:

Clique na tela Create New Project

De um nome para seu projeto (Por exemplo: ArduFarmBot 2)

Selecione o HW apropriado: NodeMCU

Anote seu cdigo do Authorization Token (voc pode envia-lo por e-mail e copia-
lo em seu cdigo):

char auth[] = "YourAuthToken";

Pressione OK. Uma tela vazia cheia de pontos ir aparecer.

Clique na tela para abrir o Widget Box

OK, vamos tomar um momento e pensar sobre o nosso ArduFarmBot 2 Blynk App e
definir quais sero os Widgets a serem instalados. Revisitando a especificao geral
descrita na introduo do projeto, poderemos resumir que o nosso aplicativo precisar:

Ler todos os sensores e verificar o status dos atuadores


Tomar aes remotas, como ligar / desligar a bomba e a lmpada
Enviar mensagens quando o sistema estiver off-line e / ou um atuador for
ligado
Registrar a histria de leitura dos sensores

De maneira a organizar as coisas, dividiremos as tarefas descritas acima em 3 Tabs:

SENSORS
ACTUATORS / CONTROL
GRAPHICS

Tabs ser o primeiro Widget a ser instalado. Uma vez selecionado, defina Tab names
como especificado nos bullets acima.

Tutoriais MJRoBot Volume 1 111


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Em seguida, entre em cada um dos Tabs criados e instale os Widgets como descritos
abaixo:

SENSORS

Gauge: Temp Air [C] Blue; input: V10 0 to 50; frequency: 5 sec
Gauge: Humidity Air [%] Green; input: V11 0 to 100; frequency: 5 sec
Gauge: Soil Humidity [%] Red; input: V12 0 to 100; frequency: 5 sec
Gauge: Soil Temperature[C] Yellow; input: V13 -10 to 50; frequency: 5 sec
LED: PUMP Red; V0
LED: LAMP Green; V1

ACTUATORS / CONTROL

Button: PUMP Red; output: V3 0 to 1; mode: Switch; label: on: ACT, off: OK
Button: LAMP Green; output: V4 0 to 1; mode: Switch; label: on: ACT, off: OK
LED: PUMP Red; V0
LED: LAMP Green; V6
Notifications: Notify When HW goes offline: ON

GRAPHICS

Data to Show:
o V10 Temp Air
o V11 Humidity Air
o V12 Soil Humidity
o V13 Soil Temp

Tutoriais MJRoBot Volume 1 112


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.12 - Introduzindo as funcionalidades do Blynk

Para executar um aplicativo Blynk juntamente com seu cdigo, voc precisar:

Incluir a biblioteca BlynkSimpleEsp8266 no incio do seu cdigo


Durante o setup(), inicie com as credenciais do Blynk:
o Blynk.begin(auth, ssid, pass);
Defina uma temporizao para enviar dados locais para o servidor Blynk:
o timer.setInterval(5000L, sendUptime);
Dentro do loop(), execute a funo:
o Blynk.run();
Crie a funo sendUptime(); Onde voc introduzir os dados do sensor a serem
enviados ao servidor do Blynk:
o Blynk.virtualWrite(VirtualPin, dados do sensor);

Tutoriais MJRoBot Volume 1 113


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O cdigo final dever incluir agora um novo arquivo: StationCredentials.h:

Outras consideraes:

Para se usar um Widget do tipo: Virtual LED na App do Blynk, voc necessitar defini-
lo no incio do cdigo:

Por exemplo, para acender ou apagar o LED virtual relacionado com a Bomba
(PUMPs(V0)), o qual est conectado ao virtual PIN V0, chame as funes
correspondentes abaixo:

PUMPs.on() ou
PUMPs.off()

O mesmo princpio funciona com o LED Virtual referente a lmpada. Incluiremos os


comandos na funo applyCmd(), de maneira que os LEDs na app Blynk iro imitar os
LEDs reais de nosso projeto.

Para as notificaes, deveremos incluir o comando abaixo, na funo applyCmd(), uma


para a Bomba e outra para a Lmpada:

Blynk.notify (Mensagem a ser enviada);

Tutoriais MJRoBot Volume 1 114


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Abaixo, a nova funo:

Tutoriais MJRoBot Volume 1 115


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Para receber um comando a partir de um boto (Widget button) includo na app Blynk,
uma funo BLYNK_WRITE () deve ser definida fora de uma funo, loop () ou setup ().
Para isso foi criado o cdigo abaixo, um para cada Boto Blynk (PUMP e LAMP):

Abaixo, o vdeo mostra a operao automtica do ArduFarmBot 2, agora incluindo


o Blynk:

https://youtu.be/Y9xoh-iykzg

O cdigo para o ArduFarmBot2 em sua verso Remote and Automatic control, usando
o Blynk pode ser descarregada do repositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot-
2/tree/master/ArduFarmBot2_Ext_Auto_Ctrl__V3_0

Tutoriais MJRoBot Volume 1 116


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.13 - Rels como atuadores

Como discutido na introduo, nosso objetivo final


ser cuidar de uma plantao. Com os dados
fornecidos pelos sensores, vamos saber a temperatura
do ar e do solo, umidade relativa do ar e o mais
importante, quo seco est o solo. Com esses dados
na mo, o nosso programa deve calcular se
necessrio irrigar a plantao ligando uma bomba de
gua ou acender uma lmpada eltrica para fornecer o
calor adequado para a cultura.

Para isso, usaremos um pequeno mdulo de rel de 5V tanto para a ativao da bomba
quanto da lmpada.

Normalmente encontramos como sada, 3 pinos para cada rel: NO (Normal Open),
Ref or COM (Reference or Common) and NC (Normal Closed). Usaremos o
NO e o COM para cada rel.

Dependendo do mdulo de rels escolhido, os labels podem ser


diferentes

Tutoriais MJRoBot Volume 1 117


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Observando o diagrama, deveremos conectar:

Power Supply 5V (4) Vcc


NodeMCU D6 (3) IN1 (Bomba)
NodeMCU D7 (2) IN2 (Lmpada)
NodeMCU GND (1) GND

No exemplo acima, o COM o terminal para conectar ao pino positivo externo da


fonte de alimentao de 5V (no caso da bomba (ou do 220VAC para a lmpada). O NO
ser conectado Bomba (ou Lmpada).

No caso do rel escolhido, normalmente o IN1 e o IN2 devem estar em ALTO e sua
ativao acontecer com um nvel BAIXO (menos de 2V). Com um nvel BAIXO na sada
do NodeMCU, a corrente fluir de VCC para o pino D6 do NodeMCU, ativando a entrada
do opto acoplador. O solenoide ser acionado, fechando a sada NO (normalmente
aberta) do rel, o que ligar a bomba.

Em relao a verso V3.0 do cdigo desenvolvido na etapa anterior, deveremos


inverter a logica de acionamento dos atuadores (ou pinos digitais como sada). Os
pinos D6 e D7 do NodeMCU devero estar normalmente em HIGH. Assim a funo
de setup(), dever ser alterada como mostrado abaixo:

Tutoriais MJRoBot Volume 1 118


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Tambm deveremos alterar a funo applyCmd():

Tutoriais MJRoBot Volume 1 119


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

O cdigo para o ArduFarmBot2 em sua verso Remote and Automatic control, usando
o Blynk e rels (ativos com LOW) pode ser baixado desde o repositrio de arquivos:

https://github.com/Mjrovai/ArduFarmBot-
2/tree/master/ArduFarmBot2_Ext_Auto_Ctrl__V4_0

Tutoriais MJRoBot Volume 1 120


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

3.14 - Teste real com o ArduFarmBot 2

A Bomba escolhida uma mini-bomba 5V DC para gua (funciona afogada).

Tutoriais MJRoBot Volume 1 121


ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Voc pode instal-lo submerso em gua ou inline. Usaremos o segundo mtodo.

Ligue um dos fios da bomba ao rel IN1 e o outro ao pino de alimentao externa de 5V
(+). Pegue o pino de alimentao (-) e ligue-o ao rel COM1.

O filme abaixo mostra o ArduFarmBot 2 operando em modo manual (local e remoto):

https://youtu.be/cgTGbSn-g-0

E finalmente, o vdeo abaixo mostra sua operao em modo automtico:

https://youtu.be/ZR0xKFEuGuQ

Tutoriais MJRoBot Volume 1 122


123
ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas - IoT

Concluso
A ltima parte do nosso projeto ainda estar por ser escrita e ser com toda certeza uma
boa pasta italiana ao sugo, mas com molho de tomate orgnico, claro!

Para obter os arquivos atualizados, consulte sempre os repositrios de arquivos do


ArduFarmBot:

Parte 1 e 2: https://github.com/Mjrovai/ArduFarmBot

Parte 3: https://github.com/Mjrovai/ArduFarmBot-2

A propsito, na foto abaixo vocs podem ver os primeiros suspiros de vida na plantao
de Mauricio e seus tomates alguns meses depois

Esperamos que os projetos desenvolvidos neste livro, possam ajud-los a encontrar seu
caminho no excitante mundo da eletrnica, Internet das coisas e robtica!

Saludos desde o sur del mundo!

Marcelo e Mauricio

Santiago de Chile, fevereiro de 2017

Tutoriais MJRoBot Volume 1 124


Por favor, no deixe de visitar o Blog https://MJRoBot.org

e curtir a pgina no Facebook: https://www.facebook.com/mjrobot.org/

125

Você também pode gostar