Em dias chuvosos, quando começa a chover, esquecemos roupas no varal e janelas abertas. Isso pode trazer sérios problemas. Logo, uma das formas de evitar isso, é utilizar um sistema de alarme com sensor de chuva Arduino.
Dessa forma, desenvolveremos um alarme com Arduino, a fim de nos alertar quando está chovendo e, também, informar a temperatura local do ambiente. Para isso, utilizaremos o sensor de chuva para monitorar o período chuvoso e o sensor de temperatura DS18B20(Biblioteca), para nos informar o valor de temperatura local.
Todos esses valores serão processados pelo Arduino e apresentados em uma tela LCD 16×2.
Portanto, ao final desse artigo, você aprenderá: como utilizar o módulo sensor de chuva, como utilizar o sensor de temperatura DS18B20 e como criar um alarme de chuva com Arduino.
A seguir, apresentaremos o processo de desenvolvimento do projeto.
Desenvolvimento do Sistema de Alarme com Sensor de Chuva Arduino
Primeiramente, o projeto será montado de acordo com o esquema eletrônico apresentado a seguir.
Produtos Necessários para o Projeto:
- 1 x Arduino Nano;
- 1 x Display LCD 16×2;
- 1 x Conversor I2C LCD 16×2;
- 1 x Módulo Sensor de Chuva;
- 1 x Sensor de Temperatura DS18B20;
- Resistor 4k7R;
- Kit Jumpers Rígidos.
Biblioteca Projeto Sensor de Chuva Arduino
Além do circuito apresentado acima, disponibilizamos o código completo para o Alarme Sensor de Chuva Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal_I2C.h> //Biblioteca I2C do LCD 16x2 LiquidCrystal_I2C lcd(0x27,16,2); // Configurando o endereco do LCD 16x2 para 0x27 #define SENSORCHUVA 5 //Pino Digital para conectar o Sensor de Chuva #define BUZZER 12 //Pino Digital para conectar o Buzzer #define SENSORTEMP 8 //Pino Digital para conectar o Sensor DS18B20 OneWire oneWire(SENSORTEMP); DallasTemperature sensors(&oneWire); DeviceAddress sensor1; byte PreviousValue = 0; void setup() { lcd.init(); //Inicializacao do LCD lcd.backlight(); pinMode(BUZZER, OUTPUT); sensors.begin(); if (!sensors.getAddress(sensor1, 0)) { Serial.println("Sensor nao encontrado!"); } } void loop() { sensors.requestTemperatures(); //Requisicao do valor de temperatura int tempC = sensors.getTempC(sensor1); //Leitura da Temperatura do Sensor DS18B20 if(tempC != PreviousValue) { lcd.setCursor(0,0); lcd.print("Temperatura:"); lcd.setCursor(12,0); lcd.print(tempC); lcd.print((char)223); lcd.print("C"); PreviousValue = tempC; } bool chuva = digitalRead(SENSORCHUVA); if(chuva == 0) { lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(3,1); lcd.print("Chovendo..."); digitalWrite(BUZZER, HIGH); } if(chuva == 1) { lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(3,1); lcd.print("Sem Chuva"); digitalWrite(BUZZER, LOW); } } |
Para compreendermos o processo de desenvolvimento do projeto, dividimos a discussão em 3 etapas: Declaração de variáveis e objetos, configuração dos dispositivos e monitoramento da temperatura e estado chuvoso.
Declaração de Variáveis e Objetos
Primeiramente, incluímos todas as bibliotecas dos dispositivos e, em seguida, criamos o objeto lcd com seu respectivo endereço I2C.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal_I2C.h> //Biblioteca I2C do LCD 16x2 LiquidCrystal_I2C lcd(0x27,16,2); // Configurando o endereco do LCD 16x2 para 0x27 #define SENSORCHUVA 5 //Pino Digital para conectar o Sensor de Chuva #define BUZZER 6 //Pino Digital para conectar o Buzzer #define SENSORTEMP 8 //Pino Digital para conectar o Sensor DS18B20 OneWire oneWire(SENSORTEMP); DallasTemperature sensors(&oneWire); DeviceAddress sensor1; byte PreviousValue = 0; |
Logo depois, definimos nomes para cada pino de conexão dos sensores e buzzer. Finalmente, realizamos as definições necessárias para criação do objeto do sensor de temperatura DS18B20 e declaramos a variável de controle PreviousValue.
Agora, apresentaremos a configuração do dispositivo LCD 16×2 e inicialização do sensor DS18B20.
Configuração do Display LCD e Sensor do Alarme de Chuva com Arduino
Inicialmente, realizamos a inicialização do LCD e, em seguida, ativamos o seu backlight, através da função lcd.backlight().
18 19 20 21 22 23 24 25 26 27 28 29 |
void setup() { lcd.init(); //Inicializacao do LCD lcd.backlight(); sensors.begin(); if (!sensors.getAddress(sensor1, 0)) { Serial.println("Sensor nao encontrado!"); } } |
Posteriormente, inicializamos o sensor de temperatura DS18B20 e, logo depois, realizamos o teste de inicialização do sensor, de acordo com um endereço retornado.
Cada sensor, após inicializado, possui um endereço próprio. Caso não seja retornado um endereço, significa que ocorreu algum erro de comunicação.
Dessa forma, será apresentada a mensagem “Sensor não encontrado” e o fluxo de execução ficará preso no laço while(1);. Portanto, o usuário deverá analisar as conexões e o funcionamento do circuito do sensor DS18B20.
Por fim, apresentaremos a estrutura da lógica de leitura dos sensores e apresentação das informações na tela de LCD 16×2.
Monitoramento da Temperatura e Estado Chuvoso
Primeiramente, realizamos a requisição do valor de temperatura e armazenamos o valor lido na variável tempC.
Em seguida, realizamos a comparação do valor lido com a variável PreviousValue. Esta variável é utilizada para armazenar o valor anterior de temperatura.
Além disso, ela permite apresentar o valor de temperatura uma única vez na tela. Isto evita que o mesmo valor seja apresentado várias vezes e crie um efeito indesejado no LCD. Desse modo, caso o novo valor seja diferente do valor anterior, o fluxo de código entrará na condição.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
void loop() { sensors.requestTemperatures(); //Requisicao do valor de temperatura int tempC = sensors.getTempC(sensor1); //Leitura da Temperatura do Sensor DS18B20 if(tempC != PreviousValue) { lcd.setCursor(0,0); lcd.print("Temperatura:"); lcd.setCursor(12,0); lcd.print(tempC); lcd.print((char)223); lcd.print("C"); PreviousValue = tempC; } bool chuva = digitalRead(SENSORCHUVA); if(chuva == 0) { lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(3,1); lcd.print("Chovendo..."); digitalWrite(BUZZER, LOW); } if(chuva == 1) { lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(3,1); lcd.print("Sem Chuva"); digitalWrite(BUZZER, HIGH); } } |
Portanto, quando a condição é verdadeira, será apresentado o valor de temperatura, de acordo com a Figura 2.
Após isto, é realizada a leitura do módulo sensor de chuva, a fim de detectar ausência ou presença de chuva no ambiente.
Módulo Sensor de Chuva Arduino
O módulo é dividido em duas partes: a placa detectora e a placa de controle, conforme apresentado na Figura 3. A placa detectora é formada por várias linhas de metal, que são protegidas por uma camada antioxidante tratada com níquel e é responsável por detectar as gotículas de chuva. Além disso, temos o módulo da placa de controle. Ele é responsável por receber o sinal de detecção de gotículas de chuva e enviar para o Arduino.
Conforme é possível observar, o módulo de controle possui um trimpot de ajuste. Esse trimpot é utilizado para ajustar a sensibilidade de detecção de chuva. Portanto, de acordo com essa sensibilidade ajustada, o módulo enviará nível lógico baixo quando detectar chuva e nível lógico alto, quando não estiver chovendo.
Além disso, você pode configurá-lo para operar com a saída de sinal analógico.
Para este projeto, utilizaremos o módulo de controle configurado como digital e ajustaremos o trimpot para uma sensibilidade desejada.
Após o ajuste, temos o sistema completo apresentando a temperatura ambiente e o estado chuvoso na tela, conforme apresentado na Figura 4.
Posteriormente, quando inicia a chuva e aumenta a quantidade de gotículas depositadas sob a superfície da placa, haverá uma mudança de estado de acordo como apresentado na Figura 5. Isto ocorre porquê o valor detectado pelo sensor ultrapassará a sensibilidade ajustada no módulo de controle.
Na sequência, o sistema irá acionar o buzzer, a fim de alertar o usuário para retirar as roupas do varal ou realizar qualquer ação desejada.
Portanto, após esta ação, o sistema reinicia todo o processo de leitura dos sensores e apresentação dos dados na tela do LCD.
Conclusão
Através do sistema apresentado, é possível desenvolver diversos projetos similares. Desse modo, você pode criar sistemas de automação de recolhimento do varal com roupas, automação de pluviômetros, dataloggers e entre outros projetos, que permitem o uso do sensor de chuva Arduino e o sensor de temperatura DS18B20.
Desse modo, sugerimos que você baixe o código, acesse o blog da UsinaInfo e conheça novos projetos, para que você possa se inspirar e ter novas ideias.
Conheça toda Linha de Produtos Arduino no Site da UsinaInfo.
Boa tarde. Tem como me disponibilizar esse programa.
Boa Tarde michael! O código está disponível junto ao subtítulo “Biblioteca Projeto Sensor de Chuva Arduino”, basta copiar o código em destaque e colar em seu programa Arduino para utilizar.
Olá, se eu deixar exposto no tempo, se formar orvalho, nao vai detectar chuva, onde na verdade é orvalho? Obrigado.
Boa Tarde Rafael! Realmente é possível que o orvalho em grande quantidade seja tratado como chuva, por isto é recomendado que seja instalado de maneira inclinada para evitar este problema.
Boa tarde Diego, tudo bem?
Além de mostrar no LCD as informações, eu consigo encaminhar essas informações para algum lugar? Via GSM ou Rede ou SMS?
Vou deixar meu contato e, se possível, você me chama por lá?
Boa Tarde Ferdinando! É possível sim realizar este procedimento, só será necessário algumas alterações no projeto base, maiores informações quanto a esta aplicação você encontra no seguinte artigo: https://www.usinainfo.com.br/blog/projeto-sensor-de-umidade-do-solo-arduino-com-alerta-por-sms/
Não estou conseguindo compilar, você modificou algo no código?
Bom Dia Mateus! Verifiquei com o autor do projeto e a princípio o código disponível no artigo é exatamente o mesmo que ele utilizou. Você incluiu as devidas bibliotecas citadas no início do código? Consegue especificar mais precisamente qual o erro que está acontecendo?
Bom dia eu não consigo utilizar o código dá-me erros
O erro é este :
Blink:2:10: fatal error: OneWire.h: No such file or directory
#include
^~~~~~~~~~~
compilation terminated.
exit status 1
OneWire.h: No such file or directory
Olá Loureiro! Você incluiu corretamente a biblioteca OneWire.h? Parece que o código está com problemas na hora de incluir os comandos relacionados a mesma.
Sera que me pudia desponibelizar o codigo completo neste comentario