Leitura da Umidade do Solo
Introdução
Ter plantas em casa sempre nos traz uma sensação de estar próximo da natureza, mas hoje em dia acaba se tornando algo difícil devido à rotina diária de trabalho e estudo, fazendo com que muitas vezes nos esqueçamos de regar as plantas de casa, e muitas vezes deixando o seu solo secar. Portanto seria muito bom se tivéssemos algum método de visualizar se o solo de nossas plantas está precisando ser irrigado ou não.
Neste tutorial aprenderemos como utilizar o sensor de solo capacitivo para realizar a leitura da umidade do solo das plantas, e como aproveitar essa informação para nos informar se devemos regar ou não a planta.
Lista de Materiais
Lista completa de produtos
comprarBlackBoard UNO R3
Sensor de Umidade de Solo Capacitivo
LCD 16x2 Com Interface I2C
Mini Protoboard 170 Pontos - Preta
Jumpers Macho-Macho x40 Unidades
Jumpers Macho-Fêmea x40 Unidades
Sensor Capacitivo Vs. Resistivo
Existem basicamente dois modelos de sensores de solo: os resistivos e os capacitivos. Os sensores de solo resistivos identificam a mudança de resistência elétrica no solo: quanto maior a concentração de água, maior será sua condutividade, logo menor será sua resistência, como no GIF abaixo, por exemplo. Entretanto, esse funcionamento vem com um custo. Por ter de identificar a condutividade do solo, este tipo de sensor possui terminais metálicos expostos que tendem a oxidar com o tempo. Essa oxidação não só pode influenciar na leitura do próprio sensor, como também pode ser desagradável para as plantas, pois a oxidação poderá alterar o pH do solo.
Já os sensores de solo capacitivos leem a concentração de água no solo através da variação na sua zona dielétrica. Para entendermos melhor o funcionamento deste tipo de sensor, vamos nos lembrar do que um capacitor é formado. Os capacitores possuem dois terminais e entre esses terminais há um material dielétrico (como na imagem a seguir), que é responsável por armazenar energia elétrica em um campo elétrico.
Para o sensor de umidade de solo, o solo úmido opera como o material dielétrico do sensor, que possui dois terminais que não são expostos. Para realizar uma leitura, o sensor cria um pequeno campo elétrico ao seu redor, como no exemplo da imagem abaixo, que utiliza um sensor touch capacitivo como exemplo.
Com esse campo elétrico, o solo começa a carregar como um capacitor. Em seguida pode-se determinar a capacitância do ambiente em função do tempo de carga. Como essa capacitância está diretamente relacionada à quantidade de água, obtém-se facilmente que um solo mais úmido resulta em uma tensão menor ou um tempo de carga maior.
Primeiras Leituras do Sensor
Primeiramente iremos coletar uma média de leituras do sensor, para que possamos calibrá-lo corretamente no segundo projeto. Para isso, é recomendado realizar duas baterias de teste, uma com o solo completamente seco e uma com o solo com a concentração máxima de água desejada. Assim saberemos quais são os valores máximo e mínimo do sensor no vaso da planta. Para facilitar essa bateria de testes, é melhor realizar primeiro a coleta da média em solo seco, e então irrigá-lo para medir o solo úmido.
Circuito
Para coletar a média de leituras do sensor, monte o circuito a seguir.
Código
Com o circuito montado, carregue o exemplo a seguir para a sua placa.
Entendendo o Código
O código inicia com a declaração das variáveis PINO_SENSOR
e leitura_sensor
, que são responsáveis por armazenar o pino em que o sensor está conectado e a leitura do sensor, respectivamente. A variável NUMERO_AMOSTRAS
, por sua vez, armazena a quantidade de amostras de leitura do sensor que iremos coletar para calcular a média. Para finalizar as declarações globais do código, temos a variável somatoria
, que é responsável por receber os valores das leituras do sensor somados para o cálculo da média.
A rotina de configuração do código é onde coletamos a média de leituras do sensor, e começamos inicializando o monitor serial com a velocidade de 9600 bps para que possamos visualizar as leituras e a média coletada. Em seguida, configuramos o pino conectado ao sensor como uma entrada do sistema e entramos no laço for(int i = 1; i <= NUMERO_AMOSTRAS; i++)
, que irá executar a lógica dentro dele enquanto a variável auxiliar i
for menor que o valor configurado na variável NUMERO_AMOSTRAS
.
Dentro do laço "for", a leitura analógica do pino conectado ao sensor é atribuída à variável leitura_sensor
. Feito isso, a variável somatoria
possui seu valor anterior somado à leitura do sensor armazenada na variável leitura_sensor
. Para finalizar a lógica deste laço, apenas convertemos o valor lido pelo sensor para um valor entre 0 e 5 V para que possamos ter como referência a tensão fornecida pelo sensor e entendermos um pouco melhor o seu funcionamento.
Assim que o laço "for" é finalizado, calculamos a média das leituras feitas, declarando a variável media
, e já a atribuindo ao valor da variável somatoria
dividido pelo valor da variável NUMERO AMOSTRAS
.
O Que Deve Acontecer
Após carregar o código para a placa, abra o monitor serial em 9600 bps e aguarde alguns instantes para que as amostras sejam coletadas, e a média calculada. Vale lembrar que deve-se iniciar o código com o sensor já inserido no solo.
Para a bateria em solo seco, você deve obter um valor muito próximo ao nível alto do sensor, como na imagem à esquerda a seguir. Para a bateria em solo úmido, você deve obter um valor próximo ao nível baixo do sensor, como na imagem à direita a seguir.
É interessante observar com esses resultados que com o solo úmido a tensão lida no sensor é menor do que a tensão lida no solo seco, e isso se deve ao fato que a capacitância do solo úmido é maior que a capacitância com o solo seco, o que prova o que vimos anteriormente.
Vale lembrar que os resultados que você vai obter nas baterias de teste com o seu sensor podem e devem ser diferentes dos valores obtidos acima, pois as condições de teste irão mudar.
Projeto Monitoramento de Umidade
Para este projeto iremos utilizar o LCD com interface I2C para nos alertar quando a umidade do solo estiver abaixo do valor desejado para a planta.
Circuito
Para este projeto, monte o circuito a seguir.
Código
Com o circuito montado, carregue o código a seguir para a sua placa. As variáveis VALOR_MINIMO
e VALOR_MAXIMO
foram declaradas inicialmente com os valores que obtivemos em testes internos, portanto altere-as de acordo com os valores que você obteve em seus testes. Além disso, a variável CONCENTRACAO_MINIMA
foi declarada com um valor padrão de 30% de concentração de água, mas você pode alterá-la para o valor que desejar e que seja melhor para a sua planta.
Entendendo o Código
Nas configurações globais deste código, começamos incluindo as bibliotecas "Wire" e "LiquidCrystal_I2C" que nos ajudarão a controlar o display LCD com interface I2C, e então criamos o objeto lcd
pela biblioteca "LiquidCrystal_I2C", com o endereço 0x27 (lembre-se que o endereço I2C do módulo irá variar de acordo com a configuração do DIP switch e de seu lote, portanto altere esse valor se precisar) e o número de colunas e linhas do display (16 x 2). Em seguida, criamos as variáveis PINO_SENSOR
e leitura_sensor
, que armazenam o pino que está conectado ao sensor e a leitura obtida no sensor, respectivamente. Por fim, temos a declaração das variáveis VALOR_MAXIMO
e VALOR_MINIMO
, que armazenam as médias máxima e mínima obtidas no código anterior. Além disso, também declaramos a variável CONCENTRACAO_MINIMA
, que recebe o valor mínimo de concentração de água no solo desejado, e a princípio mantemos esse valor como 30, pois ele tende a ser um valor bom para maioria das plantas, mas altere-o de acordo com o que é ideal para a sua planta e para o seu ambiente.
Na rotina de configurações do código, iniciamos o display LCD através do comando lcd.begin()
, e então exibimos o cabeçalho do código nele. Em seguida, apenas configuramos o pino conectado ao sensor como uma entrada do sistema, graças ao comando pinMode(PINO_SENSOR, INPUT)
.
A repetição do código consiste na atribuição da leitura analógica do pino conectado ao sensor à variável leitura_sensor
utilizando o comando leitura_sensor = analogRead(PINO_SENSOR)
, e então mapeamos essa leitura entre 0 e 100 % usando o comando leitura_sensor = map(leitura_sensor, VALOR_MINIMO, VALOR_MAXIMO, 100, 0)
, de acordo com os valores configurados nas variáveis VALOR_MINIMO
e VALOR_MAXIMO
. Feito isso, exibimos o valor no display LCD, e então o verificamos através da condição if(leitura_sensor < CONCENTRACAO_MINIMA)
se a leitura mapeada do sensor está abaixo do valor configurado na variável CONCENTRACAO_MINIMA
. Se essa condição for verdadeira, nós enviamos um alerta no display LCD e piscamos o seu backlight para chamar atenção. Porém, se a condição for falsa, apenas aguardamos 5 segundos para executar a repetição novamente. Por fim, limpamos o display LCD através da função lcd.clear()
.
O Que Deve Acontecer
Após carregar o código para a placa, insira o sensor no solo e aproveite o monitoramento. Quando o solo secar, o display ficará piscando e informando que é necessário irrigar a planta, como no GIF a seguir.
No GIF acima utilizamos um copo d'água e aceleramos um pouco as leituras do sensor para facilitar a demonstração do comportamento do projeto, porém, em solo, esse aviso só deve ser apresentado após alguns dias depois da primeira irrigação.
Indo Além
Projetos mais sofisticados de controle de umidade de solo utilizam uma bomba peristáltica para irrigar o solo automaticamente quando ele estiver seco. Em nosso tutorial de projeto irrigador automático, ensinamos como criar um controle simples de umidade de solo, para não precisarmos nem regar as plantas, apenas abastecer o tanque de armazenamento.
Conclusão
Neste tutorial aprendemos como utilizar o sensor de solo capacitivo e como calibrá-lo de acordo com as leituras em solo seco e úmido para criar uma lógica de controle. Além disso, pudemos observar na prática o conceito sobre sensores capacitivos de solo e como sua tensão varia de acordo com a concentração de água.