No nosso último artigo de projetos, exploramos o módulo TEA5767 construindo um Rádio FM com o Arduino (podem ver o nosso vídeo no YouTube aqui), e pedimos sugestões para novos projetos a trazer ao nosso canal. A pedido de um subscritor, vamos, neste artigo, criar um sistema de rega inteligente, capaz de tratar das nossas plantas de forma autónoma, capaz de medir a humidade do solo e ajustar, através de um relé ligado a uma electroválvula, o fluxo de água para a mesma.
Para recriar todo este incrível projeto, vai precisar dos seguintes componentes:
| Imagem | Produto | Comprar |
|---|---|---|
| Arduino (Nano) | ||
| Display LCD 20×4 I2C | ||
| Breadboard 400 Pinos | ||
| Módulo Relé 5V 1 Canal | ||
| Sensor de Humidade do Solo | ||
| Botão de Pressão | ||
| Resistência 1K | ||
| Fios de Ligação Macho-Macho | ||
| Fios de Ligação Macho-Fêmea |
Montagem do Circuito
Vamos interligar todos os componentes anteriormente mencionados, de acordo com o seguinte esquema de ligações:
Preparação do Ambiente e Envio do Código
Vamos começar por transferir as bibliotecas necessárias para o projeto, assim:
Biblioteca LiquidCrytal_I2C.h
Biblioteca DHT11.h
Acompanhante da Biblioteca DHT11.h
De seguida, vamos aceder ao Arduino IDE e instalar as bibliotecas necessárias, acedendo a “Rascunho” -> “Incluir Biblioteca” -> “Adicionar Biblioteca .ZIP” e selecionando, um por um, os ficheiros .ZIP transferidos.
Após selecionar a respetiva placa microcontroladora a utilizar, basta compilar e carregar o seguinte código:
/*Código do Sistema de Rega Automático
* Com o seu sensor de humidade de solo, é capaz de regular o fluxo de água para uma planta
* No seu display, mostra a humidade do solo, a humidade do ambiente onde está situada a planta bem como a temperatura.
* Com o botão de pressão, é possível regar a planta manualmente
* www.electrofun.pt/blog/sistema-de-rega-automatico-com-o-arduino
* Electrofun@2021 ---> www.electrofun.pt
*/
//Inclusão de livrarias
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
//Definição de pinos
#define pinoSensorHumSolo A0 //Conectar o sensor de humidade de solo ao pino A0
#define pinoSensorTemp 6 //Conectar o sensor de temperatura DHT11 ao pino 6
#define pinoEletrovalvula 7 //Conectar o relé ao pino 7
#define pinoRegaAutomatica 2 //Conectar o botão de pressão em configuração pull-up resistor ao pino 2
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(pinoSensorTemp, DHT11);
//Variáveis necessárias
int valorHumidadeSolo, valorHumidadeSoloPerc, temperaturaAr, humidadeAr;
char simbolograu = (char)223;
void setup() {
pinMode(pinoSensorHumSolo, INPUT);
pinMode(pinoEletrovalvula, OUTPUT);
pinMode(pinoRegaAutomatica, INPUT);
attachInterrupt(digitalPinToInterrupt(pinoRegaAutomatica), regaAutomaticaBotoes, RISING);
lcd.init();
lcd.backlight();
dht.begin();
lcd.setCursor(4, 0);
lcd.print("Sistema de");
lcd.setCursor(2, 1);
lcd.print("Rega Inteligente");
lcd.setCursor(1, 3);
lcd.print("By Electrofun@2021");
delay(5000);
}
void loop() {
atualizarInformacoes(); //Atualiza os dados de todos os sensores
informacoesIniciais(); //Atualiza o display
regaAutomatica(); //Se a humidade do solo for inferior a um threshold definido, ligar o relé (electroválvula) para regar a planta
delay(500);
}
void informacoesIniciais() {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("STATUS");
lcd.setCursor(0, 1);
lcd.print("Temperatura Ar:");
lcd.setCursor(16, 1);
lcd.print(temperaturaAr);
lcd.print(simbolograu);
lcd.setCursor(0, 2);
lcd.print("Humidade Ar:");
lcd.setCursor(13, 2);
lcd.print(humidadeAr);
lcd.print("%");
lcd.setCursor(0, 3);
lcd.print("Humidade Solo:");
lcd.setCursor(15, 3);
lcd.print(valorHumidadeSoloPerc);
lcd.print("%");
}
void atualizarInformacoes() {
temperaturaAr = dht.readTemperature();
humidadeAr = dht.readHumidity();
valorHumidadeSolo = analogRead(pinoSensorHumSolo);
valorHumidadeSoloPerc = map(valorHumidadeSolo, 1023, 0, 0, 100);
}
void regaAutomatica() {
if (valorHumidadeSolo > 700) {
digitalWrite(pinoEletrovalvula, HIGH);
} else if (valorHumidadeSolo <= 700) { digitalWrite(pinoEletrovalvula, LOW); } }
//Interrupção para rega manual
void regaAutomaticaBotoes() {
long tempo_ultima_int = 0;
long tempo_int = millis();
//Código para debounce
if (tempo_int - tempo_ultima_int > 200)
{
while (digitalRead(pinoRegaAutomatica) == 1) {
digitalWrite(pinoEletrovalvula, HIGH);
}
}
tempo_ultima_int = tempo_int;
}
Resta, por último, testar o funcionamento e nunca mais nos preocuparmos com as nossas plantas!
Não se esqueçam de ver o nosso vídeo sobre este artigo no nosso canal do YouTube:
Para mais projetos, percorram o nosso blog, onde podem encontrar vários artigos interessantes relacionados com eletrónica, robótica e muito mais! Visitem também o nosso site, onde encontram tudo para eletrónica e robótica!
Comments
Comentários