Projeto de Limpador de para-brisa Urban Concept | SEM Deixe um comentário

Em nosso departamento de telemetria, buscamos fazer uso dos dados coletados no veículo de modo que possam ter alguma aplicabilidade prática, além de toda a análise de dados comuns. Com isso, desenvolvemos uma maneira de se utilizar o sensor de chuva e de água para realizar um projeto de limpador de para-brisa autônomo, fazendo uso de um sensor de chuva ou um sensor de água e de um servomotor.

Utilização do sensor de chuva

O sensor de chuva HW-028 pode ser utilizado para detectar quando a água entra em contato com sua superfície. Ele possui um módulo que é diretamente conectado a ele, o módulo possui os pinos GND, VCC, A0 e D0, há também dois LEDS e um potenciômetro, sendo um dos LEDS usado para indicar que o sensor está ligado e o outro para quando o sinal enviado pelo sensor de chuva é menor que o definido utilizando o potenciômetro.

Sensor HW-028
Sensor HW-028

O funcionamento do sensor é bem simples, quando completamente seco ele transmite pela saída analógica o valor numérico 1023, e conforme sua superfície vai sendo coberta por água o sinal diminui. Esse sensor nos dá dois caminhos diferentes de trabalho, cada um ideal para objetivos específicos.

Utilizando o potenciômetro: por meio dele podemos definir um valor X para que, no momento que a tensão enviada pelo sensor de chuva seja menor que ele, o sinal da saída digital seja baixo. Isso permite especificar um valor para definir as condições de chuva desejadas, entretanto, a precisão é baixa, ideal caso, no seu projeto, o intuito principal seja somente especificar a presença de água.

Utilizando a saída analógica: nos permite mais precisão, pois podemos programar o arduino para enviar diferentes comandos de acordo com a intensidade da tensão analógica, possibilitando, por exemplo, mudar automaticamente a velocidade do limpador de pára-brisa de acordo com a intensidade da chuva.
Abaixo seguem gráficos de testes feitos com o sensor de chuva:

Gráficos do sensor de chuva
Gráficos do sensor de chuva

Esses gráficos foram gerados utilizando o Serial- plotter, ferramenta presente no IDE do arduino, durante os testes posicionamos o sensor no chão enquanto chovia. No começo do teste, a chuva estava mediana; ao fim do teste, ela estava mais amena.

Aplicação no nosso projeto

No nosso projeto, implementamos o sensor de chuva em conjunto com o servo motor do limpador de pára-brisa, de modo que, ao cair água no sensor, o arduino irá enviar um sinal positivo para o servo motor, ativando assim o limpador de pára-brisa de forma automática.
A seguir temos um exemplo de código para utilizar a saída analógica do sensor de chuva em conjunto com o LED do próprio arduino:

int sensorA = A0, sensorD = 3, LED = 13, chuva, chuvaD;


void setup() {
Serial.begin(9600);
pinMode(sensorA, INPUT);
pinMode(sensorD, INPUT);
pinMode(LED,OUTPUT);
}


void loop() {
chuva = analogRead(sensorA);
chuvaD = digitalRead(sensorD);
Serial.println(chuva);
if(chuva < 800){
digitalWrite(LED,HIGH);
}
else{
digitalWrite(LED,LOW);
}
delay(500);
}

Sensor de água

Testamos também um sensor de água HW-038 para o projeto de limpador de pára-brisa. Entretanto, por ser menos preciso que o sensor de chuva, decidimos substituí-lo. Ainda sim, mostraremos suas aplicações e alguns detalhes mais técnicos, pois para determinados projetos ele pode ser mais adequado.

Sensor HW-038
Sensor HW-038

Esse sensor de água é normalmente utilizado para medir o nível de água armazenada ou o nível de água em algum canal de escoamento; entretanto, devido a sua alta sensibilidade, é possível utilizá-lo como um sensor de chuva. Seu princípio de funcionamento é bem simples, conforme seu corpo vai sendo mergulhado em água o sinal analógico que ele transmite através da saída aumenta, basta uma gota cair na sua superfície para ele emitir um sinal.

A seguir temos alguns gráficos que mostram o funcionamento do sensor durante uma chuva:

Gráficos do sensor de água
Gráficos do sensor de água

Esses gráficos também foram gerados utilizando o Serial – Plotter, posicionando o sensor no exterior do carro durante uma chuva fraca e também durante uma chuva forte. Acompanhando os valores, é possível perceber a instabilidade dos sinais analógicos durante a chuva e também a alta sensibilidade do sensor.

Um exemplo simples de código segue abaixo:

const int pinoSensor = A0;
const int pinoSaida = 13; 
               
void setup(){
   Serial.begin(9600); 
   pinMode(pinoSensor, INPUT); 
   pinMode(pinoSaida, OUTPUT);   
}
 
void loop(){
Serial.println(analogRead(pinoSensor));
if (analogRead(pinoSensor)> 400 ){ 
digitalWrite(pinoSaida, HIGH);
}
else{
digitalWrite(pinoSaida, LOW);
}
delay(1000);
}

Servomotor

Para esse projeto de limpador de pára-brisa, utilizaremos um servo motor 6221 MG, que possui capacidade de 20kg de força. Esse modelo de servo possui 3 fios de entrada, sendo 2 de alimentação e outro de informação.

Servo motor usado no Projeto de Limpador de para-brisa
Servo motor usado no Projeto de Limpador de para-brisa

Protótipo simulando a ligação

Fio central (de informação) – ligado em um pino qualquer do arduino
Fio marrom (negativo) – ligado no gnd
Fio vermelho (positivo) – ligado a entrada de 5V do microcontrolador

É necessário ressaltar que a corrente elétrica para o servo é maior do que a fornecida pelo próprio microcontrolador, logo, foi necessário colocar de forma paralela uma fonte de energia de mesma tensão fornecida pelo arduíno que conseguisse fornecer a corrente necessária para que o servo funcionasse corretamente. Para esse modelo o ideal seria 6V e 3A, mas se utilizarmos 5V e tivermos uma corrente próxima a do valor estipulado o sistema também irá funcionar.

Para a parte de programação, utilizamos a biblioteca <Servo.h>, que nos é bem útil e facilita a interação com o servo motor. Nela, apenas definimos o pino de informação e o que desejamos que seja feito. O servo trabalha com definições de posição (de 0 á 180), então é necessário dizer a posição que ele deve estar e então ele se moverá. Aqui está um exemplo de código que foi usado nesse projeto:

#include <Servo.h>

Servo myServo; // cria objeto do servo

int position = 0; // posição do servo

void setup(){
	myServo.attach(3); // conecta servo ao pino do objeto do servo
}

void loop(){
	for (position = 0; position <= 180; position += 1){ // graus
		myServo.write(position);
		delay(7); // espera servo chegar na posição
	}
	for (position = 180; position >= 0; position -= 1){ // graus
		myServo.write(position);
		delay(7); // espera servo chegar na posição
	}
}


Esse post é resultado da parceria da MakerHero com a equipe Ecocar UNICAMP. Curtiu o conteúdo? Então deixe seu comentário abaixo!

E não esqueça de acompanhar a Ecocar nas redes sociais.

Faça seu comentário

Acesse sua conta e participe