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!